super-three 0.184.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 (366) hide show
  1. package/build/three.cjs +1260 -927
  2. package/build/three.core.js +1104 -829
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +156 -98
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +11 -4
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +7538 -3367
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +7538 -3366
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +3 -0
  13. package/examples/jsm/controls/ArcballControls.js +6 -2
  14. package/examples/jsm/controls/FirstPersonControls.js +79 -42
  15. package/examples/jsm/controls/TransformControls.js +68 -15
  16. package/examples/jsm/csm/CSMFrustum.js +31 -6
  17. package/examples/jsm/csm/CSMShadowNode.js +4 -1
  18. package/examples/jsm/effects/AsciiEffect.js +14 -1
  19. package/examples/jsm/exporters/DRACOExporter.js +27 -6
  20. package/examples/jsm/exporters/GLTFExporter.js +114 -12
  21. package/examples/jsm/exporters/PLYExporter.js +286 -73
  22. package/examples/jsm/exporters/USDZExporter.js +347 -112
  23. package/examples/jsm/generators/CityGenerator.js +346 -0
  24. package/examples/jsm/generators/ForestGenerator.js +347 -0
  25. package/examples/jsm/generators/TerrainGenerator.js +504 -0
  26. package/examples/jsm/generators/TreeGenerator.js +377 -0
  27. package/examples/jsm/generators/city/SidewalkGenerator.js +253 -0
  28. package/examples/jsm/generators/city/SkyscraperGenerator.js +1357 -0
  29. package/examples/jsm/geometries/LoftGeometry.js +355 -0
  30. package/examples/jsm/helpers/LightProbeGridHelper.js +1 -1
  31. package/examples/jsm/helpers/LightProbeHelper.js +5 -4
  32. package/examples/jsm/helpers/ViewHelper.js +16 -6
  33. package/examples/jsm/inspector/Inspector.js +53 -15
  34. package/examples/jsm/inspector/RendererInspector.js +152 -36
  35. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +1 -1
  36. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -1
  37. package/examples/jsm/inspector/tabs/Console.js +200 -18
  38. package/examples/jsm/inspector/tabs/Memory.js +8 -0
  39. package/examples/jsm/inspector/tabs/Parameters.js +64 -4
  40. package/examples/jsm/inspector/tabs/Performance.js +21 -6
  41. package/examples/jsm/inspector/tabs/Settings.js +51 -9
  42. package/examples/jsm/inspector/tabs/Timeline.js +178 -93
  43. package/examples/jsm/inspector/tabs/Viewer.js +628 -16
  44. package/examples/jsm/inspector/ui/Graph.js +162 -25
  45. package/examples/jsm/inspector/ui/Item.js +92 -13
  46. package/examples/jsm/inspector/ui/List.js +1 -1
  47. package/examples/jsm/inspector/ui/Profiler.js +90 -45
  48. package/examples/jsm/inspector/ui/Style.js +1788 -1401
  49. package/examples/jsm/inspector/ui/Tab.js +5 -3
  50. package/examples/jsm/inspector/ui/Values.js +71 -6
  51. package/examples/jsm/inspector/ui/utils.js +130 -10
  52. package/examples/jsm/libs/basis/README.md +0 -1
  53. package/examples/jsm/libs/demuxer_mp4.js +3 -3
  54. package/examples/jsm/libs/draco/README.md +0 -1
  55. package/examples/jsm/libs/meshopt_clusterizer.module.js +421 -0
  56. package/examples/jsm/libs/meshopt_simplifier.module.js +627 -0
  57. package/examples/jsm/libs/mikktspace.module.js +34 -9
  58. package/examples/jsm/lighting/ClusteredLighting.js +55 -0
  59. package/examples/jsm/lighting/LightProbeGrid.js +106 -76
  60. package/examples/jsm/lines/LineMaterial.js +38 -15
  61. package/examples/jsm/lines/LineSegments2.js +8 -0
  62. package/examples/jsm/lines/webgpu/LineSegments2.js +8 -0
  63. package/examples/jsm/loaders/3DMLoader.js +1 -1
  64. package/examples/jsm/loaders/DRACOLoader.js +46 -13
  65. package/examples/jsm/loaders/EXRLoader.js +27 -55
  66. package/examples/jsm/loaders/HDRLoader.js +6 -28
  67. package/examples/jsm/loaders/KTX2Loader.js +31 -12
  68. package/examples/jsm/loaders/LDrawLoader.js +8 -8
  69. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  70. package/examples/jsm/loaders/LUTCubeLoader.js +2 -2
  71. package/examples/jsm/loaders/LWOLoader.js +4 -0
  72. package/examples/jsm/loaders/LottieLoader.js +1 -1
  73. package/examples/jsm/loaders/MaterialXLoader.js +31 -9
  74. package/examples/jsm/loaders/NRRDLoader.js +3 -3
  75. package/examples/jsm/loaders/PCDLoader.js +7 -7
  76. package/examples/jsm/loaders/PLYLoader.js +218 -55
  77. package/examples/jsm/loaders/SVGLoader.js +547 -495
  78. package/examples/jsm/loaders/TTFLoader.js +1 -1
  79. package/examples/jsm/loaders/USDLoader.js +33 -9
  80. package/examples/jsm/loaders/VRMLLoader.js +1 -1
  81. package/examples/jsm/loaders/usd/USDAParser.js +93 -20
  82. package/examples/jsm/loaders/usd/USDCParser.js +1 -1
  83. package/examples/jsm/loaders/usd/USDComposer.js +52 -19
  84. package/examples/jsm/misc/TileCreasedNormalsPlugin.js +270 -0
  85. package/examples/jsm/misc/Volume.js +2 -2
  86. package/examples/jsm/objects/GroundedSkybox.js +1 -1
  87. package/examples/jsm/objects/Reflector.js +2 -3
  88. package/examples/jsm/objects/Water2Mesh.js +1 -1
  89. package/examples/jsm/physics/AmmoPhysics.js +15 -8
  90. package/examples/jsm/physics/RapierPhysics.js +27 -2
  91. package/examples/jsm/shaders/VolumeShader.js +31 -44
  92. package/examples/jsm/transpiler/GLSLDecoder.js +6 -6
  93. package/examples/jsm/transpiler/Linker.js +1 -1
  94. package/examples/jsm/tsl/display/BloomNode.js +59 -19
  95. package/examples/jsm/tsl/display/DepthOfFieldNode.js +2 -2
  96. package/examples/jsm/tsl/display/FXAANode.js +11 -12
  97. package/examples/jsm/tsl/display/GTAONode.js +34 -13
  98. package/examples/jsm/tsl/display/GodraysNode.js +1 -1
  99. package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +560 -0
  100. package/examples/jsm/tsl/display/PixelationPassNode.js +2 -2
  101. package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +912 -0
  102. package/examples/jsm/tsl/display/SSAAPassNode.js +13 -25
  103. package/examples/jsm/tsl/display/SSGINode.js +89 -39
  104. package/examples/jsm/tsl/display/SSRNode.js +829 -132
  105. package/examples/jsm/tsl/display/SSSNode.js +2 -2
  106. package/examples/jsm/tsl/display/TemporalReprojectNode.js +1023 -0
  107. package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +622 -0
  108. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +1 -1
  109. package/examples/jsm/tsl/math/curlNoise.js +107 -0
  110. package/examples/jsm/tsl/shadows/TileShadowNode.js +1 -1
  111. package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +3 -3
  112. package/examples/jsm/tsl/utils/GroundedSkybox.js +62 -0
  113. package/examples/jsm/tsl/utils/RNoise.js +51 -0
  114. package/examples/jsm/tsl/utils/SpecularHelpers.js +325 -0
  115. package/examples/jsm/utils/BufferGeometryUtils.js +126 -59
  116. package/examples/jsm/utils/GeometryCompressionUtils.js +1 -1
  117. package/examples/jsm/utils/SceneOptimizer.js +1 -1
  118. package/examples/jsm/webxr/ARButton.js +1 -1
  119. package/examples/jsm/webxr/WebGLXRFallback.js +89 -0
  120. package/examples/jsm/webxr/XRControllerModelFactory.js +2 -2
  121. package/package.json +7 -7
  122. package/src/Three.TSL.js +10 -3
  123. package/src/Three.WebGPU.js +4 -0
  124. package/src/animation/AnimationAction.js +15 -11
  125. package/src/animation/AnimationClip.js +0 -139
  126. package/src/animation/KeyframeTrack.js +2 -2
  127. package/src/animation/PropertyBinding.js +2 -2
  128. package/src/cameras/Camera.js +2 -2
  129. package/src/cameras/StereoCamera.js +5 -2
  130. package/src/constants.js +1 -1
  131. package/src/core/BufferGeometry.js +29 -7
  132. package/src/core/Object3D.js +17 -7
  133. package/src/core/Raycaster.js +1 -1
  134. package/src/core/RenderTarget.js +15 -2
  135. package/src/extras/PMREMGenerator.js +6 -4
  136. package/src/extras/TextureUtils.js +1 -1
  137. package/src/extras/core/ShapePath.js +149 -160
  138. package/src/geometries/SphereGeometry.js +8 -3
  139. package/src/helpers/DirectionalLightHelper.js +2 -0
  140. package/src/helpers/HemisphereLightHelper.js +2 -0
  141. package/src/helpers/PointLightHelper.js +2 -0
  142. package/src/helpers/SpotLightHelper.js +1 -1
  143. package/src/loaders/DataTextureLoader.js +69 -38
  144. package/src/loaders/LoadingManager.js +5 -0
  145. package/src/loaders/MaterialLoader.js +36 -266
  146. package/src/loaders/ObjectLoader.js +3 -1
  147. package/src/materials/LineBasicMaterial.js +4 -0
  148. package/src/materials/Material.js +196 -1
  149. package/src/materials/MeshBasicMaterial.js +24 -0
  150. package/src/materials/MeshDepthMaterial.js +10 -0
  151. package/src/materials/MeshDistanceMaterial.js +10 -0
  152. package/src/materials/MeshLambertMaterial.js +40 -1
  153. package/src/materials/MeshMatcapMaterial.js +25 -1
  154. package/src/materials/MeshNormalMaterial.js +9 -1
  155. package/src/materials/MeshPhongMaterial.js +40 -1
  156. package/src/materials/MeshPhysicalMaterial.js +38 -0
  157. package/src/materials/MeshStandardMaterial.js +42 -1
  158. package/src/materials/MeshToonMaterial.js +34 -1
  159. package/src/materials/PointsMaterial.js +7 -0
  160. package/src/materials/ShaderMaterial.js +86 -0
  161. package/src/materials/SpriteMaterial.js +7 -0
  162. package/src/materials/nodes/Line2NodeMaterial.js +378 -322
  163. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  164. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  165. package/src/materials/nodes/MeshPhongNodeMaterial.js +0 -9
  166. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +0 -30
  167. package/src/materials/nodes/MeshSSSNodeMaterial.js +0 -13
  168. package/src/materials/nodes/MeshStandardNodeMaterial.js +0 -11
  169. package/src/materials/nodes/NodeMaterial.js +115 -71
  170. package/src/materials/nodes/SpriteNodeMaterial.js +0 -10
  171. package/src/materials/nodes/manager/NodeMaterialObserver.js +49 -20
  172. package/src/math/Box3.js +5 -0
  173. package/src/math/FrustumArray.js +103 -133
  174. package/src/math/Interpolant.js +1 -1
  175. package/src/math/MathUtils.js +2 -2
  176. package/src/math/Matrix3.js +11 -0
  177. package/src/math/Matrix4.js +28 -3
  178. package/src/math/Vector2.js +2 -2
  179. package/src/math/Vector3.js +2 -2
  180. package/src/math/Vector4.js +2 -2
  181. package/src/math/interpolants/BezierInterpolant.js +4 -6
  182. package/src/nodes/Nodes.js +2 -5
  183. package/src/nodes/TSL.js +8 -6
  184. package/src/nodes/accessors/Arrays.js +4 -4
  185. package/src/nodes/accessors/Batch.js +108 -0
  186. package/src/nodes/accessors/Bitangent.js +2 -2
  187. package/src/nodes/accessors/BufferAttributeNode.js +13 -2
  188. package/src/nodes/accessors/Camera.js +7 -7
  189. package/src/nodes/accessors/ClippingNode.js +1 -1
  190. package/src/nodes/accessors/Instance.js +264 -0
  191. package/src/nodes/accessors/MaterialNode.js +18 -2
  192. package/src/nodes/accessors/MaterialProperties.js +4 -3
  193. package/src/nodes/accessors/{MorphNode.js → Morph.js} +99 -112
  194. package/src/nodes/accessors/Normal.js +13 -13
  195. package/src/nodes/accessors/Position.js +5 -1
  196. package/src/nodes/accessors/ReferenceNode.js +1 -0
  197. package/src/nodes/accessors/ReflectVector.js +3 -3
  198. package/src/nodes/accessors/SceneProperties.js +1 -1
  199. package/src/nodes/accessors/Skinning.js +263 -0
  200. package/src/nodes/accessors/StorageBufferNode.js +2 -2
  201. package/src/nodes/accessors/StorageTexture3DNode.js +100 -0
  202. package/src/nodes/accessors/StorageTextureNode.js +39 -7
  203. package/src/nodes/accessors/Tangent.js +4 -4
  204. package/src/nodes/accessors/TextureNode.js +60 -5
  205. package/src/nodes/code/FunctionNode.js +2 -16
  206. package/src/nodes/core/MRTNode.js +7 -2
  207. package/src/nodes/core/Node.js +39 -2
  208. package/src/nodes/core/NodeBuilder.js +201 -41
  209. package/src/nodes/core/NodeUtils.js +13 -13
  210. package/src/nodes/core/OutputStructNode.js +1 -1
  211. package/src/nodes/core/OverrideContextNode.js +153 -0
  212. package/src/nodes/core/PropertyNode.js +51 -5
  213. package/src/nodes/core/StackNode.js +56 -34
  214. package/src/nodes/core/StructNode.js +4 -6
  215. package/src/nodes/core/StructTypeNode.js +6 -6
  216. package/src/nodes/core/VarNode.js +8 -0
  217. package/src/nodes/core/VaryingNode.js +12 -2
  218. package/src/nodes/display/BlendModes.js +1 -41
  219. package/src/nodes/display/BumpMapNode.js +6 -1
  220. package/src/nodes/display/ColorAdjustment.js +10 -9
  221. package/src/nodes/display/FrontFacingNode.js +38 -9
  222. package/src/nodes/display/NormalMapNode.js +2 -2
  223. package/src/nodes/display/PassNode.js +35 -43
  224. package/src/nodes/display/PremultiplyAlphaFunctions.js +39 -0
  225. package/src/nodes/display/RenderOutputNode.js +12 -3
  226. package/src/nodes/functions/VolumetricLightingModel.js +40 -7
  227. package/src/nodes/gpgpu/WorkgroupInfoNode.js +1 -1
  228. package/src/nodes/lighting/EnvironmentNode.js +2 -2
  229. package/src/nodes/lighting/IESSpotLightNode.js +40 -2
  230. package/src/nodes/lighting/LightingContextNode.js +10 -2
  231. package/src/nodes/lighting/LightsNode.js +90 -37
  232. package/src/nodes/lighting/PointShadowNode.js +6 -1
  233. package/src/nodes/lighting/ShadowFilterNode.js +21 -52
  234. package/src/nodes/lighting/ShadowNode.js +34 -14
  235. package/src/nodes/materialx/lib/mx_noise.js +2 -2
  236. package/src/nodes/math/ConditionalNode.js +3 -3
  237. package/src/nodes/math/MathNode.js +39 -11
  238. package/src/nodes/math/OperatorNode.js +23 -23
  239. package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
  240. package/src/nodes/pmrem/PMREMNode.js +33 -2
  241. package/src/nodes/tsl/TSLCore.js +63 -18
  242. package/src/nodes/utils/EquirectUV.js +30 -5
  243. package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
  244. package/src/nodes/utils/Packing.js +35 -4
  245. package/src/nodes/utils/RTTNode.js +40 -24
  246. package/src/nodes/utils/ReflectorNode.js +1 -0
  247. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  248. package/src/objects/BatchedMesh.js +22 -14
  249. package/src/objects/InstancedMesh.js +0 -11
  250. package/src/objects/Skeleton.js +0 -9
  251. package/src/renderers/WebGLRenderer.js +19 -15
  252. package/src/renderers/common/Backend.js +49 -5
  253. package/src/renderers/common/Bindings.js +114 -45
  254. package/src/renderers/common/Buffer.js +9 -0
  255. package/src/renderers/common/ClippingContext.js +10 -2
  256. package/src/renderers/common/Info.js +63 -22
  257. package/src/renderers/common/Lighting.js +53 -5
  258. package/src/renderers/common/RenderList.js +41 -4
  259. package/src/renderers/common/RenderObject.js +73 -13
  260. package/src/renderers/common/Renderer.js +281 -108
  261. package/src/renderers/common/Sampler.js +16 -48
  262. package/src/renderers/common/Textures.js +32 -5
  263. package/src/renderers/common/TimestampQueryPool.js +1 -1
  264. package/src/renderers/common/UniformsGroup.js +31 -9
  265. package/src/renderers/common/XRManager.js +340 -22
  266. package/src/renderers/common/extras/PMREMGenerator.js +15 -38
  267. package/src/renderers/common/nodes/NodeBuilderState.js +9 -1
  268. package/src/renderers/common/nodes/NodeLibrary.js +4 -4
  269. package/src/renderers/common/nodes/NodeManager.js +63 -14
  270. package/src/renderers/common/nodes/NodeUniformBuffer.js +13 -0
  271. package/src/renderers/shaders/ShaderChunk/common.glsl.js +13 -4
  272. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +0 -6
  273. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +1 -1
  274. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
  275. package/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js +1 -1
  276. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
  277. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +1 -1
  278. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -2
  279. package/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js +6 -0
  280. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +1 -1
  281. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  282. package/src/renderers/shaders/ShaderLib/distance.glsl.js +1 -1
  283. package/src/renderers/webgl/WebGLOutput.js +2 -1
  284. package/src/renderers/webgl/WebGLProgram.js +5 -4
  285. package/src/renderers/webgl/WebGLPrograms.js +12 -5
  286. package/src/renderers/webgl/WebGLRenderLists.js +9 -1
  287. package/src/renderers/webgl/WebGLShaderCache.js +5 -11
  288. package/src/renderers/webgl/WebGLTextures.js +20 -7
  289. package/src/renderers/webgl/WebGLUniformsGroups.js +66 -38
  290. package/src/renderers/webgl-fallback/WebGLBackend.js +84 -25
  291. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +138 -8
  292. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +1 -1
  293. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +52 -22
  294. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +4 -2
  295. package/src/renderers/webgpu/WebGPUBackend.js +480 -169
  296. package/src/renderers/webgpu/descriptors/GPUBindGroupDescriptor.js +48 -0
  297. package/src/renderers/webgpu/descriptors/GPUBufferDescriptor.js +57 -0
  298. package/src/renderers/webgpu/descriptors/GPUCommandEncoderDescriptor.js +30 -0
  299. package/src/renderers/webgpu/descriptors/GPUComputePassDescriptor.js +38 -0
  300. package/src/renderers/webgpu/descriptors/GPUComputePipelineDescriptor.js +48 -0
  301. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageDestInfo.js +47 -0
  302. package/src/renderers/webgpu/descriptors/GPUCopyExternalImageSourceInfo.js +50 -0
  303. package/src/renderers/webgpu/descriptors/GPUExtent3D.js +51 -0
  304. package/src/renderers/webgpu/descriptors/GPUPipelineLayoutDescriptor.js +39 -0
  305. package/src/renderers/webgpu/descriptors/GPUQuerySetDescriptor.js +47 -0
  306. package/src/renderers/webgpu/descriptors/GPURenderBundleEncoderDescriptor.js +74 -0
  307. package/src/renderers/webgpu/descriptors/GPURenderPassColorAttachment.js +72 -0
  308. package/src/renderers/webgpu/descriptors/GPURenderPassDepthStencilAttachment.js +99 -0
  309. package/src/renderers/webgpu/descriptors/GPURenderPassDescriptor.js +72 -0
  310. package/src/renderers/webgpu/descriptors/GPURenderPassTimestampWrites.js +49 -0
  311. package/src/renderers/webgpu/descriptors/GPURenderPipelineDescriptor.js +130 -0
  312. package/src/renderers/webgpu/descriptors/GPUSamplerDescriptor.js +119 -0
  313. package/src/renderers/webgpu/descriptors/GPUShaderModuleDescriptor.js +46 -0
  314. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferInfo.js +57 -0
  315. package/src/renderers/webgpu/descriptors/GPUTexelCopyBufferLayout.js +48 -0
  316. package/src/renderers/webgpu/descriptors/GPUTexelCopyTextureInfo.js +61 -0
  317. package/src/renderers/webgpu/descriptors/GPUTextureDescriptor.js +99 -0
  318. package/src/renderers/webgpu/descriptors/GPUTextureViewDescriptor.js +108 -0
  319. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +0 -1
  320. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +164 -7
  321. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +1 -1
  322. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +98 -38
  323. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +72 -68
  324. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +164 -69
  325. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +158 -95
  326. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +297 -141
  327. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +33 -18
  328. package/src/renderers/webgpu/utils/WebGPUUtils.js +38 -3
  329. package/src/textures/DepthTexture.js +1 -1
  330. package/src/textures/ExternalTexture.js +0 -3
  331. package/examples/fonts/LICENSE +0 -13
  332. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  333. package/examples/fonts/MPLUSRounded1c/OFL.txt +0 -91
  334. package/examples/fonts/README.md +0 -11
  335. package/examples/fonts/droid/NOTICE +0 -190
  336. package/examples/fonts/droid/README.txt +0 -18
  337. package/examples/fonts/droid/droid_sans_bold.typeface.json +0 -1
  338. package/examples/fonts/droid/droid_sans_mono_regular.typeface.json +0 -1
  339. package/examples/fonts/droid/droid_sans_regular.typeface.json +0 -1
  340. package/examples/fonts/droid/droid_serif_bold.typeface.json +0 -1
  341. package/examples/fonts/droid/droid_serif_regular.typeface.json +0 -1
  342. package/examples/fonts/gentilis_bold.typeface.json +0 -1
  343. package/examples/fonts/gentilis_regular.typeface.json +0 -1
  344. package/examples/fonts/helvetiker_bold.typeface.json +0 -1
  345. package/examples/fonts/helvetiker_regular.typeface.json +0 -1
  346. package/examples/fonts/optimer_bold.typeface.json +0 -1
  347. package/examples/fonts/optimer_regular.typeface.json +0 -1
  348. package/examples/fonts/ttf/README.md +0 -9
  349. package/examples/fonts/ttf/kenpixel.ttf +0 -0
  350. package/examples/jsm/inspector/extensions/extensions.json +0 -6
  351. package/examples/jsm/libs/ammo.wasm.js +0 -822
  352. package/examples/jsm/libs/ammo.wasm.wasm +0 -0
  353. package/examples/jsm/libs/draco/draco_encoder.js +0 -33
  354. package/examples/jsm/libs/draco/gltf/draco_encoder.js +0 -33
  355. package/examples/jsm/libs/lottie_canvas.module.js +0 -14849
  356. package/examples/jsm/libs/opentype.module.js +0 -14506
  357. package/examples/jsm/libs/rhino3dm/rhino3dm.js +0 -21
  358. package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +0 -16
  359. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  360. package/examples/jsm/lighting/TiledLighting.js +0 -42
  361. package/examples/jsm/tsl/display/AnamorphicNode.js +0 -293
  362. package/examples/jsm/tsl/lighting/TiledLightsNode.js +0 -442
  363. package/src/nodes/accessors/BatchNode.js +0 -163
  364. package/src/nodes/accessors/InstanceNode.js +0 -349
  365. package/src/nodes/accessors/InstancedMeshNode.js +0 -50
  366. package/src/nodes/accessors/SkinningNode.js +0 -328
@@ -0,0 +1,108 @@
1
+
2
+ import { normalLocal } from './Normal.js';
3
+ import { positionLocal } from './Position.js';
4
+ import { vec3, mat3, mat4, int, ivec2, float, Fn } from '../tsl/TSLBase.js';
5
+ import { textureLoad } from './TextureNode.js';
6
+ import { textureSize } from './TextureSizeNode.js';
7
+ import { tangentLocal } from './Tangent.js';
8
+ import { instanceIndex, drawIndex } from '../core/IndexNode.js';
9
+ import { varyingProperty } from '../core/PropertyNode.js';
10
+
11
+ /**
12
+ * TSL function that retrieves the batching color for a given instance ID from a colors texture.
13
+ *
14
+ * @param {Node<texture>} colorsTexture - The colors texture.
15
+ * @param {Node<int>} id - The instance or batch ID.
16
+ * @returns {Node<vec4>} The retrieved color.
17
+ */
18
+ const getBatchingColor = /*@__PURE__*/ Fn( ( [ colorsTexture, id ] ) => {
19
+
20
+ const size = int( textureSize( textureLoad( colorsTexture ), 0 ).x ).toConst();
21
+ const j = int( id );
22
+ const x = j.mod( size ).toConst();
23
+ const y = j.div( size ).toConst();
24
+ return textureLoad( colorsTexture, ivec2( x, y ) );
25
+
26
+ } );
27
+
28
+ /**
29
+ * TSL function that retrieves the indirect index for a given batch ID.
30
+ *
31
+ * @param {BatchedMesh} batchMesh - The batched mesh.
32
+ * @param {Node<int>} id - The draw or instance ID.
33
+ * @returns {Node<uint>} The indirect index.
34
+ */
35
+ const getIndirectIndex = /*@__PURE__*/ Fn( ( [ indirectTexture, id ] ) => {
36
+
37
+ const size = int( textureSize( textureLoad( indirectTexture ), 0 ).x ).toConst();
38
+ const x = int( id ).mod( size ).toConst();
39
+ const y = int( id ).div( size ).toConst();
40
+ return textureLoad( indirectTexture, ivec2( x, y ) ).x;
41
+
42
+ } );
43
+
44
+ /**
45
+ * TSL object representing a varying property for the batching color vector.
46
+ *
47
+ * @type {VaryingNode<vec4>}
48
+ */
49
+ export const batchColor = /*@__PURE__*/ varyingProperty( 'vec4', 'vBatchColor' );
50
+
51
+ /**
52
+ * TSL function representing the vertex shader batching setup.
53
+ * Applies the batch transformation matrix to positionLocal, normalLocal, and tangentLocal.
54
+ * Also assigns the batch color if a color texture is present.
55
+ *
56
+ * @tsl
57
+ * @function
58
+ * @param {BatchedMesh} batchMesh - The batched mesh.
59
+ */
60
+ export const batch = /*@__PURE__*/ Fn( ( [ batchMesh ], builder ) => {
61
+
62
+ const batchingIdNode = builder.getDrawIndex() === null ? instanceIndex : drawIndex;
63
+
64
+ const indirectId = getIndirectIndex( batchMesh._indirectTexture, int( batchingIdNode ) );
65
+
66
+ const matricesTexture = batchMesh._matricesTexture;
67
+
68
+ const size = int( textureSize( textureLoad( matricesTexture ), 0 ).x ).toConst();
69
+ const j = float( indirectId ).mul( 4 ).toInt().toConst();
70
+
71
+ const x = j.mod( size ).toConst();
72
+ const y = j.div( size ).toConst();
73
+ const batchingMatrix = mat4(
74
+ textureLoad( matricesTexture, ivec2( x, y ) ),
75
+ textureLoad( matricesTexture, ivec2( x.add( 1 ), y ) ),
76
+ textureLoad( matricesTexture, ivec2( x.add( 2 ), y ) ),
77
+ textureLoad( matricesTexture, ivec2( x.add( 3 ), y ) )
78
+ );
79
+
80
+ const colorsTexture = batchMesh._colorsTexture;
81
+
82
+ if ( colorsTexture !== null ) {
83
+
84
+ const color = getBatchingColor( colorsTexture, indirectId );
85
+
86
+ batchColor.assign( color );
87
+
88
+ }
89
+
90
+ const bm = mat3( batchingMatrix );
91
+
92
+ positionLocal.assign( batchingMatrix.mul( positionLocal ) );
93
+
94
+ const transformedNormal = normalLocal.div( vec3( bm[ 0 ].dot( bm[ 0 ] ), bm[ 1 ].dot( bm[ 1 ] ), bm[ 2 ].dot( bm[ 2 ] ) ) );
95
+
96
+ const batchingNormal = bm.mul( transformedNormal ).xyz;
97
+
98
+ normalLocal.assign( batchingNormal );
99
+
100
+ if ( builder.hasGeometryAttribute( 'tangent' ) ) {
101
+
102
+ tangentLocal.mulAssign( bm );
103
+
104
+ }
105
+
106
+ }, 'void' );
107
+
108
+
@@ -2,7 +2,7 @@ import { Fn } from '../tsl/TSLCore.js';
2
2
  import { normalGeometry, normalLocal, normalView, normalWorld } from './Normal.js';
3
3
  import { tangentGeometry, tangentLocal, tangentView, tangentWorld } from './Tangent.js';
4
4
  import { bitangentViewFrame } from './TangentUtils.js';
5
- import { directionToFaceDirection } from '../display/FrontFacingNode.js';
5
+ import { negateOnBackSide } from '../display/FrontFacingNode.js';
6
6
 
7
7
  /**
8
8
  * Returns the bitangent node and assigns it to a varying if the material is not flat shaded.
@@ -65,7 +65,7 @@ export const bitangentView = /*@__PURE__*/ ( Fn( ( builder ) => {
65
65
 
66
66
  if ( builder.isFlatShading() !== true ) {
67
67
 
68
- node = directionToFaceDirection( node );
68
+ node = negateOnBackSide( node );
69
69
 
70
70
  }
71
71
 
@@ -265,8 +265,11 @@ class BufferAttributeNode extends InputNode {
265
265
  generate( builder ) {
266
266
 
267
267
  const nodeType = this.getNodeType( builder );
268
+ const nodeName = builder.context.nodeName;
268
269
 
269
- const nodeAttribute = builder.getBufferAttributeFromNode( this, nodeType );
270
+ if ( nodeName !== undefined ) delete builder.context.nodeName; // deleting when consumed
271
+
272
+ const nodeAttribute = builder.getBufferAttributeFromNode( this, nodeType, nodeName );
270
273
  const propertyName = builder.getPropertyName( nodeAttribute );
271
274
 
272
275
  let output = null;
@@ -279,7 +282,15 @@ class BufferAttributeNode extends InputNode {
279
282
 
280
283
  } else {
281
284
 
282
- const nodeVarying = varying( this );
285
+ let varyingName;
286
+
287
+ if ( nodeName ) {
288
+
289
+ varyingName = nodeName + 'Varying';
290
+
291
+ }
292
+
293
+ const nodeVarying = varying( this, varyingName );
283
294
 
284
295
  output = nodeVarying.build( builder, nodeType );
285
296
 
@@ -83,7 +83,7 @@ export const cameraProjectionMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
83
83
 
84
84
  }
85
85
 
86
- cameraProjectionMatrix = _cameraProjectionMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraProjectionMatrix' );
86
+ cameraProjectionMatrix = _cameraProjectionMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex );
87
87
 
88
88
  } else {
89
89
 
@@ -131,7 +131,7 @@ export const cameraProjectionMatrixInverse = /*@__PURE__*/ ( Fn( ( { camera } )
131
131
 
132
132
  }
133
133
 
134
- cameraProjectionMatrixInverse = _cameraProjectionMatrixInverseArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraProjectionMatrixInverse' );
134
+ cameraProjectionMatrixInverse = _cameraProjectionMatrixInverseArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex );
135
135
 
136
136
  } else {
137
137
 
@@ -179,7 +179,7 @@ export const cameraViewMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
179
179
 
180
180
  }
181
181
 
182
- cameraViewMatrix = _cameraViewMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraViewMatrix' );
182
+ cameraViewMatrix = _cameraViewMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex );
183
183
 
184
184
  } else {
185
185
 
@@ -227,7 +227,7 @@ export const cameraWorldMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
227
227
 
228
228
  }
229
229
 
230
- cameraWorldMatrix = _cameraWorldMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraWorldMatrix' );
230
+ cameraWorldMatrix = _cameraWorldMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex );
231
231
 
232
232
  } else {
233
233
 
@@ -275,7 +275,7 @@ export const cameraNormalMatrix = /*@__PURE__*/ ( Fn( ( { camera } ) => {
275
275
 
276
276
  }
277
277
 
278
- cameraNormalMatrix = _cameraNormalMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraNormalMatrix' );
278
+ cameraNormalMatrix = _cameraNormalMatrixArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex );
279
279
 
280
280
  } else {
281
281
 
@@ -334,7 +334,7 @@ export const cameraPosition = /*@__PURE__*/ ( Fn( ( { camera } ) => {
334
334
 
335
335
  }
336
336
 
337
- cameraPosition = _cameraPositionArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex ).toConst( 'cameraPosition' );
337
+ cameraPosition = _cameraPositionArray.element( camera.isMultiViewCamera ? builtin( 'gl_ViewID_OVR' ) : cameraIndex );
338
338
 
339
339
  } else {
340
340
 
@@ -383,7 +383,7 @@ export const cameraViewport = /*@__PURE__*/ ( Fn( ( { camera } ) => {
383
383
 
384
384
  }
385
385
 
386
- cameraViewport = _cameraViewportArray.element( cameraIndex ).toConst( 'cameraViewport' );
386
+ cameraViewport = _cameraViewportArray.element( cameraIndex );
387
387
 
388
388
  } else {
389
389
 
@@ -57,7 +57,7 @@ class ClippingNode extends Node {
57
57
  const clippingContext = builder.clippingContext;
58
58
  const { intersectionPlanes, unionPlanes } = clippingContext;
59
59
 
60
- this.hardwareClipping = builder.material.hardwareClipping;
60
+ this.hardwareClipping = builder.hardwareClipping;
61
61
 
62
62
  if ( this.scope === ClippingNode.ALPHA_TO_COVERAGE ) {
63
63
 
@@ -0,0 +1,264 @@
1
+
2
+ import { vec3, mat4, Fn } from '../tsl/TSLBase.js';
3
+ import { OnFrameUpdate, OnObjectUpdate } from '../utils/EventNode.js';
4
+ import { normalLocal, transformNormal } from './Normal.js';
5
+ import { positionLocal, positionPrevious } from './Position.js';
6
+ import { varyingProperty } from '../core/PropertyNode.js';
7
+ import { instancedBufferAttribute, instancedDynamicBufferAttribute } from './BufferAttributeNode.js';
8
+ import { buffer } from './BufferNode.js';
9
+ import { storage } from './StorageBufferNode.js';
10
+ import { instanceIndex } from '../core/IndexNode.js';
11
+
12
+ import { InstancedInterleavedBuffer } from '../../core/InstancedInterleavedBuffer.js';
13
+ import { InstancedBufferAttribute } from '../../core/InstancedBufferAttribute.js';
14
+ import { DynamicDrawUsage } from '../../constants.js';
15
+
16
+ const _matrixBuffers = /*@__PURE__*/ new WeakMap();
17
+ const _colorBuffers = /*@__PURE__*/ new WeakMap();
18
+ const _previousInstanceMatrices = /*@__PURE__*/ new WeakMap();
19
+
20
+ /**
21
+ * Creates the appropriate node for instanced matrix transformations.
22
+ * Depending on buffer limits and storage capability, returns either a storage, buffer, or instanced interleaved attribute node.
23
+ *
24
+ * @param {NodeBuilder} builder - The current node builder.
25
+ * @param {InstancedBufferAttribute|StorageInstancedBufferAttribute} instanceMatrix - The matrix buffer attribute.
26
+ * @returns {Node} The matrix node.
27
+ */
28
+ function createInstanceMatrixNode( builder, instanceMatrix ) {
29
+
30
+ let instanceMatrixNode;
31
+ const matrixCount = Math.max( instanceMatrix.count, 1 );
32
+
33
+ const isStorageMatrix = instanceMatrix.isStorageInstancedBufferAttribute === true;
34
+
35
+ if ( isStorageMatrix ) {
36
+
37
+ instanceMatrixNode = storage( instanceMatrix, 'mat4', matrixCount ).element( instanceIndex );
38
+
39
+ } else {
40
+
41
+ const uniformBufferSize = matrixCount * 16 * 4;
42
+
43
+ if ( uniformBufferSize <= builder.getUniformBufferLimit() ) {
44
+
45
+ instanceMatrixNode = buffer( instanceMatrix.array, 'mat4', matrixCount ).element( instanceIndex );
46
+
47
+ } else {
48
+
49
+ let interleaved = _matrixBuffers.get( instanceMatrix );
50
+
51
+ if ( ! interleaved ) {
52
+
53
+ interleaved = new InstancedInterleavedBuffer( instanceMatrix.array, 16, 1 );
54
+ _matrixBuffers.set( instanceMatrix, interleaved );
55
+
56
+ }
57
+
58
+ const bufferFn = instanceMatrix.usage === DynamicDrawUsage ? instancedDynamicBufferAttribute : instancedBufferAttribute;
59
+
60
+ const instanceBuffers = [
61
+ bufferFn( interleaved, 'vec4', 16, 0 ),
62
+ bufferFn( interleaved, 'vec4', 16, 4 ),
63
+ bufferFn( interleaved, 'vec4', 16, 8 ),
64
+ bufferFn( interleaved, 'vec4', 16, 12 )
65
+ ];
66
+
67
+ instanceMatrixNode = mat4( ...instanceBuffers );
68
+
69
+ }
70
+
71
+ }
72
+
73
+ return instanceMatrixNode;
74
+
75
+ }
76
+
77
+ /**
78
+ * Retrieves or initializes the previous frame instance matrix node for motion vectors.
79
+ * Uses a WeakMap to cache previous frame instance matrices and their TSL nodes.
80
+ *
81
+ * @param {InstancedMesh} instancedMesh - The instanced mesh object.
82
+ * @param {InstancedBufferAttribute|StorageInstancedBufferAttribute} instanceMatrix - The current matrix buffer attribute.
83
+ * @param {NodeBuilder} builder - The current node builder.
84
+ * @returns {Node} The previous frame instance matrix node.
85
+ */
86
+ function getPreviousInstance( instancedMesh, instanceMatrix, builder ) {
87
+
88
+ let data = _previousInstanceMatrices.get( instancedMesh );
89
+
90
+ if ( data === undefined ) {
91
+
92
+ const previousInstanceMatrix = instanceMatrix.clone();
93
+
94
+ data = {
95
+ previousInstanceMatrix,
96
+ node: createInstanceMatrixNode( builder, previousInstanceMatrix )
97
+ };
98
+
99
+ _previousInstanceMatrices.set( instancedMesh, data );
100
+
101
+ }
102
+
103
+ return data.node;
104
+
105
+ }
106
+
107
+ /**
108
+ * TSL object representing a varying property for the instanced color vector.
109
+ *
110
+ * @type {VaryingNode<vec3>}
111
+ */
112
+ export const instanceColor = /*@__PURE__*/ varyingProperty( 'vec3', 'vInstanceColor' );
113
+
114
+ /**
115
+ * TSL function representing the standard instancing vertex shader setup.
116
+ * Transforms positionLocal and normalLocal, and assigns varying color in-place.
117
+ *
118
+ * @tsl
119
+ * @function
120
+ * @param {InstancedBufferAttribute|StorageInstancedBufferAttribute} matrices - The instanced transformation matrices.
121
+ * @param {?InstancedBufferAttribute|StorageInstancedBufferAttribute} [colors=null] - The optional instanced colors.
122
+ */
123
+ export const instance = /*@__PURE__*/ Fn( ( [ matrices, colors = null ], builder ) => {
124
+
125
+ const isStorageMatrix = matrices.isStorageInstancedBufferAttribute === true;
126
+ const isStorageColor = colors && colors.isStorageInstancedBufferAttribute === true;
127
+
128
+ const instanceMatrixNode = createInstanceMatrixNode( builder, matrices );
129
+
130
+ // interleaved buffer tracking for matrix
131
+ let interleavedMatrix = null;
132
+
133
+ if ( ! isStorageMatrix ) {
134
+
135
+ const uniformBufferSize = Math.max( matrices.count, 1 ) * 16 * 4;
136
+
137
+ if ( uniformBufferSize > builder.getUniformBufferLimit() ) {
138
+
139
+ interleavedMatrix = _matrixBuffers.get( matrices );
140
+
141
+ }
142
+
143
+ }
144
+
145
+ let instanceColorNode = null;
146
+ let interleavedColor = null;
147
+
148
+ if ( colors ) {
149
+
150
+ if ( isStorageColor ) {
151
+
152
+ instanceColorNode = storage( colors, 'vec3', Math.max( colors.count, 1 ) ).element( instanceIndex );
153
+
154
+ } else {
155
+
156
+ let bufferAttribute = _colorBuffers.get( colors );
157
+
158
+ if ( ! bufferAttribute ) {
159
+
160
+ bufferAttribute = new InstancedBufferAttribute( colors.array, 3 );
161
+ _colorBuffers.set( colors, bufferAttribute );
162
+
163
+ }
164
+
165
+ interleavedColor = bufferAttribute;
166
+
167
+ const bufferFn = colors.usage === DynamicDrawUsage ? instancedDynamicBufferAttribute : instancedBufferAttribute;
168
+
169
+ instanceColorNode = vec3( bufferFn( bufferAttribute, 'vec3', 3, 0 ) );
170
+
171
+ }
172
+
173
+ }
174
+
175
+ // Synchronization of dynamic buffer updates per frame
176
+ if ( interleavedMatrix !== null || interleavedColor !== null ) {
177
+
178
+ OnFrameUpdate( () => {
179
+
180
+ if ( interleavedMatrix !== null ) {
181
+
182
+ interleavedMatrix.clearUpdateRanges();
183
+ interleavedMatrix.updateRanges.push( ...matrices.updateRanges );
184
+
185
+ if ( matrices.version !== interleavedMatrix.version ) {
186
+
187
+ interleavedMatrix.version = matrices.version;
188
+
189
+ }
190
+
191
+ }
192
+
193
+ if ( colors && interleavedColor !== null ) {
194
+
195
+ interleavedColor.clearUpdateRanges();
196
+ interleavedColor.updateRanges.push( ...colors.updateRanges );
197
+
198
+ if ( colors.version !== interleavedColor.version ) {
199
+
200
+ interleavedColor.version = colors.version;
201
+
202
+ }
203
+
204
+ }
205
+
206
+ } );
207
+
208
+ }
209
+
210
+ // POSITION
211
+
212
+ const instancePosition = instanceMatrixNode.mul( positionLocal ).xyz;
213
+ positionLocal.assign( instancePosition );
214
+
215
+ if ( builder.needsPreviousData() ) {
216
+
217
+ const instancedMesh = builder.object;
218
+
219
+ OnObjectUpdate( ( { object } ) => {
220
+
221
+ const previousInstanceData = _previousInstanceMatrices.get( object );
222
+
223
+ previousInstanceData.previousInstanceMatrix.array.set( matrices.array );
224
+
225
+ } );
226
+
227
+ const previousInstanceMatrixNode = getPreviousInstance( instancedMesh, matrices, builder );
228
+ positionPrevious.assign( previousInstanceMatrixNode.mul( positionPrevious ).xyz );
229
+
230
+ }
231
+
232
+ // NORMAL
233
+
234
+ if ( builder.hasGeometryAttribute( 'normal' ) ) {
235
+
236
+ const instanceNormal = transformNormal( normalLocal, instanceMatrixNode );
237
+ normalLocal.assign( instanceNormal );
238
+
239
+ }
240
+
241
+ // COLOR
242
+
243
+ if ( instanceColorNode !== null ) {
244
+
245
+ instanceColor.assign( instanceColorNode );
246
+
247
+ }
248
+
249
+ }, 'void' );
250
+
251
+ /**
252
+ * TSL wrapper for applying instanced mesh rendering setup.
253
+ *
254
+ * @tsl
255
+ * @function
256
+ * @param {InstancedMesh} instancedMesh - The instanced mesh.
257
+ */
258
+ export const instancedMesh = /*@__PURE__*/ Fn( ( [ instancedMesh ] ) => {
259
+
260
+ const { instanceMatrix, instanceColor } = instancedMesh;
261
+
262
+ instance( instanceMatrix, instanceColor );
263
+
264
+ }, 'void' );
@@ -388,11 +388,27 @@ class MaterialNode extends Node {
388
388
 
389
389
  } else if ( scope === MaterialNode.LIGHT_MAP ) {
390
390
 
391
- node = this.getTexture( scope ).rgb.mul( this.getFloat( 'lightMapIntensity' ) );
391
+ if ( material.lightMap ) {
392
+
393
+ node = this.getTexture( scope ).rgb.mul( this.getFloat( 'lightMapIntensity' ) );
394
+
395
+ } else {
396
+
397
+ node = vec3( 0.0 );
398
+
399
+ }
392
400
 
393
401
  } else if ( scope === MaterialNode.AO ) {
394
402
 
395
- node = this.getTexture( scope ).r.sub( 1.0 ).mul( this.getFloat( 'aoMapIntensity' ) ).add( 1.0 );
403
+ if ( material.aoMap ) {
404
+
405
+ node = this.getTexture( scope ).r.sub( 1.0 ).mul( this.getFloat( 'aoMapIntensity' ) ).add( 1.0 );
406
+
407
+ } else {
408
+
409
+ node = float( 1.0 );
410
+
411
+ }
396
412
 
397
413
  } else if ( scope === MaterialNode.LINE_DASH_OFFSET ) {
398
414
 
@@ -26,8 +26,8 @@ export const materialEnvIntensity = /*@__PURE__*/ uniform( 1 ).onReference( ( {
26
26
 
27
27
  /**
28
28
  * TSL object that represents the rotation of environment maps.
29
- * When `material.envMap` is set, the value is `material.envMapRotation`. `scene.environmentRotation` controls the
30
- * rotation of `scene.environment` instead.
29
+ * When `material.envMap` is set, the value is `material.envMapRotation`.
30
+ * `scene.environmentRotation` controls the rotation of `scene.environment` or `scene.environmentNode` instead.
31
31
  *
32
32
  * @tsl
33
33
  * @type {Node<mat4>}
@@ -38,7 +38,8 @@ export const materialEnvRotation = /*@__PURE__*/ uniform( new Matrix4() ).onRefe
38
38
 
39
39
  } ).onObjectUpdate( function ( { material, scene } ) {
40
40
 
41
- const rotation = ( scene.environment !== null && material.envMap === null ) ? scene.environmentRotation : material.envMapRotation;
41
+ const hasSceneEnvironment = ( scene.environment !== null ) || ( scene.environmentNode && scene.environmentNode.isNode );
42
+ const rotation = ( hasSceneEnvironment && material.envMap === null ) ? scene.environmentRotation : material.envMapRotation;
42
43
 
43
44
  if ( rotation ) {
44
45