diff --git a/package.json b/package.json index 779dd82..f13b97d 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "vite-plugin-restart": "^0.4.2" }, "dependencies": { + "lil-gui": "^0.20.0", "three": "^0.174.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 526cf8e..83e19f5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + lil-gui: + specifier: ^0.20.0 + version: 0.20.0 three: specifier: ^0.174.0 version: 0.174.0 @@ -184,141 +187,141 @@ packages: os: [linux] libc: [glibc] - '@rollup/rollup-android-arm-eabi@4.62.4': - resolution: {integrity: sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==} + '@rollup/rollup-android-arm-eabi@4.62.5': + resolution: {integrity: sha512-jfkGfTwhQpsiSckPF8r9bU3pn3vyd72NlWaO+TgEO6WPSDnUhXzrNYCHBMOYj0ACaUgjm6eERLF+XV9a6RstoA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.62.4': - resolution: {integrity: sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==} + '@rollup/rollup-android-arm64@4.62.5': + resolution: {integrity: sha512-oGVqyQlxnrz9/ty89oHpU857VUHEl5/Xu4R2lS+aivCTrNnSsbiENzTnNaBsjxH0CNWGPhzHArOLFwo+oKXveA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.62.4': - resolution: {integrity: sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw==} + '@rollup/rollup-darwin-arm64@4.62.5': + resolution: {integrity: sha512-bW7B8xMEq8n99Q3ieEcPRGuphurdZAaFzQc9Efyyw3FL6DZO6pMy9xhdN+kBoD7Sy05xNXSr4OyPPnpkYriS/A==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.62.4': - resolution: {integrity: sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==} + '@rollup/rollup-darwin-x64@4.62.5': + resolution: {integrity: sha512-YSwBS86QeHOGlrxJ1PSOIZSkzRL/JmKeunhc+lV6M1a6En8QuVCD/T/qIA0J4Gd2Y86RIOBYrLcOUtqGh9+/1w==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.62.4': - resolution: {integrity: sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==} + '@rollup/rollup-freebsd-arm64@4.62.5': + resolution: {integrity: sha512-2fST8lILgl7cKbme/1KDdPCmbXbG+gqoV3bHp19L0ypX/3akYMBVdOunPleRCwonoLnXOZ/0F+Mt/v8POFmfcQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.62.4': - resolution: {integrity: sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==} + '@rollup/rollup-freebsd-x64@4.62.5': + resolution: {integrity: sha512-cpIxQCP9J+EVad0a6LO1kY3ZGODlk80VlI+2I96B8xMcdHZ4pLVhfQ49JFpYqjPF91FFkQWftf57YlDcTiw9yQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.62.4': - resolution: {integrity: sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==} + '@rollup/rollup-linux-arm-gnueabihf@4.62.5': + resolution: {integrity: sha512-r9fGh3eFs3e/udWh5ZjXQtxiYK/xoFxQaYR/cELxac/Udkl5Th+IsFm0CX3Kl9hmUH/we7EoMpjJgeQNnE0+IA==} cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.62.4': - resolution: {integrity: sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==} + '@rollup/rollup-linux-arm-musleabihf@4.62.5': + resolution: {integrity: sha512-xdvFdp7OM6KLJviJT2g/YuRSUjnZgGHk4RNgwIbN7X6cPugOucV60DdHXWzsBVCUdrGb6qSXnJQrrAKMmQuj3Q==} cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.62.4': - resolution: {integrity: sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==} + '@rollup/rollup-linux-arm64-gnu@4.62.5': + resolution: {integrity: sha512-rRqILAndyzHzP7T9NFQrq+4HFWNhqkqkKur7eiBpfLmz01PO0JKx5Vchu3YllE4YXI/Ftgq/szrDWg5GJ0mI8g==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.62.4': - resolution: {integrity: sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==} + '@rollup/rollup-linux-arm64-musl@4.62.5': + resolution: {integrity: sha512-Gf4X3qVMucayUvux6aXXPgXovocSFUC0rrffDuPI/S2nHhNMhjcZxsrAFYCOF350PRreW1XwzFj3CT/3bKsWCw==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.62.4': - resolution: {integrity: sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==} + '@rollup/rollup-linux-loong64-gnu@4.62.5': + resolution: {integrity: sha512-+s5qA0TNM0qm8PK/a5gt/1Hpx+NV08uSuCncvhziIlQzT6AEV2fnUQo7eBtFTFO0nA9scauvoR2HusfXmQnO4w==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-loong64-musl@4.62.4': - resolution: {integrity: sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==} + '@rollup/rollup-linux-loong64-musl@4.62.5': + resolution: {integrity: sha512-ybb6QvWwWJCbBWqERpc8K3pYVGIrXlG8MEQ8IIuJY6Y9KdHQxoFoNyfkAOtKn1VHu3KuLidXvwrvGR1mEjeWCw==} cpu: [loong64] os: [linux] libc: [musl] - '@rollup/rollup-linux-ppc64-gnu@4.62.4': - resolution: {integrity: sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==} + '@rollup/rollup-linux-ppc64-gnu@4.62.5': + resolution: {integrity: sha512-nZb1DtnOyhCmYvsC8A2CwOkopVg+IS1+fPUa7rMOAXtNw5+lLCLLPqd6XAiNrGtoQKsbvIBOwsHnBH/3wnb4HQ==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-musl@4.62.4': - resolution: {integrity: sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==} + '@rollup/rollup-linux-ppc64-musl@4.62.5': + resolution: {integrity: sha512-yMbj63Sp89ryrXLWyz+sy+fYD2HpOnMCLGbe4Oa1smclFSUukdtD/BgdiHaAetJNb74URD8U4hM+qG5KVzMEkg==} cpu: [ppc64] os: [linux] libc: [musl] - '@rollup/rollup-linux-riscv64-gnu@4.62.4': - resolution: {integrity: sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==} + '@rollup/rollup-linux-riscv64-gnu@4.62.5': + resolution: {integrity: sha512-mhoan3OJw2kYV/e1jtIdmvUZgyBFeA6zGWsOswmR0Tg19TQbowZuR+JMLID6spbbBN7Zee2ejrgmy3+FxGrIdA==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.62.4': - resolution: {integrity: sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==} + '@rollup/rollup-linux-riscv64-musl@4.62.5': + resolution: {integrity: sha512-5ZTLmjWbb1VZdjuyhe83K/8QO0/h11midQCBP+X5OYn32ra7eOBoM0ZqtaY4nkgNsYgmdVhMYPoyVPTjUpHf3w==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.62.4': - resolution: {integrity: sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==} + '@rollup/rollup-linux-s390x-gnu@4.62.5': + resolution: {integrity: sha512-m53kG+br6PGxOTmgBEM2DHSDs9RVjsyEbUwjJPJGTFm1grWOG8EKJggDCTb60unD4Tjby8fi7/m9XfkEWasVWg==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.62.4': - resolution: {integrity: sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==} + '@rollup/rollup-linux-x64-gnu@4.62.5': + resolution: {integrity: sha512-6RHPJR1g/uvdYU8uXBnfq3nlqyZCP82Fr6NHgfGoaIeSh0YEqnX/x6uA9MmJJbnSH7swqX4F+CkGdUF+6doiQA==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.62.4': - resolution: {integrity: sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==} + '@rollup/rollup-linux-x64-musl@4.62.5': + resolution: {integrity: sha512-xs+OXQtEXgpXT0DmA5+U3qnRZHdCST/5HRQxS8wSPZTUZN/EMWeHuSIod32LQklTBZBV9DyfncKBQ8n5V3eFdw==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.62.4': - resolution: {integrity: sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==} + '@rollup/rollup-openbsd-x64@4.62.5': + resolution: {integrity: sha512-e7hD+sl3s+mcLQDZ8pbudBVsdG6r5yN4w3LqG2TJ8sQHDpblWj5lrJs/3m01Cvlxbt4x13zu5thLjgypgtkYzw==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.62.4': - resolution: {integrity: sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==} + '@rollup/rollup-openharmony-arm64@4.62.5': + resolution: {integrity: sha512-GiyJaCf+WpMub/17aPcKk27QMl5W6f+KhdPTjlFOn5akH5Wa/DCM9Stdx5cDfmasyKB08MqpVQ1uJE2RkkpbXg==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.62.4': - resolution: {integrity: sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==} + '@rollup/rollup-win32-arm64-msvc@4.62.5': + resolution: {integrity: sha512-+OQ8U2DdoEfXl8T4Fb18AjmEwbXMerKDKCL8yCPAYhKCEEKoul7rkbeGCBFCbAlaGaa7pmtRTpkAJM2LE/i5FA==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.62.4': - resolution: {integrity: sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==} + '@rollup/rollup-win32-ia32-msvc@4.62.5': + resolution: {integrity: sha512-KanvAZrPKbDBFwrgiU9yEVpQoox9QPV1WZOXX7HudJQY+eSlu82CtWxDU8WtuRRvtN5EGkLczkd6Y6DTcvm9wA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.62.4': - resolution: {integrity: sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==} + '@rollup/rollup-win32-x64-gnu@4.62.5': + resolution: {integrity: sha512-1aC3UEWTtRl3RK3VpDJ/Tqk1XI4SLTmXIthAq6wRWo8XiSXJNd+VprJM4/1P4+i6HIaFEFlVi9sTTziniD2tOQ==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.62.4': - resolution: {integrity: sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==} + '@rollup/rollup-win32-x64-msvc@4.62.5': + resolution: {integrity: sha512-/gDJaRs4gl0NPIwqCz+6PkpmhhjRAD2j6P4rSNHBzUkO3naEx2mIU0pRle1vUNRQ7mE/+8OOeXLTv/J56FKiQg==} cpu: [x64] os: [win32] @@ -356,6 +359,9 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + lil-gui@0.20.0: + resolution: {integrity: sha512-k7Ipr0ztqslMA2XvM5z5ZaWhxQtnEOwJBfI/hmSuRh6q4iMG9L0boqqrnZSzBR1jzyJ28OMl47l65ILzRe1TdA==} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -372,16 +378,16 @@ packages: resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} - picomatch@4.0.5: - resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} + picomatch@4.0.7: + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} engines: {node: '>=12'} postcss@8.5.26: resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==} engines: {node: ^10 || ^12 || >=14} - rollup@4.62.4: - resolution: {integrity: sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==} + rollup@4.62.5: + resolution: {integrity: sha512-/tqMfgP7GPA3PHhCmuiS4vIjrSVhHLgY++i+dhbG462euyAj7FpM4D9uq1X3BgjlqRdpcOrYhcQtfiQLNc8tqw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -528,79 +534,79 @@ snapshots: '@napi-rs/lzma-linux-x64-gnu@1.5.1': optional: true - '@rollup/rollup-android-arm-eabi@4.62.4': + '@rollup/rollup-android-arm-eabi@4.62.5': optional: true - '@rollup/rollup-android-arm64@4.62.4': + '@rollup/rollup-android-arm64@4.62.5': optional: true - '@rollup/rollup-darwin-arm64@4.62.4': + '@rollup/rollup-darwin-arm64@4.62.5': optional: true - '@rollup/rollup-darwin-x64@4.62.4': + '@rollup/rollup-darwin-x64@4.62.5': optional: true - '@rollup/rollup-freebsd-arm64@4.62.4': + '@rollup/rollup-freebsd-arm64@4.62.5': optional: true - '@rollup/rollup-freebsd-x64@4.62.4': + '@rollup/rollup-freebsd-x64@4.62.5': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.62.4': + '@rollup/rollup-linux-arm-gnueabihf@4.62.5': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.62.4': + '@rollup/rollup-linux-arm-musleabihf@4.62.5': optional: true - '@rollup/rollup-linux-arm64-gnu@4.62.4': + '@rollup/rollup-linux-arm64-gnu@4.62.5': optional: true - '@rollup/rollup-linux-arm64-musl@4.62.4': + '@rollup/rollup-linux-arm64-musl@4.62.5': optional: true - '@rollup/rollup-linux-loong64-gnu@4.62.4': + '@rollup/rollup-linux-loong64-gnu@4.62.5': optional: true - '@rollup/rollup-linux-loong64-musl@4.62.4': + '@rollup/rollup-linux-loong64-musl@4.62.5': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.62.4': + '@rollup/rollup-linux-ppc64-gnu@4.62.5': optional: true - '@rollup/rollup-linux-ppc64-musl@4.62.4': + '@rollup/rollup-linux-ppc64-musl@4.62.5': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.62.4': + '@rollup/rollup-linux-riscv64-gnu@4.62.5': optional: true - '@rollup/rollup-linux-riscv64-musl@4.62.4': + '@rollup/rollup-linux-riscv64-musl@4.62.5': optional: true - '@rollup/rollup-linux-s390x-gnu@4.62.4': + '@rollup/rollup-linux-s390x-gnu@4.62.5': optional: true - '@rollup/rollup-linux-x64-gnu@4.62.4': + '@rollup/rollup-linux-x64-gnu@4.62.5': optional: true - '@rollup/rollup-linux-x64-musl@4.62.4': + '@rollup/rollup-linux-x64-musl@4.62.5': optional: true - '@rollup/rollup-openbsd-x64@4.62.4': + '@rollup/rollup-openbsd-x64@4.62.5': optional: true - '@rollup/rollup-openharmony-arm64@4.62.4': + '@rollup/rollup-openharmony-arm64@4.62.5': optional: true - '@rollup/rollup-win32-arm64-msvc@4.62.4': + '@rollup/rollup-win32-arm64-msvc@4.62.5': optional: true - '@rollup/rollup-win32-ia32-msvc@4.62.4': + '@rollup/rollup-win32-ia32-msvc@4.62.5': optional: true - '@rollup/rollup-win32-x64-gnu@4.62.4': + '@rollup/rollup-win32-x64-gnu@4.62.5': optional: true - '@rollup/rollup-win32-x64-msvc@4.62.4': + '@rollup/rollup-win32-x64-msvc@4.62.5': optional: true '@types/estree@1.0.9': {} @@ -638,9 +644,9 @@ snapshots: '@esbuild/win32-ia32': 0.25.12 '@esbuild/win32-x64': 0.25.12 - fdir@6.5.0(picomatch@4.0.5): + fdir@6.5.0(picomatch@4.0.7): optionalDependencies: - picomatch: 4.0.5 + picomatch: 4.0.7 fill-range@7.1.1: dependencies: @@ -651,6 +657,8 @@ snapshots: is-number@7.0.0: {} + lil-gui@0.20.0: {} + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -662,7 +670,7 @@ snapshots: picomatch@2.3.2: {} - picomatch@4.0.5: {} + picomatch@4.0.7: {} postcss@8.5.26: dependencies: @@ -670,36 +678,36 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - rollup@4.62.4: + rollup@4.62.5: dependencies: '@types/estree': 1.0.9 optionalDependencies: '@napi-rs/lzma-linux-x64-gnu': 1.5.1 - '@rollup/rollup-android-arm-eabi': 4.62.4 - '@rollup/rollup-android-arm64': 4.62.4 - '@rollup/rollup-darwin-arm64': 4.62.4 - '@rollup/rollup-darwin-x64': 4.62.4 - '@rollup/rollup-freebsd-arm64': 4.62.4 - '@rollup/rollup-freebsd-x64': 4.62.4 - '@rollup/rollup-linux-arm-gnueabihf': 4.62.4 - '@rollup/rollup-linux-arm-musleabihf': 4.62.4 - '@rollup/rollup-linux-arm64-gnu': 4.62.4 - '@rollup/rollup-linux-arm64-musl': 4.62.4 - '@rollup/rollup-linux-loong64-gnu': 4.62.4 - '@rollup/rollup-linux-loong64-musl': 4.62.4 - '@rollup/rollup-linux-ppc64-gnu': 4.62.4 - '@rollup/rollup-linux-ppc64-musl': 4.62.4 - '@rollup/rollup-linux-riscv64-gnu': 4.62.4 - '@rollup/rollup-linux-riscv64-musl': 4.62.4 - '@rollup/rollup-linux-s390x-gnu': 4.62.4 - '@rollup/rollup-linux-x64-gnu': 4.62.4 - '@rollup/rollup-linux-x64-musl': 4.62.4 - '@rollup/rollup-openbsd-x64': 4.62.4 - '@rollup/rollup-openharmony-arm64': 4.62.4 - '@rollup/rollup-win32-arm64-msvc': 4.62.4 - '@rollup/rollup-win32-ia32-msvc': 4.62.4 - '@rollup/rollup-win32-x64-gnu': 4.62.4 - '@rollup/rollup-win32-x64-msvc': 4.62.4 + '@rollup/rollup-android-arm-eabi': 4.62.5 + '@rollup/rollup-android-arm64': 4.62.5 + '@rollup/rollup-darwin-arm64': 4.62.5 + '@rollup/rollup-darwin-x64': 4.62.5 + '@rollup/rollup-freebsd-arm64': 4.62.5 + '@rollup/rollup-freebsd-x64': 4.62.5 + '@rollup/rollup-linux-arm-gnueabihf': 4.62.5 + '@rollup/rollup-linux-arm-musleabihf': 4.62.5 + '@rollup/rollup-linux-arm64-gnu': 4.62.5 + '@rollup/rollup-linux-arm64-musl': 4.62.5 + '@rollup/rollup-linux-loong64-gnu': 4.62.5 + '@rollup/rollup-linux-loong64-musl': 4.62.5 + '@rollup/rollup-linux-ppc64-gnu': 4.62.5 + '@rollup/rollup-linux-ppc64-musl': 4.62.5 + '@rollup/rollup-linux-riscv64-gnu': 4.62.5 + '@rollup/rollup-linux-riscv64-musl': 4.62.5 + '@rollup/rollup-linux-s390x-gnu': 4.62.5 + '@rollup/rollup-linux-x64-gnu': 4.62.5 + '@rollup/rollup-linux-x64-musl': 4.62.5 + '@rollup/rollup-openbsd-x64': 4.62.5 + '@rollup/rollup-openharmony-arm64': 4.62.5 + '@rollup/rollup-win32-arm64-msvc': 4.62.5 + '@rollup/rollup-win32-ia32-msvc': 4.62.5 + '@rollup/rollup-win32-x64-gnu': 4.62.5 + '@rollup/rollup-win32-x64-msvc': 4.62.5 fsevents: 2.3.3 source-map-js@1.2.1: {} @@ -708,8 +716,8 @@ snapshots: tinyglobby@0.2.17: dependencies: - fdir: 6.5.0(picomatch@4.0.5) - picomatch: 4.0.5 + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 to-regex-range@5.0.1: dependencies: @@ -723,10 +731,10 @@ snapshots: vite@6.4.3: dependencies: esbuild: 0.25.12 - fdir: 6.5.0(picomatch@4.0.5) - picomatch: 4.0.5 + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 postcss: 8.5.26 - rollup: 4.62.4 + rollup: 4.62.5 tinyglobby: 0.2.17 optionalDependencies: fsevents: 2.3.3 diff --git a/src/index.html b/src/index.html index 99cc2f0..9d31bc6 100644 --- a/src/index.html +++ b/src/index.html @@ -3,7 +3,7 @@ - Textures + Materials diff --git a/src/script.js b/src/script.js index f11bb27..73bddea 100644 --- a/src/script.js +++ b/src/script.js @@ -1,5 +1,12 @@ import * as THREE from 'three' import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js' +import GUI from 'lil-gui' +import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader.js' + +/** + * Debug + */ +const gui = new GUI() /** * Base @@ -13,72 +20,179 @@ const scene = new THREE.Scene() /** * Textures */ -const loadingManager = new THREE.LoadingManager() -loadingManager.onStart = () => -{ - console.log('loadingManager: loading started') -} -loadingManager.onLoad = () => -{ - console.log('loadingManager: loading finished') -} -loadingManager.onProgress = () => -{ - console.log('loadingManager: loading progressing') -} -loadingManager.onError = () => -{ - console.log('loadingManager: loading error') -} +const textureLoader = new THREE.TextureLoader() -const textureLoader = new THREE.TextureLoader(loadingManager) +const doorColorTexture = textureLoader.load('./textures/door/color.jpg') +const doorAlphaTexture = textureLoader.load('./textures/door/alpha.jpg') +const doorAmbientOcclusionTexture = textureLoader.load('./textures/door/ambientOcclusion.jpg') +const doorHeightTexture = textureLoader.load('./textures/door/height.jpg') +const doorNormalTexture = textureLoader.load('./textures/door/normal.jpg') +const doorMetalnessTexture = textureLoader.load('./textures/door/metalness.jpg') +const doorRoughnessTexture = textureLoader.load('./textures/door/roughness.jpg') +const matcapTexture = textureLoader.load('./textures/matcaps/8.png') +const gradientTexture = textureLoader.load('./textures/gradients/5.jpg') -// const colorTexture = textureLoader.load('/textures/checkerboard-1024x1024.png') -// const colorTexture = textureLoader.load('/textures/checkerboard-2x2.png') -const colorTexture = textureLoader.load( - '/textures/minecraft.png', - () => - { - console.log('textureLoader: loading finished') - }, - () => - { - console.log('textureLoader: loading progressing') - }, - () => - { - console.log('textureLoader: loading error') - } -) -colorTexture.colorSpace = THREE.SRGBColorSpace -colorTexture.wrapS = THREE.MirroredRepeatWrapping -colorTexture.wrapT = THREE.MirroredRepeatWrapping -// colorTexture.repeat.x = 2 -// colorTexture.repeat.y = 3 -// colorTexture.offset.x = 0.5 -// colorTexture.offset.y = 0.5 -// colorTexture.rotation = Math.PI * 0.25 -// colorTexture.center.x = 0.5 -// colorTexture.center.y = 0.5 -colorTexture.generateMipmaps = false -colorTexture.minFilter = THREE.NearestFilter -colorTexture.magFilter = THREE.NearestFilter - -const alphaTexture = textureLoader.load('/textures/door/alpha.jpg') -const heightTexture = textureLoader.load('/textures/door/height.jpg') -const normalTexture = textureLoader.load('/textures/door/normal.jpg') -const ambientOcclusionTexture = textureLoader.load('/textures/door/ambientOcclusion.jpg') -const metalnessTexture = textureLoader.load('/textures/door/metalness.jpg') -const roughnessTexture = textureLoader.load('/textures/door/roughness.jpg') +doorColorTexture.colorSpace = THREE.SRGBColorSpace +matcapTexture.colorSpace = THREE.SRGBColorSpace /** - * Object + * Lights */ -const geometry = new THREE.BoxGeometry(1, 1, 1) -console.log(geometry.attributes) -const material = new THREE.MeshBasicMaterial({ map: colorTexture }) -const mesh = new THREE.Mesh(geometry, material) -scene.add(mesh) +// const ambientLight = new THREE.AmbientLight(0xffffff, 1) +// scene.add(ambientLight) + +// const pointLight = new THREE.PointLight(0xffffff, 30) +// pointLight.position.x = 2 +// pointLight.position.y = 3 +// pointLight.position.z = 4 +// scene.add(pointLight) + +/** + * Environment map + */ +const rgbeLoader = new RGBELoader() +rgbeLoader.load('./textures/environmentMap/2k.hdr', (environmentMap) => +{ + environmentMap.mapping = THREE.EquirectangularReflectionMapping + + scene.background = environmentMap + scene.environment = environmentMap +}) + +/** + * Objects + */ +// MeshBasicMaterial +// const material = new THREE.MeshBasicMaterial() +// material.map = doorColorTexture +// material.color = new THREE.Color('#ff0000') +// material.wireframe = true +// material.transparent = true +// material.opacity = 0.5 +// material.alphaMap = doorAlphaTexture +// material.side = THREE.DoubleSide + +// MeshNormalMaterial +// const material = new THREE.MeshNormalMaterial() +// material.flatShading = true + +// MeshMatcapMaterial +// const material = new THREE.MeshMatcapMaterial() +// material.matcap = matcapTexture + +// MeshDepthMaterial +// const material = new THREE.MeshDepthMaterial() + +// MeshLambertMaterial +// const material = new THREE.MeshLambertMaterial() + +// MeshPhongMaterial +// const material = new THREE.MeshPhongMaterial() +// material.shininess = 100 +// material.specular = new THREE.Color(0x1188ff) + +// MeshToonMaterial +// const material = new THREE.MeshToonMaterial() +// gradientTexture.minFilter = THREE.NearestFilter +// gradientTexture.magFilter = THREE.NearestFilter +// gradientTexture.generateMipmaps = false +// material.gradientMap = gradientTexture + +// // MeshStandardMaterial +// const material = new THREE.MeshStandardMaterial() +// material.metalness = 1 +// material.roughness = 1 +// material.map = doorColorTexture +// material.aoMap = doorAmbientOcclusionTexture +// material.aoMapIntensity = 1 +// material.displacementMap = doorHeightTexture +// material.displacementScale = 0.1 +// material.metalnessMap = doorMetalnessTexture +// material.roughnessMap = doorRoughnessTexture +// material.normalMap = doorNormalTexture +// material.normalScale.set(0.5, 0.5) +// material.transparent = true +// material.alphaMap = doorAlphaTexture + +// gui.add(material, 'metalness').min(0).max(1).step(0.0001) +// gui.add(material, 'roughness').min(0).max(1).step(0.0001) + +/** + * MeshPhysicalMaterial + */ +// Base material +const material = new THREE.MeshPhysicalMaterial() +material.metalness = 0 +material.roughness = 0.15 +// material.map = doorColorTexture +// material.aoMap = doorAmbientOcclusionTexture +// material.aoMapIntensity = 1 +// material.displacementMap = doorHeightTexture +// material.displacementScale = 0.1 +// material.metalnessMap = doorMetalnessTexture +// material.roughnessMap = doorRoughnessTexture +// material.normalMap = doorNormalTexture +// material.normalScale.set(0.5, 0.5) +// material.transparent = true +// material.alphaMap = doorAlphaTexture + +gui.add(material, 'metalness').min(0).max(1).step(0.0001) +gui.add(material, 'roughness').min(0).max(1).step(0.0001) + +// // Clearcoat +// material.clearcoat = 1 +// material.clearcoatRoughness = 0 + +// gui.add(material, 'clearcoat').min(0).max(1).step(0.0001) +// gui.add(material, 'clearcoatRoughness').min(0).max(1).step(0.0001) + +// // Sheen +// material.sheen = 1 +// material.sheenRoughness = 0.25 +// material.sheenColor.set(1, 1, 1) + +// gui.add(material, 'sheen').min(0).max(1).step(0.0001) +// gui.add(material, 'sheenRoughness').min(0).max(1).step(0.0001) +// gui.addColor(material, 'sheenColor') + +// // Iridescence +// material.iridescence = 1 +// material.iridescenceIOR = 1 +// material.iridescenceThicknessRange = [ 100, 800 ] + +// gui.add(material, 'iridescence').min(0).max(1).step(0.0001) +// gui.add(material, 'iridescenceIOR').min(1).max(2.333).step(0.0001) +// gui.add(material.iridescenceThicknessRange, '0').min(1).max(1000).step(1) +// gui.add(material.iridescenceThicknessRange, '1').min(1).max(1000).step(1) + +// Transmission +material.transmission = 1 +material.ior = 1.5 +material.thickness = 0.5 + +gui.add(material, 'transmission').min(0).max(1).step(0.0001) +gui.add(material, 'ior').min(1).max(10).step(0.0001) +gui.add(material, 'thickness').min(0).max(1).step(0.0001) + +// Objects +const sphere = new THREE.Mesh( + new THREE.SphereGeometry(0.5, 64, 64), + material +) +sphere.position.x = - 1.5 + +const plane = new THREE.Mesh( + new THREE.PlaneGeometry(1, 1, 100, 100), + material +) + +const torus = new THREE.Mesh( + new THREE.TorusGeometry(0.3, 0.2, 64, 128), + material +) +torus.position.x = 1.5 + +scene.add(sphere, plane, torus) /** * Sizes @@ -110,7 +224,7 @@ window.addEventListener('resize', () => const camera = new THREE.PerspectiveCamera(75, sizes.width / sizes.height, 0.1, 100) camera.position.x = 1 camera.position.y = 1 -camera.position.z = 1 +camera.position.z = 2 scene.add(camera) // Controls @@ -135,6 +249,15 @@ const tick = () => { const elapsedTime = clock.getElapsedTime() + // Update objects + sphere.rotation.y = 0.1 * elapsedTime + plane.rotation.y = 0.1 * elapsedTime + torus.rotation.y = 0.1 * elapsedTime + + sphere.rotation.x = - 0.15 * elapsedTime + plane.rotation.x = - 0.15 * elapsedTime + torus.rotation.x = - 0.15 * elapsedTime + // Update controls controls.update() diff --git a/static/textures/checkerboard-1024x1024.png b/static/textures/checkerboard-1024x1024.png deleted file mode 100644 index 0261947..0000000 Binary files a/static/textures/checkerboard-1024x1024.png and /dev/null differ diff --git a/static/textures/checkerboard-8x8.png b/static/textures/checkerboard-8x8.png deleted file mode 100644 index fc75455..0000000 Binary files a/static/textures/checkerboard-8x8.png and /dev/null differ diff --git a/static/textures/environmentMap/2k.hdr b/static/textures/environmentMap/2k.hdr new file mode 100644 index 0000000..6c9fab2 Binary files /dev/null and b/static/textures/environmentMap/2k.hdr differ diff --git a/static/textures/gradients/3.jpg b/static/textures/gradients/3.jpg new file mode 100644 index 0000000..58278ac Binary files /dev/null and b/static/textures/gradients/3.jpg differ diff --git a/static/textures/gradients/5.jpg b/static/textures/gradients/5.jpg new file mode 100644 index 0000000..13342a9 Binary files /dev/null and b/static/textures/gradients/5.jpg differ diff --git a/static/textures/matcaps/1.png b/static/textures/matcaps/1.png new file mode 100644 index 0000000..59fe188 Binary files /dev/null and b/static/textures/matcaps/1.png differ diff --git a/static/textures/matcaps/2.png b/static/textures/matcaps/2.png new file mode 100644 index 0000000..bb23f33 Binary files /dev/null and b/static/textures/matcaps/2.png differ diff --git a/static/textures/matcaps/3.png b/static/textures/matcaps/3.png new file mode 100644 index 0000000..ef1cfbc Binary files /dev/null and b/static/textures/matcaps/3.png differ diff --git a/static/textures/matcaps/4.png b/static/textures/matcaps/4.png new file mode 100644 index 0000000..6d12c7b Binary files /dev/null and b/static/textures/matcaps/4.png differ diff --git a/static/textures/matcaps/5.png b/static/textures/matcaps/5.png new file mode 100644 index 0000000..fb13465 Binary files /dev/null and b/static/textures/matcaps/5.png differ diff --git a/static/textures/matcaps/6.png b/static/textures/matcaps/6.png new file mode 100644 index 0000000..67a6e6d Binary files /dev/null and b/static/textures/matcaps/6.png differ diff --git a/static/textures/matcaps/7.png b/static/textures/matcaps/7.png new file mode 100644 index 0000000..4c1a405 Binary files /dev/null and b/static/textures/matcaps/7.png differ diff --git a/static/textures/matcaps/8.png b/static/textures/matcaps/8.png new file mode 100644 index 0000000..7d84004 Binary files /dev/null and b/static/textures/matcaps/8.png differ diff --git a/static/textures/minecraft.png b/static/textures/minecraft.png deleted file mode 100644 index b179f66..0000000 Binary files a/static/textures/minecraft.png and /dev/null differ