super-three 0.133.4 → 0.136.1

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 (409) hide show
  1. package/LICENSE +1 -1
  2. package/build/three.js +2285 -1983
  3. package/build/three.min.js +1 -1
  4. package/build/three.module.js +5983 -5358
  5. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
  6. package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  7. package/examples/fonts/open-sans/open-sans.css +9 -0
  8. package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
  9. package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
  10. package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
  11. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
  12. package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
  13. package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
  14. package/examples/js/animation/CCDIKSolver.js +0 -1
  15. package/examples/js/animation/MMDPhysics.js +2 -4
  16. package/examples/js/cameras/CinematicCamera.js +2 -7
  17. package/examples/js/controls/ArcballControls.js +99 -72
  18. package/examples/js/controls/DragControls.js +7 -0
  19. package/examples/js/controls/OrbitControls.js +5 -36
  20. package/examples/js/controls/TrackballControls.js +3 -2
  21. package/examples/js/controls/TransformControls.js +24 -1
  22. package/examples/js/csm/CSM.js +2 -2
  23. package/examples/js/csm/CSMFrustum.js +133 -0
  24. package/examples/js/curves/CurveExtras.js +0 -2
  25. package/examples/js/effects/AsciiEffect.js +2 -9
  26. package/examples/js/exporters/GLTFExporter.js +148 -64
  27. package/examples/js/exporters/MMDExporter.js +1 -1
  28. package/examples/js/exporters/USDZExporter.js +45 -26
  29. package/examples/js/geometries/ConvexGeometry.js +1 -1
  30. package/examples/js/geometries/TeapotGeometry.js +0 -1
  31. package/examples/js/interactive/SelectionBox.js +2 -0
  32. package/examples/js/interactive/SelectionHelper.js +22 -7
  33. package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
  34. package/examples/js/lines/LineMaterial.js +58 -20
  35. package/examples/js/lines/LineSegments2.js +29 -24
  36. package/examples/js/loaders/3DMLoader.js +24 -11
  37. package/examples/js/loaders/3MFLoader.js +2 -2
  38. package/examples/js/loaders/AMFLoader.js +0 -2
  39. package/examples/js/loaders/BasisTextureLoader.js +1 -0
  40. package/examples/js/loaders/ColladaLoader.js +61 -4
  41. package/examples/js/loaders/EXRLoader.js +201 -272
  42. package/examples/js/loaders/FBXLoader.js +4 -5
  43. package/examples/js/loaders/GLTFLoader.js +98 -35
  44. package/examples/js/loaders/HDRCubeTextureLoader.js +0 -10
  45. package/examples/js/loaders/KTX2Loader.js +23 -2
  46. package/examples/js/loaders/KTXLoader.js +1 -1
  47. package/examples/js/loaders/LDrawLoader.js +1169 -901
  48. package/examples/js/loaders/LUT3dlLoader.js +19 -10
  49. package/examples/js/loaders/LUTCubeLoader.js +5 -4
  50. package/examples/js/loaders/LWOLoader.js +8 -6
  51. package/examples/js/loaders/LogLuvLoader.js +766 -0
  52. package/examples/js/loaders/MMDLoader.js +0 -1
  53. package/examples/js/loaders/NRRDLoader.js +9 -2
  54. package/examples/js/loaders/OBJLoader.js +0 -2
  55. package/examples/js/loaders/PLYLoader.js +33 -8
  56. package/examples/js/loaders/RGBELoader.js +8 -22
  57. package/examples/js/loaders/RGBMLoader.js +56 -6
  58. package/examples/js/loaders/SVGLoader.js +12 -6
  59. package/examples/js/loaders/TDSLoader.js +237 -271
  60. package/examples/js/loaders/VOXLoader.js +1 -0
  61. package/examples/js/loaders/VRMLLoader.js +11 -22
  62. package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
  63. package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
  64. package/examples/js/math/ConvexHull.js +7 -13
  65. package/examples/js/math/ImprovedNoise.js +1 -1
  66. package/examples/js/misc/GPUComputationRenderer.js +3 -1
  67. package/examples/js/misc/Volume.js +2 -2
  68. package/examples/js/modifiers/CurveModifier.js +8 -7
  69. package/examples/js/modifiers/EdgeSplitModifier.js +1 -1
  70. package/examples/js/modifiers/SimplifyModifier.js +1 -1
  71. package/examples/js/objects/Lensflare.js +2 -10
  72. package/examples/js/objects/MarchingCubes.js +42 -128
  73. package/examples/js/objects/Reflector.js +8 -13
  74. package/examples/js/objects/ReflectorForSSRPass.js +0 -10
  75. package/examples/js/objects/Refractor.js +8 -13
  76. package/examples/js/objects/Sky.js +1 -1
  77. package/examples/js/objects/Water.js +3 -15
  78. package/examples/js/objects/Water2.js +4 -7
  79. package/examples/js/postprocessing/GlitchPass.js +6 -5
  80. package/examples/js/postprocessing/SMAAPass.js +2 -9
  81. package/examples/js/postprocessing/SSAOPass.js +10 -21
  82. package/examples/js/postprocessing/SavePass.js +1 -5
  83. package/examples/js/renderers/CSS2DRenderer.js +4 -4
  84. package/examples/js/renderers/CSS3DRenderer.js +4 -4
  85. package/examples/js/shaders/ConvolutionShader.js +0 -1
  86. package/examples/js/shaders/DigitalGlitch.js +3 -3
  87. package/examples/js/shaders/FXAAShader.js +1 -1
  88. package/examples/js/shaders/FilmShader.js +1 -1
  89. package/examples/js/shaders/GammaCorrectionShader.js +1 -1
  90. package/examples/js/shaders/HorizontalBlurShader.js +1 -2
  91. package/examples/js/shaders/MMDToonShader.js +0 -1
  92. package/examples/js/shaders/SSAOShader.js +1 -1
  93. package/examples/js/shaders/SSRShader.js +1 -1
  94. package/examples/js/shaders/SSRrShader.js +1 -1
  95. package/examples/js/shaders/VerticalBlurShader.js +1 -2
  96. package/examples/js/utils/GeometryUtils.js +1 -1
  97. package/examples/jsm/animation/CCDIKSolver.js +0 -1
  98. package/examples/jsm/animation/MMDPhysics.js +1 -3
  99. package/examples/jsm/cameras/CinematicCamera.js +2 -5
  100. package/examples/jsm/{WebGL.js → capabilities/WebGL.js} +2 -2
  101. package/examples/jsm/{renderers/webgpu → capabilities}/WebGPU.js +1 -1
  102. package/examples/jsm/controls/ArcballControls.js +80 -77
  103. package/examples/jsm/controls/DragControls.js +7 -0
  104. package/examples/jsm/controls/OrbitControls.js +9 -51
  105. package/examples/jsm/controls/TrackballControls.js +1 -1
  106. package/examples/jsm/controls/TransformControls.js +24 -1
  107. package/examples/jsm/csm/CSM.js +3 -3
  108. package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
  109. package/examples/jsm/curves/CurveExtras.js +0 -2
  110. package/examples/jsm/effects/AsciiEffect.js +2 -9
  111. package/examples/jsm/exporters/GLTFExporter.js +169 -99
  112. package/examples/jsm/exporters/MMDExporter.js +1 -1
  113. package/examples/jsm/exporters/USDZExporter.js +47 -26
  114. package/examples/jsm/geometries/ConvexGeometry.js +1 -1
  115. package/examples/jsm/geometries/TeapotGeometry.js +0 -1
  116. package/examples/jsm/interactive/SelectionBox.js +1 -0
  117. package/examples/jsm/interactive/SelectionHelper.js +19 -7
  118. package/examples/jsm/libs/flow.module.js +3338 -0
  119. package/examples/jsm/libs/lil-gui.module.min.js +8 -0
  120. package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
  121. package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
  122. package/examples/jsm/lines/LineMaterial.js +59 -23
  123. package/examples/jsm/lines/LineSegments2.js +22 -18
  124. package/examples/jsm/loaders/3DMLoader.js +18 -12
  125. package/examples/jsm/loaders/3MFLoader.js +2 -2
  126. package/examples/jsm/loaders/AMFLoader.js +0 -2
  127. package/examples/jsm/loaders/BasisTextureLoader.js +7 -0
  128. package/examples/jsm/loaders/ColladaLoader.js +61 -4
  129. package/examples/jsm/loaders/EXRLoader.js +200 -306
  130. package/examples/jsm/loaders/FBXLoader.js +4 -5
  131. package/examples/jsm/loaders/GLTFLoader.js +102 -40
  132. package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -17
  133. package/examples/jsm/loaders/KTX2Loader.js +30 -2
  134. package/examples/jsm/loaders/KTXLoader.js +1 -1
  135. package/examples/jsm/loaders/LDrawLoader.js +1159 -898
  136. package/examples/jsm/loaders/LUT3dlLoader.js +19 -12
  137. package/examples/jsm/loaders/LUTCubeLoader.js +5 -5
  138. package/examples/jsm/loaders/LWOLoader.js +8 -6
  139. package/examples/jsm/loaders/LogLuvLoader.js +606 -0
  140. package/examples/jsm/loaders/MMDLoader.js +0 -1
  141. package/examples/jsm/loaders/NRRDLoader.js +10 -2
  142. package/examples/jsm/loaders/OBJLoader.js +0 -2
  143. package/examples/jsm/loaders/PLYLoader.js +34 -8
  144. package/examples/jsm/loaders/RGBELoader.js +7 -28
  145. package/examples/jsm/loaders/RGBMLoader.js +62 -8
  146. package/examples/jsm/loaders/SVGLoader.js +15 -7
  147. package/examples/jsm/loaders/TDSLoader.js +236 -275
  148. package/examples/jsm/loaders/VOXLoader.js +1 -0
  149. package/examples/jsm/loaders/VRMLLoader.js +11 -23
  150. package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
  151. package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
  152. package/examples/jsm/math/ConvexHull.js +7 -13
  153. package/examples/jsm/math/ImprovedNoise.js +1 -1
  154. package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
  155. package/examples/jsm/misc/Volume.js +2 -2
  156. package/examples/jsm/modifiers/CurveModifier.js +9 -8
  157. package/examples/jsm/modifiers/EdgeSplitModifier.js +1 -1
  158. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  159. package/examples/jsm/node-editor/NodeEditor.js +455 -0
  160. package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
  161. package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
  162. package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
  163. package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
  164. package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
  165. package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
  166. package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
  167. package/examples/jsm/node-editor/examples/rim.json +1 -0
  168. package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
  169. package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
  170. package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
  171. package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
  172. package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
  173. package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
  174. package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +108 -0
  175. package/examples/jsm/node-editor/math/DotEditor.js +36 -0
  176. package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
  177. package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
  178. package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
  179. package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
  180. package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
  181. package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
  182. package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
  183. package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
  184. package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
  185. package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
  186. package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
  187. package/examples/jsm/nodes/materials/nodes/StandardNode.js +7 -6
  188. package/examples/jsm/nodes/math/MathNode.js +12 -0
  189. package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
  190. package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
  191. package/examples/jsm/nodes/utils/ColorSpaceNode.js +5 -177
  192. package/examples/jsm/objects/Lensflare.js +5 -16
  193. package/examples/jsm/objects/MarchingCubes.js +46 -152
  194. package/examples/jsm/objects/Reflector.js +8 -16
  195. package/examples/jsm/objects/ReflectorForSSRPass.js +0 -12
  196. package/examples/jsm/objects/Refractor.js +8 -16
  197. package/examples/jsm/objects/Sky.js +1 -1
  198. package/examples/jsm/objects/Water.js +3 -18
  199. package/examples/jsm/objects/Water2.js +4 -8
  200. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
  201. package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
  202. package/examples/jsm/postprocessing/BloomPass.js +1 -1
  203. package/examples/jsm/postprocessing/BokehPass.js +1 -1
  204. package/examples/jsm/postprocessing/ClearPass.js +1 -1
  205. package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
  206. package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
  207. package/examples/jsm/postprocessing/EffectComposer.js +3 -3
  208. package/examples/jsm/postprocessing/FilmPass.js +1 -1
  209. package/examples/jsm/postprocessing/GlitchPass.js +10 -7
  210. package/examples/jsm/postprocessing/HalftonePass.js +1 -1
  211. package/examples/jsm/postprocessing/MaskPass.js +1 -1
  212. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  213. package/examples/jsm/postprocessing/RenderPass.js +1 -1
  214. package/examples/jsm/postprocessing/SAOPass.js +2 -2
  215. package/examples/jsm/postprocessing/SMAAPass.js +3 -12
  216. package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
  217. package/examples/jsm/postprocessing/SSAOPass.js +15 -26
  218. package/examples/jsm/postprocessing/SSRPass.js +1 -1
  219. package/examples/jsm/postprocessing/SSRrPass.js +1 -1
  220. package/examples/jsm/postprocessing/SavePass.js +2 -4
  221. package/examples/jsm/postprocessing/ShaderPass.js +1 -1
  222. package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
  223. package/examples/jsm/postprocessing/TexturePass.js +1 -1
  224. package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
  225. package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
  226. package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
  227. package/examples/jsm/renderers/nodes/Nodes.js +17 -13
  228. package/examples/jsm/renderers/nodes/ShaderNode.js +229 -49
  229. package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
  230. package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
  231. package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
  232. package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
  233. package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
  234. package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
  235. package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
  236. package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
  237. package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
  238. package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
  239. package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
  240. package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
  241. package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
  242. package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
  243. package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
  244. package/examples/jsm/renderers/nodes/core/Node.js +32 -10
  245. package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
  246. package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
  247. package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
  248. package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
  249. package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
  250. package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
  251. package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
  252. package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
  253. package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
  254. package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
  255. package/examples/jsm/renderers/nodes/core/constants.js +2 -0
  256. package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +43 -63
  257. package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
  258. package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
  259. package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
  260. package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
  261. package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
  262. package/examples/jsm/renderers/nodes/inputs/TextureNode.js +13 -10
  263. package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
  264. package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
  265. package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
  266. package/examples/jsm/renderers/nodes/math/MathNode.js +91 -37
  267. package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
  268. package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
  269. package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
  270. package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
  271. package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
  272. package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
  273. package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
  274. package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
  275. package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
  276. package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
  277. package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
  278. package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
  279. package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
  280. package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
  281. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +192 -95
  282. package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
  283. package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
  284. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
  285. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +10 -9
  286. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
  287. package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
  288. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
  289. package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
  290. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +44 -65
  291. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +13 -31
  292. package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
  293. package/examples/jsm/renderers/webgpu/WebGPUTextures.js +35 -29
  294. package/examples/jsm/renderers/webgpu/constants.js +2 -2
  295. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +459 -95
  296. package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
  297. package/examples/jsm/shaders/ConvolutionShader.js +0 -1
  298. package/examples/jsm/shaders/DigitalGlitch.js +3 -3
  299. package/examples/jsm/shaders/FXAAShader.js +1 -1
  300. package/examples/jsm/shaders/FilmShader.js +1 -1
  301. package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
  302. package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
  303. package/examples/jsm/shaders/MMDToonShader.js +0 -1
  304. package/examples/jsm/shaders/SSAOShader.js +1 -1
  305. package/examples/jsm/shaders/SSRShader.js +1 -1
  306. package/examples/jsm/shaders/SSRrShader.js +1 -1
  307. package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
  308. package/examples/jsm/utils/GeometryUtils.js +1 -1
  309. package/examples/jsm/utils/LDrawUtils.js +195 -0
  310. package/examples/jsm/utils/WorkerPool.js +11 -11
  311. package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
  312. package/examples/jsm/webxr/VRButton.js +24 -0
  313. package/examples/jsm/webxr/XREstimatedLight.js +2 -0
  314. package/package.json +27 -18
  315. package/src/Three.Legacy.js +18 -0
  316. package/src/Three.js +1 -3
  317. package/src/animation/AnimationMixer.js +1 -0
  318. package/src/cameras/CubeCamera.js +2 -0
  319. package/src/cameras/StereoCamera.js +8 -7
  320. package/src/constants.js +3 -23
  321. package/src/core/Layers.js +7 -1
  322. package/src/core/Object3D.js +3 -1
  323. package/src/extras/ImageUtils.js +63 -0
  324. package/src/extras/PMREMGenerator.js +49 -185
  325. package/src/extras/core/Interpolations.js +1 -1
  326. package/src/geometries/LatheGeometry.js +70 -47
  327. package/src/helpers/CameraHelper.js +1 -1
  328. package/src/loaders/FileLoader.js +98 -144
  329. package/src/loaders/ImageLoader.js +9 -4
  330. package/src/loaders/LoaderUtils.js +26 -0
  331. package/src/loaders/MaterialLoader.js +8 -5
  332. package/src/loaders/ObjectLoader.js +2 -0
  333. package/src/materials/Material.js +8 -8
  334. package/src/materials/MeshPhysicalMaterial.js +20 -14
  335. package/src/math/Color.js +1 -39
  336. package/src/math/MathUtils.js +5 -16
  337. package/src/math/Quaternion.js +1 -1
  338. package/src/math/Ray.js +2 -2
  339. package/src/math/Sphere.js +10 -1
  340. package/src/objects/Skeleton.js +1 -0
  341. package/src/renderers/WebGLCubeRenderTarget.js +0 -2
  342. package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
  343. package/src/renderers/WebGLRenderer.js +106 -199
  344. package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
  345. package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
  346. package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
  347. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +0 -2
  348. package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -78
  349. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  350. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -2
  351. package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
  352. package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -1
  353. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +1 -1
  354. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
  355. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +28 -2
  356. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +10 -3
  357. package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +1 -2
  358. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  359. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  360. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +9 -8
  361. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -3
  362. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -3
  363. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +1 -1
  364. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +1 -2
  365. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +23 -5
  366. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
  367. package/src/renderers/shaders/ShaderLib.js +8 -6
  368. package/src/renderers/shaders/UniformsLib.js +1 -2
  369. package/src/renderers/webgl/WebGLCapabilities.js +0 -2
  370. package/src/renderers/webgl/WebGLCubeMaps.js +0 -4
  371. package/src/renderers/webgl/WebGLCubeUVMaps.js +29 -16
  372. package/src/renderers/webgl/WebGLExtensions.js +1 -0
  373. package/src/renderers/webgl/WebGLMaterials.js +27 -15
  374. package/src/renderers/webgl/WebGLMorphtargets.js +13 -0
  375. package/src/renderers/webgl/WebGLProgram.js +12 -37
  376. package/src/renderers/webgl/WebGLPrograms.js +192 -70
  377. package/src/renderers/webgl/WebGLRenderLists.js +4 -14
  378. package/src/renderers/webgl/WebGLShaderCache.js +120 -0
  379. package/src/renderers/webgl/WebGLShadowMap.js +14 -5
  380. package/src/renderers/webgl/WebGLState.js +157 -17
  381. package/src/renderers/webgl/WebGLTextures.js +442 -83
  382. package/src/renderers/webgl/WebGLUniforms.js +45 -1
  383. package/src/renderers/webgl/WebGLUtils.js +86 -28
  384. package/src/renderers/webxr/WebXRManager.js +77 -109
  385. package/src/scenes/Scene.js +1 -1
  386. package/src/textures/DataTexture.js +0 -2
  387. package/src/textures/DataTexture2DArray.js +0 -2
  388. package/src/textures/DataTexture3D.js +0 -2
  389. package/src/textures/FramebufferTexture.js +25 -0
  390. package/src/textures/Texture.js +8 -1
  391. package/src/textures/VideoTexture.js +1 -3
  392. package/examples/js/WebGL.js +0 -90
  393. package/examples/js/controls/DeviceOrientationControls.js +0 -147
  394. package/examples/js/libs/dat.gui.min.js +0 -14
  395. package/examples/js/utils/RoughnessMipmapper.js +0 -278
  396. package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
  397. package/examples/jsm/libs/dat.gui.module.js +0 -3575
  398. package/examples/jsm/libs/glslang.js +0 -78
  399. package/examples/jsm/libs/glslang.wasm +0 -0
  400. package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
  401. package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
  402. package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
  403. package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
  404. package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
  405. package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
  406. package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
  407. package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
  408. package/examples/jsm/utils/RoughnessMipmapper.js +0 -300
  409. package/src/extras/objects/ImmediateRenderObject.js +0 -31
@@ -1,5 +1,6 @@
1
1
  import NodeBuilder from '../../nodes/core/NodeBuilder.js';
2
- import NodeSlot from '../../nodes/core/NodeSlot.js';
2
+ import SlotNode from './SlotNode.js';
3
+ import GLSLNodeParser from '../../nodes/parsers/GLSLNodeParser.js';
3
4
  import WebGLPhysicalContextNode from './WebGLPhysicalContextNode.js';
4
5
 
5
6
  import { ShaderChunk, LinearEncoding, RGBAFormat, UnsignedByteType, sRGBEncoding } from 'three';
@@ -20,17 +21,38 @@ function getShaderStageProperty( shaderStage ) {
20
21
 
21
22
  class WebGLNodeBuilder extends NodeBuilder {
22
23
 
23
- constructor( material, renderer, shader ) {
24
+ constructor( object, renderer, shader ) {
24
25
 
25
- super( material, renderer );
26
+ super( object, renderer, new GLSLNodeParser() );
26
27
 
27
28
  this.shader = shader;
29
+ this.slots = { vertex: [], fragment: [] };
28
30
 
29
- this._parseMaterial();
31
+ this._parseObject();
30
32
 
31
33
  }
32
34
 
33
- _parseMaterial() {
35
+ addSlot( shaderStage, slotNode ) {
36
+
37
+ this.slots[ shaderStage ].push( slotNode );
38
+
39
+ return this.addFlow( shaderStage, slotNode );
40
+
41
+ }
42
+
43
+ addFlowCode( code ) {
44
+
45
+ if ( ! /;\s*$/.test( code ) ) {
46
+
47
+ code += ';';
48
+
49
+ }
50
+
51
+ super.addFlowCode( code + '\n\t' );
52
+
53
+ }
54
+
55
+ _parseObject() {
34
56
 
35
57
  const material = this.material;
36
58
 
@@ -38,49 +60,49 @@ class WebGLNodeBuilder extends NodeBuilder {
38
60
 
39
61
  if ( material.colorNode && material.colorNode.isNode ) {
40
62
 
41
- this.addSlot( 'fragment', new NodeSlot( material.colorNode, 'COLOR', 'vec4' ) );
63
+ this.addSlot( 'fragment', new SlotNode( material.colorNode, 'COLOR', 'vec4' ) );
42
64
 
43
65
  }
44
66
 
45
67
  if ( material.opacityNode && material.opacityNode.isNode ) {
46
68
 
47
- this.addSlot( 'fragment', new NodeSlot( material.opacityNode, 'OPACITY', 'float' ) );
69
+ this.addSlot( 'fragment', new SlotNode( material.opacityNode, 'OPACITY', 'float' ) );
48
70
 
49
71
  }
50
72
 
51
73
  if ( material.normalNode && material.normalNode.isNode ) {
52
74
 
53
- this.addSlot( 'fragment', new NodeSlot( material.normalNode, 'NORMAL', 'vec3' ) );
75
+ this.addSlot( 'fragment', new SlotNode( material.normalNode, 'NORMAL', 'vec3' ) );
54
76
 
55
77
  }
56
78
 
57
79
  if ( material.emissiveNode && material.emissiveNode.isNode ) {
58
80
 
59
- this.addSlot( 'fragment', new NodeSlot( material.emissiveNode, 'EMISSIVE', 'vec3' ) );
81
+ this.addSlot( 'fragment', new SlotNode( material.emissiveNode, 'EMISSIVE', 'vec3' ) );
60
82
 
61
83
  }
62
84
 
63
85
  if ( material.metalnessNode && material.metalnessNode.isNode ) {
64
86
 
65
- this.addSlot( 'fragment', new NodeSlot( material.metalnessNode, 'METALNESS', 'float' ) );
87
+ this.addSlot( 'fragment', new SlotNode( material.metalnessNode, 'METALNESS', 'float' ) );
66
88
 
67
89
  }
68
90
 
69
91
  if ( material.roughnessNode && material.roughnessNode.isNode ) {
70
92
 
71
- this.addSlot( 'fragment', new NodeSlot( material.roughnessNode, 'ROUGHNESS', 'float' ) );
93
+ this.addSlot( 'fragment', new SlotNode( material.roughnessNode, 'ROUGHNESS', 'float' ) );
72
94
 
73
95
  }
74
96
 
75
97
  if ( material.clearcoatNode && material.clearcoatNode.isNode ) {
76
98
 
77
- this.addSlot( 'fragment', new NodeSlot( material.clearcoatNode, 'CLEARCOAT', 'float' ) );
99
+ this.addSlot( 'fragment', new SlotNode( material.clearcoatNode, 'CLEARCOAT', 'float' ) );
78
100
 
79
101
  }
80
102
 
81
103
  if ( material.clearcoatRoughnessNode && material.clearcoatRoughnessNode.isNode ) {
82
104
 
83
- this.addSlot( 'fragment', new NodeSlot( material.clearcoatRoughnessNode, 'CLEARCOAT_ROUGHNESS', 'float' ) );
105
+ this.addSlot( 'fragment', new SlotNode( material.clearcoatRoughnessNode, 'CLEARCOAT_ROUGHNESS', 'float' ) );
84
106
 
85
107
  }
86
108
 
@@ -89,20 +111,20 @@ class WebGLNodeBuilder extends NodeBuilder {
89
111
  const envRadianceNode = new WebGLPhysicalContextNode( WebGLPhysicalContextNode.RADIANCE, material.envNode );
90
112
  const envIrradianceNode = new WebGLPhysicalContextNode( WebGLPhysicalContextNode.IRRADIANCE, material.envNode );
91
113
 
92
- this.addSlot( 'fragment', new NodeSlot( envRadianceNode, 'RADIANCE', 'vec3' ) );
93
- this.addSlot( 'fragment', new NodeSlot( envIrradianceNode, 'IRRADIANCE', 'vec3' ) );
114
+ this.addSlot( 'fragment', new SlotNode( envRadianceNode, 'RADIANCE', 'vec3' ) );
115
+ this.addSlot( 'fragment', new SlotNode( envIrradianceNode, 'IRRADIANCE', 'vec3' ) );
94
116
 
95
117
  }
96
118
 
97
- if ( material.sizeNode && material.sizeNode.isNode ) {
119
+ if ( material.positionNode && material.positionNode.isNode ) {
98
120
 
99
- this.addSlot( 'vertex', new NodeSlot( material.sizeNode, 'SIZE', 'float' ) );
121
+ this.addSlot( 'vertex', new SlotNode( material.positionNode, 'POSITION', 'vec3' ) );
100
122
 
101
123
  }
102
124
 
103
- if ( material.positionNode && material.positionNode.isNode ) {
125
+ if ( material.sizeNode && material.sizeNode.isNode ) {
104
126
 
105
- this.addSlot( 'vertex', new NodeSlot( material.positionNode, 'POSITION', 'vec3' ) );
127
+ this.addSlot( 'vertex', new SlotNode( material.sizeNode, 'SIZE', 'float' ) );
106
128
 
107
129
  }
108
130
 
@@ -194,7 +216,7 @@ class WebGLNodeBuilder extends NodeBuilder {
194
216
 
195
217
  }
196
218
 
197
- getVarys( shaderStage ) {
219
+ getVarys( /* shaderStage */ ) {
198
220
 
199
221
  let snippet = '';
200
222
 
@@ -216,7 +238,7 @@ class WebGLNodeBuilder extends NodeBuilder {
216
238
 
217
239
  const shaderProperty = getShaderStageProperty( shaderStage );
218
240
 
219
- let source = this.shader[ shaderProperty ];
241
+ let source = this[ shaderProperty ];
220
242
 
221
243
  const index = source.indexOf( snippet );
222
244
 
@@ -229,7 +251,7 @@ class WebGLNodeBuilder extends NodeBuilder {
229
251
 
230
252
  }
231
253
 
232
- this.shader[ shaderProperty ] = source;
254
+ this[ shaderProperty ] = source;
233
255
 
234
256
  }
235
257
 
@@ -276,125 +298,208 @@ class WebGLNodeBuilder extends NodeBuilder {
276
298
 
277
299
  }
278
300
 
301
+ buildCode() {
302
+
303
+ const shaderData = {};
304
+
305
+ for ( const shaderStage of shaderStages ) {
306
+
307
+ const uniforms = this.getUniforms( shaderStage );
308
+ const attributes = this.getAttributes( shaderStage );
309
+ const varys = this.getVarys( shaderStage );
310
+ const vars = this.getVars( shaderStage );
311
+ const codes = this.getCodes( shaderStage );
312
+
313
+ shaderData[ shaderStage ] = `${this.getSignature()}
314
+ // <node_builder>
315
+
316
+ // uniforms
317
+ ${uniforms}
318
+
319
+ // attributes
320
+ ${attributes}
321
+
322
+ // varys
323
+ ${varys}
324
+
325
+ // vars
326
+ ${vars}
327
+
328
+ // codes
329
+ ${codes}
330
+
331
+ // </node_builder>
332
+
333
+ ${this.shader[ getShaderStageProperty( shaderStage ) ]}
334
+ `;
335
+
336
+ }
337
+
338
+ this.vertexShader = shaderData.vertex;
339
+ this.fragmentShader = shaderData.fragment;
340
+
341
+
342
+ }
343
+
279
344
  build() {
280
345
 
281
346
  super.build();
282
347
 
283
348
  this._addSnippets();
284
- this._buildShader();
349
+ this._addUniforms();
350
+
351
+ this.shader.vertexShader = this.vertexShader;
352
+ this.shader.fragmentShader = this.fragmentShader;
285
353
 
286
354
  return this;
287
355
 
288
356
  }
289
357
 
290
- _addSnippets() {
358
+ getSlot( shaderStage, name ) {
291
359
 
292
- this.parseInclude( 'fragment', 'lights_physical_fragment' );
360
+ const slots = this.slots[ shaderStage ];
361
+
362
+ for ( const node of slots ) {
293
363
 
294
- this.addCodeAfterInclude( 'fragment', 'normal_fragment_begin',
295
- `#ifdef NODE_NORMAL
364
+ if ( node.name === name ) {
296
365
 
297
- NODE_CODE_NORMAL
298
- normal = NODE_NORMAL;
366
+ return this.getFlowData( shaderStage, node );
299
367
 
300
- #endif` );
368
+ }
369
+
370
+ }
371
+
372
+ }
373
+
374
+ _addSnippets() {
301
375
 
302
- this.addCodeAfterInclude( 'fragment', 'color_fragment',
303
- `#ifdef NODE_COLOR
376
+ this.parseInclude( 'fragment', 'lights_physical_fragment' );
304
377
 
305
- NODE_CODE_COLOR
306
- diffuseColor = NODE_COLOR;
378
+ const colorSlot = this.getSlot( 'fragment', 'COLOR' );
379
+ const opacityNode = this.getSlot( 'fragment', 'OPACITY' );
380
+ const normalSlot = this.getSlot( 'fragment', 'NORMAL' );
381
+ const emissiveNode = this.getSlot( 'fragment', 'EMISSIVE' );
382
+ const roughnessNode = this.getSlot( 'fragment', 'ROUGHNESS' );
383
+ const metalnessNode = this.getSlot( 'fragment', 'METALNESS' );
384
+ const clearcoatNode = this.getSlot( 'fragment', 'CLEARCOAT' );
385
+ const clearcoatRoughnessNode = this.getSlot( 'fragment', 'CLEARCOAT_ROUGHNESS' );
307
386
 
308
- #endif` );
387
+ const positionNode = this.getSlot( 'vertex', 'POSITION' );
388
+ const sizeNode = this.getSlot( 'vertex', 'SIZE' );
309
389
 
310
- this.addCodeAfterInclude( 'fragment', 'alphamap_fragment',
311
- `#ifdef NODE_OPACITY
390
+ if ( colorSlot !== undefined ) {
312
391
 
313
- NODE_CODE_OPACITY
314
- diffuseColor.a *= NODE_OPACITY;
392
+ this.addCodeAfterInclude(
393
+ 'fragment',
394
+ 'color_fragment',
395
+ `${colorSlot.code}\n\tdiffuseColor = ${colorSlot.result};`
396
+ );
315
397
 
316
- #endif` );
398
+ }
317
399
 
318
- this.addCodeAfterInclude( 'fragment', 'emissivemap_fragment',
319
- `#ifdef NODE_EMISSIVE
400
+ if ( opacityNode !== undefined ) {
320
401
 
321
- NODE_CODE_EMISSIVE
322
- totalEmissiveRadiance = NODE_EMISSIVE;
402
+ this.addCodeAfterInclude(
403
+ 'fragment',
404
+ 'alphatest_fragment',
405
+ `${opacityNode.code}\n\tdiffuseColor.a = ${opacityNode.result};`
406
+ );
323
407
 
324
- #endif` );
408
+ }
325
409
 
326
- this.addCodeAfterInclude( 'fragment', 'roughnessmap_fragment',
327
- `#ifdef NODE_ROUGHNESS
410
+ if ( normalSlot !== undefined ) {
328
411
 
329
- NODE_CODE_ROUGHNESS
330
- roughnessFactor = NODE_ROUGHNESS;
412
+ this.addCodeAfterInclude(
413
+ 'fragment',
414
+ 'normal_fragment_begin',
415
+ `${normalSlot.code}\n\tnormal = ${normalSlot.result};`
416
+ );
331
417
 
332
- #endif` );
418
+ }
333
419
 
334
- this.addCodeAfterInclude( 'fragment', 'metalnessmap_fragment',
335
- `#ifdef NODE_METALNESS
420
+ if ( emissiveNode !== undefined ) {
336
421
 
337
- NODE_CODE_METALNESS
338
- metalnessFactor = NODE_METALNESS;
422
+ this.addCodeAfterInclude(
423
+ 'fragment',
424
+ 'emissivemap_fragment',
425
+ `${emissiveNode.code}\n\ttotalEmissiveRadiance = ${emissiveNode.result};`
426
+ );
339
427
 
340
- #endif` );
428
+ }
341
429
 
342
- this.addCodeAfterSnippet( 'fragment', 'material.clearcoatRoughness = clearcoatRoughness;',
343
- `#ifdef NODE_CLEARCOAT
430
+ if ( roughnessNode !== undefined ) {
344
431
 
345
- NODE_CODE_CLEARCOAT
346
- material.clearcoat = NODE_CLEARCOAT;
432
+ this.addCodeAfterInclude(
433
+ 'fragment',
434
+ 'roughnessmap_fragment',
435
+ `${roughnessNode.code}\n\troughnessFactor = ${roughnessNode.result};`
436
+ );
347
437
 
348
- #endif
438
+ }
349
439
 
350
- #ifdef NODE_CLEARCOAT_ROUGHNESS
440
+ if ( metalnessNode !== undefined ) {
351
441
 
352
- NODE_CODE_CLEARCOAT_ROUGHNESS
353
- material.clearcoatRoughness = NODE_CLEARCOAT_ROUGHNESS;
442
+ this.addCodeAfterInclude(
443
+ 'fragment',
444
+ 'metalnessmap_fragment',
445
+ `${metalnessNode.code}\n\tmetalnessFactor = ${metalnessNode.result};`
446
+ );
354
447
 
355
- #endif` );
448
+ }
356
449
 
357
- this.addCodeAfterInclude( 'fragment', 'lights_fragment_begin',
358
- `#ifdef NODE_RADIANCE
450
+ if ( clearcoatNode !== undefined ) {
359
451
 
360
- NODE_CODE_RADIANCE
361
- radiance += NODE_RADIANCE;
452
+ this.addCodeAfterSnippet(
453
+ 'fragment',
454
+ 'material.clearcoatRoughness = clearcoatRoughness;',
455
+ `${clearcoatNode.code}\n\tmaterial.clearcoat = ${clearcoatNode.result};`
456
+ );
362
457
 
363
- NODE_CODE_IRRADIANCE
364
- iblIrradiance += PI * NODE_IRRADIANCE;
458
+ }
365
459
 
366
- #endif` );
460
+ if ( clearcoatRoughnessNode !== undefined ) {
367
461
 
368
- this.addCodeAfterInclude( 'vertex', 'begin_vertex',
369
- `#ifdef NODE_POSITION
462
+ this.addCodeAfterSnippet(
463
+ 'fragment',
464
+ 'material.clearcoatRoughness = clearcoatRoughness;',
465
+ `${clearcoatRoughnessNode.code}\n\tmaterial.clearcoatRoughness = ${clearcoatRoughnessNode.result};`
466
+ );
370
467
 
371
- NODE_CODE_POSITION
372
- transformed = NODE_POSITION;
468
+ }
373
469
 
374
- #endif` );
470
+ if ( positionNode !== undefined ) {
375
471
 
376
- this.addCodeAfterSnippet( 'vertex', 'gl_PointSize = size;',
377
- `#ifdef NODE_SIZE
472
+ this.addCodeAfterInclude(
473
+ 'vertex',
474
+ 'begin_vertex',
475
+ `${positionNode.code}\n\ttransformed = ${positionNode.result};`
476
+ );
378
477
 
379
- NODE_CODE_SIZE
380
- gl_PointSize = NODE_SIZE;
478
+ }
381
479
 
382
- #endif` );
480
+ if ( sizeNode !== undefined ) {
383
481
 
384
- for ( const shaderStage of shaderStages ) {
482
+ this.addCodeAfterSnippet(
483
+ 'vertex',
484
+ 'gl_PointSize = size;',
485
+ `${sizeNode.code}\n\tgl_PointSize = ${sizeNode.result};`
486
+ );
385
487
 
386
- this.addCodeAfterSnippet( shaderStage, 'main() {',
387
- `#ifdef NODE_CODE
488
+ }
388
489
 
389
- NODE_CODE
490
+ for ( const shaderStage of shaderStages ) {
390
491
 
391
- #endif` );
492
+ this.addCodeAfterSnippet(
493
+ shaderStage,
494
+ 'main() {',
495
+ this.flowCode[ shaderStage ]
496
+ );
392
497
 
393
498
  }
394
499
 
395
500
  }
396
501
 
397
- _buildShader() {
502
+ _addUniforms() {
398
503
 
399
504
  for ( const shaderStage of shaderStages ) {
400
505
 
@@ -406,14 +511,6 @@ class WebGLNodeBuilder extends NodeBuilder {
406
511
 
407
512
  }
408
513
 
409
- // code
410
-
411
- const shaderProperty = getShaderStageProperty( shaderStage );
412
-
413
- const nodeCode = this[ shaderProperty ];
414
-
415
- this.shader[ shaderProperty ] = nodeCode + this.shader[ shaderProperty ];
416
-
417
514
  }
418
515
 
419
516
  }
@@ -6,9 +6,9 @@ import { Material } from 'three';
6
6
  const builders = new WeakMap();
7
7
  export const nodeFrame = new NodeFrame();
8
8
 
9
- Material.prototype.onBuild = function ( parameters, renderer ) {
9
+ Material.prototype.onBuild = function ( object, parameters, renderer ) {
10
10
 
11
- builders.set( this, new WebGLNodeBuilder( this, renderer, parameters ).build() );
11
+ builders.set( this, new WebGLNodeBuilder( object, renderer, parameters ).build() );
12
12
 
13
13
  };
14
14
 
@@ -30,11 +30,11 @@ class WebGLPhysicalContextNode extends ContextNode {
30
30
 
31
31
  roughness = new FloatNode( 1.0 ).setConst( true );
32
32
 
33
- this.setContextValue( 'uv', new NormalNode( NormalNode.WORLD ) );
33
+ this.context.uv = new NormalNode( NormalNode.WORLD );
34
34
 
35
35
  }
36
36
 
37
- this.setContextValue( 'roughness', roughness );
37
+ this.context.roughness = roughness;
38
38
 
39
39
  return super.generate( builder, output );
40
40
 
@@ -77,7 +77,7 @@ class WebGPUBackground {
77
77
 
78
78
  if ( renderer.autoClearStencil === true ) {
79
79
 
80
- depthStencilAttachment.stencilLoadValue = renderer._clearDepth;
80
+ depthStencilAttachment.stencilLoadValue = renderer._clearStencil;
81
81
 
82
82
  } else {
83
83
 
@@ -49,6 +49,12 @@ class WebGPUBindings {
49
49
 
50
50
  }
51
51
 
52
+ remove( object ) {
53
+
54
+ this.uniformsData.delete( object );
55
+
56
+ }
57
+
52
58
  getForCompute( param ) {
53
59
 
54
60
  let data = this.uniformsData.get( param );
@@ -78,7 +84,7 @@ class WebGPUBindings {
78
84
 
79
85
  }
80
86
 
81
- update( object, camera ) {
87
+ update( object ) {
82
88
 
83
89
  const textures = this.textures;
84
90
 
@@ -108,12 +114,7 @@ class WebGPUBindings {
108
114
 
109
115
  if ( needsBufferWrite === true ) {
110
116
 
111
- this.device.queue.writeBuffer(
112
- bufferGPU,
113
- 0,
114
- buffer,
115
- 0
116
- );
117
+ this.device.queue.writeBuffer( bufferGPU, 0, buffer, 0 );
117
118
 
118
119
  }
119
120
 
@@ -141,10 +142,10 @@ class WebGPUBindings {
141
142
 
142
143
  const texture = binding.getTexture();
143
144
 
144
- const forceUpdate = textures.updateTexture( texture );
145
+ const needsTextureRefresh = textures.updateTexture( texture );
145
146
  const textureGPU = textures.getTextureGPU( texture );
146
147
 
147
- if ( binding.textureGPU !== textureGPU || forceUpdate === true ) {
148
+ if ( textureGPU !== undefined && binding.textureGPU !== textureGPU || needsTextureRefresh === true ) {
148
149
 
149
150
  binding.textureGPU = textureGPU;
150
151
  needsBindGroupRefresh = true;
@@ -2,10 +2,9 @@ import WebGPUProgrammableStage from './WebGPUProgrammableStage.js';
2
2
 
3
3
  class WebGPUComputePipelines {
4
4
 
5
- constructor( device, glslang ) {
5
+ constructor( device ) {
6
6
 
7
7
  this.device = device;
8
- this.glslang = glslang;
9
8
 
10
9
  this.pipelines = new WeakMap();
11
10
  this.stages = {
@@ -23,7 +22,6 @@ class WebGPUComputePipelines {
23
22
  if ( pipeline === undefined ) {
24
23
 
25
24
  const device = this.device;
26
- const glslang = this.glslang;
27
25
 
28
26
  const shader = {
29
27
  computeShader: param.shader
@@ -35,7 +33,7 @@ class WebGPUComputePipelines {
35
33
 
36
34
  if ( stageCompute === undefined ) {
37
35
 
38
- stageCompute = new WebGPUProgrammableStage( device, glslang, shader.computeShader, 'compute' );
36
+ stageCompute = new WebGPUProgrammableStage( device, shader.computeShader, 'compute' );
39
37
 
40
38
  this.stages.compute.set( shader, stageCompute );
41
39
 
@@ -17,7 +17,7 @@ class WebGPUObjects {
17
17
 
18
18
  if ( geometry.isBufferGeometry !== true ) {
19
19
 
20
- throw 'THREE.WebGPURenderer: This renderer only supports THREE.BufferGeometry for geometries.';
20
+ throw new Error( 'THREE.WebGPURenderer: This renderer only supports THREE.BufferGeometry for geometries.' );
21
21
 
22
22
  }
23
23
 
@@ -2,7 +2,7 @@ let _id = 0;
2
2
 
3
3
  class WebGPUProgrammableStage {
4
4
 
5
- constructor( device, glslang, code, type ) {
5
+ constructor( device, code, type ) {
6
6
 
7
7
  this.id = _id ++;
8
8
 
@@ -10,10 +10,8 @@ class WebGPUProgrammableStage {
10
10
  this.type = type;
11
11
  this.usedTimes = 0;
12
12
 
13
- const byteCode = glslang.compileGLSL( code, type );
14
-
15
13
  this.stage = {
16
- module: device.createShaderModule( { code: byteCode } ),
14
+ module: device.createShaderModule( { code } ),
17
15
  entryPoint: 'main'
18
16
  };
19
17
 
@@ -32,7 +32,7 @@ class WebGPURenderPipeline {
32
32
 
33
33
  // determine shader attributes
34
34
 
35
- const shaderAttributes = this._parseShaderAttributes( nodeBuilder.vertexShader, geometry );
35
+ const shaderAttributes = this._getShaderAttributes( nodeBuilder, geometry );
36
36
 
37
37
  // vertex buffers
38
38
 
@@ -701,42 +701,34 @@ class WebGPURenderPipeline {
701
701
 
702
702
  }
703
703
 
704
- _parseShaderAttributes( shader, geometry ) {
705
-
706
- // find "layout (location = num) in type name" in vertex shader
707
-
708
- const regex = /\s*layout\s*\(\s*location\s*=\s*(?<location>[0-9]+)\s*\)\s*in\s+(?<type>\w+)\s+(?<name>\w+)\s*;/gmi;
709
- let shaderAttribute = null;
704
+ _getShaderAttributes( nodeBuilder, geometry ) {
710
705
 
706
+ const nodeAttributes = nodeBuilder.attributes;
711
707
  const attributes = [];
712
708
 
713
- while ( shaderAttribute = regex.exec( shader ) ) {
709
+ for ( let slot = 0; slot < nodeAttributes.length; slot ++ ) {
714
710
 
715
- const name = shaderAttribute.groups.name;
711
+ const nodeAttribute = nodeAttributes[ slot ];
712
+
713
+ const name = nodeAttribute.name;
714
+ const type = nodeAttribute.type;
716
715
 
717
716
  const geometryAttribute = geometry.getAttribute( name );
718
717
  const bytesPerElement = ( geometryAttribute !== undefined ) ? geometryAttribute.array.BYTES_PER_ELEMENT : 4;
719
718
 
720
- const shaderLocation = parseInt( shaderAttribute.groups.location );
721
- const arrayStride = this._getArrayStride( shaderAttribute.groups.type, bytesPerElement );
722
- const vertexFormat = this._getVertexFormat( shaderAttribute.groups.type, bytesPerElement );
719
+ const arrayStride = this._getArrayStride( type, bytesPerElement );
720
+ const format = this._getVertexFormat( type, bytesPerElement );
723
721
 
724
722
  attributes.push( {
725
- name: name,
726
- arrayStride: arrayStride,
727
- slot: shaderLocation,
728
- format: vertexFormat
723
+ name,
724
+ arrayStride,
725
+ format,
726
+ slot
729
727
  } );
730
728
 
731
729
  }
732
730
 
733
- // the sort ensures to setup vertex buffers in the correct order
734
-
735
- return attributes.sort( function ( a, b ) {
736
-
737
- return a.slot - b.slot;
738
-
739
- } );
731
+ return attributes;
740
732
 
741
733
  }
742
734