super-three 0.152.0 → 0.154.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 (339) hide show
  1. package/build/three.cjs +778 -557
  2. package/build/three.js +778 -557
  3. package/build/three.min.js +1 -1
  4. package/build/three.module.js +769 -539
  5. package/build/three.module.min.js +1 -1
  6. package/examples/jsm/cameras/CinematicCamera.js +1 -2
  7. package/examples/jsm/capabilities/WebGPU.js +15 -1
  8. package/examples/jsm/controls/ArcballControls.js +2 -1
  9. package/examples/jsm/controls/FlyControls.js +25 -9
  10. package/examples/jsm/controls/OrbitControls.js +5 -1
  11. package/examples/jsm/csm/CSM.js +1 -3
  12. package/examples/jsm/effects/AnaglyphEffect.js +6 -20
  13. package/examples/jsm/effects/OutlineEffect.js +1 -1
  14. package/examples/jsm/effects/ParallaxBarrierEffect.js +3 -0
  15. package/examples/jsm/environments/RoomEnvironment.js +6 -2
  16. package/examples/jsm/exporters/GLTFExporter.js +74 -2
  17. package/examples/jsm/exporters/USDZExporter.js +170 -129
  18. package/examples/jsm/helpers/ViewHelper.js +1 -1
  19. package/examples/jsm/lines/LineMaterial.js +1 -1
  20. package/examples/jsm/loaders/3DMLoader.js +1 -1
  21. package/examples/jsm/loaders/3MFLoader.js +5 -1
  22. package/examples/jsm/loaders/AMFLoader.js +5 -1
  23. package/examples/jsm/loaders/ColladaLoader.js +4 -1
  24. package/examples/jsm/loaders/DRACOLoader.js +2 -0
  25. package/examples/jsm/loaders/FBXLoader.js +9 -2
  26. package/examples/jsm/loaders/GLTFLoader.js +230 -94
  27. package/examples/jsm/loaders/KTX2Loader.js +106 -47
  28. package/examples/jsm/loaders/LDrawLoader.js +4 -7
  29. package/examples/jsm/loaders/MMDLoader.js +40 -13
  30. package/examples/jsm/loaders/PCDLoader.js +25 -10
  31. package/examples/jsm/loaders/PDBLoader.js +7 -2
  32. package/examples/jsm/loaders/PLYLoader.js +30 -8
  33. package/examples/jsm/loaders/STLLoader.js +8 -3
  34. package/examples/jsm/loaders/VRMLLoader.js +55 -7
  35. package/examples/jsm/loaders/VTKLoader.js +12 -4
  36. package/examples/jsm/loaders/XYZLoader.js +9 -3
  37. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -2
  38. package/examples/jsm/math/Lut.js +5 -4
  39. package/examples/jsm/math/MeshSurfaceSampler.js +82 -37
  40. package/examples/jsm/misc/GPUComputationRenderer.js +1 -0
  41. package/examples/jsm/misc/VolumeSlice.js +3 -1
  42. package/examples/jsm/nodes/Nodes.js +22 -16
  43. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +99 -0
  44. package/examples/jsm/nodes/accessors/BufferNode.js +2 -2
  45. package/examples/jsm/nodes/accessors/CameraNode.js +25 -4
  46. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +7 -1
  47. package/examples/jsm/nodes/accessors/InstanceNode.js +29 -12
  48. package/examples/jsm/nodes/accessors/MaterialNode.js +55 -47
  49. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +2 -2
  50. package/examples/jsm/nodes/accessors/ModelNode.js +3 -1
  51. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +4 -9
  52. package/examples/jsm/nodes/accessors/MorphNode.js +70 -0
  53. package/examples/jsm/nodes/accessors/NormalNode.js +3 -2
  54. package/examples/jsm/nodes/accessors/Object3DNode.js +10 -2
  55. package/examples/jsm/nodes/accessors/ReferenceNode.js +2 -2
  56. package/examples/jsm/nodes/accessors/SceneNode.js +46 -0
  57. package/examples/jsm/nodes/accessors/SkinningNode.js +43 -62
  58. package/examples/jsm/nodes/accessors/StorageBufferNode.js +2 -2
  59. package/examples/jsm/nodes/accessors/TangentNode.js +2 -2
  60. package/examples/jsm/nodes/accessors/TextureBicubicNode.js +94 -0
  61. package/examples/jsm/nodes/accessors/TextureNode.js +68 -6
  62. package/examples/jsm/nodes/accessors/TextureSizeNode.js +35 -0
  63. package/examples/jsm/nodes/accessors/UVNode.js +1 -1
  64. package/examples/jsm/nodes/code/CodeNode.js +3 -0
  65. package/examples/jsm/nodes/code/FunctionNode.js +25 -4
  66. package/examples/jsm/nodes/core/AttributeNode.js +1 -1
  67. package/examples/jsm/nodes/core/BypassNode.js +2 -2
  68. package/examples/jsm/nodes/core/ContextNode.js +2 -0
  69. package/examples/jsm/nodes/core/IndexNode.js +66 -0
  70. package/examples/jsm/nodes/core/LightingModel.js +2 -1
  71. package/examples/jsm/nodes/core/Node.js +13 -16
  72. package/examples/jsm/nodes/core/NodeAttribute.js +2 -1
  73. package/examples/jsm/nodes/core/NodeBuilder.js +86 -8
  74. package/examples/jsm/nodes/core/NodeUtils.js +10 -0
  75. package/examples/jsm/nodes/core/PropertyNode.js +6 -2
  76. package/examples/jsm/nodes/core/StackNode.js +8 -1
  77. package/examples/jsm/nodes/core/UniformNode.js +1 -1
  78. package/examples/jsm/nodes/core/VarNode.js +1 -3
  79. package/examples/jsm/nodes/display/BlendModeNode.js +9 -9
  80. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +7 -7
  81. package/examples/jsm/nodes/display/ColorSpaceNode.js +50 -49
  82. package/examples/jsm/nodes/display/NormalMapNode.js +3 -3
  83. package/examples/jsm/nodes/display/ToneMappingNode.js +24 -15
  84. package/examples/jsm/nodes/display/ViewportDepthNode.js +69 -0
  85. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +34 -0
  86. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +7 -6
  87. package/examples/jsm/nodes/display/ViewportTextureNode.js +33 -19
  88. package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +5 -5
  89. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +10 -8
  90. package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  91. package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +43 -0
  92. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +4 -4
  93. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +2 -2
  94. package/examples/jsm/nodes/functions/BSDF/EnvironmentBRDF.js +13 -0
  95. package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +2 -4
  96. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  97. package/examples/jsm/nodes/functions/PhongLightingModel.js +7 -7
  98. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +132 -19
  99. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +2 -2
  100. package/examples/jsm/nodes/functions/material/getRoughness.js +3 -3
  101. package/examples/jsm/nodes/geometry/RangeNode.js +33 -51
  102. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +6 -3
  103. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -2
  104. package/examples/jsm/nodes/lighting/EnvironmentNode.js +107 -62
  105. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +2 -2
  106. package/examples/jsm/nodes/lighting/LightUtils.js +2 -2
  107. package/examples/jsm/nodes/lighting/LightingContextNode.js +17 -15
  108. package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
  109. package/examples/jsm/nodes/lighting/SpotLightNode.js +3 -3
  110. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -15
  111. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -15
  112. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -10
  113. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -9
  114. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +41 -0
  115. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +1 -14
  116. package/examples/jsm/nodes/materials/NodeMaterial.js +119 -29
  117. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -9
  118. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
  119. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +3 -3
  120. package/examples/jsm/nodes/materialx/lib/mx_noise.js +14 -14
  121. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +4 -4
  122. package/examples/jsm/nodes/math/MathNode.js +6 -0
  123. package/examples/jsm/nodes/math/OperatorNode.js +1 -1
  124. package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
  125. package/examples/jsm/nodes/shadernode/ShaderNode.js +60 -33
  126. package/examples/jsm/nodes/utils/EquirectUVNode.js +2 -3
  127. package/examples/jsm/nodes/utils/LoopNode.js +186 -0
  128. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +1 -1
  129. package/examples/jsm/objects/GroundProjectedSkybox.js +1 -1
  130. package/examples/jsm/objects/Lensflare.js +3 -4
  131. package/examples/jsm/objects/MarchingCubes.js +5 -1
  132. package/examples/jsm/objects/Reflector.js +4 -1
  133. package/examples/jsm/objects/Refractor.js +1 -1
  134. package/examples/jsm/objects/Sky.js +1 -1
  135. package/examples/jsm/objects/Water.js +2 -1
  136. package/examples/jsm/objects/Water2.js +1 -1
  137. package/examples/jsm/offscreen/scene.js +1 -0
  138. package/examples/jsm/physics/RapierPhysics.js +93 -133
  139. package/examples/jsm/postprocessing/AfterimagePass.js +3 -0
  140. package/examples/jsm/postprocessing/BloomPass.js +7 -2
  141. package/examples/jsm/postprocessing/BokehPass.js +3 -2
  142. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  143. package/examples/jsm/postprocessing/EffectComposer.js +4 -1
  144. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  145. package/examples/jsm/postprocessing/OutlinePass.js +8 -9
  146. package/examples/jsm/postprocessing/OutputPass.js +72 -0
  147. package/examples/jsm/postprocessing/RenderPixelatedPass.js +4 -3
  148. package/examples/jsm/postprocessing/SAOPass.js +4 -2
  149. package/examples/jsm/postprocessing/SMAAPass.js +5 -2
  150. package/examples/jsm/postprocessing/SSAARenderPass.js +5 -13
  151. package/examples/jsm/postprocessing/SSAOPass.js +4 -2
  152. package/examples/jsm/postprocessing/SSRPass.js +3 -1
  153. package/examples/jsm/postprocessing/SavePass.js +5 -2
  154. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  155. package/examples/jsm/postprocessing/TAARenderPass.js +17 -4
  156. package/examples/jsm/postprocessing/TexturePass.js +2 -1
  157. package/examples/jsm/postprocessing/UnrealBloomPass.js +13 -13
  158. package/examples/jsm/renderers/{webgpu/WebGPUAnimation.js → common/Animation.js} +2 -2
  159. package/examples/jsm/renderers/common/Attributes.js +75 -0
  160. package/examples/jsm/renderers/common/Backend.js +162 -0
  161. package/examples/jsm/renderers/common/Background.js +134 -0
  162. package/examples/jsm/renderers/common/Binding.js +11 -0
  163. package/examples/jsm/renderers/common/Bindings.js +169 -0
  164. package/examples/jsm/renderers/common/Buffer.js +38 -0
  165. package/examples/jsm/renderers/{webgpu/WebGPUBufferUtils.js → common/BufferUtils.js} +2 -2
  166. package/examples/jsm/renderers/{webgpu/WebGPUWeakMap.js → common/ChainMap.js} +11 -5
  167. package/examples/jsm/renderers/common/ComputePipeline.js +17 -0
  168. package/examples/jsm/renderers/common/Constants.js +14 -0
  169. package/examples/jsm/renderers/common/CubeRenderTarget.js +65 -0
  170. package/examples/jsm/renderers/common/DataMap.js +54 -0
  171. package/examples/jsm/renderers/{webgpu/WebGPUGeometries.js → common/Geometries.js} +38 -37
  172. package/examples/jsm/renderers/{webgpu/WebGPUInfo.js → common/Info.js} +2 -3
  173. package/examples/jsm/renderers/common/Pipeline.js +13 -0
  174. package/examples/jsm/renderers/common/Pipelines.js +321 -0
  175. package/examples/jsm/renderers/common/ProgrammableStage.js +18 -0
  176. package/examples/jsm/renderers/common/RenderContext.js +37 -0
  177. package/examples/jsm/renderers/common/RenderContexts.js +38 -0
  178. package/examples/jsm/renderers/{webgpu/WebGPURenderLists.js → common/RenderList.js} +2 -39
  179. package/examples/jsm/renderers/common/RenderLists.js +38 -0
  180. package/examples/jsm/renderers/common/RenderObject.js +113 -0
  181. package/examples/jsm/renderers/common/RenderObjects.js +92 -0
  182. package/examples/jsm/renderers/common/RenderPipeline.js +16 -0
  183. package/examples/jsm/renderers/{webgpu/WebGPURenderTarget.js → common/RenderTarget.js} +2 -2
  184. package/examples/jsm/renderers/common/Renderer.js +864 -0
  185. package/examples/jsm/renderers/common/SampledTexture.js +80 -0
  186. package/examples/jsm/renderers/common/Sampler.js +18 -0
  187. package/examples/jsm/renderers/common/StorageBuffer.js +17 -0
  188. package/examples/jsm/renderers/common/Textures.js +206 -0
  189. package/examples/jsm/renderers/{webgpu/WebGPUUniform.js → common/Uniform.js} +13 -9
  190. package/examples/jsm/renderers/common/UniformBuffer.js +15 -0
  191. package/examples/jsm/renderers/{webgpu/WebGPUUniformsGroup.js → common/UniformsGroup.js} +13 -13
  192. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodes.js → common/nodes/NodeRender.js} +3 -3
  193. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampledTexture.js → common/nodes/NodeSampledTexture.js} +4 -4
  194. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampler.js → common/nodes/NodeSampler.js} +3 -3
  195. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeUniform.js → common/nodes/NodeUniform.js} +1 -1
  196. package/examples/jsm/renderers/common/nodes/Nodes.js +319 -0
  197. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +340 -0
  198. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +23 -19
  199. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +847 -0
  200. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +15 -1131
  201. package/examples/jsm/renderers/webgpu/nodes/{WebGPUNodeBuilder.js → WGSLNodeBuilder.js} +75 -45
  202. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeFunction.js +2 -2
  203. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeParser.js +1 -1
  204. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +255 -0
  205. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +145 -0
  206. package/examples/jsm/renderers/webgpu/{constants.js → utils/WebGPUConstants.js} +6 -7
  207. package/examples/jsm/renderers/webgpu/{WebGPURenderPipeline.js → utils/WebGPUPipelineUtils.js} +154 -247
  208. package/examples/jsm/renderers/webgpu/{WebGPUTextureUtils.js → utils/WebGPUTextureMipmapUtils.js} +3 -25
  209. package/examples/jsm/renderers/webgpu/{WebGPUTextures.js → utils/WebGPUTextureUtils.js} +392 -505
  210. package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +92 -0
  211. package/examples/jsm/shaders/BleachBypassShader.js +2 -0
  212. package/examples/jsm/shaders/BlendShader.js +1 -2
  213. package/examples/jsm/shaders/BokehShader2.js +3 -0
  214. package/examples/jsm/shaders/ColorifyShader.js +2 -0
  215. package/examples/jsm/shaders/ConvolutionShader.js +2 -0
  216. package/examples/jsm/shaders/CopyShader.js +4 -2
  217. package/examples/jsm/shaders/DotScreenShader.js +2 -0
  218. package/examples/jsm/shaders/ExposureShader.js +44 -0
  219. package/examples/jsm/shaders/FilmShader.js +2 -0
  220. package/examples/jsm/shaders/GammaCorrectionShader.js +2 -0
  221. package/examples/jsm/shaders/HorizontalBlurShader.js +2 -0
  222. package/examples/jsm/shaders/OutputShader.js +61 -0
  223. package/examples/jsm/shaders/RGBShiftShader.js +2 -0
  224. package/examples/jsm/shaders/SepiaShader.js +2 -0
  225. package/examples/jsm/shaders/ToonShader.js +13 -5
  226. package/examples/jsm/shaders/VerticalBlurShader.js +2 -0
  227. package/examples/jsm/shaders/VignetteShader.js +2 -0
  228. package/examples/jsm/shaders/WaterRefractionShader.js +5 -2
  229. package/examples/jsm/utils/BufferGeometryUtils.js +17 -1
  230. package/examples/jsm/utils/TextureUtils.js +86 -0
  231. package/examples/jsm/webxr/OculusHandPointerModel.js +34 -13
  232. package/examples/jsm/webxr/XRHandPrimitiveModel.js +1 -0
  233. package/examples/jsm/webxr/XRPlanes.js +100 -0
  234. package/package.json +3 -1
  235. package/src/Three.Legacy.js +0 -228
  236. package/src/audio/PositionalAudio.js +8 -0
  237. package/src/cameras/Camera.js +5 -0
  238. package/src/cameras/CubeCamera.js +76 -13
  239. package/src/cameras/OrthographicCamera.js +1 -1
  240. package/src/cameras/PerspectiveCamera.js +1 -1
  241. package/src/constants.js +13 -1
  242. package/src/core/BufferAttribute.js +3 -25
  243. package/src/core/BufferGeometry.js +1 -8
  244. package/src/core/Object3D.js +1 -1
  245. package/src/extras/core/Curve.js +1 -1
  246. package/src/loaders/CubeTextureLoader.js +2 -0
  247. package/src/loaders/Loader.js +2 -0
  248. package/src/loaders/MaterialLoader.js +5 -0
  249. package/src/loaders/ObjectLoader.js +1 -0
  250. package/src/materials/Material.js +13 -1
  251. package/src/materials/MeshPhysicalMaterial.js +32 -6
  252. package/src/math/Color.js +16 -11
  253. package/src/math/Frustum.js +16 -2
  254. package/src/math/MathUtils.js +16 -0
  255. package/src/math/Matrix3.js +26 -6
  256. package/src/math/Matrix4.js +74 -19
  257. package/src/objects/InstancedMesh.js +3 -0
  258. package/src/objects/Mesh.js +14 -10
  259. package/src/objects/Skeleton.js +1 -3
  260. package/src/objects/SkinnedMesh.js +36 -8
  261. package/src/renderers/WebGLRenderer.js +126 -21
  262. package/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js +7 -0
  263. package/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js +68 -0
  264. package/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js +6 -0
  265. package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -0
  266. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +26 -3
  267. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +9 -1
  268. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +26 -0
  269. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -2
  270. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +10 -2
  271. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +1 -1
  272. package/src/renderers/shaders/ShaderChunk/{output_fragment.glsl.js → opaque_fragment.glsl.js} +1 -2
  273. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  274. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +3 -3
  275. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +10 -5
  276. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +6 -1
  277. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +7 -1
  278. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +6 -1
  279. package/src/renderers/shaders/ShaderChunk.js +10 -6
  280. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  281. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -1
  282. package/src/renderers/shaders/ShaderLib/cube.glsl.js +1 -1
  283. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  284. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  285. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -1
  286. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -2
  287. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +4 -2
  288. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +4 -2
  289. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +4 -2
  290. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +4 -2
  291. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +12 -2
  292. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +4 -2
  293. package/src/renderers/shaders/ShaderLib/points.glsl.js +4 -2
  294. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  295. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +4 -2
  296. package/src/renderers/shaders/ShaderLib.js +4 -1
  297. package/src/renderers/shaders/UniformsLib.js +2 -0
  298. package/src/renderers/webgl/WebGLBindingStates.js +13 -5
  299. package/src/renderers/webgl/WebGLGeometries.js +12 -0
  300. package/src/renderers/webgl/WebGLInfo.js +0 -1
  301. package/src/renderers/webgl/WebGLMaterials.js +18 -0
  302. package/src/renderers/webgl/WebGLObjects.js +23 -3
  303. package/src/renderers/webgl/WebGLProgram.js +43 -5
  304. package/src/renderers/webgl/WebGLPrograms.js +19 -7
  305. package/src/renderers/webgl/WebGLTextures.js +19 -1
  306. package/src/renderers/webvr/WebVRManager.js +12 -0
  307. package/src/renderers/webxr/WebXRManager.js +39 -99
  308. package/src/scenes/Scene.js +0 -14
  309. package/src/textures/DepthTexture.js +22 -0
  310. package/src/textures/FramebufferTexture.js +1 -3
  311. package/src/textures/Source.js +4 -0
  312. package/src/textures/Texture.js +1 -1
  313. package/examples/jsm/exporters/ColladaExporter.js +0 -725
  314. package/examples/jsm/geometries/LightningStrike.js +0 -1017
  315. package/examples/jsm/loaders/PRWMLoader.js +0 -299
  316. package/examples/jsm/nodes/core/InstanceIndexNode.js +0 -26
  317. package/examples/jsm/objects/LightningStorm.js +0 -245
  318. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +0 -361
  319. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +0 -197
  320. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +0 -190
  321. package/examples/jsm/renderers/webgpu/WebGPUBinding.js +0 -22
  322. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +0 -270
  323. package/examples/jsm/renderers/webgpu/WebGPUBuffer.js +0 -43
  324. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +0 -78
  325. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +0 -22
  326. package/examples/jsm/renderers/webgpu/WebGPUProperties.js +0 -44
  327. package/examples/jsm/renderers/webgpu/WebGPURenderObject.js +0 -40
  328. package/examples/jsm/renderers/webgpu/WebGPURenderObjects.js +0 -50
  329. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +0 -274
  330. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +0 -54
  331. package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +0 -75
  332. package/examples/jsm/renderers/webgpu/WebGPUSampler.js +0 -29
  333. package/examples/jsm/renderers/webgpu/WebGPUStorageBuffer.js +0 -20
  334. package/examples/jsm/renderers/webgpu/WebGPUTextureRenderer.js +0 -38
  335. package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +0 -18
  336. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +0 -88
  337. package/examples/jsm/shaders/ToneMapShader.js +0 -73
  338. /package/src/renderers/shaders/ShaderChunk/{encodings_fragment.glsl.js → colorspace_fragment.glsl.js} +0 -0
  339. /package/src/renderers/shaders/ShaderChunk/{encodings_pars_fragment.glsl.js → colorspace_pars_fragment.glsl.js} +0 -0
@@ -1,5 +1,6 @@
1
1
  import {
2
2
  Triangle,
3
+ Vector2,
3
4
  Vector3
4
5
  } from 'three';
5
6
 
@@ -16,26 +17,20 @@ import {
16
17
 
17
18
  const _face = new Triangle();
18
19
  const _color = new Vector3();
20
+ const _uva = new Vector2(), _uvb = new Vector2(), _uvc = new Vector2();
19
21
 
20
22
  class MeshSurfaceSampler {
21
23
 
22
24
  constructor( mesh ) {
23
25
 
24
- let geometry = mesh.geometry;
25
-
26
- if ( geometry.index ) {
27
-
28
- console.warn( 'THREE.MeshSurfaceSampler: Converting geometry to non-indexed BufferGeometry.' );
29
-
30
- geometry = geometry.toNonIndexed();
31
-
32
- }
33
-
34
- this.geometry = geometry;
26
+ this.geometry = mesh.geometry;
35
27
  this.randomFunction = Math.random;
36
28
 
29
+ this.indexAttribute = this.geometry.index;
37
30
  this.positionAttribute = this.geometry.getAttribute( 'position' );
31
+ this.normalAttribute = this.geometry.getAttribute( 'normal' );
38
32
  this.colorAttribute = this.geometry.getAttribute( 'color' );
33
+ this.uvAttribute = this.geometry.getAttribute( 'uv' );
39
34
  this.weightAttribute = null;
40
35
 
41
36
  this.distribution = null;
@@ -52,49 +47,62 @@ class MeshSurfaceSampler {
52
47
 
53
48
  build() {
54
49
 
50
+ const indexAttribute = this.indexAttribute;
55
51
  const positionAttribute = this.positionAttribute;
56
52
  const weightAttribute = this.weightAttribute;
57
53
 
58
- const faceWeights = new Float32Array( positionAttribute.count / 3 );
54
+ const totalFaces = indexAttribute ? ( indexAttribute.count / 3 ) : ( positionAttribute.count / 3 );
55
+ const faceWeights = new Float32Array( totalFaces );
59
56
 
60
57
  // Accumulate weights for each mesh face.
61
58
 
62
- for ( let i = 0; i < positionAttribute.count; i += 3 ) {
59
+ for ( let i = 0; i < totalFaces; i ++ ) {
63
60
 
64
61
  let faceWeight = 1;
65
62
 
63
+ let i0 = 3 * i;
64
+ let i1 = 3 * i + 1;
65
+ let i2 = 3 * i + 2;
66
+
67
+ if ( indexAttribute ) {
68
+
69
+ i0 = indexAttribute.getX( i0 );
70
+ i1 = indexAttribute.getX( i1 );
71
+ i2 = indexAttribute.getX( i2 );
72
+
73
+ }
74
+
66
75
  if ( weightAttribute ) {
67
76
 
68
- faceWeight = weightAttribute.getX( i )
69
- + weightAttribute.getX( i + 1 )
70
- + weightAttribute.getX( i + 2 );
77
+ faceWeight = weightAttribute.getX( i0 )
78
+ + weightAttribute.getX( i1 )
79
+ + weightAttribute.getX( i2 );
71
80
 
72
81
  }
73
82
 
74
- _face.a.fromBufferAttribute( positionAttribute, i );
75
- _face.b.fromBufferAttribute( positionAttribute, i + 1 );
76
- _face.c.fromBufferAttribute( positionAttribute, i + 2 );
83
+ _face.a.fromBufferAttribute( positionAttribute, i0 );
84
+ _face.b.fromBufferAttribute( positionAttribute, i1 );
85
+ _face.c.fromBufferAttribute( positionAttribute, i2 );
77
86
  faceWeight *= _face.getArea();
78
87
 
79
- faceWeights[ i / 3 ] = faceWeight;
88
+ faceWeights[ i ] = faceWeight;
80
89
 
81
90
  }
82
91
 
83
92
  // Store cumulative total face weights in an array, where weight index
84
93
  // corresponds to face index.
85
94
 
86
- this.distribution = new Float32Array( positionAttribute.count / 3 );
87
-
95
+ const distribution = new Float32Array( totalFaces );
88
96
  let cumulativeTotal = 0;
89
97
 
90
- for ( let i = 0; i < faceWeights.length; i ++ ) {
98
+ for ( let i = 0; i < totalFaces; i ++ ) {
91
99
 
92
100
  cumulativeTotal += faceWeights[ i ];
93
-
94
- this.distribution[ i ] = cumulativeTotal;
101
+ distribution[ i ] = cumulativeTotal;
95
102
 
96
103
  }
97
104
 
105
+ this.distribution = distribution;
98
106
  return this;
99
107
 
100
108
  }
@@ -106,13 +114,17 @@ class MeshSurfaceSampler {
106
114
 
107
115
  }
108
116
 
109
- sample( targetPosition, targetNormal, targetColor ) {
117
+ sample( targetPosition, targetNormal, targetColor, targetUV ) {
110
118
 
111
- const cumulativeTotal = this.distribution[ this.distribution.length - 1 ];
119
+ const faceIndex = this.sampleFaceIndex();
120
+ return this.sampleFace( faceIndex, targetPosition, targetNormal, targetColor, targetUV );
112
121
 
113
- const faceIndex = this.binarySearch( this.randomFunction() * cumulativeTotal );
122
+ }
114
123
 
115
- return this.sampleFace( faceIndex, targetPosition, targetNormal, targetColor );
124
+ sampleFaceIndex() {
125
+
126
+ const cumulativeTotal = this.distribution[ this.distribution.length - 1 ];
127
+ return this.binarySearch( this.randomFunction() * cumulativeTotal );
116
128
 
117
129
  }
118
130
 
@@ -150,7 +162,7 @@ class MeshSurfaceSampler {
150
162
 
151
163
  }
152
164
 
153
- sampleFace( faceIndex, targetPosition, targetNormal, targetColor ) {
165
+ sampleFace( faceIndex, targetPosition, targetNormal, targetColor, targetUV ) {
154
166
 
155
167
  let u = this.randomFunction();
156
168
  let v = this.randomFunction();
@@ -162,9 +174,22 @@ class MeshSurfaceSampler {
162
174
 
163
175
  }
164
176
 
165
- _face.a.fromBufferAttribute( this.positionAttribute, faceIndex * 3 );
166
- _face.b.fromBufferAttribute( this.positionAttribute, faceIndex * 3 + 1 );
167
- _face.c.fromBufferAttribute( this.positionAttribute, faceIndex * 3 + 2 );
177
+ // get the vertex attribute indices
178
+ const indexAttribute = this.indexAttribute;
179
+ let i0 = faceIndex * 3;
180
+ let i1 = faceIndex * 3 + 1;
181
+ let i2 = faceIndex * 3 + 2;
182
+ if ( indexAttribute ) {
183
+
184
+ i0 = indexAttribute.getX( i0 );
185
+ i1 = indexAttribute.getX( i1 );
186
+ i2 = indexAttribute.getX( i2 );
187
+
188
+ }
189
+
190
+ _face.a.fromBufferAttribute( this.positionAttribute, i0 );
191
+ _face.b.fromBufferAttribute( this.positionAttribute, i1 );
192
+ _face.c.fromBufferAttribute( this.positionAttribute, i2 );
168
193
 
169
194
  targetPosition
170
195
  .set( 0, 0, 0 )
@@ -174,15 +199,26 @@ class MeshSurfaceSampler {
174
199
 
175
200
  if ( targetNormal !== undefined ) {
176
201
 
177
- _face.getNormal( targetNormal );
202
+ if ( this.normalAttribute !== undefined ) {
203
+
204
+ _face.a.fromBufferAttribute( this.normalAttribute, i0 );
205
+ _face.b.fromBufferAttribute( this.normalAttribute, i1 );
206
+ _face.c.fromBufferAttribute( this.normalAttribute, i2 );
207
+ targetNormal.set( 0, 0, 0 ).addScaledVector( _face.a, u ).addScaledVector( _face.b, v ).addScaledVector( _face.c, 1 - ( u + v ) ).normalize();
208
+
209
+ } else {
210
+
211
+ _face.getNormal( targetNormal );
212
+
213
+ }
178
214
 
179
215
  }
180
216
 
181
217
  if ( targetColor !== undefined && this.colorAttribute !== undefined ) {
182
218
 
183
- _face.a.fromBufferAttribute( this.colorAttribute, faceIndex * 3 );
184
- _face.b.fromBufferAttribute( this.colorAttribute, faceIndex * 3 + 1 );
185
- _face.c.fromBufferAttribute( this.colorAttribute, faceIndex * 3 + 2 );
219
+ _face.a.fromBufferAttribute( this.colorAttribute, i0 );
220
+ _face.b.fromBufferAttribute( this.colorAttribute, i1 );
221
+ _face.c.fromBufferAttribute( this.colorAttribute, i2 );
186
222
 
187
223
  _color
188
224
  .set( 0, 0, 0 )
@@ -196,6 +232,15 @@ class MeshSurfaceSampler {
196
232
 
197
233
  }
198
234
 
235
+ if ( targetUV !== undefined && this.uvAttribute !== undefined ) {
236
+
237
+ _uva.fromBufferAttribute( this.uvAttribute, i0 );
238
+ _uvb.fromBufferAttribute( this.uvAttribute, i1 );
239
+ _uvc.fromBufferAttribute( this.uvAttribute, i2 );
240
+ targetUV.set( 0, 0 ).addScaledVector( _uva, u ).addScaledVector( _uvb, v ).addScaledVector( _uvc, 1 - ( u + v ) );
241
+
242
+ }
243
+
199
244
  return this;
200
245
 
201
246
  }
@@ -332,6 +332,7 @@ class GPUComputationRenderer {
332
332
  uniforms = uniforms || {};
333
333
 
334
334
  const material = new ShaderMaterial( {
335
+ name: 'GPUComputationShader',
335
336
  uniforms: uniforms,
336
337
  vertexShader: getPassThroughVertexShader(),
337
338
  fragmentShader: computeFragmentShader
@@ -5,7 +5,8 @@ import {
5
5
  Mesh,
6
6
  MeshBasicMaterial,
7
7
  PlaneGeometry,
8
- Texture
8
+ Texture,
9
+ SRGBColorSpace
9
10
  } from 'three';
10
11
 
11
12
  /**
@@ -68,6 +69,7 @@ class VolumeSlice {
68
69
  const canvasMap = new Texture( this.canvas );
69
70
  canvasMap.minFilter = LinearFilter;
70
71
  canvasMap.wrapS = canvasMap.wrapT = ClampToEdgeWrapping;
72
+ canvasMap.colorSpace = SRGBColorSpace;
71
73
  const material = new MeshBasicMaterial( { map: canvasMap, side: DoubleSide, transparent: true } );
72
74
  /**
73
75
  * @member {Mesh} mesh The mesh ready to get used in the scene
@@ -10,8 +10,8 @@ export { default as AttributeNode, attribute } from './core/AttributeNode.js';
10
10
  export { default as BypassNode, bypass } from './core/BypassNode.js';
11
11
  export { default as CacheNode, cache } from './core/CacheNode.js';
12
12
  export { default as ConstNode } from './core/ConstNode.js';
13
- export { default as ContextNode, context } from './core/ContextNode.js';
14
- export { default as InstanceIndexNode, instanceIndex } from './core/InstanceIndexNode.js';
13
+ export { default as ContextNode, context, label } from './core/ContextNode.js';
14
+ export { default as IndexNode, vertexIndex, instanceIndex } from './core/IndexNode.js';
15
15
  export { default as LightingModel, lightingModel } from './core/LightingModel.js';
16
16
  export { default as Node, addNodeClass, createNodeFromType } from './core/Node.js';
17
17
  export { default as NodeAttribute } from './core/NodeAttribute.js';
@@ -28,14 +28,14 @@ export { default as PropertyNode, property, diffuseColor, roughness, metalness,
28
28
  export { default as StackNode, stack } from './core/StackNode.js';
29
29
  export { default as TempNode } from './core/TempNode.js';
30
30
  export { default as UniformNode, uniform } from './core/UniformNode.js';
31
- export { default as VarNode, label, temp } from './core/VarNode.js';
31
+ export { default as VarNode, temp } from './core/VarNode.js';
32
32
  export { default as VaryingNode, varying } from './core/VaryingNode.js';
33
33
 
34
34
  import * as NodeUtils from './core/NodeUtils.js';
35
35
  export { NodeUtils };
36
36
 
37
37
  // math
38
- export { default as MathNode, EPSILON, INFINITY, radians, degrees, exp, exp2, log, log2, sqrt, inverseSqrt, floor, ceil, normalize, fract, sin, cos, tan, asin, acos, atan, abs, sign, length, negate, oneMinus, dFdx, dFdy, round, reciprocal, atan2, min, max, mod, step, reflect, distance, difference, dot, cross, pow, pow2, pow3, pow4, transformDirection, mix, clamp, saturate, refract, smoothstep, faceForward } from './math/MathNode.js';
38
+ export { default as MathNode, EPSILON, INFINITY, radians, degrees, exp, exp2, log, log2, sqrt, inverseSqrt, floor, ceil, normalize, fract, sin, cos, tan, asin, acos, atan, abs, sign, length, negate, oneMinus, dFdx, dFdy, round, reciprocal, trunc, fwidth, atan2, min, max, mod, step, reflect, distance, difference, dot, cross, pow, pow2, pow3, pow4, transformDirection, mix, clamp, saturate, refract, smoothstep, faceForward } from './math/MathNode.js';
39
39
  export { default as OperatorNode, add, sub, mul, div, remainder, equal, assign, lessThan, greaterThan, lessThanEqual, greaterThanEqual, and, or, xor, bitAnd, bitOr, bitXor, shiftLeft, shiftRight } from './math/OperatorNode.js';
40
40
  export { default as CondNode, cond } from './math/CondNode.js';
41
41
 
@@ -45,6 +45,7 @@ export { default as ConvertNode } from './utils/ConvertNode.js';
45
45
  export { default as DiscardNode, discard } from './utils/DiscardNode.js';
46
46
  export { default as EquirectUVNode, equirectUV } from './utils/EquirectUVNode.js';
47
47
  export { default as JoinNode } from './utils/JoinNode.js';
48
+ export { default as LoopNode, loop } from './utils/LoopNode.js';
48
49
  export { default as MatcapUVNode, matcapUV } from './utils/MatcapUVNode.js';
49
50
  export { default as MaxMipLevelNode, maxMipLevel } from './utils/MaxMipLevelNode.js';
50
51
  export { default as OscNode, oscSine, oscSquare, oscTriangle, oscSawtooth } from './utils/OscNode.js';
@@ -62,45 +63,51 @@ export * from './shadernode/ShaderNode.js';
62
63
 
63
64
  // accessors
64
65
  export { default as BitangentNode, bitangentGeometry, bitangentLocal, bitangentView, bitangentWorld, transformedBitangentView, transformedBitangentWorld } from './accessors/BitangentNode.js';
66
+ export { default as BufferAttributeNode, bufferAttribute, dynamicBufferAttribute, instancedBufferAttribute, instancedDynamicBufferAttribute } from './accessors/BufferAttributeNode.js';
65
67
  export { default as BufferNode, buffer } from './accessors/BufferNode.js';
66
- export { default as CameraNode, cameraProjectionMatrix, cameraViewMatrix, cameraNormalMatrix, cameraWorldMatrix, cameraPosition } from './accessors/CameraNode.js';
68
+ export { default as CameraNode, cameraProjectionMatrix, cameraViewMatrix, cameraNormalMatrix, cameraWorldMatrix, cameraPosition, cameraNear, cameraFar } from './accessors/CameraNode.js';
67
69
  export { default as CubeTextureNode, cubeTexture } from './accessors/CubeTextureNode.js';
68
70
  export { default as ExtendedMaterialNode, materialNormal } from './accessors/ExtendedMaterialNode.js';
69
71
  export { default as InstanceNode, instance } from './accessors/InstanceNode.js';
70
- export { default as MaterialNode, materialUV, materialAlphaTest, materialColor, materialShininess, materialEmissive, materialOpacity, materialSpecularColor, materialReflectivity, materialRoughness, materialMetalness, materialRotation } from './accessors/MaterialNode.js';
72
+ export { default as MaterialNode, materialAlphaTest, materialColor, materialShininess, materialEmissive, materialOpacity, materialSpecularColor, materialReflectivity, materialRoughness, materialMetalness, materialRotation, materialSheen, materialSheenRoughness } from './accessors/MaterialNode.js';
71
73
  export { default as MaterialReferenceNode, materialReference } from './accessors/MaterialReferenceNode.js';
72
- export { default as ModelNode, modelDirection, modelViewMatrix, modelNormalMatrix, modelWorldMatrix, modelPosition, modelViewPosition } from './accessors/ModelNode.js';
74
+ export { default as MorphNode, morph } from './accessors/MorphNode.js';
75
+ export { default as TextureBicubicNode, textureBicubic } from './accessors/TextureBicubicNode.js';
76
+ export { default as ModelNode, modelDirection, modelViewMatrix, modelNormalMatrix, modelWorldMatrix, modelPosition, modelViewPosition, modelScale } from './accessors/ModelNode.js';
73
77
  export { default as ModelViewProjectionNode, modelViewProjection } from './accessors/ModelViewProjectionNode.js';
74
- export { default as NormalNode, normalGeometry, normalLocal, normalView, normalWorld, transformedNormalView, transformedNormalWorld } from './accessors/NormalNode.js';
75
- export { default as Object3DNode, objectDirection, objectViewMatrix, objectNormalMatrix, objectWorldMatrix, objectPosition, objectViewPosition } from './accessors/Object3DNode.js';
78
+ export { default as NormalNode, normalGeometry, normalLocal, normalView, normalWorld, transformedNormalView, transformedNormalWorld, transformedClearcoatNormalView } from './accessors/NormalNode.js';
79
+ export { default as Object3DNode, objectDirection, objectViewMatrix, objectNormalMatrix, objectWorldMatrix, objectPosition, objectScale, objectViewPosition } from './accessors/Object3DNode.js';
76
80
  export { default as PointUVNode, pointUV } from './accessors/PointUVNode.js';
77
81
  export { default as PositionNode, positionGeometry, positionLocal, positionWorld, positionWorldDirection, positionView, positionViewDirection } from './accessors/PositionNode.js';
78
82
  export { default as ReferenceNode, reference } from './accessors/ReferenceNode.js';
79
83
  export { default as ReflectVectorNode, reflectVector } from './accessors/ReflectVectorNode.js';
80
84
  export { default as SkinningNode, skinning } from './accessors/SkinningNode.js';
85
+ export { default as SceneNode, backgroundBlurriness } from './accessors/SceneNode.js';
81
86
  export { default as StorageBufferNode, storage } from './accessors/StorageBufferNode.js';
82
87
  export { default as TangentNode, tangentGeometry, tangentLocal, tangentView, tangentWorld, transformedTangentView, transformedTangentWorld } from './accessors/TangentNode.js';
83
- export { default as TextureNode, texture, sampler } from './accessors/TextureNode.js';
88
+ export { default as TextureNode, texture, /*textureLevel,*/ sampler } from './accessors/TextureNode.js';
84
89
  export { default as UVNode, uv } from './accessors/UVNode.js';
85
90
  export { default as UserDataNode, userData } from './accessors/UserDataNode.js';
86
91
 
87
92
  // display
88
93
  export { default as BlendModeNode, burn, dodge, overlay, screen } from './display/BlendModeNode.js';
89
94
  export { default as ColorAdjustmentNode, saturation, vibrance, hue, lumaCoeffs, luminance } from './display/ColorAdjustmentNode.js';
90
- export { default as ColorSpaceNode, colorSpace } from './display/ColorSpaceNode.js';
95
+ export { default as ColorSpaceNode, linearToColorSpace, colorSpaceToLinear, linearTosRGB, sRGBToLinear } from './display/ColorSpaceNode.js';
91
96
  export { default as FrontFacingNode, frontFacing, faceDirection } from './display/FrontFacingNode.js';
92
97
  export { default as NormalMapNode, normalMap, TBNViewMatrix } from './display/NormalMapNode.js';
93
98
  export { default as PosterizeNode, posterize } from './display/PosterizeNode.js';
94
99
  export { default as ToneMappingNode, toneMapping } from './display/ToneMappingNode.js';
95
100
  export { default as ViewportNode, viewportCoordinate, viewportResolution, viewportTopLeft, viewportBottomLeft, viewportTopRight, viewportBottomRight } from './display/ViewportNode.js';
96
- export { default as ViewportTextureNode, viewportTexture } from './display/ViewportTextureNode.js';
101
+ export { default as ViewportTextureNode, viewportTexture, viewportMipTexture } from './display/ViewportTextureNode.js';
97
102
  export { default as ViewportSharedTextureNode, viewportSharedTexture } from './display/ViewportSharedTextureNode.js';
103
+ export { default as ViewportDepthTextureNode, viewportDepthTexture } from './display/ViewportDepthTextureNode.js';
104
+ export { default as ViewportDepthNode, viewZToOrthographicDepth, orthographicDepthToViewZ, viewZToPerspectiveDepth, perspectiveDepthToViewZ, depth, depthTexture } from './display/ViewportDepthNode.js';
98
105
 
99
106
  // code
100
107
  export { default as ExpressionNode, expression } from './code/ExpressionNode.js';
101
- export { default as CodeNode, code, js } from './code/CodeNode.js';
108
+ export { default as CodeNode, code, js, wgsl, glsl } from './code/CodeNode.js';
102
109
  export { default as FunctionCallNode, call } from './code/FunctionCallNode.js';
103
- export { default as FunctionNode, func, fn } from './code/FunctionNode.js';
110
+ export { default as FunctionNode, wgslFn, glslFn } from './code/FunctionNode.js';
104
111
  export { default as ScriptableNode, scriptable, global } from './code/ScriptableNode.js';
105
112
  export { default as ScriptableValueNode, scriptableValue } from './code/ScriptableValueNode.js';
106
113
 
@@ -139,8 +146,7 @@ export { default as NodeObjectLoader } from './loaders/NodeObjectLoader.js';
139
146
  export { default as NodeMaterialLoader } from './loaders/NodeMaterialLoader.js';
140
147
 
141
148
  // parsers
142
- export { default as WGSLNodeParser } from './parsers/WGSLNodeParser.js';
143
- export { default as GLSLNodeParser } from './parsers/GLSLNodeParser.js';
149
+ export { default as GLSLNodeParser } from './parsers/GLSLNodeParser.js'; // @TODO: Move to jsm/renderers/webgl.
144
150
 
145
151
  // materials
146
152
  export * from './materials/Materials.js';
@@ -0,0 +1,99 @@
1
+ import InputNode from '../core/InputNode.js';
2
+ import { addNodeClass } from '../core/Node.js';
3
+ import { varying } from '../core/VaryingNode.js';
4
+ import { nodeObject } from '../shadernode/ShaderNode.js';
5
+ import { InterleavedBufferAttribute, InterleavedBuffer, StaticDrawUsage, DynamicDrawUsage } from 'three';
6
+
7
+ class BufferAttributeNode extends InputNode {
8
+
9
+ constructor( value, bufferType, bufferStride = 0, bufferOffset = 0 ) {
10
+
11
+ super( value, bufferType );
12
+
13
+ this.isBufferNode = true;
14
+
15
+ this.bufferType = bufferType;
16
+ this.bufferStride = bufferStride;
17
+ this.bufferOffset = bufferOffset;
18
+
19
+ this.usage = StaticDrawUsage;
20
+ this.instanced = false;
21
+
22
+ }
23
+
24
+ construct( builder ) {
25
+
26
+ const type = this.getNodeType( builder );
27
+ const array = this.value;
28
+ const itemSize = builder.getTypeLength( type );
29
+ const stride = this.bufferStride || itemSize;
30
+ const offset = this.bufferOffset;
31
+
32
+ const buffer = new InterleavedBuffer( array, stride );
33
+ const bufferAttribute = new InterleavedBufferAttribute( buffer, itemSize, offset );
34
+
35
+ buffer.setUsage( this.usage );
36
+
37
+ this.attribute = bufferAttribute;
38
+ this.attribute.isInstancedBufferAttribute = this.instanced; // @TODO: Add a possible: InstancedInterleavedBufferAttribute
39
+
40
+ }
41
+
42
+ generate( builder ) {
43
+
44
+ const nodeType = this.getNodeType( builder );
45
+
46
+ const nodeUniform = builder.getBufferAttributeFromNode( this, nodeType );
47
+ const propertyName = builder.getPropertyName( nodeUniform );
48
+
49
+ let output = null;
50
+
51
+ if ( builder.shaderStage === 'vertex' ) {
52
+
53
+ output = propertyName;
54
+
55
+ } else {
56
+
57
+ const nodeVarying = varying( this );
58
+
59
+ output = nodeVarying.build( builder, nodeType );
60
+
61
+ }
62
+
63
+ return output;
64
+
65
+ }
66
+
67
+ getInputType( /*builder*/ ) {
68
+
69
+ return 'bufferAttribute';
70
+
71
+ }
72
+
73
+ setUsage( value ) {
74
+
75
+ this.usage = value;
76
+
77
+ return this;
78
+
79
+ }
80
+
81
+ setInstanced( value ) {
82
+
83
+ this.instanced = value;
84
+
85
+ return this;
86
+
87
+ }
88
+
89
+ }
90
+
91
+ export default BufferAttributeNode;
92
+
93
+ export const bufferAttribute = ( array, type, stride, offset ) => nodeObject( new BufferAttributeNode( array, type, stride, offset ) );
94
+ export const dynamicBufferAttribute = ( array, type, stride, offset ) => bufferAttribute( array, type, stride, offset ).setUsage( DynamicDrawUsage );
95
+
96
+ export const instancedBufferAttribute = ( array, type, stride, offset ) => bufferAttribute( array, type, stride, offset ).setInstanced( true );
97
+ export const instancedDynamicBufferAttribute = ( array, type, stride, offset ) => dynamicBufferAttribute( array, type, stride, offset ).setInstanced( true );
98
+
99
+ addNodeClass( BufferAttributeNode );
@@ -1,6 +1,6 @@
1
1
  import UniformNode from '../core/UniformNode.js';
2
2
  import { addNodeClass } from '../core/Node.js';
3
- import { nodeObject, getConstNodeType } from '../shadernode/ShaderNode.js';
3
+ import { nodeObject } from '../shadernode/ShaderNode.js';
4
4
 
5
5
  class BufferNode extends UniformNode {
6
6
 
@@ -25,6 +25,6 @@ class BufferNode extends UniformNode {
25
25
 
26
26
  export default BufferNode;
27
27
 
28
- export const buffer = ( value, nodeOrType, count ) => nodeObject( new BufferNode( value, getConstNodeType( nodeOrType ), count ) );
28
+ export const buffer = ( value, type, count ) => nodeObject( new BufferNode( value, type, count ) );
29
29
 
30
30
  addNodeClass( BufferNode );
@@ -1,5 +1,6 @@
1
1
  import Object3DNode from './Object3DNode.js';
2
2
  import { addNodeClass } from '../core/Node.js';
3
+ import { label } from '../core/ContextNode.js';
3
4
  import { nodeImmutable } from '../shadernode/ShaderNode.js';
4
5
 
5
6
  class CameraNode extends Object3DNode {
@@ -18,6 +19,10 @@ class CameraNode extends Object3DNode {
18
19
 
19
20
  return 'mat4';
20
21
 
22
+ } else if ( scope === CameraNode.NEAR || scope === CameraNode.FAR ) {
23
+
24
+ return 'float';
25
+
21
26
  }
22
27
 
23
28
  return super.getNodeType( builder );
@@ -30,13 +35,21 @@ class CameraNode extends Object3DNode {
30
35
  const uniformNode = this._uniformNode;
31
36
  const scope = this.scope;
32
37
 
33
- if ( scope === CameraNode.PROJECTION_MATRIX ) {
38
+ if ( scope === CameraNode.VIEW_MATRIX ) {
39
+
40
+ uniformNode.value = camera.matrixWorldInverse;
41
+
42
+ } else if ( scope === CameraNode.PROJECTION_MATRIX ) {
34
43
 
35
44
  uniformNode.value = camera.projectionMatrix;
36
45
 
37
- } else if ( scope === CameraNode.VIEW_MATRIX ) {
46
+ } else if ( scope === CameraNode.NEAR ) {
38
47
 
39
- uniformNode.value = camera.matrixWorldInverse;
48
+ uniformNode.value = camera.near;
49
+
50
+ } else if ( scope === CameraNode.FAR ) {
51
+
52
+ uniformNode.value = camera.far;
40
53
 
41
54
  } else {
42
55
 
@@ -56,6 +69,10 @@ class CameraNode extends Object3DNode {
56
69
 
57
70
  this._uniformNode.nodeType = 'mat4';
58
71
 
72
+ } else if ( scope === CameraNode.NEAR || scope === CameraNode.FAR ) {
73
+
74
+ this._uniformNode.nodeType = 'float';
75
+
59
76
  }
60
77
 
61
78
  return super.generate( builder );
@@ -65,10 +82,14 @@ class CameraNode extends Object3DNode {
65
82
  }
66
83
 
67
84
  CameraNode.PROJECTION_MATRIX = 'projectionMatrix';
85
+ CameraNode.NEAR = 'near';
86
+ CameraNode.FAR = 'far';
68
87
 
69
88
  export default CameraNode;
70
89
 
71
- export const cameraProjectionMatrix = nodeImmutable( CameraNode, CameraNode.PROJECTION_MATRIX );
90
+ export const cameraProjectionMatrix = label( nodeImmutable( CameraNode, CameraNode.PROJECTION_MATRIX ), 'projectionMatrix' );
91
+ export const cameraNear = nodeImmutable( CameraNode, CameraNode.NEAR );
92
+ export const cameraFar = nodeImmutable( CameraNode, CameraNode.FAR );
72
93
  export const cameraViewMatrix = nodeImmutable( CameraNode, CameraNode.VIEW_MATRIX );
73
94
  export const cameraNormalMatrix = nodeImmutable( CameraNode, CameraNode.NORMAL_MATRIX );
74
95
  export const cameraWorldMatrix = nodeImmutable( CameraNode, CameraNode.WORLD_MATRIX );
@@ -20,7 +20,7 @@ class ExtendedMaterialNode extends MaterialNode {
20
20
  const scope = this.scope;
21
21
  let type = null;
22
22
 
23
- if ( scope === ExtendedMaterialNode.NORMAL ) {
23
+ if ( scope === ExtendedMaterialNode.NORMAL || scope === ExtendedMaterialNode.CLEARCOAT_NORMAL ) {
24
24
 
25
25
  type = 'vec3';
26
26
 
@@ -41,6 +41,10 @@ class ExtendedMaterialNode extends MaterialNode {
41
41
 
42
42
  node = material.normalMap ? normalMap( this.getTexture( 'normalMap' ), materialReference( 'normalScale', 'vec2' ) ) : normalView;
43
43
 
44
+ } else if ( scope === ExtendedMaterialNode.CLEARCOAT_NORMAL ) {
45
+
46
+ node = material.clearcoatNormalMap ? normalMap( this.getTexture( 'clearcoatNormalMap' ), materialReference( 'clearcoatNormalScale', 'vec2' ) ) : normalView;
47
+
44
48
  }
45
49
 
46
50
  return node || super.construct( builder );
@@ -50,9 +54,11 @@ class ExtendedMaterialNode extends MaterialNode {
50
54
  }
51
55
 
52
56
  ExtendedMaterialNode.NORMAL = 'normal';
57
+ ExtendedMaterialNode.CLEARCOAT_NORMAL = 'clearcoatNormal';
53
58
 
54
59
  export default ExtendedMaterialNode;
55
60
 
56
61
  export const materialNormal = nodeImmutable( ExtendedMaterialNode, ExtendedMaterialNode.NORMAL );
62
+ export const materialClearcoatNormal = nodeImmutable( ExtendedMaterialNode, ExtendedMaterialNode.CLEARCOAT_NORMAL );
57
63
 
58
64
  addNodeClass( ExtendedMaterialNode );
@@ -1,10 +1,9 @@
1
1
  import Node, { addNodeClass } from '../core/Node.js';
2
- import { instanceIndex } from '../core/InstanceIndexNode.js';
3
- import { temp } from '../core/VarNode.js';
4
- import { buffer } from './BufferNode.js';
2
+ import { instancedBufferAttribute, instancedDynamicBufferAttribute } from './BufferAttributeNode.js';
5
3
  import { normalLocal } from './NormalNode.js';
6
4
  import { positionLocal } from './PositionNode.js';
7
- import { nodeProxy, vec3, mat3 } from '../shadernode/ShaderNode.js';
5
+ import { nodeProxy, vec3, mat3, mat4 } from '../shadernode/ShaderNode.js';
6
+ import { DynamicDrawUsage } from 'three';
8
7
 
9
8
  class InstanceNode extends Node {
10
9
 
@@ -14,17 +13,35 @@ class InstanceNode extends Node {
14
13
 
15
14
  this.instanceMesh = instanceMesh;
16
15
 
17
- //
16
+ this.instanceMatrixNode = null;
18
17
 
19
- const instanceBufferNode = buffer( instanceMesh.instanceMatrix.array, 'mat4', instanceMesh.count );
18
+ }
20
19
 
21
- this.instanceMatrixNode = temp( instanceBufferNode.element( instanceIndex ) ); // @TODO: a possible caching issue here?
20
+ construct( builder ) {
22
21
 
23
- }
22
+ let instanceMatrixNode = this.instanceMatrixNode;
23
+
24
+ if ( instanceMatrixNode === null ) {
25
+
26
+ const instanceMesh = this.instanceMesh;
27
+ const instaceAttribute = instanceMesh.instanceMatrix;
28
+ const array = instaceAttribute.array;
29
+
30
+ const bufferFn = instaceAttribute.usage === DynamicDrawUsage ? instancedDynamicBufferAttribute : instancedBufferAttribute;
31
+
32
+ const instanceBuffers = [
33
+ // F.Signature -> bufferAttribute( array, type, stride, offset )
34
+ bufferFn( array, 'vec4', 16, 0 ),
35
+ bufferFn( array, 'vec4', 16, 4 ),
36
+ bufferFn( array, 'vec4', 16, 8 ),
37
+ bufferFn( array, 'vec4', 16, 12 )
38
+ ];
39
+
40
+ instanceMatrixNode = mat4( ...instanceBuffers );
24
41
 
25
- generate( builder ) {
42
+ this.instanceMatrixNode = instanceMatrixNode;
26
43
 
27
- const { instanceMatrixNode } = this;
44
+ }
28
45
 
29
46
  // POSITION
30
47
 
@@ -40,8 +57,8 @@ class InstanceNode extends Node {
40
57
 
41
58
  // ASSIGNS
42
59
 
43
- positionLocal.assign( instancePosition ).build( builder );
44
- normalLocal.assign( instanceNormal ).build( builder );
60
+ builder.stack.assign( positionLocal, instancePosition );
61
+ builder.stack.assign( normalLocal, instanceNormal );
45
62
 
46
63
  }
47
64