super-three 0.165.0 → 0.167.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 (370) hide show
  1. package/build/three.cjs +706 -383
  2. package/build/three.module.js +702 -384
  3. package/build/three.module.min.js +1 -1
  4. package/build/three.webgpu.js +76086 -0
  5. package/build/three.webgpu.min.js +6 -0
  6. package/examples/jsm/Addons.js +2 -1
  7. package/examples/jsm/csm/CSMShader.js +4 -4
  8. package/examples/jsm/exporters/GLTFExporter.js +7 -3
  9. package/examples/jsm/geometries/TeapotGeometry.js +1 -1
  10. package/examples/jsm/helpers/ViewHelper.js +51 -2
  11. package/examples/jsm/libs/tween.module.js +64 -75
  12. package/examples/jsm/lights/RectAreaLightTexturesLib.js +91 -0
  13. package/examples/jsm/lights/RectAreaLightUniformsLib.js +8 -63
  14. package/examples/jsm/lines/webgpu/Line2.js +20 -0
  15. package/examples/jsm/lines/webgpu/LineSegments2.js +376 -0
  16. package/examples/jsm/loaders/FBXLoader.js +23 -45
  17. package/examples/jsm/loaders/GLTFLoader.js +10 -4
  18. package/examples/jsm/loaders/MaterialXLoader.js +2 -9
  19. package/examples/jsm/loaders/USDZLoader.js +124 -76
  20. package/examples/jsm/loaders/UltraHDRLoader.js +583 -0
  21. package/examples/jsm/loaders/VTKLoader.js +76 -3
  22. package/examples/jsm/misc/GPUComputationRenderer.js +9 -19
  23. package/examples/jsm/modifiers/SimplifyModifier.js +2 -1
  24. package/examples/jsm/objects/InstancedPoints.js +2 -2
  25. package/examples/jsm/postprocessing/RenderTransitionPass.js +13 -38
  26. package/examples/jsm/postprocessing/SSAOPass.js +6 -9
  27. package/examples/jsm/postprocessing/UnrealBloomPass.js +4 -4
  28. package/examples/jsm/shaders/ColorifyShader.js +1 -2
  29. package/examples/jsm/shaders/FXAAShader.js +0 -2
  30. package/examples/jsm/shaders/GTAOShader.js +1 -1
  31. package/examples/jsm/shaders/LuminosityHighPassShader.js +1 -3
  32. package/examples/jsm/transpiler/GLSLDecoder.js +46 -4
  33. package/examples/jsm/transpiler/TSLEncoder.js +17 -15
  34. package/package.json +7 -6
  35. package/src/Three.WebGPU.js +194 -0
  36. package/src/Three.js +2 -0
  37. package/src/constants.js +4 -1
  38. package/src/core/Object3D.js +22 -22
  39. package/src/extras/TextureUtils.js +210 -0
  40. package/src/lights/Light.js +1 -0
  41. package/src/lights/LightShadow.js +5 -0
  42. package/{examples/jsm/lights → src/lights/webgpu}/IESSpotLight.js +1 -1
  43. package/src/loaders/ObjectLoader.js +33 -2
  44. package/src/materials/Material.js +13 -4
  45. package/src/math/Box2.js +4 -4
  46. package/src/math/Box3.js +6 -6
  47. package/src/math/ColorManagement.js +10 -0
  48. package/src/math/Matrix2.js +54 -0
  49. package/src/math/Vector4.js +13 -0
  50. package/{examples/jsm → src}/nodes/Nodes.js +30 -12
  51. package/{examples/jsm → src}/nodes/accessors/BatchNode.js +28 -10
  52. package/{examples/jsm → src}/nodes/accessors/BufferAttributeNode.js +36 -1
  53. package/src/nodes/accessors/CameraNode.js +19 -0
  54. package/{examples/jsm → src}/nodes/accessors/CubeTextureNode.js +22 -5
  55. package/src/nodes/accessors/InstanceNode.js +140 -0
  56. package/{examples/jsm → src}/nodes/accessors/MaterialNode.js +22 -2
  57. package/{examples/jsm → src}/nodes/accessors/ModelNode.js +2 -1
  58. package/{examples/jsm → src}/nodes/accessors/MorphNode.js +24 -20
  59. package/{examples/jsm → src}/nodes/accessors/NormalNode.js +1 -1
  60. package/{examples/jsm → src}/nodes/accessors/Object3DNode.js +1 -1
  61. package/{examples/jsm → src}/nodes/accessors/ReferenceNode.js +1 -1
  62. package/{examples/jsm → src}/nodes/accessors/ReflectVectorNode.js +4 -0
  63. package/{examples/jsm → src}/nodes/accessors/StorageBufferNode.js +50 -1
  64. package/{examples/jsm → src}/nodes/accessors/StorageTextureNode.js +12 -3
  65. package/{examples/jsm → src}/nodes/accessors/TextureNode.js +55 -18
  66. package/{examples/jsm → src}/nodes/accessors/UniformsNode.js +7 -1
  67. package/{examples/jsm → src}/nodes/accessors/VertexColorNode.js +2 -1
  68. package/{examples/jsm → src}/nodes/code/ScriptableNode.js +14 -0
  69. package/{examples/jsm → src}/nodes/code/ScriptableValueNode.js +2 -1
  70. package/{examples/jsm → src}/nodes/core/AttributeNode.js +20 -6
  71. package/{examples/jsm → src}/nodes/core/CacheNode.js +7 -10
  72. package/{examples/jsm → src}/nodes/core/IndexNode.js +6 -0
  73. package/{examples/jsm → src}/nodes/core/LightingModel.js +2 -2
  74. package/src/nodes/core/MRTNode.js +76 -0
  75. package/{examples/jsm → src}/nodes/core/Node.js +18 -12
  76. package/{examples/jsm → src}/nodes/core/NodeBuilder.js +175 -37
  77. package/src/nodes/core/NodeCache.js +36 -0
  78. package/{examples/jsm → src}/nodes/core/NodeFrame.js +42 -0
  79. package/{examples/jsm → src}/nodes/core/NodeFunction.js +2 -2
  80. package/{examples/jsm → src}/nodes/core/NodeUniform.js +1 -2
  81. package/{examples/jsm → src}/nodes/core/NodeUtils.js +6 -1
  82. package/{examples/jsm → src}/nodes/core/PropertyNode.js +1 -0
  83. package/{examples/jsm → src}/nodes/core/TempNode.js +2 -2
  84. package/{examples/jsm → src}/nodes/core/UniformGroupNode.js +20 -0
  85. package/{examples/jsm → src}/nodes/core/UniformNode.js +10 -1
  86. package/{examples/jsm → src}/nodes/core/VarNode.js +2 -6
  87. package/{examples/jsm → src}/nodes/core/VaryingNode.js +8 -0
  88. package/{examples/jsm → src}/nodes/display/AfterImageNode.js +19 -27
  89. package/{examples/jsm → src}/nodes/display/AnamorphicNode.js +18 -21
  90. package/src/nodes/display/BloomNode.js +333 -0
  91. package/{examples/jsm → src}/nodes/display/ColorAdjustmentNode.js +7 -2
  92. package/{examples/jsm → src}/nodes/display/ColorSpaceNode.js +1 -1
  93. package/src/nodes/display/DenoiseNode.js +198 -0
  94. package/src/nodes/display/DepthOfFieldNode.js +119 -0
  95. package/src/nodes/display/DotScreenNode.js +75 -0
  96. package/src/nodes/display/FXAANode.js +327 -0
  97. package/src/nodes/display/FilmNode.js +52 -0
  98. package/{examples/jsm → src}/nodes/display/FrontFacingNode.js +2 -1
  99. package/src/nodes/display/GTAONode.js +324 -0
  100. package/{examples/jsm → src}/nodes/display/GaussianBlurNode.js +34 -17
  101. package/src/nodes/display/Lut3DNode.js +53 -0
  102. package/{examples/jsm → src}/nodes/display/NormalMapNode.js +1 -1
  103. package/src/nodes/display/PassNode.js +291 -0
  104. package/src/nodes/display/PixelationPassNode.js +201 -0
  105. package/src/nodes/display/RGBShiftNode.js +49 -0
  106. package/src/nodes/display/RenderOutputNode.js +56 -0
  107. package/src/nodes/display/SobelOperatorNode.js +121 -0
  108. package/{examples/jsm → src}/nodes/display/ToneMappingNode.js +44 -5
  109. package/src/nodes/display/TransitionNode.js +76 -0
  110. package/{examples/jsm → src}/nodes/display/ViewportDepthNode.js +39 -16
  111. package/{examples/jsm → src}/nodes/display/ViewportDepthTextureNode.js +2 -1
  112. package/{examples/jsm → src}/nodes/display/ViewportNode.js +2 -1
  113. package/{examples/jsm → src}/nodes/display/ViewportSharedTextureNode.js +2 -1
  114. package/{examples/jsm → src}/nodes/display/ViewportTextureNode.js +5 -2
  115. package/src/nodes/functions/BSDF/LTC.js +131 -0
  116. package/src/nodes/functions/BasicLightingModel.js +78 -0
  117. package/{examples/jsm → src}/nodes/functions/PhongLightingModel.js +5 -3
  118. package/{examples/jsm → src}/nodes/functions/PhysicalLightingModel.js +42 -1
  119. package/{examples/jsm → src}/nodes/functions/ToonLightingModel.js +3 -1
  120. package/{examples/jsm → src}/nodes/geometry/RangeNode.js +19 -6
  121. package/{examples/jsm → src}/nodes/lighting/AONode.js +1 -4
  122. package/{examples/jsm → src}/nodes/lighting/AmbientLightNode.js +1 -1
  123. package/src/nodes/lighting/AnalyticLightNode.js +333 -0
  124. package/src/nodes/lighting/BasicEnvironmentNode.js +26 -0
  125. package/src/nodes/lighting/BasicLightMapNode.js +29 -0
  126. package/{examples/jsm → src}/nodes/lighting/DirectionalLightNode.js +2 -3
  127. package/{examples/jsm → src}/nodes/lighting/EnvironmentNode.js +5 -4
  128. package/{examples/jsm → src}/nodes/lighting/HemisphereLightNode.js +2 -1
  129. package/{examples/jsm → src}/nodes/lighting/IESSpotLightNode.js +1 -1
  130. package/{examples/jsm → src}/nodes/lighting/LightingNode.js +2 -0
  131. package/{examples/jsm → src}/nodes/lighting/LightsNode.js +1 -3
  132. package/{examples/jsm → src}/nodes/lighting/PointLightNode.js +2 -3
  133. package/src/nodes/lighting/RectAreaLightNode.js +97 -0
  134. package/{examples/jsm → src}/nodes/lighting/SpotLightNode.js +2 -3
  135. package/{examples/jsm → src}/nodes/loaders/NodeLoader.js +3 -1
  136. package/{examples/jsm → src}/nodes/loaders/NodeMaterialLoader.js +2 -1
  137. package/{examples/jsm → src}/nodes/loaders/NodeObjectLoader.js +2 -1
  138. package/{examples/jsm → src}/nodes/materials/InstancedPointsNodeMaterial.js +3 -3
  139. package/{examples/jsm → src}/nodes/materials/Line2NodeMaterial.js +3 -3
  140. package/{examples/jsm → src}/nodes/materials/LineBasicNodeMaterial.js +3 -3
  141. package/{examples/jsm → src}/nodes/materials/LineDashedNodeMaterial.js +4 -3
  142. package/src/nodes/materials/MeshBasicNodeMaterial.js +73 -0
  143. package/{examples/jsm → src}/nodes/materials/MeshLambertNodeMaterial.js +12 -3
  144. package/{examples/jsm → src}/nodes/materials/MeshMatcapNodeMaterial.js +6 -5
  145. package/{examples/jsm → src}/nodes/materials/MeshNormalNodeMaterial.js +5 -3
  146. package/{examples/jsm → src}/nodes/materials/MeshPhongNodeMaterial.js +11 -3
  147. package/{examples/jsm → src}/nodes/materials/MeshPhysicalNodeMaterial.js +5 -4
  148. package/{examples/jsm → src}/nodes/materials/MeshStandardNodeMaterial.js +14 -3
  149. package/{examples/jsm → src}/nodes/materials/MeshToonNodeMaterial.js +3 -3
  150. package/{examples/jsm → src}/nodes/materials/NodeMaterial.js +85 -20
  151. package/{examples/jsm → src}/nodes/materials/PointsNodeMaterial.js +3 -3
  152. package/{examples/jsm → src}/nodes/materials/ShadowNodeMaterial.js +3 -3
  153. package/{examples/jsm → src}/nodes/materials/SpriteNodeMaterial.js +3 -3
  154. package/{examples/jsm → src}/nodes/materialx/lib/mx_hsv.js +9 -17
  155. package/{examples/jsm → src}/nodes/materialx/lib/mx_noise.js +474 -577
  156. package/{examples/jsm → src}/nodes/materialx/lib/mx_transform_color.js +2 -8
  157. package/{examples/jsm → src}/nodes/math/CondNode.js +13 -6
  158. package/{examples/jsm → src}/nodes/math/MathNode.js +14 -1
  159. package/{examples/jsm → src}/nodes/math/OperatorNode.js +6 -6
  160. package/{examples/jsm → src}/nodes/parsers/GLSLNodeFunction.js +7 -7
  161. package/{examples/jsm → src}/nodes/pmrem/PMREMNode.js +2 -1
  162. package/{examples/jsm → src}/nodes/shadernode/ShaderNode.js +2 -0
  163. package/{examples/jsm → src}/nodes/utils/DiscardNode.js +1 -0
  164. package/{examples/jsm → src}/nodes/utils/FunctionOverloadingNode.js +2 -0
  165. package/{examples/jsm → src}/nodes/utils/LoopNode.js +7 -6
  166. package/{examples/jsm → src}/nodes/utils/MaxMipLevelNode.js +8 -2
  167. package/src/nodes/utils/RTTNode.js +130 -0
  168. package/{examples/jsm → src}/nodes/utils/ReflectorNode.js +9 -1
  169. package/src/objects/BatchedMesh.js +168 -188
  170. package/src/objects/InstancedMesh.js +1 -1
  171. package/src/renderers/WebGLRenderer.js +38 -25
  172. package/{examples/jsm → src}/renderers/common/Attributes.js +2 -1
  173. package/{examples/jsm → src}/renderers/common/Backend.js +30 -27
  174. package/{examples/jsm → src}/renderers/common/Background.js +9 -3
  175. package/src/renderers/common/BindGroup.js +16 -0
  176. package/{examples/jsm → src}/renderers/common/Bindings.js +38 -23
  177. package/{examples/jsm → src}/renderers/common/ClippingContext.js +4 -2
  178. package/{examples/jsm → src}/renderers/common/Color4.js +1 -1
  179. package/{examples/jsm → src}/renderers/common/CubeRenderTarget.js +7 -1
  180. package/{examples/jsm → src}/renderers/common/Geometries.js +37 -5
  181. package/{examples/jsm → src}/renderers/common/Info.js +34 -6
  182. package/src/renderers/common/PostProcessing.js +87 -0
  183. package/{examples/jsm/objects → src/renderers/common}/QuadMesh.js +6 -3
  184. package/{examples/jsm → src}/renderers/common/RenderContext.js +1 -1
  185. package/{examples/jsm → src}/renderers/common/RenderContexts.js +1 -1
  186. package/{examples/jsm → src}/renderers/common/RenderObject.js +44 -11
  187. package/{examples/jsm → src}/renderers/common/Renderer.js +84 -32
  188. package/{examples/jsm → src}/renderers/common/SampledTexture.js +2 -2
  189. package/{examples/jsm → src}/renderers/common/StorageBufferAttribute.js +1 -1
  190. package/{examples/jsm → src}/renderers/common/StorageInstancedBufferAttribute.js +1 -1
  191. package/{examples/jsm → src}/renderers/common/StorageTexture.js +2 -1
  192. package/{examples/jsm → src}/renderers/common/Textures.js +6 -2
  193. package/{examples/jsm → src}/renderers/common/Uniform.js +9 -4
  194. package/{examples/jsm → src}/renderers/common/UniformsGroup.js +69 -31
  195. package/{examples/jsm → src}/renderers/common/extras/PMREMGenerator.js +13 -12
  196. package/src/renderers/common/nodes/NodeBuilderState.js +58 -0
  197. package/{examples/jsm → src}/renderers/common/nodes/NodeSampledTexture.js +6 -5
  198. package/{examples/jsm → src}/renderers/common/nodes/NodeSampler.js +2 -1
  199. package/{examples/jsm → src}/renderers/common/nodes/NodeStorageBuffer.js +5 -1
  200. package/{examples/jsm → src}/renderers/common/nodes/NodeUniform.js +3 -3
  201. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformBuffer.js +2 -1
  202. package/{examples/jsm → src}/renderers/common/nodes/NodeUniformsGroup.js +2 -8
  203. package/{examples/jsm → src}/renderers/common/nodes/Nodes.js +37 -16
  204. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +16 -1
  205. package/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js +1 -1
  206. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +1 -1
  207. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +0 -9
  208. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -10
  209. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
  210. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +45 -13
  211. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -4
  212. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +3 -0
  213. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +3 -3
  214. package/src/renderers/shaders/ShaderLib/depth.glsl.js +8 -0
  215. package/src/renderers/shaders/UniformsLib.js +3 -0
  216. package/src/renderers/webgl/WebGLAttributes.js +2 -2
  217. package/src/renderers/webgl/WebGLBufferRenderer.js +6 -19
  218. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +6 -18
  219. package/src/renderers/webgl/WebGLLights.js +6 -0
  220. package/src/renderers/webgl/WebGLProgram.js +26 -0
  221. package/src/renderers/webgl/WebGLPrograms.js +1 -1
  222. package/src/renderers/webgl/WebGLTextures.js +14 -53
  223. package/src/renderers/webgl/WebGLUniforms.js +12 -2
  224. package/src/renderers/webgl/WebGLUniformsGroups.js +7 -7
  225. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBackend.js +156 -54
  226. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/nodes/GLSLNodeBuilder.js +178 -43
  227. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLAttributeUtils.js +2 -2
  228. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLConstants.js +1 -0
  229. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLExtensions.js +2 -0
  230. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLState.js +1 -1
  231. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLTextureUtils.js +34 -2
  232. package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLUtils.js +1 -1
  233. package/{examples/jsm → src}/renderers/webgpu/WebGPUBackend.js +164 -76
  234. package/{examples/jsm → src}/renderers/webgpu/WebGPURenderer.js +2 -2
  235. package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeBuilder.js +194 -56
  236. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +159 -0
  237. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  238. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUBindingUtils.js +20 -13
  239. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUConstants.js +3 -1
  240. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUPipelineUtils.js +28 -21
  241. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTextureUtils.js +40 -23
  242. package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUUtils.js +24 -3
  243. package/src/renderers/webxr/WebXRDepthSensing.js +6 -0
  244. package/src/renderers/webxr/WebXRManager.js +6 -0
  245. package/src/textures/CompressedArrayTexture.js +1 -1
  246. package/examples/jsm/nodes/accessors/CameraNode.js +0 -12
  247. package/examples/jsm/nodes/accessors/InstanceNode.js +0 -94
  248. package/examples/jsm/nodes/core/NodeCache.js +0 -26
  249. package/examples/jsm/nodes/display/PassNode.js +0 -201
  250. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +0 -256
  251. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -28
  252. package/examples/jsm/renderers/common/PostProcessing.js +0 -33
  253. package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +0 -44
  254. package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +0 -104
  255. /package/{examples/jsm → src}/nodes/accessors/AccessorsUtils.js +0 -0
  256. /package/{examples/jsm → src}/nodes/accessors/BitangentNode.js +0 -0
  257. /package/{examples/jsm → src}/nodes/accessors/BufferNode.js +0 -0
  258. /package/{examples/jsm → src}/nodes/accessors/ClippingNode.js +0 -0
  259. /package/{examples/jsm → src}/nodes/accessors/InstancedPointsMaterialNode.js +0 -0
  260. /package/{examples/jsm → src}/nodes/accessors/MaterialReferenceNode.js +0 -0
  261. /package/{examples/jsm → src}/nodes/accessors/ModelViewProjectionNode.js +0 -0
  262. /package/{examples/jsm → src}/nodes/accessors/PointUVNode.js +0 -0
  263. /package/{examples/jsm → src}/nodes/accessors/PositionNode.js +0 -0
  264. /package/{examples/jsm → src}/nodes/accessors/RendererReferenceNode.js +0 -0
  265. /package/{examples/jsm → src}/nodes/accessors/SceneNode.js +0 -0
  266. /package/{examples/jsm → src}/nodes/accessors/SkinningNode.js +0 -0
  267. /package/{examples/jsm → src}/nodes/accessors/TangentNode.js +0 -0
  268. /package/{examples/jsm → src}/nodes/accessors/Texture3DNode.js +0 -0
  269. /package/{examples/jsm → src}/nodes/accessors/TextureBicubicNode.js +0 -0
  270. /package/{examples/jsm → src}/nodes/accessors/TextureSizeNode.js +0 -0
  271. /package/{examples/jsm → src}/nodes/accessors/UVNode.js +0 -0
  272. /package/{examples/jsm → src}/nodes/accessors/UserDataNode.js +0 -0
  273. /package/{examples/jsm → src}/nodes/code/CodeNode.js +0 -0
  274. /package/{examples/jsm → src}/nodes/code/ExpressionNode.js +0 -0
  275. /package/{examples/jsm → src}/nodes/code/FunctionCallNode.js +0 -0
  276. /package/{examples/jsm → src}/nodes/code/FunctionNode.js +0 -0
  277. /package/{examples/jsm → src}/nodes/core/AssignNode.js +0 -0
  278. /package/{examples/jsm → src}/nodes/core/BypassNode.js +0 -0
  279. /package/{examples/jsm → src}/nodes/core/ConstNode.js +0 -0
  280. /package/{examples/jsm → src}/nodes/core/ContextNode.js +0 -0
  281. /package/{examples/jsm → src}/nodes/core/InputNode.js +0 -0
  282. /package/{examples/jsm → src}/nodes/core/NodeAttribute.js +0 -0
  283. /package/{examples/jsm → src}/nodes/core/NodeCode.js +0 -0
  284. /package/{examples/jsm → src}/nodes/core/NodeFunctionInput.js +0 -0
  285. /package/{examples/jsm → src}/nodes/core/NodeKeywords.js +0 -0
  286. /package/{examples/jsm → src}/nodes/core/NodeParser.js +0 -0
  287. /package/{examples/jsm → src}/nodes/core/NodeVar.js +0 -0
  288. /package/{examples/jsm → src}/nodes/core/NodeVarying.js +0 -0
  289. /package/{examples/jsm → src}/nodes/core/OutputStructNode.js +0 -0
  290. /package/{examples/jsm → src}/nodes/core/ParameterNode.js +0 -0
  291. /package/{examples/jsm → src}/nodes/core/StackNode.js +0 -0
  292. /package/{examples/jsm → src}/nodes/core/StructTypeNode.js +0 -0
  293. /package/{examples/jsm → src}/nodes/core/UniformGroup.js +0 -0
  294. /package/{examples/jsm → src}/nodes/core/constants.js +0 -0
  295. /package/{examples/jsm → src}/nodes/display/BlendModeNode.js +0 -0
  296. /package/{examples/jsm → src}/nodes/display/BumpMapNode.js +0 -0
  297. /package/{examples/jsm → src}/nodes/display/PosterizeNode.js +0 -0
  298. /package/{examples/jsm → src}/nodes/fog/FogExp2Node.js +0 -0
  299. /package/{examples/jsm → src}/nodes/fog/FogNode.js +0 -0
  300. /package/{examples/jsm → src}/nodes/fog/FogRangeNode.js +0 -0
  301. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_GGX.js +0 -0
  302. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Lambert.js +0 -0
  303. /package/{examples/jsm → src}/nodes/functions/BSDF/BRDF_Sheen.js +0 -0
  304. /package/{examples/jsm → src}/nodes/functions/BSDF/DFGApprox.js +0 -0
  305. /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX.js +0 -0
  306. /package/{examples/jsm → src}/nodes/functions/BSDF/D_GGX_Anisotropic.js +0 -0
  307. /package/{examples/jsm → src}/nodes/functions/BSDF/EnvironmentBRDF.js +0 -0
  308. /package/{examples/jsm → src}/nodes/functions/BSDF/F_Schlick.js +0 -0
  309. /package/{examples/jsm → src}/nodes/functions/BSDF/Schlick_to_F0.js +0 -0
  310. /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +0 -0
  311. /package/{examples/jsm → src}/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +0 -0
  312. /package/{examples/jsm → src}/nodes/functions/ShadowMaskModel.js +0 -0
  313. /package/{examples/jsm → src}/nodes/functions/material/getGeometryRoughness.js +0 -0
  314. /package/{examples/jsm → src}/nodes/functions/material/getRoughness.js +0 -0
  315. /package/{examples/jsm → src}/nodes/gpgpu/ComputeNode.js +0 -0
  316. /package/{examples/jsm → src}/nodes/lighting/IrradianceNode.js +0 -0
  317. /package/{examples/jsm → src}/nodes/lighting/LightNode.js +0 -0
  318. /package/{examples/jsm → src}/nodes/lighting/LightUtils.js +0 -0
  319. /package/{examples/jsm → src}/nodes/lighting/LightingContextNode.js +0 -0
  320. /package/{examples/jsm → src}/nodes/materials/Materials.js +0 -0
  321. /package/{examples/jsm → src}/nodes/materials/MeshSSSNodeMaterial.js +0 -0
  322. /package/{examples/jsm → src}/nodes/materials/VolumeNodeMaterial.js +0 -0
  323. /package/{examples/jsm → src}/nodes/materialx/DISCLAIMER.md +0 -0
  324. /package/{examples/jsm → src}/nodes/materialx/MaterialXNodes.js +0 -0
  325. /package/{examples/jsm → src}/nodes/math/HashNode.js +0 -0
  326. /package/{examples/jsm → src}/nodes/math/MathUtils.js +0 -0
  327. /package/{examples/jsm → src}/nodes/math/TriNoise3D.js +0 -0
  328. /package/{examples/jsm → src}/nodes/parsers/GLSLNodeParser.js +0 -0
  329. /package/{examples/jsm → src}/nodes/pmrem/PMREMUtils.js +0 -0
  330. /package/{examples/jsm → src}/nodes/procedural/CheckerNode.js +0 -0
  331. /package/{examples/jsm → src}/nodes/utils/ArrayElementNode.js +0 -0
  332. /package/{examples/jsm → src}/nodes/utils/ConvertNode.js +0 -0
  333. /package/{examples/jsm → src}/nodes/utils/EquirectUVNode.js +0 -0
  334. /package/{examples/jsm → src}/nodes/utils/JoinNode.js +0 -0
  335. /package/{examples/jsm → src}/nodes/utils/MatcapUVNode.js +0 -0
  336. /package/{examples/jsm → src}/nodes/utils/OscNode.js +0 -0
  337. /package/{examples/jsm → src}/nodes/utils/PackingNode.js +0 -0
  338. /package/{examples/jsm → src}/nodes/utils/RemapNode.js +0 -0
  339. /package/{examples/jsm → src}/nodes/utils/RotateNode.js +0 -0
  340. /package/{examples/jsm → src}/nodes/utils/RotateUVNode.js +0 -0
  341. /package/{examples/jsm → src}/nodes/utils/SetNode.js +0 -0
  342. /package/{examples/jsm → src}/nodes/utils/SplitNode.js +0 -0
  343. /package/{examples/jsm → src}/nodes/utils/SpriteSheetUVNode.js +0 -0
  344. /package/{examples/jsm → src}/nodes/utils/StorageArrayElementNode.js +0 -0
  345. /package/{examples/jsm → src}/nodes/utils/TimerNode.js +0 -0
  346. /package/{examples/jsm → src}/nodes/utils/TriplanarTexturesNode.js +0 -0
  347. /package/{examples/jsm → src}/renderers/common/Animation.js +0 -0
  348. /package/{examples/jsm → src}/renderers/common/Binding.js +0 -0
  349. /package/{examples/jsm → src}/renderers/common/Buffer.js +0 -0
  350. /package/{examples/jsm → src}/renderers/common/BufferUtils.js +0 -0
  351. /package/{examples/jsm → src}/renderers/common/ChainMap.js +0 -0
  352. /package/{examples/jsm → src}/renderers/common/ComputePipeline.js +0 -0
  353. /package/{examples/jsm → src}/renderers/common/Constants.js +0 -0
  354. /package/{examples/jsm → src}/renderers/common/DataMap.js +0 -0
  355. /package/{examples/jsm → src}/renderers/common/Pipeline.js +0 -0
  356. /package/{examples/jsm → src}/renderers/common/Pipelines.js +0 -0
  357. /package/{examples/jsm → src}/renderers/common/ProgrammableStage.js +0 -0
  358. /package/{examples/jsm → src}/renderers/common/RenderBundle.js +0 -0
  359. /package/{examples/jsm → src}/renderers/common/RenderBundles.js +0 -0
  360. /package/{examples/jsm → src}/renderers/common/RenderList.js +0 -0
  361. /package/{examples/jsm → src}/renderers/common/RenderLists.js +0 -0
  362. /package/{examples/jsm → src}/renderers/common/RenderObjects.js +0 -0
  363. /package/{examples/jsm → src}/renderers/common/RenderPipeline.js +0 -0
  364. /package/{examples/jsm → src}/renderers/common/Sampler.js +0 -0
  365. /package/{examples/jsm → src}/renderers/common/StorageBuffer.js +0 -0
  366. /package/{examples/jsm → src}/renderers/common/UniformBuffer.js +0 -0
  367. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/WebGLBufferRenderer.js +0 -0
  368. /package/{examples/jsm/renderers/webgl → src/renderers/webgl-fallback}/utils/WebGLCapabilities.js +0 -0
  369. /package/{examples/jsm → src}/renderers/webgpu/nodes/WGSLNodeParser.js +0 -0
  370. /package/{examples/jsm → src}/renderers/webgpu/utils/WebGPUTexturePassUtils.js +0 -0
@@ -0,0 +1,140 @@
1
+ import Node, { addNodeClass } from '../core/Node.js';
2
+ import { varyingProperty } from '../core/PropertyNode.js';
3
+ import { instancedBufferAttribute, instancedDynamicBufferAttribute } from './BufferAttributeNode.js';
4
+ import { normalLocal } from './NormalNode.js';
5
+ import { positionLocal } from './PositionNode.js';
6
+ import { nodeProxy, vec3, mat3, mat4 } from '../shadernode/ShaderNode.js';
7
+ import { NodeUpdateType } from '../core/constants.js';
8
+ import { buffer } from '../accessors/BufferNode.js';
9
+ import { instanceIndex } from '../core/IndexNode.js';
10
+
11
+ import { InstancedInterleavedBuffer } from '../../core/InstancedInterleavedBuffer.js';
12
+ import { InstancedBufferAttribute } from '../../core/InstancedBufferAttribute.js';
13
+ import { DynamicDrawUsage } from '../../constants.js';
14
+
15
+ class InstanceNode extends Node {
16
+
17
+ constructor( instanceMesh ) {
18
+
19
+ super( 'void' );
20
+
21
+ this.instanceMesh = instanceMesh;
22
+
23
+ this.instanceMatrixNode = null;
24
+
25
+ this.instanceColorNode = null;
26
+
27
+ this.updateType = NodeUpdateType.FRAME;
28
+
29
+ this.buffer = null;
30
+ this.bufferColor = null;
31
+
32
+ }
33
+
34
+ setup( /*builder*/ ) {
35
+
36
+ let instanceMatrixNode = this.instanceMatrixNode;
37
+ let instanceColorNode = this.instanceColorNode;
38
+
39
+ const instanceMesh = this.instanceMesh;
40
+
41
+ if ( instanceMatrixNode === null ) {
42
+
43
+ const instanceAttribute = instanceMesh.instanceMatrix;
44
+
45
+ // Both WebGPU and WebGL backends have UBO max limited to 64kb. Matrix count number bigger than 1000 ( 16 * 4 * 1000 = 64kb ) will fallback to attribute.
46
+
47
+ if ( instanceMesh.count <= 1000 ) {
48
+
49
+ instanceMatrixNode = buffer( instanceAttribute.array, 'mat4', instanceMesh.count ).element( instanceIndex );
50
+
51
+ } else {
52
+
53
+ const buffer = new InstancedInterleavedBuffer( instanceAttribute.array, 16, 1 );
54
+
55
+ this.buffer = buffer;
56
+
57
+ const bufferFn = instanceAttribute.usage === DynamicDrawUsage ? instancedDynamicBufferAttribute : instancedBufferAttribute;
58
+
59
+ const instanceBuffers = [
60
+ // F.Signature -> bufferAttribute( array, type, stride, offset )
61
+ bufferFn( buffer, 'vec4', 16, 0 ),
62
+ bufferFn( buffer, 'vec4', 16, 4 ),
63
+ bufferFn( buffer, 'vec4', 16, 8 ),
64
+ bufferFn( buffer, 'vec4', 16, 12 )
65
+ ];
66
+
67
+ instanceMatrixNode = mat4( ...instanceBuffers );
68
+
69
+ }
70
+
71
+ this.instanceMatrixNode = instanceMatrixNode;
72
+
73
+ }
74
+
75
+ const instanceColorAttribute = instanceMesh.instanceColor;
76
+
77
+ if ( instanceColorAttribute && instanceColorNode === null ) {
78
+
79
+ const buffer = new InstancedBufferAttribute( instanceColorAttribute.array, 3 );
80
+
81
+ const bufferFn = instanceColorAttribute.usage === DynamicDrawUsage ? instancedDynamicBufferAttribute : instancedBufferAttribute;
82
+
83
+ this.bufferColor = buffer;
84
+
85
+ instanceColorNode = vec3( bufferFn( buffer, 'vec3', 3, 0 ) );
86
+
87
+ this.instanceColorNode = instanceColorNode;
88
+
89
+ }
90
+
91
+ // POSITION
92
+
93
+ const instancePosition = instanceMatrixNode.mul( positionLocal ).xyz;
94
+
95
+ // NORMAL
96
+
97
+ const m = mat3( instanceMatrixNode );
98
+
99
+ const transformedNormal = normalLocal.div( vec3( m[ 0 ].dot( m[ 0 ] ), m[ 1 ].dot( m[ 1 ] ), m[ 2 ].dot( m[ 2 ] ) ) );
100
+
101
+ const instanceNormal = m.mul( transformedNormal ).xyz;
102
+
103
+ // ASSIGNS
104
+
105
+ positionLocal.assign( instancePosition );
106
+ normalLocal.assign( instanceNormal );
107
+
108
+ // COLOR
109
+
110
+ if ( this.instanceColorNode !== null ) {
111
+
112
+ varyingProperty( 'vec3', 'vInstanceColor' ).assign( this.instanceColorNode );
113
+
114
+ }
115
+
116
+ }
117
+
118
+ update( /*frame*/ ) {
119
+
120
+ if ( this.instanceMesh.instanceMatrix.usage !== DynamicDrawUsage && this.buffer != null && this.instanceMesh.instanceMatrix.version !== this.buffer.version ) {
121
+
122
+ this.buffer.version = this.instanceMesh.instanceMatrix.version;
123
+
124
+ }
125
+
126
+ if ( this.instanceMesh.instanceColor && this.instanceMesh.instanceColor.usage !== DynamicDrawUsage && this.bufferColor != null && this.instanceMesh.instanceColor.version !== this.bufferColor.version ) {
127
+
128
+ this.bufferColor.version = this.instanceMesh.instanceColor.version;
129
+
130
+ }
131
+
132
+ }
133
+
134
+ }
135
+
136
+ export default InstanceNode;
137
+
138
+ export const instance = nodeProxy( InstanceNode );
139
+
140
+ addNodeClass( 'InstanceNode', InstanceNode );
@@ -4,7 +4,8 @@ import { materialReference } from './MaterialReferenceNode.js';
4
4
  import { normalView } from './NormalNode.js';
5
5
  import { nodeImmutable, float, vec2, mat2 } from '../shadernode/ShaderNode.js';
6
6
  import { uniform } from '../core/UniformNode.js';
7
- import { Vector2 } from 'three';
7
+
8
+ import { Vector2 } from '../../math/Vector2.js';
8
9
 
9
10
  const _propertyCache = new Map();
10
11
 
@@ -157,7 +158,8 @@ class MaterialNode extends Node {
157
158
 
158
159
  } else if ( scope === MaterialNode.EMISSIVE ) {
159
160
 
160
- const emissiveNode = this.getColor( scope );
161
+ const emissiveIntensityNode = this.getFloat( 'emissiveIntensity' );
162
+ const emissiveNode = this.getColor( scope ).mul( emissiveIntensityNode );
161
163
 
162
164
  if ( material.emissiveMap && material.emissiveMap.isTexture === true ) {
163
165
 
@@ -318,6 +320,18 @@ class MaterialNode extends Node {
318
320
 
319
321
  node = this.getFloat( scope );
320
322
 
323
+ } else if ( scope === MaterialNode.REFRACTION_RATIO ) {
324
+
325
+ node = this.getFloat( scope );
326
+
327
+ } else if ( scope === MaterialNode.LIGHT_MAP ) {
328
+
329
+ node = this.getTexture( scope ).rgb.mul( this.getFloat( 'lightMapIntensity' ) );
330
+
331
+ } else if ( scope === MaterialNode.AO_MAP ) {
332
+
333
+ node = this.getTexture( scope ).r.sub( 1.0 ).mul( this.getFloat( 'aoMapIntensity' ) ).add( 1.0 );
334
+
321
335
  } else {
322
336
 
323
337
  const outputType = this.getNodeType( builder );
@@ -367,6 +381,9 @@ MaterialNode.LINE_WIDTH = 'linewidth';
367
381
  MaterialNode.LINE_DASH_OFFSET = 'dashOffset';
368
382
  MaterialNode.POINT_WIDTH = 'pointWidth';
369
383
  MaterialNode.DISPERSION = 'dispersion';
384
+ MaterialNode.LIGHT_MAP = 'light';
385
+ MaterialNode.AO_MAP = 'ao';
386
+ MaterialNode.REFRACTION_RATIO = 'refractionRatio';
370
387
 
371
388
  export default MaterialNode;
372
389
 
@@ -407,6 +424,9 @@ export const materialLineWidth = nodeImmutable( MaterialNode, MaterialNode.LINE_
407
424
  export const materialLineDashOffset = nodeImmutable( MaterialNode, MaterialNode.LINE_DASH_OFFSET );
408
425
  export const materialPointWidth = nodeImmutable( MaterialNode, MaterialNode.POINT_WIDTH );
409
426
  export const materialDispersion = nodeImmutable( MaterialNode, MaterialNode.DISPERSION );
427
+ export const materialLightMap = nodeImmutable( MaterialNode, MaterialNode.LIGHT_MAP );
428
+ export const materialAOMap = nodeImmutable( MaterialNode, MaterialNode.AO_MAP );
429
+ export const materialRefractionRatio = nodeImmutable( MaterialNode, MaterialNode.REFRACTION_RATIO );
410
430
  export const materialAnisotropyVector = uniform( new Vector2() ).onReference( function ( frame ) {
411
431
 
412
432
  return frame.material;
@@ -2,7 +2,8 @@ import Object3DNode from './Object3DNode.js';
2
2
  import { addNodeClass } from '../core/Node.js';
3
3
  import { nodeImmutable } from '../shadernode/ShaderNode.js';
4
4
  import { uniform } from '../core/UniformNode.js';
5
- import { Matrix4 } from 'three';
5
+
6
+ import { Matrix4 } from '../../math/Matrix4.js';
6
7
 
7
8
  class ModelNode extends Object3DNode {
8
9
 
@@ -8,11 +8,15 @@ import { normalLocal } from './NormalNode.js';
8
8
  import { textureLoad } from './TextureNode.js';
9
9
  import { instanceIndex, vertexIndex } from '../core/IndexNode.js';
10
10
  import { ivec2, int } from '../shadernode/ShaderNode.js';
11
- import { DataArrayTexture, Vector2, Vector4, FloatType } from 'three';
12
11
  import { loop } from '../utils/LoopNode.js';
13
12
 
14
- const morphTextures = new WeakMap();
15
- const morphVec4 = new Vector4();
13
+ import { DataArrayTexture } from '../../textures/DataArrayTexture.js';
14
+ import { Vector2 } from '../../math/Vector2.js';
15
+ import { Vector4 } from '../../math/Vector4.js';
16
+ import { FloatType } from '../../constants.js';
17
+
18
+ const _morphTextures = new WeakMap();
19
+ const _morphVec4 = /*@__PURE__*/ new Vector4();
16
20
 
17
21
  const getMorph = tslFn( ( { bufferMap, influence, stride, width, depth, offset } ) => {
18
22
 
@@ -39,7 +43,7 @@ function getEntry( geometry ) {
39
43
  const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
40
44
  const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
41
45
 
42
- let entry = morphTextures.get( geometry );
46
+ let entry = _morphTextures.get( geometry );
43
47
 
44
48
  if ( entry === undefined || entry.count !== morphTargetsCount ) {
45
49
 
@@ -91,34 +95,34 @@ function getEntry( geometry ) {
91
95
 
92
96
  if ( hasMorphPosition === true ) {
93
97
 
94
- morphVec4.fromBufferAttribute( morphTarget, j );
98
+ _morphVec4.fromBufferAttribute( morphTarget, j );
95
99
 
96
- buffer[ offset + stride + 0 ] = morphVec4.x;
97
- buffer[ offset + stride + 1 ] = morphVec4.y;
98
- buffer[ offset + stride + 2 ] = morphVec4.z;
100
+ buffer[ offset + stride + 0 ] = _morphVec4.x;
101
+ buffer[ offset + stride + 1 ] = _morphVec4.y;
102
+ buffer[ offset + stride + 2 ] = _morphVec4.z;
99
103
  buffer[ offset + stride + 3 ] = 0;
100
104
 
101
105
  }
102
106
 
103
107
  if ( hasMorphNormals === true ) {
104
108
 
105
- morphVec4.fromBufferAttribute( morphNormal, j );
109
+ _morphVec4.fromBufferAttribute( morphNormal, j );
106
110
 
107
- buffer[ offset + stride + 4 ] = morphVec4.x;
108
- buffer[ offset + stride + 5 ] = morphVec4.y;
109
- buffer[ offset + stride + 6 ] = morphVec4.z;
111
+ buffer[ offset + stride + 4 ] = _morphVec4.x;
112
+ buffer[ offset + stride + 5 ] = _morphVec4.y;
113
+ buffer[ offset + stride + 6 ] = _morphVec4.z;
110
114
  buffer[ offset + stride + 7 ] = 0;
111
115
 
112
116
  }
113
117
 
114
118
  if ( hasMorphColors === true ) {
115
119
 
116
- morphVec4.fromBufferAttribute( morphColor, j );
120
+ _morphVec4.fromBufferAttribute( morphColor, j );
117
121
 
118
- buffer[ offset + stride + 8 ] = morphVec4.x;
119
- buffer[ offset + stride + 9 ] = morphVec4.y;
120
- buffer[ offset + stride + 10 ] = morphVec4.z;
121
- buffer[ offset + stride + 11 ] = ( morphColor.itemSize === 4 ) ? morphVec4.w : 1;
122
+ buffer[ offset + stride + 8 ] = _morphVec4.x;
123
+ buffer[ offset + stride + 9 ] = _morphVec4.y;
124
+ buffer[ offset + stride + 10 ] = _morphVec4.z;
125
+ buffer[ offset + stride + 11 ] = ( morphColor.itemSize === 4 ) ? _morphVec4.w : 1;
122
126
 
123
127
  }
124
128
 
@@ -133,13 +137,13 @@ function getEntry( geometry ) {
133
137
  size: new Vector2( width, height )
134
138
  };
135
139
 
136
- morphTextures.set( geometry, entry );
140
+ _morphTextures.set( geometry, entry );
137
141
 
138
142
  function disposeTexture() {
139
143
 
140
144
  bufferTexture.dispose();
141
145
 
142
- morphTextures.delete( geometry );
146
+ _morphTextures.delete( geometry );
143
147
 
144
148
  geometry.removeEventListener( 'dispose', disposeTexture );
145
149
 
@@ -190,7 +194,7 @@ class MorphNode extends Node {
190
194
 
191
195
  const influence = float( 0 ).toVar();
192
196
 
193
- if ( this.mesh.isInstancedMesh === true && ( this.mesh.morphTexture !== null && this.mesh.morphTexture !== undefined ) ) {
197
+ if ( this.mesh.count > 1 && ( this.mesh.morphTexture !== null && this.mesh.morphTexture !== undefined ) ) {
194
198
 
195
199
  influence.assign( textureLoad( this.mesh.morphTexture, ivec2( int( i ).add( 1 ), int( instanceIndex ) ) ).r );
196
200
 
@@ -8,7 +8,7 @@ import { vec3 } from '../shadernode/ShaderNode.js';
8
8
  export const normalGeometry = /*#__PURE__*/ attribute( 'normal', 'vec3', vec3( 0, 1, 0 ) );
9
9
  export const normalLocal = /*#__PURE__*/ normalGeometry.toVar( 'normalLocal' );
10
10
  export const normalView = /*#__PURE__*/ varying( modelNormalMatrix.mul( normalLocal ), 'v_normalView' ).normalize().toVar( 'normalView' );
11
- export const normalWorld = /*#__PURE__*/ varying( normalView.transformDirection( cameraViewMatrix ), 'v_normalWorld' ).normalize().toVar( 'transformedNormalWorld' );
11
+ export const normalWorld = /*#__PURE__*/ varying( normalView.transformDirection( cameraViewMatrix ), 'v_normalWorld' ).normalize().toVar( 'normalWorld' );
12
12
  export const transformedNormalView = /*#__PURE__*/ property( 'vec3', 'transformedNormalView' );
13
13
  export const transformedNormalWorld = /*#__PURE__*/ transformedNormalView.transformDirection( cameraViewMatrix ).normalize().toVar( 'transformedNormalWorld' );
14
14
  export const transformedClearcoatNormalView = /*#__PURE__*/ property( 'vec3', 'transformedClearcoatNormalView' );
@@ -3,7 +3,7 @@ import { NodeUpdateType } from '../core/constants.js';
3
3
  import UniformNode from '../core/UniformNode.js';
4
4
  import { nodeProxy } from '../shadernode/ShaderNode.js';
5
5
 
6
- import { Vector3 } from 'three';
6
+ import { Vector3 } from '../../math/Vector3.js';
7
7
 
8
8
  class Object3DNode extends Node {
9
9
 
@@ -49,7 +49,7 @@ class ReferenceNode extends Node {
49
49
  this.count = count;
50
50
 
51
51
  this.properties = property.split( '.' );
52
- this.reference = null;
52
+ this.reference = object;
53
53
  this.node = null;
54
54
 
55
55
  this.updateType = NodeUpdateType.OBJECT;
@@ -1,6 +1,10 @@
1
1
  import { cameraViewMatrix } from './CameraNode.js';
2
2
  import { transformedNormalView } from './NormalNode.js';
3
3
  import { positionViewDirection } from './PositionNode.js';
4
+ import { materialRefractionRatio } from './MaterialNode.js';
4
5
 
5
6
  export const reflectView = /*#__PURE__*/ positionViewDirection.negate().reflect( transformedNormalView );
7
+ export const refractView = /*#__PURE__*/ positionViewDirection.negate().refract( transformedNormalView, materialRefractionRatio );
8
+
6
9
  export const reflectVector = /*#__PURE__*/ reflectView.transformDirection( cameraViewMatrix ).toVar( 'reflectVector' );
10
+ export const refractVector = /*#__PURE__*/ refractView.transformDirection( cameraViewMatrix ).toVar( 'reflectVector' );
@@ -4,6 +4,7 @@ import { addNodeClass } from '../core/Node.js';
4
4
  import { nodeObject } from '../shadernode/ShaderNode.js';
5
5
  import { varying } from '../core/VaryingNode.js';
6
6
  import { storageElement } from '../utils/StorageArrayElementNode.js';
7
+ import { GPUBufferBindingType } from '../../renderers/webgpu/utils/WebGPUConstants.js';
7
8
 
8
9
  class StorageBufferNode extends BufferNode {
9
10
 
@@ -13,11 +14,16 @@ class StorageBufferNode extends BufferNode {
13
14
 
14
15
  this.isStorageBufferNode = true;
15
16
 
17
+ this.access = GPUBufferBindingType.Storage;
18
+
16
19
  this.bufferObject = false;
20
+ this.bufferCount = bufferCount;
17
21
 
18
22
  this._attribute = null;
19
23
  this._varying = null;
20
24
 
25
+ this.global = true;
26
+
21
27
  if ( value.isStorageBufferAttribute !== true && value.isStorageInstancedBufferAttribute !== true ) {
22
28
 
23
29
  // TOOD: Improve it, possibly adding a new property to the BufferAttribute to identify it as a storage buffer read-only attribute in Renderer
@@ -29,6 +35,30 @@ class StorageBufferNode extends BufferNode {
29
35
 
30
36
  }
31
37
 
38
+ getHash( builder ) {
39
+
40
+ if ( this.bufferCount === 0 ) {
41
+
42
+ let bufferData = builder.globalCache.getData( this.value );
43
+
44
+ if ( bufferData === undefined ) {
45
+
46
+ bufferData = {
47
+ node: this
48
+ };
49
+
50
+ builder.globalCache.setData( this.value, bufferData );
51
+
52
+ }
53
+
54
+ return bufferData.node.uuid;
55
+
56
+ }
57
+
58
+ return this.uuid;
59
+
60
+ }
61
+
32
62
  getInputType( /*builder*/ ) {
33
63
 
34
64
  return 'storageBuffer';
@@ -49,9 +79,27 @@ class StorageBufferNode extends BufferNode {
49
79
 
50
80
  }
51
81
 
82
+ setAccess( value ) {
83
+
84
+ this.access = value;
85
+
86
+ return this;
87
+
88
+ }
89
+
90
+ toReadOnly() {
91
+
92
+ return this.setAccess( GPUBufferBindingType.ReadOnlyStorage );
93
+
94
+ }
95
+
52
96
  generate( builder ) {
53
97
 
54
- if ( builder.isAvailable( 'storageBuffer' ) ) return super.generate( builder );
98
+ if ( builder.isAvailable( 'storageBuffer' ) ) {
99
+
100
+ return super.generate( builder );
101
+
102
+ }
55
103
 
56
104
  const nodeType = this.getNodeType( builder );
57
105
 
@@ -75,6 +123,7 @@ class StorageBufferNode extends BufferNode {
75
123
 
76
124
  export default StorageBufferNode;
77
125
 
126
+ // Read-Write Storage
78
127
  export const storage = ( value, type, count ) => nodeObject( new StorageBufferNode( value, type, count ) );
79
128
  export const storageObject = ( value, type, count ) => nodeObject( new StorageBufferNode( value, type, count ).setBufferObject( true ) );
80
129
 
@@ -57,6 +57,18 @@ class StorageTextureNode extends TextureNode {
57
57
 
58
58
  }
59
59
 
60
+ toReadOnly() {
61
+
62
+ return this.setAccess( GPUStorageTextureAccess.ReadOnly );
63
+
64
+ }
65
+
66
+ toWriteOnly() {
67
+
68
+ return this.setAccess( GPUStorageTextureAccess.WriteOnly );
69
+
70
+ }
71
+
60
72
  generateStore( builder ) {
61
73
 
62
74
  const properties = builder.getNodeProperties( this );
@@ -79,9 +91,6 @@ export default StorageTextureNode;
79
91
 
80
92
  export const storageTexture = nodeProxy( StorageTextureNode );
81
93
 
82
- export const storageTextureReadOnly = ( value, uvNode, storeNode ) => storageTexture( value, uvNode, storeNode ).setAccess( 'read-only' );
83
- export const storageTextureReadWrite = ( value, uvNode, storeNode ) => storageTexture( value, uvNode, storeNode ).setAccess( 'read-write' );
84
-
85
94
  export const textureStore = ( value, uvNode, storeNode ) => {
86
95
 
87
96
  const node = storageTexture( value, uvNode, storeNode );
@@ -8,9 +8,11 @@ import { maxMipLevel } from '../utils/MaxMipLevelNode.js';
8
8
  import { addNodeElement, nodeProxy, vec3, nodeObject } from '../shadernode/ShaderNode.js';
9
9
  import { NodeUpdateType } from '../core/constants.js';
10
10
 
11
+ import { IntType, UnsignedIntType } from '../../constants.js';
12
+
11
13
  class TextureNode extends UniformNode {
12
14
 
13
- constructor( value, uvNode = null, levelNode = null ) {
15
+ constructor( value, uvNode = null, levelNode = null, biasNode = null ) {
14
16
 
15
17
  super( value );
16
18
 
@@ -18,6 +20,7 @@ class TextureNode extends UniformNode {
18
20
 
19
21
  this.uvNode = uvNode;
20
22
  this.levelNode = levelNode;
23
+ this.biasNode = biasNode;
21
24
  this.compareNode = null;
22
25
  this.depthNode = null;
23
26
  this.gradNode = null;
@@ -29,6 +32,7 @@ class TextureNode extends UniformNode {
29
32
  this.referenceNode = null;
30
33
 
31
34
  this._value = value;
35
+ this._matrixUniform = null;
32
36
 
33
37
  this.setUpdateMatrix( uvNode === null );
34
38
 
@@ -64,6 +68,16 @@ class TextureNode extends UniformNode {
64
68
 
65
69
  if ( this.value.isDepthTexture === true ) return 'float';
66
70
 
71
+ if ( this.value.type === UnsignedIntType ) {
72
+
73
+ return 'uvec4';
74
+
75
+ } else if ( this.value.type === IntType ) {
76
+
77
+ return 'ivec4';
78
+
79
+ }
80
+
67
81
  return 'vec4';
68
82
 
69
83
  }
@@ -88,9 +102,10 @@ class TextureNode extends UniformNode {
88
102
 
89
103
  getTransformedUV( uvNode ) {
90
104
 
91
- const texture = this.value;
105
+ if ( this._matrixUniform === null ) this._matrixUniform = uniform( this.value.matrix );
106
+
107
+ return this._matrixUniform.mul( vec3( uvNode, 1 ) ).xy;
92
108
 
93
- return uniform( texture.matrix ).mul( vec3( uvNode, 1 ) ).xy;
94
109
 
95
110
  }
96
111
 
@@ -120,6 +135,7 @@ class TextureNode extends UniformNode {
120
135
  setup( builder ) {
121
136
 
122
137
  const properties = builder.getNodeProperties( this );
138
+ properties.referenceNode = this.referenceNode;
123
139
 
124
140
  //
125
141
 
@@ -155,6 +171,7 @@ class TextureNode extends UniformNode {
155
171
 
156
172
  properties.uvNode = uvNode;
157
173
  properties.levelNode = levelNode;
174
+ properties.biasNode = this.biasNode;
158
175
  properties.compareNode = this.compareNode;
159
176
  properties.gradNode = this.gradNode;
160
177
  properties.depthNode = this.depthNode;
@@ -167,7 +184,7 @@ class TextureNode extends UniformNode {
167
184
 
168
185
  }
169
186
 
170
- generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, depthSnippet, compareSnippet, gradSnippet ) {
187
+ generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet ) {
171
188
 
172
189
  const texture = this.value;
173
190
 
@@ -177,6 +194,10 @@ class TextureNode extends UniformNode {
177
194
 
178
195
  snippet = builder.generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet, depthSnippet );
179
196
 
197
+ } else if ( biasSnippet ) {
198
+
199
+ snippet = builder.generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet, depthSnippet );
200
+
180
201
  } else if ( gradSnippet ) {
181
202
 
182
203
  snippet = builder.generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet, depthSnippet );
@@ -229,10 +250,11 @@ class TextureNode extends UniformNode {
229
250
 
230
251
  if ( propertyName === undefined ) {
231
252
 
232
- const { uvNode, levelNode, compareNode, depthNode, gradNode } = properties;
253
+ const { uvNode, levelNode, biasNode, compareNode, depthNode, gradNode } = properties;
233
254
 
234
255
  const uvSnippet = this.generateUV( builder, uvNode );
235
256
  const levelSnippet = levelNode ? levelNode.build( builder, 'float' ) : null;
257
+ const biasSnippet = biasNode ? biasNode.build( builder, 'float' ) : null;
236
258
  const depthSnippet = depthNode ? depthNode.build( builder, 'int' ) : null;
237
259
  const compareSnippet = compareNode ? compareNode.build( builder, 'float' ) : null;
238
260
  const gradSnippet = gradNode ? [ gradNode[ 0 ].build( builder, 'vec2' ), gradNode[ 1 ].build( builder, 'vec2' ) ] : null;
@@ -241,16 +263,12 @@ class TextureNode extends UniformNode {
241
263
 
242
264
  propertyName = builder.getPropertyName( nodeVar );
243
265
 
244
- const snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, depthSnippet, compareSnippet, gradSnippet );
266
+ const snippet = this.generateSnippet( builder, textureProperty, uvSnippet, levelSnippet, biasSnippet, depthSnippet, compareSnippet, gradSnippet );
245
267
 
246
268
  builder.addLineFlowCode( `${propertyName} = ${snippet}` );
247
269
 
248
- if ( builder.context.tempWrite !== false ) {
249
-
250
- nodeData.snippet = snippet;
251
- nodeData.propertyName = propertyName;
252
-
253
- }
270
+ nodeData.snippet = snippet;
271
+ nodeData.propertyName = propertyName;
254
272
 
255
273
  }
256
274
 
@@ -288,17 +306,17 @@ class TextureNode extends UniformNode {
288
306
  uv( uvNode ) {
289
307
 
290
308
  const textureNode = this.clone();
291
- textureNode.uvNode = uvNode;
309
+ textureNode.uvNode = nodeObject( uvNode );
292
310
  textureNode.referenceNode = this;
293
311
 
294
312
  return nodeObject( textureNode );
295
313
 
296
314
  }
297
315
 
298
- blur( levelNode ) {
316
+ blur( amountNode ) {
299
317
 
300
318
  const textureNode = this.clone();
301
- textureNode.levelNode = levelNode.mul( maxMipLevel( textureNode ) );
319
+ textureNode.biasNode = nodeObject( amountNode ).mul( maxMipLevel( textureNode ) );
302
320
  textureNode.referenceNode = this;
303
321
 
304
322
  return nodeObject( textureNode );
@@ -308,10 +326,10 @@ class TextureNode extends UniformNode {
308
326
  level( levelNode ) {
309
327
 
310
328
  const textureNode = this.clone();
311
- textureNode.levelNode = levelNode;
329
+ textureNode.levelNode = nodeObject( levelNode );
312
330
  textureNode.referenceNode = this;
313
331
 
314
- return textureNode;
332
+ return nodeObject( textureNode );
315
333
 
316
334
  }
317
335
 
@@ -321,6 +339,16 @@ class TextureNode extends UniformNode {
321
339
 
322
340
  }
323
341
 
342
+ bias( biasNode ) {
343
+
344
+ const textureNode = this.clone();
345
+ textureNode.biasNode = nodeObject( biasNode );
346
+ textureNode.referenceNode = this;
347
+
348
+ return nodeObject( textureNode );
349
+
350
+ }
351
+
324
352
  compare( compareNode ) {
325
353
 
326
354
  const textureNode = this.clone();
@@ -359,6 +387,9 @@ class TextureNode extends UniformNode {
359
387
  super.serialize( data );
360
388
 
361
389
  data.value = this.value.toJSON( data.meta ).uuid;
390
+ data.sampler = this.sampler;
391
+ data.updateMatrix = this.updateMatrix;
392
+ data.updateType = this.updateType;
362
393
 
363
394
  }
364
395
 
@@ -367,12 +398,18 @@ class TextureNode extends UniformNode {
367
398
  super.deserialize( data );
368
399
 
369
400
  this.value = data.meta.textures[ data.value ];
401
+ this.sampler = data.sampler;
402
+ this.updateMatrix = data.updateMatrix;
403
+ this.updateType = data.updateType;
370
404
 
371
405
  }
372
406
 
373
407
  update() {
374
408
 
375
409
  const texture = this.value;
410
+ const matrixUniform = this._matrixUniform;
411
+
412
+ if ( matrixUniform !== null ) matrixUniform.value = texture.matrix;
376
413
 
377
414
  if ( texture.matrixAutoUpdate === true ) {
378
415
 
@@ -384,7 +421,7 @@ class TextureNode extends UniformNode {
384
421
 
385
422
  clone() {
386
423
 
387
- const newNode = new this.constructor( this.value, this.uvNode, this.levelNode );
424
+ const newNode = new this.constructor( this.value, this.uvNode, this.levelNode, this.biasNode );
388
425
  newNode.sampler = this.sampler;
389
426
 
390
427
  return newNode;