super-three 0.152.0 → 0.154.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 (339) hide show
  1. package/build/three.cjs +779 -557
  2. package/build/three.js +779 -557
  3. package/build/three.min.js +2 -1
  4. package/build/three.module.js +770 -539
  5. package/build/three.module.min.js +2 -1
  6. package/examples/jsm/cameras/CinematicCamera.js +1 -2
  7. package/examples/jsm/capabilities/WebGPU.js +15 -1
  8. package/examples/jsm/controls/ArcballControls.js +2 -1
  9. package/examples/jsm/controls/FlyControls.js +25 -9
  10. package/examples/jsm/controls/OrbitControls.js +5 -1
  11. package/examples/jsm/csm/CSM.js +1 -3
  12. package/examples/jsm/effects/AnaglyphEffect.js +6 -20
  13. package/examples/jsm/effects/OutlineEffect.js +1 -1
  14. package/examples/jsm/effects/ParallaxBarrierEffect.js +3 -0
  15. package/examples/jsm/environments/RoomEnvironment.js +6 -2
  16. package/examples/jsm/exporters/GLTFExporter.js +74 -2
  17. package/examples/jsm/exporters/USDZExporter.js +170 -129
  18. package/examples/jsm/helpers/ViewHelper.js +1 -1
  19. package/examples/jsm/lines/LineMaterial.js +1 -1
  20. package/examples/jsm/loaders/3DMLoader.js +1 -1
  21. package/examples/jsm/loaders/3MFLoader.js +5 -1
  22. package/examples/jsm/loaders/AMFLoader.js +5 -1
  23. package/examples/jsm/loaders/ColladaLoader.js +4 -1
  24. package/examples/jsm/loaders/DRACOLoader.js +2 -0
  25. package/examples/jsm/loaders/FBXLoader.js +9 -2
  26. package/examples/jsm/loaders/GLTFLoader.js +230 -94
  27. package/examples/jsm/loaders/KTX2Loader.js +106 -47
  28. package/examples/jsm/loaders/LDrawLoader.js +4 -7
  29. package/examples/jsm/loaders/MMDLoader.js +40 -13
  30. package/examples/jsm/loaders/PCDLoader.js +25 -10
  31. package/examples/jsm/loaders/PDBLoader.js +7 -2
  32. package/examples/jsm/loaders/PLYLoader.js +30 -8
  33. package/examples/jsm/loaders/STLLoader.js +8 -3
  34. package/examples/jsm/loaders/VRMLLoader.js +55 -7
  35. package/examples/jsm/loaders/VTKLoader.js +12 -4
  36. package/examples/jsm/loaders/XYZLoader.js +9 -3
  37. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -2
  38. package/examples/jsm/math/Lut.js +5 -4
  39. package/examples/jsm/math/MeshSurfaceSampler.js +82 -37
  40. package/examples/jsm/misc/GPUComputationRenderer.js +1 -0
  41. package/examples/jsm/misc/VolumeSlice.js +3 -1
  42. package/examples/jsm/nodes/Nodes.js +22 -16
  43. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +99 -0
  44. package/examples/jsm/nodes/accessors/BufferNode.js +2 -2
  45. package/examples/jsm/nodes/accessors/CameraNode.js +25 -4
  46. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +7 -1
  47. package/examples/jsm/nodes/accessors/InstanceNode.js +29 -12
  48. package/examples/jsm/nodes/accessors/MaterialNode.js +55 -47
  49. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +2 -2
  50. package/examples/jsm/nodes/accessors/ModelNode.js +3 -1
  51. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +4 -9
  52. package/examples/jsm/nodes/accessors/MorphNode.js +70 -0
  53. package/examples/jsm/nodes/accessors/NormalNode.js +3 -2
  54. package/examples/jsm/nodes/accessors/Object3DNode.js +10 -2
  55. package/examples/jsm/nodes/accessors/ReferenceNode.js +2 -2
  56. package/examples/jsm/nodes/accessors/SceneNode.js +46 -0
  57. package/examples/jsm/nodes/accessors/SkinningNode.js +43 -62
  58. package/examples/jsm/nodes/accessors/StorageBufferNode.js +2 -2
  59. package/examples/jsm/nodes/accessors/TangentNode.js +2 -2
  60. package/examples/jsm/nodes/accessors/TextureBicubicNode.js +94 -0
  61. package/examples/jsm/nodes/accessors/TextureNode.js +68 -6
  62. package/examples/jsm/nodes/accessors/TextureSizeNode.js +35 -0
  63. package/examples/jsm/nodes/accessors/UVNode.js +1 -1
  64. package/examples/jsm/nodes/code/CodeNode.js +3 -0
  65. package/examples/jsm/nodes/code/FunctionNode.js +25 -4
  66. package/examples/jsm/nodes/core/AttributeNode.js +1 -1
  67. package/examples/jsm/nodes/core/BypassNode.js +2 -2
  68. package/examples/jsm/nodes/core/ContextNode.js +2 -0
  69. package/examples/jsm/nodes/core/IndexNode.js +66 -0
  70. package/examples/jsm/nodes/core/LightingModel.js +2 -1
  71. package/examples/jsm/nodes/core/Node.js +13 -16
  72. package/examples/jsm/nodes/core/NodeAttribute.js +2 -1
  73. package/examples/jsm/nodes/core/NodeBuilder.js +86 -8
  74. package/examples/jsm/nodes/core/NodeUtils.js +10 -0
  75. package/examples/jsm/nodes/core/PropertyNode.js +6 -2
  76. package/examples/jsm/nodes/core/StackNode.js +8 -1
  77. package/examples/jsm/nodes/core/UniformNode.js +1 -1
  78. package/examples/jsm/nodes/core/VarNode.js +1 -3
  79. package/examples/jsm/nodes/display/BlendModeNode.js +9 -9
  80. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +7 -7
  81. package/examples/jsm/nodes/display/ColorSpaceNode.js +50 -49
  82. package/examples/jsm/nodes/display/NormalMapNode.js +3 -3
  83. package/examples/jsm/nodes/display/ToneMappingNode.js +24 -15
  84. package/examples/jsm/nodes/display/ViewportDepthNode.js +69 -0
  85. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +34 -0
  86. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +7 -6
  87. package/examples/jsm/nodes/display/ViewportTextureNode.js +33 -19
  88. package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +5 -5
  89. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +10 -8
  90. package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  91. package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +43 -0
  92. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +4 -4
  93. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +2 -2
  94. package/examples/jsm/nodes/functions/BSDF/EnvironmentBRDF.js +13 -0
  95. package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +2 -4
  96. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  97. package/examples/jsm/nodes/functions/PhongLightingModel.js +7 -7
  98. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +132 -19
  99. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +2 -2
  100. package/examples/jsm/nodes/functions/material/getRoughness.js +3 -3
  101. package/examples/jsm/nodes/geometry/RangeNode.js +33 -51
  102. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +6 -3
  103. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -2
  104. package/examples/jsm/nodes/lighting/EnvironmentNode.js +107 -62
  105. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +2 -2
  106. package/examples/jsm/nodes/lighting/LightUtils.js +2 -2
  107. package/examples/jsm/nodes/lighting/LightingContextNode.js +17 -15
  108. package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
  109. package/examples/jsm/nodes/lighting/SpotLightNode.js +3 -3
  110. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -15
  111. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -15
  112. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -10
  113. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -9
  114. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +41 -0
  115. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +1 -14
  116. package/examples/jsm/nodes/materials/NodeMaterial.js +119 -29
  117. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -9
  118. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
  119. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +3 -3
  120. package/examples/jsm/nodes/materialx/lib/mx_noise.js +14 -14
  121. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +4 -4
  122. package/examples/jsm/nodes/math/MathNode.js +6 -0
  123. package/examples/jsm/nodes/math/OperatorNode.js +1 -1
  124. package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
  125. package/examples/jsm/nodes/shadernode/ShaderNode.js +60 -33
  126. package/examples/jsm/nodes/utils/EquirectUVNode.js +2 -3
  127. package/examples/jsm/nodes/utils/LoopNode.js +186 -0
  128. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +1 -1
  129. package/examples/jsm/objects/GroundProjectedSkybox.js +1 -1
  130. package/examples/jsm/objects/Lensflare.js +3 -4
  131. package/examples/jsm/objects/MarchingCubes.js +5 -1
  132. package/examples/jsm/objects/Reflector.js +4 -1
  133. package/examples/jsm/objects/Refractor.js +1 -1
  134. package/examples/jsm/objects/Sky.js +1 -1
  135. package/examples/jsm/objects/Water.js +2 -1
  136. package/examples/jsm/objects/Water2.js +1 -1
  137. package/examples/jsm/offscreen/scene.js +1 -0
  138. package/examples/jsm/physics/RapierPhysics.js +93 -133
  139. package/examples/jsm/postprocessing/AfterimagePass.js +3 -0
  140. package/examples/jsm/postprocessing/BloomPass.js +7 -2
  141. package/examples/jsm/postprocessing/BokehPass.js +3 -2
  142. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  143. package/examples/jsm/postprocessing/EffectComposer.js +4 -1
  144. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  145. package/examples/jsm/postprocessing/OutlinePass.js +8 -9
  146. package/examples/jsm/postprocessing/OutputPass.js +72 -0
  147. package/examples/jsm/postprocessing/RenderPixelatedPass.js +4 -3
  148. package/examples/jsm/postprocessing/SAOPass.js +4 -2
  149. package/examples/jsm/postprocessing/SMAAPass.js +5 -2
  150. package/examples/jsm/postprocessing/SSAARenderPass.js +5 -13
  151. package/examples/jsm/postprocessing/SSAOPass.js +4 -2
  152. package/examples/jsm/postprocessing/SSRPass.js +3 -1
  153. package/examples/jsm/postprocessing/SavePass.js +5 -2
  154. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  155. package/examples/jsm/postprocessing/TAARenderPass.js +17 -4
  156. package/examples/jsm/postprocessing/TexturePass.js +2 -1
  157. package/examples/jsm/postprocessing/UnrealBloomPass.js +13 -13
  158. package/examples/jsm/renderers/{webgpu/WebGPUAnimation.js → common/Animation.js} +2 -2
  159. package/examples/jsm/renderers/common/Attributes.js +75 -0
  160. package/examples/jsm/renderers/common/Backend.js +162 -0
  161. package/examples/jsm/renderers/common/Background.js +134 -0
  162. package/examples/jsm/renderers/common/Binding.js +11 -0
  163. package/examples/jsm/renderers/common/Bindings.js +169 -0
  164. package/examples/jsm/renderers/common/Buffer.js +38 -0
  165. package/examples/jsm/renderers/{webgpu/WebGPUBufferUtils.js → common/BufferUtils.js} +2 -2
  166. package/examples/jsm/renderers/{webgpu/WebGPUWeakMap.js → common/ChainMap.js} +11 -5
  167. package/examples/jsm/renderers/common/ComputePipeline.js +17 -0
  168. package/examples/jsm/renderers/common/Constants.js +14 -0
  169. package/examples/jsm/renderers/common/CubeRenderTarget.js +65 -0
  170. package/examples/jsm/renderers/common/DataMap.js +54 -0
  171. package/examples/jsm/renderers/{webgpu/WebGPUGeometries.js → common/Geometries.js} +38 -37
  172. package/examples/jsm/renderers/{webgpu/WebGPUInfo.js → common/Info.js} +2 -3
  173. package/examples/jsm/renderers/common/Pipeline.js +13 -0
  174. package/examples/jsm/renderers/common/Pipelines.js +321 -0
  175. package/examples/jsm/renderers/common/ProgrammableStage.js +18 -0
  176. package/examples/jsm/renderers/common/RenderContext.js +37 -0
  177. package/examples/jsm/renderers/common/RenderContexts.js +38 -0
  178. package/examples/jsm/renderers/{webgpu/WebGPURenderLists.js → common/RenderList.js} +2 -39
  179. package/examples/jsm/renderers/common/RenderLists.js +38 -0
  180. package/examples/jsm/renderers/common/RenderObject.js +113 -0
  181. package/examples/jsm/renderers/common/RenderObjects.js +92 -0
  182. package/examples/jsm/renderers/common/RenderPipeline.js +16 -0
  183. package/examples/jsm/renderers/{webgpu/WebGPURenderTarget.js → common/RenderTarget.js} +2 -2
  184. package/examples/jsm/renderers/common/Renderer.js +864 -0
  185. package/examples/jsm/renderers/common/SampledTexture.js +80 -0
  186. package/examples/jsm/renderers/common/Sampler.js +18 -0
  187. package/examples/jsm/renderers/common/StorageBuffer.js +17 -0
  188. package/examples/jsm/renderers/common/Textures.js +206 -0
  189. package/examples/jsm/renderers/{webgpu/WebGPUUniform.js → common/Uniform.js} +13 -9
  190. package/examples/jsm/renderers/common/UniformBuffer.js +15 -0
  191. package/examples/jsm/renderers/{webgpu/WebGPUUniformsGroup.js → common/UniformsGroup.js} +13 -13
  192. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodes.js → common/nodes/NodeRender.js} +3 -3
  193. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampledTexture.js → common/nodes/NodeSampledTexture.js} +4 -4
  194. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampler.js → common/nodes/NodeSampler.js} +3 -3
  195. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeUniform.js → common/nodes/NodeUniform.js} +1 -1
  196. package/examples/jsm/renderers/common/nodes/Nodes.js +319 -0
  197. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +340 -0
  198. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +23 -19
  199. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +847 -0
  200. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +15 -1131
  201. package/examples/jsm/renderers/webgpu/nodes/{WebGPUNodeBuilder.js → WGSLNodeBuilder.js} +75 -45
  202. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeFunction.js +2 -2
  203. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeParser.js +1 -1
  204. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +255 -0
  205. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +145 -0
  206. package/examples/jsm/renderers/webgpu/{constants.js → utils/WebGPUConstants.js} +6 -7
  207. package/examples/jsm/renderers/webgpu/{WebGPURenderPipeline.js → utils/WebGPUPipelineUtils.js} +154 -247
  208. package/examples/jsm/renderers/webgpu/{WebGPUTextureUtils.js → utils/WebGPUTextureMipmapUtils.js} +3 -25
  209. package/examples/jsm/renderers/webgpu/{WebGPUTextures.js → utils/WebGPUTextureUtils.js} +392 -505
  210. package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +92 -0
  211. package/examples/jsm/shaders/BleachBypassShader.js +2 -0
  212. package/examples/jsm/shaders/BlendShader.js +1 -2
  213. package/examples/jsm/shaders/BokehShader2.js +3 -0
  214. package/examples/jsm/shaders/ColorifyShader.js +2 -0
  215. package/examples/jsm/shaders/ConvolutionShader.js +2 -0
  216. package/examples/jsm/shaders/CopyShader.js +4 -2
  217. package/examples/jsm/shaders/DotScreenShader.js +2 -0
  218. package/examples/jsm/shaders/ExposureShader.js +44 -0
  219. package/examples/jsm/shaders/FilmShader.js +2 -0
  220. package/examples/jsm/shaders/GammaCorrectionShader.js +2 -0
  221. package/examples/jsm/shaders/HorizontalBlurShader.js +2 -0
  222. package/examples/jsm/shaders/OutputShader.js +61 -0
  223. package/examples/jsm/shaders/RGBShiftShader.js +2 -0
  224. package/examples/jsm/shaders/SepiaShader.js +2 -0
  225. package/examples/jsm/shaders/ToonShader.js +13 -5
  226. package/examples/jsm/shaders/VerticalBlurShader.js +2 -0
  227. package/examples/jsm/shaders/VignetteShader.js +2 -0
  228. package/examples/jsm/shaders/WaterRefractionShader.js +5 -2
  229. package/examples/jsm/utils/BufferGeometryUtils.js +17 -1
  230. package/examples/jsm/utils/TextureUtils.js +86 -0
  231. package/examples/jsm/webxr/OculusHandPointerModel.js +34 -13
  232. package/examples/jsm/webxr/XRHandPrimitiveModel.js +1 -0
  233. package/examples/jsm/webxr/XRPlanes.js +100 -0
  234. package/package.json +3 -1
  235. package/src/Three.Legacy.js +0 -228
  236. package/src/audio/PositionalAudio.js +8 -0
  237. package/src/cameras/Camera.js +5 -0
  238. package/src/cameras/CubeCamera.js +76 -13
  239. package/src/cameras/OrthographicCamera.js +1 -1
  240. package/src/cameras/PerspectiveCamera.js +1 -1
  241. package/src/constants.js +13 -1
  242. package/src/core/BufferAttribute.js +3 -25
  243. package/src/core/BufferGeometry.js +1 -8
  244. package/src/core/Object3D.js +1 -1
  245. package/src/extras/core/Curve.js +1 -1
  246. package/src/loaders/CubeTextureLoader.js +2 -0
  247. package/src/loaders/Loader.js +2 -0
  248. package/src/loaders/MaterialLoader.js +5 -0
  249. package/src/loaders/ObjectLoader.js +1 -0
  250. package/src/materials/Material.js +13 -1
  251. package/src/materials/MeshPhysicalMaterial.js +32 -6
  252. package/src/math/Color.js +16 -11
  253. package/src/math/Frustum.js +16 -2
  254. package/src/math/MathUtils.js +16 -0
  255. package/src/math/Matrix3.js +26 -6
  256. package/src/math/Matrix4.js +74 -19
  257. package/src/objects/InstancedMesh.js +3 -0
  258. package/src/objects/Mesh.js +14 -10
  259. package/src/objects/Skeleton.js +1 -3
  260. package/src/objects/SkinnedMesh.js +36 -8
  261. package/src/renderers/WebGLRenderer.js +126 -21
  262. package/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js +7 -0
  263. package/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js +68 -0
  264. package/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js +6 -0
  265. package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -0
  266. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +26 -3
  267. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +9 -1
  268. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +26 -0
  269. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -2
  270. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +10 -2
  271. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +1 -1
  272. package/src/renderers/shaders/ShaderChunk/{output_fragment.glsl.js → opaque_fragment.glsl.js} +1 -2
  273. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  274. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +3 -3
  275. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +10 -5
  276. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +6 -1
  277. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +7 -1
  278. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +6 -1
  279. package/src/renderers/shaders/ShaderChunk.js +10 -6
  280. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  281. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -1
  282. package/src/renderers/shaders/ShaderLib/cube.glsl.js +1 -1
  283. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  284. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  285. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -1
  286. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -2
  287. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +4 -2
  288. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +4 -2
  289. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +4 -2
  290. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +4 -2
  291. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +12 -2
  292. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +4 -2
  293. package/src/renderers/shaders/ShaderLib/points.glsl.js +4 -2
  294. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  295. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +4 -2
  296. package/src/renderers/shaders/ShaderLib.js +4 -1
  297. package/src/renderers/shaders/UniformsLib.js +2 -0
  298. package/src/renderers/webgl/WebGLBindingStates.js +13 -5
  299. package/src/renderers/webgl/WebGLGeometries.js +12 -0
  300. package/src/renderers/webgl/WebGLInfo.js +0 -1
  301. package/src/renderers/webgl/WebGLMaterials.js +18 -0
  302. package/src/renderers/webgl/WebGLObjects.js +23 -3
  303. package/src/renderers/webgl/WebGLProgram.js +43 -5
  304. package/src/renderers/webgl/WebGLPrograms.js +19 -7
  305. package/src/renderers/webgl/WebGLTextures.js +19 -1
  306. package/src/renderers/webvr/WebVRManager.js +12 -0
  307. package/src/renderers/webxr/WebXRManager.js +39 -99
  308. package/src/scenes/Scene.js +0 -14
  309. package/src/textures/DepthTexture.js +22 -0
  310. package/src/textures/FramebufferTexture.js +1 -3
  311. package/src/textures/Source.js +4 -0
  312. package/src/textures/Texture.js +1 -1
  313. package/examples/jsm/exporters/ColladaExporter.js +0 -725
  314. package/examples/jsm/geometries/LightningStrike.js +0 -1017
  315. package/examples/jsm/loaders/PRWMLoader.js +0 -299
  316. package/examples/jsm/nodes/core/InstanceIndexNode.js +0 -26
  317. package/examples/jsm/objects/LightningStorm.js +0 -245
  318. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +0 -361
  319. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +0 -197
  320. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +0 -190
  321. package/examples/jsm/renderers/webgpu/WebGPUBinding.js +0 -22
  322. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +0 -270
  323. package/examples/jsm/renderers/webgpu/WebGPUBuffer.js +0 -43
  324. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +0 -78
  325. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +0 -22
  326. package/examples/jsm/renderers/webgpu/WebGPUProperties.js +0 -44
  327. package/examples/jsm/renderers/webgpu/WebGPURenderObject.js +0 -40
  328. package/examples/jsm/renderers/webgpu/WebGPURenderObjects.js +0 -50
  329. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +0 -274
  330. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +0 -54
  331. package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +0 -75
  332. package/examples/jsm/renderers/webgpu/WebGPUSampler.js +0 -29
  333. package/examples/jsm/renderers/webgpu/WebGPUStorageBuffer.js +0 -20
  334. package/examples/jsm/renderers/webgpu/WebGPUTextureRenderer.js +0 -38
  335. package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +0 -18
  336. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +0 -88
  337. package/examples/jsm/shaders/ToneMapShader.js +0 -73
  338. /package/src/renderers/shaders/ShaderChunk/{encodings_fragment.glsl.js → colorspace_fragment.glsl.js} +0 -0
  339. /package/src/renderers/shaders/ShaderChunk/{encodings_pars_fragment.glsl.js → colorspace_pars_fragment.glsl.js} +0 -0
@@ -1,8 +1,6 @@
1
1
  import Node, { addNodeClass } from '../core/Node.js';
2
- import { uniform } from '../core/UniformNode.js';
3
2
  import { materialReference } from './MaterialReferenceNode.js';
4
- import { uv } from './UVNode.js';
5
- import { nodeImmutable, vec3 } from '../shadernode/ShaderNode.js';
3
+ import { nodeImmutable } from '../shadernode/ShaderNode.js';
6
4
 
7
5
  class MaterialNode extends Node {
8
6
 
@@ -27,15 +25,11 @@ class MaterialNode extends Node {
27
25
 
28
26
  return 'float';
29
27
 
30
- } else if ( scope === MaterialNode.UV ) {
31
-
32
- return 'vec2';
33
-
34
- } else if ( scope === MaterialNode.EMISSIVE ) {
28
+ } else if ( scope === MaterialNode.EMISSIVE || scope === MaterialNode.SHEEN ) {
35
29
 
36
30
  return 'vec3';
37
31
 
38
- } else if ( scope === MaterialNode.ROUGHNESS || scope === MaterialNode.METALNESS || scope === MaterialNode.SPECULAR || scope === MaterialNode.SHININESS ) {
32
+ } else if ( scope === MaterialNode.ROUGHNESS || scope === MaterialNode.METALNESS || scope === MaterialNode.SPECULAR || scope === MaterialNode.SHININESS || scope === MaterialNode.CLEARCOAT_ROUGHNESS || scope === MaterialNode.SHEEN_ROUGHNESS ) {
39
33
 
40
34
  return 'float';
41
35
 
@@ -64,7 +58,6 @@ class MaterialNode extends Node {
64
58
  //@TODO: Check if it can be cached by property name.
65
59
 
66
60
  const textureRefNode = materialReference( property, 'texture' );
67
- textureRefNode.node.uvNode = materialUV;
68
61
 
69
62
  return textureRefNode;
70
63
 
@@ -173,59 +166,68 @@ class MaterialNode extends Node {
173
166
 
174
167
  }
175
168
 
176
- } else if ( scope === MaterialNode.ROTATION ) {
169
+ } else if ( scope === MaterialNode.CLEARCOAT ) {
177
170
 
178
- node = this.getFloat( 'rotation' );
171
+ const clearcoatNode = this.getFloat( 'clearcoat' );
172
+
173
+ if ( material.clearcoatMap && material.clearcoatMap.isTexture === true ) {
174
+
175
+ node = clearcoatNode.mul( this.getTexture( 'clearcoatMap' ).r );
176
+
177
+ } else {
178
+
179
+ node = clearcoatNode;
180
+
181
+ }
182
+
183
+ } else if ( scope === MaterialNode.CLEARCOAT_ROUGHNESS ) {
184
+
185
+ const clearcoatRoughnessNode = this.getFloat( 'clearcoatRoughness' );
179
186
 
180
- } else if ( scope === MaterialNode.UV ) {
187
+ if ( material.clearcoatRoughnessMap && material.clearcoatRoughnessMap.isTexture === true ) {
181
188
 
182
- // uv repeat and offset setting priorities
189
+ node = clearcoatRoughnessNode.mul( this.getTexture( 'clearcoatRoughnessMap' ).r );
183
190
 
184
- let uvScaleMap =
185
- material.map ||
186
- material.specularMap ||
187
- material.displacementMap ||
188
- material.normalMap ||
189
- material.bumpMap ||
190
- material.roughnessMap ||
191
- material.metalnessMap ||
192
- material.alphaMap ||
193
- material.emissiveMap ||
194
- material.clearcoatMap ||
195
- material.clearcoatNormalMap ||
196
- material.clearcoatRoughnessMap ||
197
- material.iridescenceMap ||
198
- material.iridescenceThicknessMap ||
199
- material.specularIntensityMap ||
200
- material.specularColorMap ||
201
- material.transmissionMap ||
202
- material.thicknessMap ||
203
- material.sheenColorMap ||
204
- material.sheenRoughnessMap;
191
+ } else {
192
+
193
+ node = clearcoatRoughnessNode;
194
+
195
+ }
196
+
197
+ } else if ( scope === MaterialNode.SHEEN ) {
198
+
199
+ const sheenNode = this.getColor( 'sheenColor' ).mul( this.getFloat( 'sheen' ) ); // Move this mul() to CPU
200
+
201
+ if ( material.sheenColorMap && material.sheenColorMap.isTexture === true ) {
205
202
 
206
- if ( uvScaleMap ) {
203
+ node = sheenNode.mul( this.getTexture( 'sheenColorMap' ).rgb );
207
204
 
208
- // backwards compatibility
209
- if ( uvScaleMap.isWebGLRenderTarget ) {
205
+ } else {
210
206
 
211
- uvScaleMap = uvScaleMap.texture;
207
+ node = sheenNode;
212
208
 
213
- }
209
+ }
214
210
 
215
- if ( uvScaleMap.matrixAutoUpdate === true ) {
211
+ } else if ( scope === MaterialNode.SHEEN_ROUGHNESS ) {
216
212
 
217
- uvScaleMap.updateMatrix();
213
+ const sheenRoughnessNode = this.getFloat( 'sheenRoughness' );
218
214
 
219
- }
215
+ if ( material.sheenRoughnessMap && material.sheenRoughnessMap.isTexture === true ) {
220
216
 
221
- node = uniform( uvScaleMap.matrix ).mul( vec3( uv(), 1 ) );
217
+ node = sheenRoughnessNode.mul( this.getTexture( 'sheenRoughnessMap' ).a );
222
218
 
223
219
  } else {
224
220
 
225
- node = uv();
221
+ node = sheenRoughnessNode;
226
222
 
227
223
  }
228
224
 
225
+ node = node.clamp( 0.07, 1.0 );
226
+
227
+ } else if ( scope === MaterialNode.ROTATION ) {
228
+
229
+ node = this.getFloat( 'rotation' );
230
+
229
231
  } else {
230
232
 
231
233
  const outputType = this.getNodeType( builder );
@@ -248,13 +250,15 @@ MaterialNode.SPECULAR_COLOR = 'specularColor';
248
250
  MaterialNode.REFLECTIVITY = 'reflectivity';
249
251
  MaterialNode.ROUGHNESS = 'roughness';
250
252
  MaterialNode.METALNESS = 'metalness';
253
+ MaterialNode.CLEARCOAT = 'clearcoat';
254
+ MaterialNode.CLEARCOAT_ROUGHNESS = 'clearcoatRoughness';
251
255
  MaterialNode.EMISSIVE = 'emissive';
252
256
  MaterialNode.ROTATION = 'rotation';
253
- MaterialNode.UV = 'uv';
257
+ MaterialNode.SHEEN = 'sheen';
258
+ MaterialNode.SHEEN_ROUGHNESS = 'sheenRoughness';
254
259
 
255
260
  export default MaterialNode;
256
261
 
257
- export const materialUV = nodeImmutable( MaterialNode, MaterialNode.UV );
258
262
  export const materialAlphaTest = nodeImmutable( MaterialNode, MaterialNode.ALPHA_TEST );
259
263
  export const materialColor = nodeImmutable( MaterialNode, MaterialNode.COLOR );
260
264
  export const materialShininess = nodeImmutable( MaterialNode, MaterialNode.SHININESS );
@@ -264,6 +268,10 @@ export const materialSpecularColor = nodeImmutable( MaterialNode, MaterialNode.S
264
268
  export const materialReflectivity = nodeImmutable( MaterialNode, MaterialNode.REFLECTIVITY );
265
269
  export const materialRoughness = nodeImmutable( MaterialNode, MaterialNode.ROUGHNESS );
266
270
  export const materialMetalness = nodeImmutable( MaterialNode, MaterialNode.METALNESS );
271
+ export const materialClearcoat = nodeImmutable( MaterialNode, MaterialNode.CLEARCOAT );
272
+ export const materialClearcoatRoughness = nodeImmutable( MaterialNode, MaterialNode.CLEARCOAT_ROUGHNESS );
267
273
  export const materialRotation = nodeImmutable( MaterialNode, MaterialNode.ROTATION );
274
+ export const materialSheen = nodeImmutable( MaterialNode, MaterialNode.SHEEN );
275
+ export const materialSheenRoughness = nodeImmutable( MaterialNode, MaterialNode.SHEEN_ROUGHNESS );
268
276
 
269
277
  addNodeClass( MaterialNode );
@@ -1,6 +1,6 @@
1
1
  import ReferenceNode from './ReferenceNode.js';
2
2
  import { addNodeClass } from '../core/Node.js';
3
- import { nodeObject, getConstNodeType } from '../shadernode/ShaderNode.js';
3
+ import { nodeObject } from '../shadernode/ShaderNode.js';
4
4
 
5
5
  class MaterialReferenceNode extends ReferenceNode {
6
6
 
@@ -34,6 +34,6 @@ class MaterialReferenceNode extends ReferenceNode {
34
34
 
35
35
  export default MaterialReferenceNode;
36
36
 
37
- export const materialReference = ( name, nodeOrType, material ) => nodeObject( new MaterialReferenceNode( name, getConstNodeType( nodeOrType ), material ) );
37
+ export const materialReference = ( name, type, material ) => nodeObject( new MaterialReferenceNode( name, type, material ) );
38
38
 
39
39
  addNodeClass( MaterialReferenceNode );
@@ -1,5 +1,6 @@
1
1
  import Object3DNode from './Object3DNode.js';
2
2
  import { addNodeClass } from '../core/Node.js';
3
+ import { label } from '../core/ContextNode.js';
3
4
  import { nodeImmutable } from '../shadernode/ShaderNode.js';
4
5
 
5
6
  class ModelNode extends Object3DNode {
@@ -23,10 +24,11 @@ class ModelNode extends Object3DNode {
23
24
  export default ModelNode;
24
25
 
25
26
  export const modelDirection = nodeImmutable( ModelNode, ModelNode.DIRECTION );
26
- export const modelViewMatrix = nodeImmutable( ModelNode, ModelNode.VIEW_MATRIX );
27
+ export const modelViewMatrix = label( nodeImmutable( ModelNode, ModelNode.VIEW_MATRIX ), 'modelViewMatrix' );
27
28
  export const modelNormalMatrix = nodeImmutable( ModelNode, ModelNode.NORMAL_MATRIX );
28
29
  export const modelWorldMatrix = nodeImmutable( ModelNode, ModelNode.WORLD_MATRIX );
29
30
  export const modelPosition = nodeImmutable( ModelNode, ModelNode.POSITION );
31
+ export const modelScale = nodeImmutable( ModelNode, ModelNode.SCALE );
30
32
  export const modelViewPosition = nodeImmutable( ModelNode, ModelNode.VIEW_POSITION );
31
33
 
32
34
  addNodeClass( ModelNode );
@@ -6,22 +6,17 @@ import { nodeProxy } from '../shadernode/ShaderNode.js';
6
6
 
7
7
  class ModelViewProjectionNode extends Node {
8
8
 
9
- constructor( position = positionLocal ) {
9
+ constructor( positionNode = positionLocal ) {
10
10
 
11
11
  super( 'vec4' );
12
12
 
13
- this.position = position;
13
+ this.positionNode = positionNode;
14
14
 
15
15
  }
16
16
 
17
- generate( builder ) {
17
+ construct() {
18
18
 
19
- const position = this.position;
20
-
21
- const mvpMatrix = cameraProjectionMatrix.mul( modelViewMatrix );
22
- const mvpNode = mvpMatrix.mul( position );
23
-
24
- return mvpNode.build( builder );
19
+ return cameraProjectionMatrix.mul( modelViewMatrix ).mul( this.positionNode );
25
20
 
26
21
  }
27
22
 
@@ -0,0 +1,70 @@
1
+ import Node, { addNodeClass } from '../core/Node.js';
2
+ import { NodeUpdateType } from '../core/constants.js';
3
+ import { nodeProxy } from '../shadernode/ShaderNode.js';
4
+ import { uniform } from '../core/UniformNode.js';
5
+ import { reference } from './ReferenceNode.js';
6
+ import { bufferAttribute } from './BufferAttributeNode.js';
7
+ import { positionLocal } from './PositionNode.js';
8
+
9
+ class MorphNode extends Node {
10
+
11
+ constructor( mesh ) {
12
+
13
+ super( 'void' );
14
+
15
+ this.mesh = mesh;
16
+ this.morphBaseInfluence = uniform( 1 );
17
+
18
+ this.updateType = NodeUpdateType.OBJECT;
19
+
20
+ }
21
+
22
+ constructAttribute( builder, name, assignNode = positionLocal ) {
23
+
24
+ const mesh = this.mesh;
25
+ const attributes = mesh.geometry.morphAttributes[ name ];
26
+
27
+ builder.stack.assign( assignNode, assignNode.mul( this.morphBaseInfluence ) );
28
+
29
+ for ( let i = 0; i < attributes.length; i ++ ) {
30
+
31
+ const attribute = attributes[ i ];
32
+
33
+ const bufferAttrib = bufferAttribute( attribute.array, 'vec3' );
34
+ const influence = reference( i, 'float', mesh.morphTargetInfluences );
35
+
36
+ builder.stack.assign( assignNode, assignNode.add( bufferAttrib.mul( influence ) ) );
37
+
38
+ }
39
+
40
+ }
41
+
42
+ construct( builder ) {
43
+
44
+ this.constructAttribute( builder, 'position' );
45
+
46
+ }
47
+
48
+ update() {
49
+
50
+ const morphBaseInfluence = this.morphBaseInfluence;
51
+
52
+ if ( this.mesh.geometry.morphTargetsRelative ) {
53
+
54
+ morphBaseInfluence.value = 1;
55
+
56
+ } else {
57
+
58
+ morphBaseInfluence.value = 1 - this.mesh.morphTargetInfluences.reduce( ( a, b ) => a + b, 0 );
59
+
60
+ }
61
+
62
+ }
63
+
64
+ }
65
+
66
+ export default MorphNode;
67
+
68
+ export const morph = nodeProxy( MorphNode );
69
+
70
+ addNodeClass( MorphNode );
@@ -1,7 +1,7 @@
1
1
  import Node, { addNodeClass } from '../core/Node.js';
2
2
  import { attribute } from '../core/AttributeNode.js';
3
- import { label } from '../core/VarNode.js';
4
3
  import { varying } from '../core/VaryingNode.js';
4
+ import { property } from '../core/PropertyNode.js';
5
5
  import { normalize } from '../math/MathNode.js';
6
6
  import { cameraViewMatrix } from './CameraNode.js';
7
7
  import { modelNormalMatrix } from './ModelNode.js';
@@ -89,7 +89,8 @@ export const normalGeometry = nodeImmutable( NormalNode, NormalNode.GEOMETRY );
89
89
  export const normalLocal = nodeImmutable( NormalNode, NormalNode.LOCAL );
90
90
  export const normalView = nodeImmutable( NormalNode, NormalNode.VIEW );
91
91
  export const normalWorld = nodeImmutable( NormalNode, NormalNode.WORLD );
92
- export const transformedNormalView = label( normalView, 'TransformedNormalView' );
92
+ export const transformedNormalView = property( 'vec3', 'TransformedNormalView' );
93
93
  export const transformedNormalWorld = transformedNormalView.transformDirection( cameraViewMatrix ).normalize();
94
+ export const transformedClearcoatNormalView = property( 'vec3', 'TransformedClearcoatNormalView' );
94
95
 
95
96
  addNodeClass( NormalNode );
@@ -32,7 +32,7 @@ class Object3DNode extends Node {
32
32
 
33
33
  return 'mat3';
34
34
 
35
- } else if ( scope === Object3DNode.POSITION || scope === Object3DNode.VIEW_POSITION || scope === Object3DNode.DIRECTION ) {
35
+ } else if ( scope === Object3DNode.POSITION || scope === Object3DNode.VIEW_POSITION || scope === Object3DNode.DIRECTION || scope === Object3DNode.SCALE ) {
36
36
 
37
37
  return 'vec3';
38
38
 
@@ -64,6 +64,12 @@ class Object3DNode extends Node {
64
64
 
65
65
  uniformNode.value.setFromMatrixPosition( object.matrixWorld );
66
66
 
67
+ } else if ( scope === Object3DNode.SCALE ) {
68
+
69
+ uniformNode.value = uniformNode.value || new Vector3();
70
+
71
+ uniformNode.value.setFromMatrixScale( object.matrixWorld );
72
+
67
73
  } else if ( scope === Object3DNode.DIRECTION ) {
68
74
 
69
75
  uniformNode.value = uniformNode.value || new Vector3();
@@ -95,7 +101,7 @@ class Object3DNode extends Node {
95
101
 
96
102
  this._uniformNode.nodeType = 'mat3';
97
103
 
98
- } else if ( scope === Object3DNode.POSITION || scope === Object3DNode.VIEW_POSITION || scope === Object3DNode.DIRECTION ) {
104
+ } else if ( scope === Object3DNode.POSITION || scope === Object3DNode.VIEW_POSITION || scope === Object3DNode.DIRECTION || scope === Object3DNode.SCALE ) {
99
105
 
100
106
  this._uniformNode.nodeType = 'vec3';
101
107
 
@@ -127,6 +133,7 @@ Object3DNode.VIEW_MATRIX = 'viewMatrix';
127
133
  Object3DNode.NORMAL_MATRIX = 'normalMatrix';
128
134
  Object3DNode.WORLD_MATRIX = 'worldMatrix';
129
135
  Object3DNode.POSITION = 'position';
136
+ Object3DNode.SCALE = 'scale';
130
137
  Object3DNode.VIEW_POSITION = 'viewPosition';
131
138
  Object3DNode.DIRECTION = 'direction';
132
139
 
@@ -137,6 +144,7 @@ export const objectViewMatrix = nodeProxy( Object3DNode, Object3DNode.VIEW_MATRI
137
144
  export const objectNormalMatrix = nodeProxy( Object3DNode, Object3DNode.NORMAL_MATRIX );
138
145
  export const objectWorldMatrix = nodeProxy( Object3DNode, Object3DNode.WORLD_MATRIX );
139
146
  export const objectPosition = nodeProxy( Object3DNode, Object3DNode.POSITION );
147
+ export const objectScale = nodeProxy( Object3DNode, Object3DNode.SCALE );
140
148
  export const objectViewPosition = nodeProxy( Object3DNode, Object3DNode.VIEW_POSITION );
141
149
 
142
150
  addNodeClass( Object3DNode );
@@ -2,7 +2,7 @@ import Node, { addNodeClass } from '../core/Node.js';
2
2
  import { NodeUpdateType } from '../core/constants.js';
3
3
  import { uniform } from '../core/UniformNode.js';
4
4
  import { texture } from './TextureNode.js';
5
- import { nodeObject, getConstNodeType } from '../shadernode/ShaderNode.js';
5
+ import { nodeObject } from '../shadernode/ShaderNode.js';
6
6
 
7
7
  class ReferenceNode extends Node {
8
8
 
@@ -67,6 +67,6 @@ class ReferenceNode extends Node {
67
67
 
68
68
  export default ReferenceNode;
69
69
 
70
- export const reference = ( name, nodeOrType, object ) => nodeObject( new ReferenceNode( name, getConstNodeType( nodeOrType ), object ) );
70
+ export const reference = ( name, type, object ) => nodeObject( new ReferenceNode( name, type, object ) );
71
71
 
72
72
  addNodeClass( ReferenceNode );
@@ -0,0 +1,46 @@
1
+ import Node from '../core/Node.js';
2
+ import { addNodeClass } from '../core/Node.js';
3
+ import { nodeImmutable } from '../shadernode/ShaderNode.js';
4
+ import { reference } from './ReferenceNode.js';
5
+
6
+ class SceneNode extends Node {
7
+
8
+ constructor( scope = SceneNode.BACKGROUND_BLURRINESS, scene = null ) {
9
+
10
+ super();
11
+
12
+ this.scope = scope;
13
+ this.scene = scene;
14
+
15
+ }
16
+
17
+ construct( builder ) {
18
+
19
+ const scope = this.scope;
20
+ const scene = this.scene !== null ? this.scene : builder.scene;
21
+
22
+ let output;
23
+
24
+ if ( scope === SceneNode.BACKGROUND_BLURRINESS ) {
25
+
26
+ output = reference( 'backgroundBlurriness', 'float', scene );
27
+
28
+ } else {
29
+
30
+ console.error( 'THREE.SceneNode: Unknown scope:', scope );
31
+
32
+ }
33
+
34
+ return output;
35
+
36
+ }
37
+
38
+ }
39
+
40
+ SceneNode.BACKGROUND_BLURRINESS = 'backgroundBlurriness';
41
+
42
+ export default SceneNode;
43
+
44
+ export const backgroundBlurriness = nodeImmutable( SceneNode, SceneNode.BACKGROUND_BLURRINESS );
45
+
46
+ addNodeClass( SceneNode );
@@ -1,6 +1,6 @@
1
1
  import Node, { addNodeClass } from '../core/Node.js';
2
2
  import { NodeUpdateType } from '../core/constants.js';
3
- import { ShaderNode, nodeProxy } from '../shadernode/ShaderNode.js';
3
+ import { nodeProxy } from '../shadernode/ShaderNode.js';
4
4
  import { attribute } from '../core/AttributeNode.js';
5
5
  import { uniform } from '../core/UniformNode.js';
6
6
  import { add } from '../math/OperatorNode.js';
@@ -9,91 +9,72 @@ import { normalLocal } from './NormalNode.js';
9
9
  import { positionLocal } from './PositionNode.js';
10
10
  import { tangentLocal } from './TangentNode.js';
11
11
 
12
- const Skinning = new ShaderNode( ( inputs, {}, builder ) => {
12
+ class SkinningNode extends Node {
13
13
 
14
- const { index, weight, bindMatrix, bindMatrixInverse, boneMatrices } = inputs;
14
+ constructor( skinnedMesh ) {
15
15
 
16
- const boneMatX = boneMatrices.element( index.x );
17
- const boneMatY = boneMatrices.element( index.y );
18
- const boneMatZ = boneMatrices.element( index.z );
19
- const boneMatW = boneMatrices.element( index.w );
16
+ super( 'void' );
20
17
 
21
- // POSITION
18
+ this.skinnedMesh = skinnedMesh;
22
19
 
23
- const skinVertex = bindMatrix.mul( positionLocal );
20
+ this.updateType = NodeUpdateType.OBJECT;
24
21
 
25
- const skinned = add(
26
- boneMatX.mul( skinVertex ).mul( weight.x ),
27
- boneMatY.mul( skinVertex ).mul( weight.y ),
28
- boneMatZ.mul( skinVertex ).mul( weight.z ),
29
- boneMatW.mul( skinVertex ).mul( weight.w )
30
- );
22
+ //
31
23
 
32
- const skinPosition = bindMatrixInverse.mul( skinned ).xyz;
24
+ this.skinIndexNode = attribute( 'skinIndex', 'uvec4' );
25
+ this.skinWeightNode = attribute( 'skinWeight', 'vec4' );
33
26
 
34
- // NORMAL
27
+ this.bindMatrixNode = uniform( skinnedMesh.bindMatrix, 'mat4' );
28
+ this.bindMatrixInverseNode = uniform( skinnedMesh.bindMatrixInverse, 'mat4' );
29
+ this.boneMatricesNode = buffer( skinnedMesh.skeleton.boneMatrices, 'mat4', skinnedMesh.skeleton.bones.length );
35
30
 
36
- let skinMatrix = add(
37
- weight.x.mul( boneMatX ),
38
- weight.y.mul( boneMatY ),
39
- weight.z.mul( boneMatZ ),
40
- weight.w.mul( boneMatW )
41
- );
31
+ }
42
32
 
43
- skinMatrix = bindMatrixInverse.mul( skinMatrix ).mul( bindMatrix );
33
+ construct( builder ) {
44
34
 
45
- const skinNormal = skinMatrix.transformDirection( normalLocal ).xyz;
35
+ const { skinIndexNode, skinWeightNode, bindMatrixNode, bindMatrixInverseNode, boneMatricesNode } = this;
46
36
 
47
- // ASSIGNS
37
+ const boneMatX = boneMatricesNode.element( skinIndexNode.x );
38
+ const boneMatY = boneMatricesNode.element( skinIndexNode.y );
39
+ const boneMatZ = boneMatricesNode.element( skinIndexNode.z );
40
+ const boneMatW = boneMatricesNode.element( skinIndexNode.w );
48
41
 
49
- positionLocal.assign( skinPosition ).build( builder ); // @TODO: For some reason this doesn't work as stack.assign( positionLocal, skinPosition )?
50
- normalLocal.assign( skinNormal ).build( builder );
42
+ // POSITION
51
43
 
52
- if ( builder.hasGeometryAttribute( 'tangent' ) ) {
44
+ const skinVertex = bindMatrixNode.mul( positionLocal );
53
45
 
54
- tangentLocal.assign( skinNormal ).build( builder );
46
+ const skinned = add(
47
+ boneMatX.mul( skinWeightNode.x ).mul( skinVertex ),
48
+ boneMatY.mul( skinWeightNode.y ).mul( skinVertex ),
49
+ boneMatZ.mul( skinWeightNode.z ).mul( skinVertex ),
50
+ boneMatW.mul( skinWeightNode.w ).mul( skinVertex )
51
+ );
55
52
 
56
- }
53
+ const skinPosition = bindMatrixInverseNode.mul( skinned ).xyz;
57
54
 
58
- } );
55
+ // NORMAL
59
56
 
60
- class SkinningNode extends Node {
57
+ let skinMatrix = add(
58
+ skinWeightNode.x.mul( boneMatX ),
59
+ skinWeightNode.y.mul( boneMatY ),
60
+ skinWeightNode.z.mul( boneMatZ ),
61
+ skinWeightNode.w.mul( boneMatW )
62
+ );
61
63
 
62
- constructor( skinnedMesh ) {
64
+ skinMatrix = bindMatrixInverseNode.mul( skinMatrix ).mul( bindMatrixNode );
63
65
 
64
- super( 'void' );
66
+ const skinNormal = skinMatrix.transformDirection( normalLocal ).xyz;
65
67
 
66
- this.skinnedMesh = skinnedMesh;
68
+ // ASSIGNS
67
69
 
68
- this.updateType = NodeUpdateType.OBJECT;
70
+ builder.stack.assign( positionLocal, skinPosition );
71
+ builder.stack.assign( normalLocal, skinNormal );
69
72
 
70
- //
73
+ if ( builder.hasGeometryAttribute( 'tangent' ) ) {
71
74
 
72
- this.skinIndexNode = attribute( 'skinIndex', 'uvec4' );
73
- this.skinWeightNode = attribute( 'skinWeight', 'vec4' );
74
-
75
- this.bindMatrixNode = uniform( skinnedMesh.bindMatrix, 'mat4' );
76
- this.bindMatrixInverseNode = uniform( skinnedMesh.bindMatrixInverse, 'mat4' );
77
- this.boneMatricesNode = buffer( skinnedMesh.skeleton.boneMatrices, 'mat4', skinnedMesh.skeleton.bones.length );
78
-
79
- }
75
+ builder.stack.assign( tangentLocal, skinNormal );
80
76
 
81
- generate( builder ) {
82
-
83
- /*return new ShaderNode( ( {}, stack, builder ) => Skinning.call( {
84
- index: this.skinIndexNode,
85
- weight: this.skinWeightNode,
86
- bindMatrix: this.bindMatrixNode,
87
- bindMatrixInverse: this.bindMatrixInverseNode,
88
- boneMatrices: this.boneMatricesNode
89
- }, stack, builder ) ).build( builder );*/
90
- Skinning.call( {
91
- index: this.skinIndexNode,
92
- weight: this.skinWeightNode,
93
- bindMatrix: this.bindMatrixNode,
94
- bindMatrixInverse: this.bindMatrixInverseNode,
95
- boneMatrices: this.boneMatricesNode
96
- }, {}, builder );
77
+ }
97
78
 
98
79
  }
99
80
 
@@ -1,6 +1,6 @@
1
1
  import BufferNode from './BufferNode.js';
2
2
  import { addNodeClass } from '../core/Node.js';
3
- import { nodeObject, getConstNodeType } from '../shadernode/ShaderNode.js';
3
+ import { nodeObject } from '../shadernode/ShaderNode.js';
4
4
 
5
5
  class StorageBufferNode extends BufferNode {
6
6
 
@@ -22,6 +22,6 @@ class StorageBufferNode extends BufferNode {
22
22
 
23
23
  export default StorageBufferNode;
24
24
 
25
- export const storage = ( value, nodeOrType, count ) => nodeObject( new StorageBufferNode( value, getConstNodeType( nodeOrType ), count ) );
25
+ export const storage = ( value, type, count ) => nodeObject( new StorageBufferNode( value, type, count ) );
26
26
 
27
27
  addNodeClass( StorageBufferNode );
@@ -1,6 +1,6 @@
1
1
  import Node, { addNodeClass } from '../core/Node.js';
2
2
  import { attribute } from '../core/AttributeNode.js';
3
- import { label } from '../core/VarNode.js';
3
+ import { temp } from '../core/VarNode.js';
4
4
  import { varying } from '../core/VaryingNode.js';
5
5
  import { normalize } from '../math/MathNode.js';
6
6
  import { cameraViewMatrix } from './CameraNode.js';
@@ -97,7 +97,7 @@ export const tangentGeometry = nodeImmutable( TangentNode, TangentNode.GEOMETRY
97
97
  export const tangentLocal = nodeImmutable( TangentNode, TangentNode.LOCAL );
98
98
  export const tangentView = nodeImmutable( TangentNode, TangentNode.VIEW );
99
99
  export const tangentWorld = nodeImmutable( TangentNode, TangentNode.WORLD );
100
- export const transformedTangentView = label( tangentView, 'TransformedTangentView' );
100
+ export const transformedTangentView = temp( tangentView, 'TransformedTangentView' );
101
101
  export const transformedTangentWorld = normalize( transformedTangentView.transformDirection( cameraViewMatrix ) );
102
102
 
103
103
  addNodeClass( TangentNode );