super-three 0.181.0 → 0.185.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (693) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +21332 -19201
  4. package/build/three.core.js +20908 -19853
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1947 -862
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +37 -16
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +33628 -25197
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +33394 -25000
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +14 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +13 -6
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +127 -86
  19. package/examples/jsm/controls/FlyControls.js +4 -0
  20. package/examples/jsm/controls/MapControls.js +55 -1
  21. package/examples/jsm/controls/OrbitControls.js +111 -8
  22. package/examples/jsm/controls/TrackballControls.js +8 -8
  23. package/examples/jsm/controls/TransformControls.js +102 -17
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMFrustum.js +31 -6
  26. package/examples/jsm/csm/CSMShadowNode.js +10 -3
  27. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  28. package/examples/jsm/effects/AsciiEffect.js +14 -1
  29. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  30. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  31. package/examples/jsm/exporters/DRACOExporter.js +27 -6
  32. package/examples/jsm/exporters/EXRExporter.js +1 -1
  33. package/examples/jsm/exporters/GLTFExporter.js +266 -21
  34. package/examples/jsm/exporters/PLYExporter.js +286 -73
  35. package/examples/jsm/exporters/USDZExporter.js +353 -99
  36. package/examples/jsm/generators/CityGenerator.js +346 -0
  37. package/examples/jsm/generators/ForestGenerator.js +347 -0
  38. package/examples/jsm/generators/TerrainGenerator.js +504 -0
  39. package/examples/jsm/generators/TreeGenerator.js +377 -0
  40. package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
  41. package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
  42. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  43. package/examples/jsm/geometries/LoftGeometry.js +355 -0
  44. package/examples/jsm/geometries/TextGeometry.js +18 -0
  45. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  46. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  47. package/examples/jsm/helpers/LightProbeHelper.js +5 -4
  48. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  49. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  50. package/examples/jsm/helpers/ViewHelper.js +83 -14
  51. package/examples/jsm/inspector/Extension.js +13 -0
  52. package/examples/jsm/inspector/Inspector.js +244 -91
  53. package/examples/jsm/inspector/RendererInspector.js +165 -39
  54. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  55. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  56. package/examples/jsm/inspector/tabs/Console.js +241 -25
  57. package/examples/jsm/inspector/tabs/Memory.js +136 -0
  58. package/examples/jsm/inspector/tabs/Parameters.js +115 -7
  59. package/examples/jsm/inspector/tabs/Performance.js +24 -9
  60. package/examples/jsm/inspector/tabs/Settings.js +306 -0
  61. package/examples/jsm/inspector/tabs/Timeline.js +1696 -0
  62. package/examples/jsm/inspector/tabs/Viewer.js +723 -9
  63. package/examples/jsm/inspector/ui/Graph.js +162 -25
  64. package/examples/jsm/inspector/ui/Item.js +92 -13
  65. package/examples/jsm/inspector/ui/List.js +2 -2
  66. package/examples/jsm/inspector/ui/Profiler.js +1991 -44
  67. package/examples/jsm/inspector/ui/Style.js +1943 -543
  68. package/examples/jsm/inspector/ui/Tab.js +226 -5
  69. package/examples/jsm/inspector/ui/Values.js +126 -8
  70. package/examples/jsm/inspector/ui/utils.js +143 -10
  71. package/examples/jsm/interaction/InteractionManager.js +226 -0
  72. package/examples/jsm/libs/basis/README.md +0 -1
  73. package/examples/jsm/libs/demuxer_mp4.js +3 -3
  74. package/examples/jsm/libs/draco/README.md +0 -1
  75. package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
  76. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  77. package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
  78. package/examples/jsm/libs/mikktspace.module.js +34 -9
  79. package/examples/jsm/lighting/ClusteredLighting.js +55 -0
  80. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  81. package/examples/jsm/lighting/LightProbeGrid.js +681 -0
  82. package/examples/jsm/lines/LineMaterial.js +45 -16
  83. package/examples/jsm/lines/LineSegments2.js +8 -0
  84. package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
  85. package/examples/jsm/loaders/3DMLoader.js +6 -5
  86. package/examples/jsm/loaders/3MFLoader.js +2 -2
  87. package/examples/jsm/loaders/AMFLoader.js +2 -2
  88. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  89. package/examples/jsm/loaders/DRACOLoader.js +51 -18
  90. package/examples/jsm/loaders/EXRLoader.js +701 -90
  91. package/examples/jsm/loaders/FBXLoader.js +235 -37
  92. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  93. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  94. package/examples/jsm/loaders/HDRLoader.js +7 -30
  95. package/examples/jsm/loaders/KMZLoader.js +5 -5
  96. package/examples/jsm/loaders/KTX2Loader.js +58 -17
  97. package/examples/jsm/loaders/LDrawLoader.js +49 -58
  98. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  99. package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
  100. package/examples/jsm/loaders/LWOLoader.js +11 -39
  101. package/examples/jsm/loaders/LottieLoader.js +1 -1
  102. package/examples/jsm/loaders/MaterialXLoader.js +31 -9
  103. package/examples/jsm/loaders/NRRDLoader.js +5 -5
  104. package/examples/jsm/loaders/PCDLoader.js +11 -9
  105. package/examples/jsm/loaders/PLYLoader.js +218 -55
  106. package/examples/jsm/loaders/SVGLoader.js +549 -497
  107. package/examples/jsm/loaders/TDSLoader.js +0 -2
  108. package/examples/jsm/loaders/TGALoader.js +0 -2
  109. package/examples/jsm/loaders/TTFLoader.js +1 -1
  110. package/examples/jsm/loaders/USDLoader.js +127 -43
  111. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  112. package/examples/jsm/loaders/VOXLoader.js +660 -117
  113. package/examples/jsm/loaders/VRMLLoader.js +80 -3
  114. package/examples/jsm/loaders/VTKLoader.js +42 -25
  115. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  116. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  117. package/examples/jsm/loaders/usd/USDAParser.js +504 -344
  118. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  119. package/examples/jsm/loaders/usd/USDComposer.js +4627 -0
  120. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  121. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  122. package/examples/jsm/math/Octree.js +131 -1
  123. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  124. package/examples/jsm/misc/RollerCoaster.js +42 -4
  125. package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
  126. package/examples/jsm/misc/Volume.js +2 -3
  127. package/examples/jsm/misc/VolumeSlice.js +0 -1
  128. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  129. package/examples/jsm/objects/GroundedSkybox.js +1 -1
  130. package/examples/jsm/objects/LensflareMesh.js +1 -1
  131. package/examples/jsm/objects/Reflector.js +72 -25
  132. package/examples/jsm/objects/Sky.js +90 -6
  133. package/examples/jsm/objects/SkyMesh.js +150 -16
  134. package/examples/jsm/objects/Water.js +4 -3
  135. package/examples/jsm/objects/Water2.js +5 -3
  136. package/examples/jsm/objects/Water2Mesh.js +1 -1
  137. package/examples/jsm/objects/WaterMesh.js +5 -7
  138. package/examples/jsm/physics/AmmoPhysics.js +27 -15
  139. package/examples/jsm/physics/JoltPhysics.js +10 -6
  140. package/examples/jsm/physics/RapierPhysics.js +36 -7
  141. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  142. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  143. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  144. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  145. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  146. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  147. package/examples/jsm/renderers/Projector.js +246 -28
  148. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  149. package/examples/jsm/shaders/GTAOShader.js +19 -6
  150. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  151. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  152. package/examples/jsm/shaders/SAOShader.js +17 -4
  153. package/examples/jsm/shaders/SSAOShader.js +11 -1
  154. package/examples/jsm/shaders/SSRShader.js +6 -5
  155. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  156. package/examples/jsm/shaders/VignetteShader.js +1 -1
  157. package/examples/jsm/shaders/VolumeShader.js +31 -44
  158. package/examples/jsm/transpiler/AST.js +44 -0
  159. package/examples/jsm/transpiler/GLSLDecoder.js +65 -8
  160. package/examples/jsm/transpiler/Linker.js +1 -1
  161. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  162. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  163. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  164. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  165. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  166. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  167. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  168. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  169. package/examples/jsm/tsl/display/BloomNode.js +75 -25
  170. package/examples/jsm/tsl/display/CRT.js +150 -0
  171. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  172. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  173. package/examples/jsm/tsl/display/DepthOfFieldNode.js +3 -3
  174. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  175. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  176. package/examples/jsm/tsl/display/FXAANode.js +13 -14
  177. package/examples/jsm/tsl/display/GTAONode.js +40 -17
  178. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  179. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  180. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
  181. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  182. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  183. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  184. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  185. package/examples/jsm/tsl/display/PixelationPassNode.js +9 -8
  186. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  187. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
  188. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  189. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  190. package/examples/jsm/tsl/display/SSAAPassNode.js +15 -27
  191. package/examples/jsm/tsl/display/SSGINode.js +96 -62
  192. package/examples/jsm/tsl/display/SSRNode.js +831 -134
  193. package/examples/jsm/tsl/display/SSSNode.js +8 -6
  194. package/examples/jsm/tsl/display/Shape.js +29 -0
  195. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  196. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  197. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  198. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  199. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  200. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  201. package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
  202. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  203. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  204. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  205. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
  206. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  207. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  208. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  209. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  210. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  211. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  212. package/examples/jsm/tsl/math/Bayer.js +53 -3
  213. package/examples/jsm/tsl/math/curlNoise.js +107 -0
  214. package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
  215. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
  216. package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
  217. package/examples/jsm/tsl/utils/RNoise.js +51 -0
  218. package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
  219. package/examples/jsm/utils/BufferGeometryUtils.js +128 -62
  220. package/examples/jsm/utils/ColorUtils.js +76 -0
  221. package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
  222. package/examples/jsm/utils/LDrawUtils.js +1 -1
  223. package/examples/jsm/utils/SceneOptimizer.js +1 -1
  224. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  225. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  226. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  227. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  228. package/examples/jsm/webxr/ARButton.js +1 -1
  229. package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
  230. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
  231. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  232. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  233. package/package.json +28 -34
  234. package/src/Three.Core.js +3 -1
  235. package/src/Three.TSL.js +35 -14
  236. package/src/Three.WebGPU.Nodes.js +5 -0
  237. package/src/Three.WebGPU.js +13 -0
  238. package/src/Three.js +1 -0
  239. package/src/animation/AnimationAction.js +18 -4
  240. package/src/animation/AnimationClip.js +0 -139
  241. package/src/animation/AnimationMixer.js +6 -0
  242. package/src/animation/AnimationUtils.js +1 -12
  243. package/src/animation/KeyframeTrack.js +47 -8
  244. package/src/animation/PropertyBinding.js +2 -2
  245. package/src/animation/PropertyMixer.js +4 -4
  246. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  247. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  248. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  249. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  250. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  251. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  252. package/src/audio/Audio.js +1 -1
  253. package/src/audio/AudioContext.js +2 -2
  254. package/src/audio/AudioListener.js +5 -3
  255. package/src/cameras/Camera.js +34 -4
  256. package/src/cameras/CubeCamera.js +20 -0
  257. package/src/cameras/StereoCamera.js +5 -2
  258. package/src/constants.js +90 -5
  259. package/src/core/BufferAttribute.js +13 -1
  260. package/src/core/BufferGeometry.js +43 -9
  261. package/src/core/Clock.js +7 -0
  262. package/src/core/Object3D.js +69 -11
  263. package/src/core/Raycaster.js +3 -3
  264. package/src/core/RenderTarget.js +19 -6
  265. package/src/extras/PMREMGenerator.js +13 -22
  266. package/src/extras/TextureUtils.js +6 -2
  267. package/src/extras/core/ShapePath.js +149 -160
  268. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  269. package/src/geometries/ExtrudeGeometry.js +2 -2
  270. package/src/geometries/PolyhedronGeometry.js +1 -1
  271. package/src/geometries/SphereGeometry.js +8 -3
  272. package/src/geometries/TorusGeometry.js +8 -3
  273. package/src/helpers/CameraHelper.js +3 -0
  274. package/src/helpers/DirectionalLightHelper.js +6 -1
  275. package/src/helpers/HemisphereLightHelper.js +5 -0
  276. package/src/helpers/PointLightHelper.js +3 -25
  277. package/src/helpers/SpotLightHelper.js +4 -1
  278. package/src/lights/DirectionalLight.js +13 -0
  279. package/src/lights/HemisphereLight.js +10 -0
  280. package/src/lights/Light.js +1 -11
  281. package/src/lights/LightProbe.js +0 -15
  282. package/src/lights/LightShadow.js +15 -6
  283. package/src/lights/PointLight.js +15 -0
  284. package/src/lights/PointLightShadow.js +0 -86
  285. package/src/lights/SpotLight.js +22 -1
  286. package/src/lights/webgpu/IESSpotLight.js +2 -1
  287. package/src/loaders/AudioLoader.js +11 -1
  288. package/src/loaders/Cache.js +28 -0
  289. package/src/loaders/DataTextureLoader.js +75 -42
  290. package/src/loaders/FileLoader.js +2 -3
  291. package/src/loaders/ImageBitmapLoader.js +12 -9
  292. package/src/loaders/Loader.js +6 -0
  293. package/src/loaders/LoadingManager.js +5 -0
  294. package/src/loaders/MaterialLoader.js +37 -266
  295. package/src/loaders/ObjectLoader.js +48 -6
  296. package/src/loaders/nodes/NodeLoader.js +2 -2
  297. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  298. package/src/materials/LineBasicMaterial.js +4 -0
  299. package/src/materials/Material.js +198 -1
  300. package/src/materials/MeshBasicMaterial.js +24 -0
  301. package/src/materials/MeshDepthMaterial.js +10 -0
  302. package/src/materials/MeshDistanceMaterial.js +10 -0
  303. package/src/materials/MeshLambertMaterial.js +49 -1
  304. package/src/materials/MeshMatcapMaterial.js +25 -1
  305. package/src/materials/MeshNormalMaterial.js +9 -1
  306. package/src/materials/MeshPhongMaterial.js +49 -1
  307. package/src/materials/MeshPhysicalMaterial.js +38 -0
  308. package/src/materials/MeshStandardMaterial.js +42 -1
  309. package/src/materials/MeshToonMaterial.js +35 -2
  310. package/src/materials/PointsMaterial.js +7 -0
  311. package/src/materials/ShaderMaterial.js +106 -1
  312. package/src/materials/SpriteMaterial.js +7 -0
  313. package/src/materials/nodes/Line2NodeMaterial.js +380 -297
  314. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  315. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  316. package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
  317. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +3 -30
  318. package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
  319. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -15
  320. package/src/materials/nodes/NodeMaterial.js +153 -89
  321. package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
  322. package/src/materials/nodes/manager/NodeMaterialObserver.js +234 -100
  323. package/src/math/Box3.js +5 -0
  324. package/src/math/FrustumArray.js +103 -133
  325. package/src/math/Interpolant.js +1 -1
  326. package/src/math/Line3.js +6 -5
  327. package/src/math/MathUtils.js +12 -12
  328. package/src/math/Matrix2.js +13 -9
  329. package/src/math/Matrix3.js +24 -9
  330. package/src/math/Matrix4.js +112 -74
  331. package/src/math/Plane.js +4 -3
  332. package/src/math/Quaternion.js +3 -29
  333. package/src/math/Sphere.js +1 -1
  334. package/src/math/Triangle.js +1 -1
  335. package/src/math/Vector2.js +13 -9
  336. package/src/math/Vector3.js +17 -15
  337. package/src/math/Vector4.js +15 -11
  338. package/src/math/interpolants/BezierInterpolant.js +106 -0
  339. package/src/nodes/Nodes.js +86 -71
  340. package/src/nodes/TSL.js +15 -13
  341. package/src/nodes/accessors/Arrays.js +5 -5
  342. package/src/nodes/accessors/Batch.js +108 -0
  343. package/src/nodes/accessors/Bitangent.js +7 -7
  344. package/src/nodes/accessors/BufferAttributeNode.js +120 -17
  345. package/src/nodes/accessors/BufferNode.js +29 -2
  346. package/src/nodes/accessors/Camera.js +149 -28
  347. package/src/nodes/accessors/ClippingNode.js +5 -5
  348. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  349. package/src/nodes/accessors/Instance.js +264 -0
  350. package/src/nodes/accessors/MaterialNode.js +27 -3
  351. package/src/nodes/accessors/MaterialProperties.js +6 -8
  352. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  353. package/src/nodes/accessors/ModelNode.js +1 -1
  354. package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
  355. package/src/nodes/accessors/Normal.js +24 -24
  356. package/src/nodes/accessors/Object3DNode.js +1 -1
  357. package/src/nodes/accessors/Position.js +39 -3
  358. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  359. package/src/nodes/accessors/ReferenceNode.js +9 -8
  360. package/src/nodes/accessors/ReflectVector.js +3 -3
  361. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  362. package/src/nodes/accessors/SceneProperties.js +47 -0
  363. package/src/nodes/accessors/Skinning.js +263 -0
  364. package/src/nodes/accessors/StorageBufferNode.js +16 -27
  365. package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
  366. package/src/nodes/accessors/StorageTextureNode.js +74 -11
  367. package/src/nodes/accessors/Tangent.js +8 -18
  368. package/src/nodes/accessors/Texture3DNode.js +32 -35
  369. package/src/nodes/accessors/TextureNode.js +124 -25
  370. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  371. package/src/nodes/accessors/UserDataNode.js +1 -2
  372. package/src/nodes/accessors/VertexColorNode.js +1 -2
  373. package/src/nodes/code/FunctionCallNode.js +1 -1
  374. package/src/nodes/code/FunctionNode.js +4 -19
  375. package/src/nodes/core/ArrayNode.js +21 -2
  376. package/src/nodes/core/AssignNode.js +3 -3
  377. package/src/nodes/core/AttributeNode.js +3 -3
  378. package/src/nodes/core/BypassNode.js +1 -1
  379. package/src/nodes/core/ContextNode.js +104 -5
  380. package/src/nodes/core/IndexNode.js +2 -1
  381. package/src/nodes/core/InputNode.js +1 -1
  382. package/src/nodes/core/InspectorNode.js +1 -1
  383. package/src/nodes/core/IsolateNode.js +1 -1
  384. package/src/nodes/core/MRTNode.js +55 -4
  385. package/src/nodes/core/Node.js +151 -17
  386. package/src/nodes/core/NodeBuilder.js +479 -101
  387. package/src/nodes/core/NodeError.js +28 -0
  388. package/src/nodes/core/NodeFrame.js +12 -4
  389. package/src/nodes/core/NodeUtils.js +20 -18
  390. package/src/nodes/core/OutputStructNode.js +13 -11
  391. package/src/nodes/core/OverrideContextNode.js +153 -0
  392. package/src/nodes/core/ParameterNode.js +4 -4
  393. package/src/nodes/core/PropertyNode.js +66 -4
  394. package/src/nodes/core/StackNode.js +91 -20
  395. package/src/nodes/core/StackTrace.js +139 -0
  396. package/src/nodes/core/StructNode.js +20 -8
  397. package/src/nodes/core/StructTypeNode.js +17 -23
  398. package/src/nodes/core/SubBuildNode.js +2 -2
  399. package/src/nodes/core/UniformGroupNode.js +36 -6
  400. package/src/nodes/core/UniformNode.js +21 -5
  401. package/src/nodes/core/VarNode.js +56 -23
  402. package/src/nodes/core/VaryingNode.js +14 -21
  403. package/src/nodes/display/BlendModes.js +1 -105
  404. package/src/nodes/display/BumpMapNode.js +6 -1
  405. package/src/nodes/display/ColorAdjustment.js +27 -9
  406. package/src/nodes/display/ColorSpaceNode.js +3 -3
  407. package/src/nodes/display/FrontFacingNode.js +38 -9
  408. package/src/nodes/display/NormalMapNode.js +41 -6
  409. package/src/nodes/display/PassNode.js +157 -56
  410. package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
  411. package/src/nodes/display/RenderOutputNode.js +19 -10
  412. package/src/nodes/display/ScreenNode.js +4 -2
  413. package/src/nodes/display/ToneMappingNode.js +1 -1
  414. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  415. package/src/nodes/display/ViewportDepthNode.js +52 -4
  416. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  417. package/src/nodes/display/ViewportTextureNode.js +39 -11
  418. package/src/nodes/fog/Fog.js +18 -35
  419. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  420. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  421. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  422. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  423. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  424. package/src/nodes/functions/VolumetricLightingModel.js +40 -7
  425. package/src/nodes/geometry/RangeNode.js +5 -3
  426. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  427. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  428. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  429. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  430. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  431. package/src/nodes/gpgpu/WorkgroupInfoNode.js +5 -5
  432. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  433. package/src/nodes/lighting/EnvironmentNode.js +30 -5
  434. package/src/nodes/lighting/IESSpotLightNode.js +40 -2
  435. package/src/nodes/lighting/LightingContextNode.js +10 -2
  436. package/src/nodes/lighting/LightsNode.js +97 -65
  437. package/src/nodes/lighting/PointShadowNode.js +166 -148
  438. package/src/nodes/lighting/ShadowFilterNode.js +74 -117
  439. package/src/nodes/lighting/ShadowNode.js +149 -51
  440. package/src/nodes/materialx/lib/mx_noise.js +2 -2
  441. package/src/nodes/math/BitcastNode.js +1 -1
  442. package/src/nodes/math/BitcountNode.js +433 -0
  443. package/src/nodes/math/ConditionalNode.js +6 -6
  444. package/src/nodes/math/MathNode.js +115 -52
  445. package/src/nodes/math/OperatorNode.js +24 -23
  446. package/src/nodes/math/PackFloatNode.js +98 -0
  447. package/src/nodes/math/UnpackFloatNode.js +96 -0
  448. package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
  449. package/src/nodes/pmrem/PMREMNode.js +34 -3
  450. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  451. package/src/nodes/tsl/TSLBase.js +1 -1
  452. package/src/nodes/tsl/TSLCore.js +99 -33
  453. package/src/nodes/utils/ArrayElementNode.js +14 -1
  454. package/src/nodes/utils/ConvertNode.js +1 -1
  455. package/src/nodes/utils/DebugNode.js +12 -12
  456. package/src/nodes/utils/EquirectUV.js +30 -5
  457. package/src/nodes/utils/EventNode.js +31 -2
  458. package/src/nodes/utils/FlipNode.js +1 -1
  459. package/src/nodes/utils/FunctionOverloadingNode.js +2 -2
  460. package/src/nodes/utils/JoinNode.js +3 -3
  461. package/src/nodes/utils/LoopNode.js +1 -1
  462. package/src/nodes/utils/MemberNode.js +2 -2
  463. package/src/nodes/utils/Packing.js +48 -5
  464. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  465. package/src/nodes/utils/RTTNode.js +41 -25
  466. package/src/nodes/utils/ReflectorNode.js +4 -4
  467. package/src/nodes/utils/Remap.js +48 -0
  468. package/src/nodes/utils/RotateNode.js +1 -1
  469. package/src/nodes/utils/SampleNode.js +1 -1
  470. package/src/nodes/utils/SetNode.js +1 -1
  471. package/src/nodes/utils/SplitNode.js +1 -1
  472. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  473. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  474. package/src/nodes/utils/UVUtils.js +28 -0
  475. package/src/objects/BatchedMesh.js +66 -30
  476. package/src/objects/InstancedMesh.js +19 -3
  477. package/src/objects/Line.js +1 -1
  478. package/src/objects/Mesh.js +1 -1
  479. package/src/objects/Points.js +1 -1
  480. package/src/objects/SkinnedMesh.js +26 -9
  481. package/src/renderers/WebGLRenderer.js +344 -156
  482. package/src/renderers/common/Animation.js +3 -3
  483. package/src/renderers/common/Attributes.js +15 -1
  484. package/src/renderers/common/Backend.js +78 -13
  485. package/src/renderers/common/Background.js +26 -13
  486. package/src/renderers/common/BindGroup.js +1 -16
  487. package/src/renderers/common/Binding.js +11 -0
  488. package/src/renderers/common/Bindings.js +141 -57
  489. package/src/renderers/common/BlendMode.js +143 -0
  490. package/src/renderers/common/Buffer.js +49 -0
  491. package/src/renderers/common/BundleGroup.js +1 -1
  492. package/src/renderers/common/ChainMap.js +30 -6
  493. package/src/renderers/common/ClippingContext.js +10 -2
  494. package/src/renderers/common/ComputePipeline.js +1 -1
  495. package/src/renderers/common/CubeRenderTarget.js +51 -7
  496. package/src/renderers/common/Geometries.js +29 -3
  497. package/src/renderers/common/Info.js +374 -4
  498. package/src/renderers/common/InspectorBase.js +6 -1
  499. package/src/renderers/common/Lighting.js +51 -19
  500. package/src/renderers/common/Pipelines.js +40 -7
  501. package/src/renderers/common/PostProcessing.js +8 -206
  502. package/src/renderers/common/ReadbackBuffer.js +78 -0
  503. package/src/renderers/common/RenderBundle.js +3 -1
  504. package/src/renderers/common/RenderBundles.js +7 -3
  505. package/src/renderers/common/RenderContext.js +16 -0
  506. package/src/renderers/common/RenderContexts.js +33 -49
  507. package/src/renderers/common/RenderList.js +41 -4
  508. package/src/renderers/common/RenderLists.js +2 -1
  509. package/src/renderers/common/RenderObject.js +88 -16
  510. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  511. package/src/renderers/common/RenderObjects.js +21 -5
  512. package/src/renderers/common/RenderPipeline.js +232 -17
  513. package/src/renderers/common/Renderer.js +700 -163
  514. package/src/renderers/common/Sampler.js +16 -48
  515. package/src/renderers/common/StorageBuffer.js +13 -1
  516. package/src/renderers/common/Textures.js +121 -9
  517. package/src/renderers/common/TimestampQueryPool.js +6 -4
  518. package/src/renderers/common/Uniform.js +8 -0
  519. package/src/renderers/common/UniformsGroup.js +84 -1
  520. package/src/renderers/common/XRManager.js +377 -51
  521. package/src/renderers/common/extras/PMREMGenerator.js +40 -61
  522. package/src/renderers/common/nodes/NodeBuilderState.js +10 -2
  523. package/src/renderers/common/nodes/NodeLibrary.js +4 -4
  524. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +298 -106
  525. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  526. package/src/renderers/common/nodes/NodeUniformBuffer.js +65 -0
  527. package/src/renderers/shaders/DFGLUTData.js +19 -34
  528. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  529. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  530. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  531. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  532. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  533. package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
  534. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
  535. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  536. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +9 -13
  537. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
  538. package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
  539. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  540. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  541. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  542. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  543. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +3 -1
  544. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  545. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  546. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
  547. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  548. package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
  549. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  550. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  551. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  552. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  553. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  554. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +2 -2
  555. package/src/renderers/shaders/ShaderChunk.js +5 -3
  556. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  557. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  558. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +2 -3
  559. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  560. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  561. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  562. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  563. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  564. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  565. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  566. package/src/renderers/shaders/ShaderLib.js +7 -6
  567. package/src/renderers/shaders/UniformsLib.js +7 -5
  568. package/src/renderers/shaders/UniformsUtils.js +27 -5
  569. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  570. package/src/renderers/webgl/WebGLBackground.js +15 -15
  571. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  572. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  573. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  574. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  575. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  576. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  577. package/src/renderers/webgl/WebGLLights.js +18 -1
  578. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  579. package/src/renderers/webgl/WebGLObjects.js +3 -1
  580. package/src/renderers/webgl/WebGLOutput.js +271 -0
  581. package/src/renderers/webgl/WebGLProgram.js +54 -113
  582. package/src/renderers/webgl/WebGLPrograms.js +74 -55
  583. package/src/renderers/webgl/WebGLRenderLists.js +24 -1
  584. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  585. package/src/renderers/webgl/WebGLShaderCache.js +5 -11
  586. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  587. package/src/renderers/webgl/WebGLState.js +75 -37
  588. package/src/renderers/webgl/WebGLTextures.js +230 -56
  589. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  590. package/src/renderers/webgl/WebGLUniformsGroups.js +82 -35
  591. package/src/renderers/webgl/WebGLUtils.js +6 -2
  592. package/src/renderers/webgl-fallback/WebGLBackend.js +322 -92
  593. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  594. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +295 -66
  595. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  596. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  597. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  598. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +118 -73
  599. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  600. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +9 -3
  601. package/src/renderers/webgpu/WebGPUBackend.js +733 -302
  602. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  603. package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
  604. package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
  605. package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
  606. package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
  607. package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
  608. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
  609. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
  610. package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
  611. package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
  612. package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
  613. package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
  614. package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
  615. package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
  616. package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
  617. package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
  618. package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
  619. package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
  620. package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
  621. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
  622. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
  623. package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
  624. package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
  625. package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
  626. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
  627. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +526 -93
  628. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
  629. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +194 -61
  630. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +395 -234
  631. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  632. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  633. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +224 -91
  634. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +228 -213
  635. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +428 -175
  636. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +40 -25
  637. package/src/renderers/webgpu/utils/WebGPUUtils.js +70 -13
  638. package/src/renderers/webxr/WebXRController.js +12 -0
  639. package/src/renderers/webxr/WebXRManager.js +4 -2
  640. package/src/textures/CubeDepthTexture.js +76 -0
  641. package/src/textures/DepthTexture.js +1 -1
  642. package/src/textures/ExternalTexture.js +0 -3
  643. package/src/textures/HTMLTexture.js +74 -0
  644. package/src/textures/Source.js +2 -2
  645. package/src/textures/Texture.js +16 -5
  646. package/src/utils.js +280 -3
  647. package/examples/fonts/LICENSE +0 -13
  648. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  649. package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
  650. package/examples/fonts/README.md +0 -11
  651. package/examples/fonts/droid/NOTICE +0 -190
  652. package/examples/fonts/droid/README.txt +0 -18
  653. package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
  654. package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
  655. package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
  656. package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
  657. package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
  658. package/examples/fonts/gentilis_bold.typeface.json +0 -1
  659. package/examples/fonts/gentilis_regular.typeface.json +0 -1
  660. package/examples/fonts/helvetiker_bold.typeface.json +0 -1
  661. package/examples/fonts/helvetiker_regular.typeface.json +0 -1
  662. package/examples/fonts/optimer_bold.typeface.json +0 -1
  663. package/examples/fonts/optimer_regular.typeface.json +0 -1
  664. package/examples/fonts/ttf/README.md +0 -9
  665. package/examples/fonts/ttf/kenpixel.ttf +0 -0
  666. package/examples/jsm/libs/ammo.wasm.js +0 -822
  667. package/examples/jsm/libs/ammo.wasm.wasm +0 -0
  668. package/examples/jsm/libs/draco/draco_encoder.js +0 -33
  669. package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
  670. package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
  671. package/examples/jsm/libs/opentype.module.js +0 -14506
  672. package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
  673. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
  674. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  675. package/examples/jsm/lighting/TiledLighting.js +0 -42
  676. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  677. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  678. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  679. package/examples/jsm/tsl/display/AnamorphicNode.js +0 -282
  680. package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
  681. package/src/nodes/accessors/BatchNode.js +0 -163
  682. package/src/nodes/accessors/InstanceNode.js +0 -244
  683. package/src/nodes/accessors/InstancedMeshNode.js +0 -50
  684. package/src/nodes/accessors/SceneNode.js +0 -145
  685. package/src/nodes/accessors/SkinningNode.js +0 -327
  686. package/src/nodes/code/ScriptableNode.js +0 -726
  687. package/src/nodes/code/ScriptableValueNode.js +0 -253
  688. package/src/nodes/display/PosterizeNode.js +0 -65
  689. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  690. package/src/nodes/utils/RemapNode.js +0 -125
  691. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  692. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  693. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -8,7 +8,7 @@
8
8
  *
9
9
  * Used by {@link HalftonePass}.
10
10
  *
11
- * Shape (1 = Dot, 2 = Ellipse, 3 = Line, 4 = Square)
11
+ * Shape (1 = Dot, 2 = Ellipse, 3 = Line, 4 = Square, 5 = Diamond)
12
12
  * Blending Mode (1 = Linear, 2 = Multiply, 3 = Add, 4 = Lighter, 5 = Darker)
13
13
  *
14
14
  * @constant
@@ -49,11 +49,13 @@ const HalftoneShader = {
49
49
 
50
50
  #define SQRT2_MINUS_ONE 0.41421356
51
51
  #define SQRT2_HALF_MINUS_ONE 0.20710678
52
+ #define PI 3.14159265
52
53
  #define PI2 6.28318531
53
54
  #define SHAPE_DOT 1
54
55
  #define SHAPE_ELLIPSE 2
55
56
  #define SHAPE_LINE 3
56
57
  #define SHAPE_SQUARE 4
58
+ #define SHAPE_DIAMOND 5
57
59
  #define BLENDING_LINEAR 1
58
60
  #define BLENDING_MULTIPLY 2
59
61
  #define BLENDING_ADD 3
@@ -129,6 +131,15 @@ const HalftoneShader = {
129
131
  rad = pow( abs( rad ), 1.4 );
130
132
  rad = rad_max * ( rad + ( ( sin_t > cos_t ) ? rad - sin_t * rad : rad - cos_t * rad ) );
131
133
 
134
+ } else if ( shape == SHAPE_DIAMOND ) {
135
+
136
+ float angle45 = PI / 4.0;
137
+ float theta = atan( p.y - coord.y, p.x - coord.x ) - angle - angle45;
138
+ float sin_t = abs( sin( theta ) );
139
+ float cos_t = abs( cos( theta ) );
140
+ rad = pow( abs( rad ), 1.4 );
141
+ rad = rad_max * ( rad + ( ( sin_t > cos_t ) ? rad - sin_t * rad : rad - cos_t * rad ) );
142
+
132
143
  }
133
144
 
134
145
  return rad - dist;
@@ -86,8 +86,12 @@ const PoissonDenoiseShader = {
86
86
 
87
87
  const vec3 poissonDisk[SAMPLES] = SAMPLE_VECTORS;
88
88
 
89
- vec3 getViewPosition(const in vec2 screenPosition, const in float depth) {
90
- vec4 clipSpacePosition = vec4(vec3(screenPosition, depth) * 2.0 - 1.0, 1.0);
89
+ vec3 getViewPosition( const in vec2 screenPosition, const in float depth ) {
90
+ #ifdef USE_REVERSED_DEPTH_BUFFER
91
+ vec4 clipSpacePosition = vec4( vec2( screenPosition ) * 2.0 - 1.0, depth, 1.0 );
92
+ #else
93
+ vec4 clipSpacePosition = vec4( vec3( screenPosition, depth ) * 2.0 - 1.0, 1.0 );
94
+ #endif
91
95
  vec4 viewSpacePosition = cameraProjectionMatrixInverse * clipSpacePosition;
92
96
  return viewSpacePosition.xyz / viewSpacePosition.w;
93
97
  }
@@ -153,9 +153,15 @@ const SAOShader = {
153
153
  angle += ANGLE_STEP;
154
154
 
155
155
  float sampleDepth = getDepth( sampleUv );
156
- if( sampleDepth >= ( 1.0 - EPSILON ) ) {
156
+ #ifdef USE_REVERSED_DEPTH_BUFFER
157
+ if( sampleDepth <= 0.0 + EPSILON ) {
157
158
  continue;
158
159
  }
160
+ #else
161
+ if( sampleDepth >= 1.0 - EPSILON ) {
162
+ continue;
163
+ }
164
+ #endif
159
165
 
160
166
  float sampleViewZ = getViewZ( sampleDepth );
161
167
  vec3 sampleViewPosition = getViewPosition( sampleUv, sampleDepth, sampleViewZ );
@@ -170,9 +176,16 @@ const SAOShader = {
170
176
 
171
177
  void main() {
172
178
  float centerDepth = getDepth( vUv );
173
- if( centerDepth >= ( 1.0 - EPSILON ) ) {
174
- discard;
175
- }
179
+
180
+ #ifdef USE_REVERSED_DEPTH_BUFFER
181
+ if( centerDepth <= 0.0 + EPSILON ) {
182
+ discard;
183
+ }
184
+ #else
185
+ if( centerDepth >= 1.0 - EPSILON ) {
186
+ discard;
187
+ }
188
+ #endif
176
189
 
177
190
  float centerViewZ = getViewZ( centerDepth );
178
191
  vec3 viewPosition = getViewPosition( vUv, centerDepth, centerViewZ );
@@ -79,6 +79,16 @@ const SSAOShader = {
79
79
 
80
80
  #include <packing>
81
81
 
82
+ #ifdef USE_REVERSED_DEPTH_BUFFER
83
+
84
+ const float depthThreshold = 0.0;
85
+
86
+ #else
87
+
88
+ const float depthThreshold = 1.0;
89
+
90
+ #endif
91
+
82
92
  float getDepth( const in vec2 screenPosition ) {
83
93
 
84
94
  return texture2D( tDepth, screenPosition ).x;
@@ -137,7 +147,7 @@ const SSAOShader = {
137
147
 
138
148
  float depth = getDepth( vUv );
139
149
 
140
- if ( depth == 1.0 ) {
150
+ if ( depth == depthThreshold ) {
141
151
 
142
152
  gl_FragColor = vec4( 1.0 ); // don't influence background
143
153
 
@@ -96,7 +96,7 @@ const SSRShader = {
96
96
  float x0=point.x,y0=point.y,z0=point.z;
97
97
  float x=planePoint.x,y=planePoint.y,z=planePoint.z;
98
98
  float d=-(a*x+b*y+c*z);
99
- float distance=(a*x0+b*y0+c*z0+d)/sqrt(a*a+b*b+c*c);
99
+ float distance=a*x0+b*y0+c*z0+d;
100
100
  return distance;
101
101
  }
102
102
  float getDepth( const in vec2 uv ) {
@@ -170,17 +170,17 @@ const SSRShader = {
170
170
  #endif
171
171
  d1=viewPositionToXY(d1viewPosition);
172
172
 
173
- float totalLen=length(d1-d0);
174
173
  float xLen=d1.x-d0.x;
175
174
  float yLen=d1.y-d0.y;
176
175
  float totalStep=max(abs(xLen),abs(yLen));
177
176
  float xSpan=xLen/totalStep;
178
177
  float ySpan=yLen/totalStep;
179
- for(float i=0.;i<float(MAX_STEP);i++){
178
+ float sStep=1./totalStep;
179
+ float s=sStep; // start at sStep since loop starts at i=1
180
+ for(float i=1.;i<float(MAX_STEP);i++){
180
181
  if(i>=totalStep) break;
181
182
  vec2 xy=vec2(d0.x+i*xSpan,d0.y+i*ySpan);
182
183
  if(xy.x<0.||xy.x>resolution.x||xy.y<0.||xy.y>resolution.y) break;
183
- float s=length(xy-d0)/totalLen;
184
184
  vec2 uv=xy/resolution;
185
185
 
186
186
  float d = getDepth(uv);
@@ -221,7 +221,7 @@ const SSRShader = {
221
221
 
222
222
  if(hit){
223
223
  vec3 vN=getViewNormal( uv );
224
- if(dot(viewReflectDir,vN)>=0.) continue;
224
+ if(dot(viewReflectDir,vN)>=0.) break; // treat backfaces as opaque
225
225
  float distance=pointPlaneDistance(vP,viewPosition,viewNormal);
226
226
  if(distance>maxDistance) break;
227
227
  float op=opacity;
@@ -240,6 +240,7 @@ const SSRShader = {
240
240
  break;
241
241
  }
242
242
  }
243
+ s+=sStep;
243
244
  }
244
245
  }
245
246
  `
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  /**
7
- * Unpack RGBA depth shader that shows RGBA encoded depth as monochrome color.
7
+ * Depth visualization shader that shows depth values as monochrome color.
8
8
  *
9
9
  * @constant
10
10
  * @type {ShaderMaterial~Shader}
@@ -39,11 +39,9 @@ const UnpackDepthRGBAShader = {
39
39
 
40
40
  varying vec2 vUv;
41
41
 
42
- #include <packing>
43
-
44
42
  void main() {
45
43
 
46
- float depth = unpackRGBAToDepth( texture2D( tDiffuse, vUv ) );
44
+ float depth = texture2D( tDiffuse, vUv ).r;
47
45
 
48
46
  #ifdef USE_REVERSED_DEPTH_BUFFER
49
47
 
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  /**
7
- * Based on [PaintEffect postprocess from ro.me](http://code.google.com/p/3-dreams-of-black/source/browse/deploy/js/effects/PaintEffect.js).
7
+ * Based on [PaintEffect postprocess from ro.me](https://github.com/dataarts/3-dreams-of-black/blob/master/deploy/js/effects/PaintEffect.js).
8
8
  *
9
9
  * @constant
10
10
  * @type {ShaderMaterial~Shader}
@@ -31,34 +31,23 @@ const VolumeRenderShader1 = {
31
31
 
32
32
  vertexShader: /* glsl */`
33
33
 
34
- varying vec4 v_nearpos;
35
- varying vec4 v_farpos;
36
34
  varying vec3 v_position;
35
+ varying vec3 v_cameraInObj;
36
+ varying vec3 v_viewDirInObj;
37
37
 
38
38
  void main() {
39
- // Prepare transforms to map to "camera view". See also:
40
- // https://threejs.org/docs/#api/renderers/webgl/WebGLProgram
41
- mat4 viewtransformf = modelViewMatrix;
42
- mat4 viewtransformi = inverse(modelViewMatrix);
43
-
44
- // Project local vertex coordinate to camera position. Then do a step
45
- // backward (in cam coords) to the near clipping plane, and project back. Do
46
- // the same for the far clipping plane. This gives us all the information we
47
- // need to calculate the ray and truncate it to the viewing cone.
48
39
  vec4 position4 = vec4(position, 1.0);
49
- vec4 pos_in_cam = viewtransformf * position4;
50
40
 
51
- // Intersection of ray and near clipping plane (z = -1 in clip coords)
52
- pos_in_cam.z = -pos_in_cam.w;
53
- v_nearpos = viewtransformi * pos_in_cam;
41
+ v_position = position;
54
42
 
55
- // Intersection of ray and far clipping plane (z = +1 in clip coords)
56
- pos_in_cam.z = pos_in_cam.w;
57
- v_farpos = viewtransformi * pos_in_cam;
43
+ // Express the camera position and view direction in the object's local
44
+ // space so the fragment shader can build the per-fragment view ray.
45
+ // For perspective cameras, rays converge at v_cameraInObj.
46
+ // For orthographic cameras, rays travel along v_viewDirInObj.
47
+ v_cameraInObj = (inverse(modelMatrix) * vec4(cameraPosition, 1.0)).xyz;
48
+ v_viewDirInObj = (inverse(modelViewMatrix) * vec4(0.0, 0.0, -1.0, 0.0)).xyz;
58
49
 
59
- // Set varyings and output pos
60
- v_position = position;
61
- gl_Position = projectionMatrix * viewMatrix * modelMatrix * position4;
50
+ gl_Position = projectionMatrix * modelViewMatrix * position4;
62
51
  }`,
63
52
 
64
53
  fragmentShader: /* glsl */`
@@ -75,8 +64,8 @@ const VolumeRenderShader1 = {
75
64
  uniform sampler2D u_cmdata;
76
65
 
77
66
  varying vec3 v_position;
78
- varying vec4 v_nearpos;
79
- varying vec4 v_farpos;
67
+ varying vec3 v_cameraInObj;
68
+ varying vec3 v_viewDirInObj;
80
69
 
81
70
  // The maximum distance through our rendering volume is sqrt(3).
82
71
  const int MAX_STEPS = 887; // 887 for 512^3, 1774 for 1024^3
@@ -96,33 +85,29 @@ const VolumeRenderShader1 = {
96
85
 
97
86
 
98
87
  void main() {
99
- // Normalize clipping plane info
100
- vec3 farpos = v_farpos.xyz / v_farpos.w;
101
- vec3 nearpos = v_nearpos.xyz / v_nearpos.w;
102
-
103
- // Calculate unit vector pointing in the view direction through this fragment.
104
- vec3 view_ray = normalize(nearpos.xyz - farpos.xyz);
105
-
106
- // Compute the (negative) distance to the front surface or near clipping plane.
107
- // v_position is the back face of the cuboid, so the initial distance calculated in the dot
108
- // product below is the distance from near clip plane to the back of the cuboid
109
- float distance = dot(nearpos - v_position, view_ray);
110
- distance = max(distance, min((-0.5 - v_position.x) / view_ray.x,
111
- (u_size.x - 0.5 - v_position.x) / view_ray.x));
112
- distance = max(distance, min((-0.5 - v_position.y) / view_ray.y,
113
- (u_size.y - 0.5 - v_position.y) / view_ray.y));
114
- distance = max(distance, min((-0.5 - v_position.z) / view_ray.z,
115
- (u_size.z - 0.5 - v_position.z) / view_ray.z));
116
-
117
- // Now we have the starting position on the front surface
118
- vec3 front = v_position + view_ray * distance;
88
+ // Per-fragment ray direction in object space, pointing from the back
89
+ // face toward the camera. For perspective cameras the rays converge
90
+ // at the camera position; for orthographic cameras they are parallel
91
+ // to the view direction.
92
+ vec3 view_ray = isOrthographic
93
+ ? normalize(-v_viewDirInObj)
94
+ : normalize(v_cameraInObj - v_position);
95
+
96
+ // Slab-based ray/AABB intersection: v_position lies on the back face
97
+ // of the cuboid, so stepping along view_ray traverses the volume and
98
+ // exits through the front face at t = distance.
99
+ vec3 t1 = (vec3(-0.5) - v_position) / view_ray;
100
+ vec3 t2 = (u_size - vec3(0.5) - v_position) / view_ray;
101
+ vec3 tmax = max(t1, t2);
102
+ float distance = min(min(tmax.x, tmax.y), tmax.z);
119
103
 
120
104
  // Decide how many steps to take
121
- int nsteps = int(-distance / relative_step_size + 0.5);
105
+ int nsteps = int(distance / relative_step_size + 0.5);
122
106
  if ( nsteps < 1 )
123
107
  discard;
124
108
 
125
109
  // Get starting location and step vector in texture coordinates
110
+ vec3 front = v_position + view_ray * distance;
126
111
  vec3 step = ((v_position - front) / u_size) / float(nsteps);
127
112
  vec3 start_loc = front / u_size;
128
113
 
@@ -149,6 +134,8 @@ const VolumeRenderShader1 = {
149
134
 
150
135
  vec4 apply_colormap(float val) {
151
136
  val = (val - u_clim[0]) / (u_clim[1] - u_clim[0]);
137
+ float n = float(textureSize(u_cmdata, 0).x); // see #33842
138
+ val = (val * (n - 1.0) + 0.5) / n;
152
139
  return texture2D(u_cmdata, vec2(val, 0.5));
153
140
  }
154
141
 
@@ -46,6 +46,20 @@ export class ASTNode {
46
46
 
47
47
  }
48
48
 
49
+ getProgram() {
50
+
51
+ let current = this;
52
+
53
+ while ( current.parent !== null ) {
54
+
55
+ current = current.parent;
56
+
57
+ }
58
+
59
+ return current.isProgram === true ? current : null;
60
+
61
+ }
62
+
49
63
  getParent( parents = [] ) {
50
64
 
51
65
  if ( this.parent === null ) {
@@ -114,6 +128,7 @@ export class Program extends ASTNode {
114
128
  super();
115
129
 
116
130
  this.body = body;
131
+ this.structTypes = new Map();
117
132
 
118
133
  this.isProgram = true;
119
134
 
@@ -629,3 +644,32 @@ export class SwitchCase extends ASTNode {
629
644
  }
630
645
 
631
646
  }
647
+
648
+ // helper class for StructDefinition
649
+ export class StructMember {
650
+
651
+ constructor( type, name ) {
652
+
653
+ this.type = type;
654
+ this.name = name;
655
+ this.isStructMember = true;
656
+
657
+ }
658
+
659
+ }
660
+
661
+ export class StructDefinition extends ASTNode {
662
+
663
+ constructor( name, members = [] ) {
664
+
665
+ super();
666
+
667
+ this.name = name;
668
+ this.members = members;
669
+ this.isStructDefinition = true;
670
+
671
+ this.initialize();
672
+
673
+ }
674
+
675
+ }
@@ -1,6 +1,6 @@
1
- import { Program, FunctionDeclaration, Switch, For, AccessorElements, Ternary, Varying, DynamicElement, StaticElement, FunctionParameter, Unary, Conditional, VariableDeclaration, Operator, Number, String, FunctionCall, Return, Accessor, Uniform, Discard, SwitchCase, Continue, Break, While, Comment } from './AST.js';
1
+ import { Program, FunctionDeclaration, Switch, For, AccessorElements, Ternary, Varying, DynamicElement, StaticElement, FunctionParameter, Unary, Conditional, VariableDeclaration, Operator, Number, String, FunctionCall, Return, Accessor, Uniform, Discard, SwitchCase, Continue, Break, While, Comment, StructMember, StructDefinition } from './AST.js';
2
2
 
3
- import { isType } from './TranspilerUtils.js';
3
+ import { isBuiltinType } from './TranspilerUtils.js';
4
4
 
5
5
  const unaryOperators = [
6
6
  '+', '-', '~', '!', '++', '--'
@@ -170,7 +170,7 @@ class Tokenizer {
170
170
 
171
171
  skip( ...params ) {
172
172
 
173
- let remainingCode = this.source.substr( this.position );
173
+ let remainingCode = this.source.slice( this.position );
174
174
  let i = params.length;
175
175
 
176
176
  while ( i -- ) {
@@ -182,7 +182,7 @@ class Tokenizer {
182
182
 
183
183
  this.position += skipLength;
184
184
 
185
- remainingCode = this.source.substr( this.position );
185
+ remainingCode = this.source.slice( this.position );
186
186
 
187
187
  // re-skip, new remainingCode is generated
188
188
  // maybe exist previous regexp non detected
@@ -255,6 +255,7 @@ class GLSLDecoder {
255
255
  this.index = 0;
256
256
  this.tokenizer = null;
257
257
  this.keywords = [];
258
+ this.structTypes = new Map();
258
259
 
259
260
  this.addPolyfill( 'gl_FragCoord', 'vec3 gl_FragCoord = vec3( screenCoordinate.x, screenCoordinate.y.oneMinus(), screenCoordinate.z );' );
260
261
 
@@ -676,7 +677,7 @@ class GLSLDecoder {
676
677
 
677
678
  params.push( new FunctionParameter( type, name, qualifier, immutable ) );
678
679
 
679
- if ( tokens[ i ] && tokens[ i ].str !== ',' ) throw new Error( 'Expected ","' );
680
+ if ( tokens[ i ] && tokens[ i ].str !== ',' ) throw new Error( 'THREE.GLSLDecoder: Expected ","' );
680
681
 
681
682
  }
682
683
 
@@ -780,6 +781,54 @@ class GLSLDecoder {
780
781
 
781
782
  }
782
783
 
784
+ parseStructDefinition() {
785
+
786
+ const tokens = this.readTokensUntil( ';' );
787
+
788
+ const structName = tokens[ 1 ].str;
789
+
790
+ if ( tokens[ 2 ].str !== '{' ) {
791
+
792
+ throw new Error( 'THREE.GLSLDecoder: Expected \'{\' after struct name ' );
793
+
794
+ }
795
+
796
+ const structMembers = [];
797
+ for ( let i = 3; i < tokens.length - 2; i += 3 ) {
798
+
799
+ const typeToken = tokens[ i ];
800
+ const nameToken = tokens[ i + 1 ];
801
+
802
+ if ( typeToken.type != 'literal' || nameToken.type != 'literal' ) {
803
+
804
+ throw new Error( 'THREE.GLSLDecoder: Invalid struct declaration' );
805
+
806
+ }
807
+
808
+ if ( tokens[ i + 2 ].str !== ';' ) {
809
+
810
+ throw new Error( 'THREE.GLSLDecoder: Missing \';\' after struct member name' );
811
+
812
+ }
813
+
814
+ const member = new StructMember( typeToken.str, nameToken.str );
815
+ structMembers.push( member );
816
+
817
+ }
818
+
819
+ if ( tokens[ tokens.length - 2 ].str !== '}' ) {
820
+
821
+ throw new Error( 'THREE.GLSLDecoder: Missing closing \'}\' for struct ' + structName );
822
+
823
+ }
824
+
825
+ const definition = new StructDefinition( structName, structMembers );
826
+ this.structTypes.set( structName, definition );
827
+
828
+ return definition;
829
+
830
+ }
831
+
783
832
  parseReturn() {
784
833
 
785
834
  this.readToken(); // skip 'return'
@@ -827,7 +876,9 @@ class GLSLDecoder {
827
876
 
828
877
  let initialization;
829
878
 
830
- if ( initializationTokens[ 0 ] && isType( initializationTokens[ 0 ].str ) ) {
879
+ const firstToken = initializationTokens[ 0 ];
880
+
881
+ if ( firstToken && ( isBuiltinType( firstToken.str ) || this.structTypes.has( firstToken.str ) ) ) {
831
882
 
832
883
  initialization = this.parseVariablesFromToken( initializationTokens );
833
884
 
@@ -870,7 +921,7 @@ class GLSLDecoder {
870
921
  // Validate curly braces
871
922
  if ( this.getToken().str !== '{' ) {
872
923
 
873
- throw new Error( 'Expected \'{\' after switch(...) ' );
924
+ throw new Error( 'THREE.GLSLDecoder: Expected \'{\' after switch(...) ' );
874
925
 
875
926
  }
876
927
 
@@ -1079,7 +1130,11 @@ class GLSLDecoder {
1079
1130
 
1080
1131
  statement = this.parseVarying();
1081
1132
 
1082
- } else if ( isType( token.str ) ) {
1133
+ } else if ( token.str === 'struct' ) {
1134
+
1135
+ statement = this.parseStructDefinition();
1136
+
1137
+ } else if ( isBuiltinType( token.str ) || this.structTypes.has( token.str ) ) {
1083
1138
 
1084
1139
  if ( this.getToken( 2 ).str === '(' ) {
1085
1140
 
@@ -1159,7 +1214,9 @@ class GLSLDecoder {
1159
1214
  this.tokenizer = new Tokenizer( polyfill + source ).tokenize();
1160
1215
 
1161
1216
  const body = this.parseBlock();
1217
+
1162
1218
  const program = new Program( body );
1219
+ program.structTypes = this.structTypes;
1163
1220
 
1164
1221
  return program;
1165
1222
 
@@ -49,7 +49,7 @@ class Linker {
49
49
 
50
50
  if ( this.block === null || this.block.node !== node ) {
51
51
 
52
- throw new Error( 'No block to remove or block mismatch.' );
52
+ throw new Error( 'THREE.Linker: No block to remove or block mismatch.' );
53
53
 
54
54
  }
55
55
 
@@ -38,6 +38,8 @@ class ShaderToyDecoder extends GLSLDecoder {
38
38
  node.body.unshift( new VariableDeclaration( 'vec4', 'fragColor' ) );
39
39
  node.body.push( new Return( fragColor ) );
40
40
 
41
+ node.initialize();
42
+
41
43
  }
42
44
 
43
45
  return node;
@@ -314,6 +314,10 @@ class TSLEncoder {
314
314
 
315
315
  code = this.emitVarying( node );
316
316
 
317
+ } else if ( node.isStructDefinition ) {
318
+
319
+ code = this.emitStructDefinition( node );
320
+
317
321
  } else if ( node.isTernary ) {
318
322
 
319
323
  code = this.emitTernary( node );
@@ -669,9 +673,19 @@ ${ this.tab }} )`;
669
673
 
670
674
  } else {
671
675
 
672
- varStr += ` = property( '${ type }' )`;
676
+ const program = node.getProgram();
677
+
678
+ if ( program.structTypes.has( type ) ) {
679
+
680
+ varStr += ` = ${ type }()`;
681
+
682
+ } else {
683
+
684
+ varStr += ` = property( '${ type }' )`;
673
685
 
674
- this.addImport( 'property' );
686
+ this.addImport( 'property' );
687
+
688
+ }
675
689
 
676
690
  }
677
691
 
@@ -702,6 +716,34 @@ ${ this.tab }} )`;
702
716
 
703
717
  }
704
718
 
719
+ emitStructDefinition( node ) {
720
+
721
+ const { name, members } = node;
722
+
723
+ this.addImport( 'struct' );
724
+
725
+ let structString = `const ${ name } = struct( {\n`;
726
+
727
+ for ( let i = 0; i < members.length; i += 1 ) {
728
+
729
+ const member = members[ i ];
730
+
731
+ structString += `${this.tab}\t${member.name}: '${member.type}'`;
732
+
733
+ if ( i != members.length - 1 ) {
734
+
735
+ structString += ',\n';
736
+
737
+ }
738
+
739
+ }
740
+
741
+ structString += `\n${this.tab}}, \'${name}\' )`;
742
+
743
+ return structString;
744
+
745
+ }
746
+
705
747
  emitOverloadingFunction( nodes ) {
706
748
 
707
749
  const { name } = nodes[ 0 ];
@@ -798,7 +840,8 @@ ${ this.tab }}`;
798
840
 
799
841
  if ( node.layout !== false && hasPointer === false ) {
800
842
 
801
- funcStr += ', { ' + inputs.join( ', ' ) + ', return: \'' + type + '\' }';
843
+ const inputsStr = inputs.length > 0 ? inputs.join( ', ' ) + ', ' : '';
844
+ funcStr += ', { ' + inputsStr + 'return: \'' + type + '\' }';
802
845
 
803
846
  }
804
847
 
@@ -1,6 +1,6 @@
1
1
  export function isExpression( st ) {
2
2
 
3
- return st.isFunctionDeclaration !== true && st.isFor !== true && st.isWhile !== true && st.isConditional !== true && st.isSwitch !== true;
3
+ return st.isFunctionDeclaration !== true && st.isFor !== true && st.isWhile !== true && st.isConditional !== true && st.isSwitch !== true && st.isStructDefinition !== true;
4
4
 
5
5
  }
6
6
 
@@ -10,9 +10,9 @@ export function isPrimitive( value ) {
10
10
 
11
11
  }
12
12
 
13
- export function isType( str ) {
13
+ export function isBuiltinType( str ) {
14
14
 
15
- return /void|bool|float|u?int|mat[234]|mat[234]x[234]|(u|i|b)?vec[234]/.test( str );
15
+ return /^(void|bool|float|u?int|mat[234]|mat[234]x[234]|(u|i|b)?vec[234])$/.test( str );
16
16
 
17
17
  }
18
18
 
@@ -300,6 +300,10 @@ class WGSLEncoder {
300
300
  this.varyings.push( node );
301
301
  return ''; // Defer emission to the header
302
302
 
303
+ } else if ( node.isStructDefinition ) {
304
+
305
+ code = this.emitStructDefinition( node );
306
+
303
307
  } else if ( node.isTernary ) {
304
308
 
305
309
  const cond = this.emitExpression( node.cond );
@@ -584,6 +588,29 @@ class WGSLEncoder {
584
588
 
585
589
  }
586
590
 
591
+ emitStructDefinition( node ) {
592
+
593
+ const { name, members } = node;
594
+
595
+ let structString = `struct ${ name } {\n`;
596
+
597
+ for ( let i = 0; i < members.length; i += 1 ) {
598
+
599
+ const member = members[ i ];
600
+
601
+ structString += `${ this.tab }\t${ member.name }: ${ this.getWgslType( member.type ) }`;
602
+
603
+ const delimiter = ( i != members.length - 1 ) ? ',\n' : '\n';
604
+ structString += delimiter;
605
+
606
+ }
607
+
608
+ structString += this.tab + '}';
609
+
610
+ return structString;
611
+
612
+ }
613
+
587
614
  emitFunction( node ) {
588
615
 
589
616
  const name = node.name;