super-three 0.152.0 → 0.154.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (339) hide show
  1. package/build/three.cjs +779 -557
  2. package/build/three.js +779 -557
  3. package/build/three.min.js +2 -1
  4. package/build/three.module.js +770 -539
  5. package/build/three.module.min.js +2 -1
  6. package/examples/jsm/cameras/CinematicCamera.js +1 -2
  7. package/examples/jsm/capabilities/WebGPU.js +15 -1
  8. package/examples/jsm/controls/ArcballControls.js +2 -1
  9. package/examples/jsm/controls/FlyControls.js +25 -9
  10. package/examples/jsm/controls/OrbitControls.js +5 -1
  11. package/examples/jsm/csm/CSM.js +1 -3
  12. package/examples/jsm/effects/AnaglyphEffect.js +6 -20
  13. package/examples/jsm/effects/OutlineEffect.js +1 -1
  14. package/examples/jsm/effects/ParallaxBarrierEffect.js +3 -0
  15. package/examples/jsm/environments/RoomEnvironment.js +6 -2
  16. package/examples/jsm/exporters/GLTFExporter.js +74 -2
  17. package/examples/jsm/exporters/USDZExporter.js +170 -129
  18. package/examples/jsm/helpers/ViewHelper.js +1 -1
  19. package/examples/jsm/lines/LineMaterial.js +1 -1
  20. package/examples/jsm/loaders/3DMLoader.js +1 -1
  21. package/examples/jsm/loaders/3MFLoader.js +5 -1
  22. package/examples/jsm/loaders/AMFLoader.js +5 -1
  23. package/examples/jsm/loaders/ColladaLoader.js +4 -1
  24. package/examples/jsm/loaders/DRACOLoader.js +2 -0
  25. package/examples/jsm/loaders/FBXLoader.js +9 -2
  26. package/examples/jsm/loaders/GLTFLoader.js +230 -94
  27. package/examples/jsm/loaders/KTX2Loader.js +106 -47
  28. package/examples/jsm/loaders/LDrawLoader.js +4 -7
  29. package/examples/jsm/loaders/MMDLoader.js +40 -13
  30. package/examples/jsm/loaders/PCDLoader.js +25 -10
  31. package/examples/jsm/loaders/PDBLoader.js +7 -2
  32. package/examples/jsm/loaders/PLYLoader.js +30 -8
  33. package/examples/jsm/loaders/STLLoader.js +8 -3
  34. package/examples/jsm/loaders/VRMLLoader.js +55 -7
  35. package/examples/jsm/loaders/VTKLoader.js +12 -4
  36. package/examples/jsm/loaders/XYZLoader.js +9 -3
  37. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -2
  38. package/examples/jsm/math/Lut.js +5 -4
  39. package/examples/jsm/math/MeshSurfaceSampler.js +82 -37
  40. package/examples/jsm/misc/GPUComputationRenderer.js +1 -0
  41. package/examples/jsm/misc/VolumeSlice.js +3 -1
  42. package/examples/jsm/nodes/Nodes.js +22 -16
  43. package/examples/jsm/nodes/accessors/BufferAttributeNode.js +99 -0
  44. package/examples/jsm/nodes/accessors/BufferNode.js +2 -2
  45. package/examples/jsm/nodes/accessors/CameraNode.js +25 -4
  46. package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +7 -1
  47. package/examples/jsm/nodes/accessors/InstanceNode.js +29 -12
  48. package/examples/jsm/nodes/accessors/MaterialNode.js +55 -47
  49. package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +2 -2
  50. package/examples/jsm/nodes/accessors/ModelNode.js +3 -1
  51. package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +4 -9
  52. package/examples/jsm/nodes/accessors/MorphNode.js +70 -0
  53. package/examples/jsm/nodes/accessors/NormalNode.js +3 -2
  54. package/examples/jsm/nodes/accessors/Object3DNode.js +10 -2
  55. package/examples/jsm/nodes/accessors/ReferenceNode.js +2 -2
  56. package/examples/jsm/nodes/accessors/SceneNode.js +46 -0
  57. package/examples/jsm/nodes/accessors/SkinningNode.js +43 -62
  58. package/examples/jsm/nodes/accessors/StorageBufferNode.js +2 -2
  59. package/examples/jsm/nodes/accessors/TangentNode.js +2 -2
  60. package/examples/jsm/nodes/accessors/TextureBicubicNode.js +94 -0
  61. package/examples/jsm/nodes/accessors/TextureNode.js +68 -6
  62. package/examples/jsm/nodes/accessors/TextureSizeNode.js +35 -0
  63. package/examples/jsm/nodes/accessors/UVNode.js +1 -1
  64. package/examples/jsm/nodes/code/CodeNode.js +3 -0
  65. package/examples/jsm/nodes/code/FunctionNode.js +25 -4
  66. package/examples/jsm/nodes/core/AttributeNode.js +1 -1
  67. package/examples/jsm/nodes/core/BypassNode.js +2 -2
  68. package/examples/jsm/nodes/core/ContextNode.js +2 -0
  69. package/examples/jsm/nodes/core/IndexNode.js +66 -0
  70. package/examples/jsm/nodes/core/LightingModel.js +2 -1
  71. package/examples/jsm/nodes/core/Node.js +13 -16
  72. package/examples/jsm/nodes/core/NodeAttribute.js +2 -1
  73. package/examples/jsm/nodes/core/NodeBuilder.js +86 -8
  74. package/examples/jsm/nodes/core/NodeUtils.js +10 -0
  75. package/examples/jsm/nodes/core/PropertyNode.js +6 -2
  76. package/examples/jsm/nodes/core/StackNode.js +8 -1
  77. package/examples/jsm/nodes/core/UniformNode.js +1 -1
  78. package/examples/jsm/nodes/core/VarNode.js +1 -3
  79. package/examples/jsm/nodes/display/BlendModeNode.js +9 -9
  80. package/examples/jsm/nodes/display/ColorAdjustmentNode.js +7 -7
  81. package/examples/jsm/nodes/display/ColorSpaceNode.js +50 -49
  82. package/examples/jsm/nodes/display/NormalMapNode.js +3 -3
  83. package/examples/jsm/nodes/display/ToneMappingNode.js +24 -15
  84. package/examples/jsm/nodes/display/ViewportDepthNode.js +69 -0
  85. package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +34 -0
  86. package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +7 -6
  87. package/examples/jsm/nodes/display/ViewportTextureNode.js +33 -19
  88. package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +5 -5
  89. package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +10 -8
  90. package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  91. package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +43 -0
  92. package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +4 -4
  93. package/examples/jsm/nodes/functions/BSDF/D_GGX.js +2 -2
  94. package/examples/jsm/nodes/functions/BSDF/EnvironmentBRDF.js +13 -0
  95. package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +2 -4
  96. package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  97. package/examples/jsm/nodes/functions/PhongLightingModel.js +7 -7
  98. package/examples/jsm/nodes/functions/PhysicalLightingModel.js +132 -19
  99. package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +2 -2
  100. package/examples/jsm/nodes/functions/material/getRoughness.js +3 -3
  101. package/examples/jsm/nodes/geometry/RangeNode.js +33 -51
  102. package/examples/jsm/nodes/lighting/AnalyticLightNode.js +6 -3
  103. package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -2
  104. package/examples/jsm/nodes/lighting/EnvironmentNode.js +107 -62
  105. package/examples/jsm/nodes/lighting/HemisphereLightNode.js +2 -2
  106. package/examples/jsm/nodes/lighting/LightUtils.js +2 -2
  107. package/examples/jsm/nodes/lighting/LightingContextNode.js +17 -15
  108. package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
  109. package/examples/jsm/nodes/lighting/SpotLightNode.js +3 -3
  110. package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -15
  111. package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -15
  112. package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -10
  113. package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -9
  114. package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +41 -0
  115. package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +1 -14
  116. package/examples/jsm/nodes/materials/NodeMaterial.js +119 -29
  117. package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -9
  118. package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
  119. package/examples/jsm/nodes/materialx/lib/mx_hsv.js +3 -3
  120. package/examples/jsm/nodes/materialx/lib/mx_noise.js +14 -14
  121. package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +4 -4
  122. package/examples/jsm/nodes/math/MathNode.js +6 -0
  123. package/examples/jsm/nodes/math/OperatorNode.js +1 -1
  124. package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
  125. package/examples/jsm/nodes/shadernode/ShaderNode.js +60 -33
  126. package/examples/jsm/nodes/utils/EquirectUVNode.js +2 -3
  127. package/examples/jsm/nodes/utils/LoopNode.js +186 -0
  128. package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +1 -1
  129. package/examples/jsm/objects/GroundProjectedSkybox.js +1 -1
  130. package/examples/jsm/objects/Lensflare.js +3 -4
  131. package/examples/jsm/objects/MarchingCubes.js +5 -1
  132. package/examples/jsm/objects/Reflector.js +4 -1
  133. package/examples/jsm/objects/Refractor.js +1 -1
  134. package/examples/jsm/objects/Sky.js +1 -1
  135. package/examples/jsm/objects/Water.js +2 -1
  136. package/examples/jsm/objects/Water2.js +1 -1
  137. package/examples/jsm/offscreen/scene.js +1 -0
  138. package/examples/jsm/physics/RapierPhysics.js +93 -133
  139. package/examples/jsm/postprocessing/AfterimagePass.js +3 -0
  140. package/examples/jsm/postprocessing/BloomPass.js +7 -2
  141. package/examples/jsm/postprocessing/BokehPass.js +3 -2
  142. package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
  143. package/examples/jsm/postprocessing/EffectComposer.js +4 -1
  144. package/examples/jsm/postprocessing/FilmPass.js +1 -0
  145. package/examples/jsm/postprocessing/OutlinePass.js +8 -9
  146. package/examples/jsm/postprocessing/OutputPass.js +72 -0
  147. package/examples/jsm/postprocessing/RenderPixelatedPass.js +4 -3
  148. package/examples/jsm/postprocessing/SAOPass.js +4 -2
  149. package/examples/jsm/postprocessing/SMAAPass.js +5 -2
  150. package/examples/jsm/postprocessing/SSAARenderPass.js +5 -13
  151. package/examples/jsm/postprocessing/SSAOPass.js +4 -2
  152. package/examples/jsm/postprocessing/SSRPass.js +3 -1
  153. package/examples/jsm/postprocessing/SavePass.js +5 -2
  154. package/examples/jsm/postprocessing/ShaderPass.js +1 -0
  155. package/examples/jsm/postprocessing/TAARenderPass.js +17 -4
  156. package/examples/jsm/postprocessing/TexturePass.js +2 -1
  157. package/examples/jsm/postprocessing/UnrealBloomPass.js +13 -13
  158. package/examples/jsm/renderers/{webgpu/WebGPUAnimation.js → common/Animation.js} +2 -2
  159. package/examples/jsm/renderers/common/Attributes.js +75 -0
  160. package/examples/jsm/renderers/common/Backend.js +162 -0
  161. package/examples/jsm/renderers/common/Background.js +134 -0
  162. package/examples/jsm/renderers/common/Binding.js +11 -0
  163. package/examples/jsm/renderers/common/Bindings.js +169 -0
  164. package/examples/jsm/renderers/common/Buffer.js +38 -0
  165. package/examples/jsm/renderers/{webgpu/WebGPUBufferUtils.js → common/BufferUtils.js} +2 -2
  166. package/examples/jsm/renderers/{webgpu/WebGPUWeakMap.js → common/ChainMap.js} +11 -5
  167. package/examples/jsm/renderers/common/ComputePipeline.js +17 -0
  168. package/examples/jsm/renderers/common/Constants.js +14 -0
  169. package/examples/jsm/renderers/common/CubeRenderTarget.js +65 -0
  170. package/examples/jsm/renderers/common/DataMap.js +54 -0
  171. package/examples/jsm/renderers/{webgpu/WebGPUGeometries.js → common/Geometries.js} +38 -37
  172. package/examples/jsm/renderers/{webgpu/WebGPUInfo.js → common/Info.js} +2 -3
  173. package/examples/jsm/renderers/common/Pipeline.js +13 -0
  174. package/examples/jsm/renderers/common/Pipelines.js +321 -0
  175. package/examples/jsm/renderers/common/ProgrammableStage.js +18 -0
  176. package/examples/jsm/renderers/common/RenderContext.js +37 -0
  177. package/examples/jsm/renderers/common/RenderContexts.js +38 -0
  178. package/examples/jsm/renderers/{webgpu/WebGPURenderLists.js → common/RenderList.js} +2 -39
  179. package/examples/jsm/renderers/common/RenderLists.js +38 -0
  180. package/examples/jsm/renderers/common/RenderObject.js +113 -0
  181. package/examples/jsm/renderers/common/RenderObjects.js +92 -0
  182. package/examples/jsm/renderers/common/RenderPipeline.js +16 -0
  183. package/examples/jsm/renderers/{webgpu/WebGPURenderTarget.js → common/RenderTarget.js} +2 -2
  184. package/examples/jsm/renderers/common/Renderer.js +864 -0
  185. package/examples/jsm/renderers/common/SampledTexture.js +80 -0
  186. package/examples/jsm/renderers/common/Sampler.js +18 -0
  187. package/examples/jsm/renderers/common/StorageBuffer.js +17 -0
  188. package/examples/jsm/renderers/common/Textures.js +206 -0
  189. package/examples/jsm/renderers/{webgpu/WebGPUUniform.js → common/Uniform.js} +13 -9
  190. package/examples/jsm/renderers/common/UniformBuffer.js +15 -0
  191. package/examples/jsm/renderers/{webgpu/WebGPUUniformsGroup.js → common/UniformsGroup.js} +13 -13
  192. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodes.js → common/nodes/NodeRender.js} +3 -3
  193. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampledTexture.js → common/nodes/NodeSampledTexture.js} +4 -4
  194. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampler.js → common/nodes/NodeSampler.js} +3 -3
  195. package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeUniform.js → common/nodes/NodeUniform.js} +1 -1
  196. package/examples/jsm/renderers/common/nodes/Nodes.js +319 -0
  197. package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +340 -0
  198. package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +23 -19
  199. package/examples/jsm/renderers/webgpu/WebGPUBackend.js +847 -0
  200. package/examples/jsm/renderers/webgpu/WebGPURenderer.js +15 -1131
  201. package/examples/jsm/renderers/webgpu/nodes/{WebGPUNodeBuilder.js → WGSLNodeBuilder.js} +75 -45
  202. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeFunction.js +2 -2
  203. package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeParser.js +1 -1
  204. package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +255 -0
  205. package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +145 -0
  206. package/examples/jsm/renderers/webgpu/{constants.js → utils/WebGPUConstants.js} +6 -7
  207. package/examples/jsm/renderers/webgpu/{WebGPURenderPipeline.js → utils/WebGPUPipelineUtils.js} +154 -247
  208. package/examples/jsm/renderers/webgpu/{WebGPUTextureUtils.js → utils/WebGPUTextureMipmapUtils.js} +3 -25
  209. package/examples/jsm/renderers/webgpu/{WebGPUTextures.js → utils/WebGPUTextureUtils.js} +392 -505
  210. package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +92 -0
  211. package/examples/jsm/shaders/BleachBypassShader.js +2 -0
  212. package/examples/jsm/shaders/BlendShader.js +1 -2
  213. package/examples/jsm/shaders/BokehShader2.js +3 -0
  214. package/examples/jsm/shaders/ColorifyShader.js +2 -0
  215. package/examples/jsm/shaders/ConvolutionShader.js +2 -0
  216. package/examples/jsm/shaders/CopyShader.js +4 -2
  217. package/examples/jsm/shaders/DotScreenShader.js +2 -0
  218. package/examples/jsm/shaders/ExposureShader.js +44 -0
  219. package/examples/jsm/shaders/FilmShader.js +2 -0
  220. package/examples/jsm/shaders/GammaCorrectionShader.js +2 -0
  221. package/examples/jsm/shaders/HorizontalBlurShader.js +2 -0
  222. package/examples/jsm/shaders/OutputShader.js +61 -0
  223. package/examples/jsm/shaders/RGBShiftShader.js +2 -0
  224. package/examples/jsm/shaders/SepiaShader.js +2 -0
  225. package/examples/jsm/shaders/ToonShader.js +13 -5
  226. package/examples/jsm/shaders/VerticalBlurShader.js +2 -0
  227. package/examples/jsm/shaders/VignetteShader.js +2 -0
  228. package/examples/jsm/shaders/WaterRefractionShader.js +5 -2
  229. package/examples/jsm/utils/BufferGeometryUtils.js +17 -1
  230. package/examples/jsm/utils/TextureUtils.js +86 -0
  231. package/examples/jsm/webxr/OculusHandPointerModel.js +34 -13
  232. package/examples/jsm/webxr/XRHandPrimitiveModel.js +1 -0
  233. package/examples/jsm/webxr/XRPlanes.js +100 -0
  234. package/package.json +3 -1
  235. package/src/Three.Legacy.js +0 -228
  236. package/src/audio/PositionalAudio.js +8 -0
  237. package/src/cameras/Camera.js +5 -0
  238. package/src/cameras/CubeCamera.js +76 -13
  239. package/src/cameras/OrthographicCamera.js +1 -1
  240. package/src/cameras/PerspectiveCamera.js +1 -1
  241. package/src/constants.js +13 -1
  242. package/src/core/BufferAttribute.js +3 -25
  243. package/src/core/BufferGeometry.js +1 -8
  244. package/src/core/Object3D.js +1 -1
  245. package/src/extras/core/Curve.js +1 -1
  246. package/src/loaders/CubeTextureLoader.js +2 -0
  247. package/src/loaders/Loader.js +2 -0
  248. package/src/loaders/MaterialLoader.js +5 -0
  249. package/src/loaders/ObjectLoader.js +1 -0
  250. package/src/materials/Material.js +13 -1
  251. package/src/materials/MeshPhysicalMaterial.js +32 -6
  252. package/src/math/Color.js +16 -11
  253. package/src/math/Frustum.js +16 -2
  254. package/src/math/MathUtils.js +16 -0
  255. package/src/math/Matrix3.js +26 -6
  256. package/src/math/Matrix4.js +74 -19
  257. package/src/objects/InstancedMesh.js +3 -0
  258. package/src/objects/Mesh.js +14 -10
  259. package/src/objects/Skeleton.js +1 -3
  260. package/src/objects/SkinnedMesh.js +36 -8
  261. package/src/renderers/WebGLRenderer.js +126 -21
  262. package/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js +7 -0
  263. package/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js +68 -0
  264. package/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js +6 -0
  265. package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -0
  266. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +26 -3
  267. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +9 -1
  268. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +26 -0
  269. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -2
  270. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +10 -2
  271. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +1 -1
  272. package/src/renderers/shaders/ShaderChunk/{output_fragment.glsl.js → opaque_fragment.glsl.js} +1 -2
  273. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
  274. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +3 -3
  275. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +10 -5
  276. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +6 -1
  277. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +7 -1
  278. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +6 -1
  279. package/src/renderers/shaders/ShaderChunk.js +10 -6
  280. package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
  281. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -1
  282. package/src/renderers/shaders/ShaderLib/cube.glsl.js +1 -1
  283. package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
  284. package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
  285. package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -1
  286. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -2
  287. package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +4 -2
  288. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +4 -2
  289. package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +4 -2
  290. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +4 -2
  291. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +12 -2
  292. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +4 -2
  293. package/src/renderers/shaders/ShaderLib/points.glsl.js +4 -2
  294. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  295. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +4 -2
  296. package/src/renderers/shaders/ShaderLib.js +4 -1
  297. package/src/renderers/shaders/UniformsLib.js +2 -0
  298. package/src/renderers/webgl/WebGLBindingStates.js +13 -5
  299. package/src/renderers/webgl/WebGLGeometries.js +12 -0
  300. package/src/renderers/webgl/WebGLInfo.js +0 -1
  301. package/src/renderers/webgl/WebGLMaterials.js +18 -0
  302. package/src/renderers/webgl/WebGLObjects.js +23 -3
  303. package/src/renderers/webgl/WebGLProgram.js +43 -5
  304. package/src/renderers/webgl/WebGLPrograms.js +19 -7
  305. package/src/renderers/webgl/WebGLTextures.js +19 -1
  306. package/src/renderers/webvr/WebVRManager.js +12 -0
  307. package/src/renderers/webxr/WebXRManager.js +39 -99
  308. package/src/scenes/Scene.js +0 -14
  309. package/src/textures/DepthTexture.js +22 -0
  310. package/src/textures/FramebufferTexture.js +1 -3
  311. package/src/textures/Source.js +4 -0
  312. package/src/textures/Texture.js +1 -1
  313. package/examples/jsm/exporters/ColladaExporter.js +0 -725
  314. package/examples/jsm/geometries/LightningStrike.js +0 -1017
  315. package/examples/jsm/loaders/PRWMLoader.js +0 -299
  316. package/examples/jsm/nodes/core/InstanceIndexNode.js +0 -26
  317. package/examples/jsm/objects/LightningStorm.js +0 -245
  318. package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +0 -361
  319. package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +0 -197
  320. package/examples/jsm/renderers/webgpu/WebGPUBackground.js +0 -190
  321. package/examples/jsm/renderers/webgpu/WebGPUBinding.js +0 -22
  322. package/examples/jsm/renderers/webgpu/WebGPUBindings.js +0 -270
  323. package/examples/jsm/renderers/webgpu/WebGPUBuffer.js +0 -43
  324. package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +0 -78
  325. package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +0 -22
  326. package/examples/jsm/renderers/webgpu/WebGPUProperties.js +0 -44
  327. package/examples/jsm/renderers/webgpu/WebGPURenderObject.js +0 -40
  328. package/examples/jsm/renderers/webgpu/WebGPURenderObjects.js +0 -50
  329. package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +0 -274
  330. package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +0 -54
  331. package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +0 -75
  332. package/examples/jsm/renderers/webgpu/WebGPUSampler.js +0 -29
  333. package/examples/jsm/renderers/webgpu/WebGPUStorageBuffer.js +0 -20
  334. package/examples/jsm/renderers/webgpu/WebGPUTextureRenderer.js +0 -38
  335. package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +0 -18
  336. package/examples/jsm/renderers/webgpu/WebGPUUtils.js +0 -88
  337. package/examples/jsm/shaders/ToneMapShader.js +0 -73
  338. /package/src/renderers/shaders/ShaderChunk/{encodings_fragment.glsl.js → colorspace_fragment.glsl.js} +0 -0
  339. /package/src/renderers/shaders/ShaderChunk/{encodings_pars_fragment.glsl.js → colorspace_pars_fragment.glsl.js} +0 -0
@@ -95,6 +95,10 @@ export function getValueType( value ) {
95
95
 
96
96
  return 'string';
97
97
 
98
+ } else if ( typeOf === 'function' ) {
99
+
100
+ return 'shader';
101
+
98
102
  } else if ( value.isVector2 === true ) {
99
103
 
100
104
  return 'vec2';
@@ -133,6 +137,12 @@ export function getValueFromType( type, ...params ) {
133
137
 
134
138
  const last4 = type ? type.slice( - 4 ) : undefined;
135
139
 
140
+ if ( ( last4 === 'vec2' || last4 === 'vec3' || last4 === 'vec4' ) && params.length === 1 ) { // ensure same behaviour as in NodeBuilder.format()
141
+
142
+ params = last4 === 'vec2' ? [ params[ 0 ], params[ 0 ] ] : [ params[ 0 ], params[ 0 ], params[ 0 ] ];
143
+
144
+ }
145
+
136
146
  if ( type === 'color' ) {
137
147
 
138
148
  return new Color( ...params );
@@ -1,5 +1,5 @@
1
1
  import Node, { addNodeClass } from './Node.js';
2
- import { nodeImmutable, nodeObject, getConstNodeType } from '../shadernode/ShaderNode.js';
2
+ import { nodeImmutable, nodeObject } from '../shadernode/ShaderNode.js';
3
3
 
4
4
  class PropertyNode extends Node {
5
5
 
@@ -42,11 +42,15 @@ class PropertyNode extends Node {
42
42
 
43
43
  export default PropertyNode;
44
44
 
45
- export const property = ( name, nodeOrType ) => nodeObject( new PropertyNode( name, getConstNodeType( nodeOrType ) ) );
45
+ export const property = ( type, name ) => nodeObject( new PropertyNode( type, name ) );
46
46
 
47
47
  export const diffuseColor = nodeImmutable( PropertyNode, 'vec4', 'DiffuseColor' );
48
48
  export const roughness = nodeImmutable( PropertyNode, 'float', 'Roughness' );
49
49
  export const metalness = nodeImmutable( PropertyNode, 'float', 'Metalness' );
50
+ export const clearcoat = nodeImmutable( PropertyNode, 'float', 'Clearcoat' );
51
+ export const clearcoatRoughness = nodeImmutable( PropertyNode, 'float', 'ClearcoatRoughness' );
52
+ export const sheen = nodeImmutable( PropertyNode, 'vec3', 'Sheen' );
53
+ export const sheenRoughness = nodeImmutable( PropertyNode, 'float', 'SheenRoughness' );
50
54
  export const specularColor = nodeImmutable( PropertyNode, 'color', 'SpecularColor' );
51
55
  export const shininess = nodeImmutable( PropertyNode, 'float', 'Shininess' );
52
56
 
@@ -3,6 +3,7 @@ import { assign } from '../math/OperatorNode.js';
3
3
  import { bypass } from '../core/BypassNode.js';
4
4
  import { expression } from '../code/ExpressionNode.js';
5
5
  import { cond } from '../math/CondNode.js';
6
+ import { loop } from '../utils/LoopNode.js';
6
7
  import { nodeProxy, shader } from '../shadernode/ShaderNode.js';
7
8
 
8
9
  class StackNode extends Node {
@@ -71,11 +72,17 @@ class StackNode extends Node {
71
72
 
72
73
  }
73
74
 
75
+ loop( ...params ) {
76
+
77
+ return this.add( loop( ...params ) );
78
+
79
+ }
80
+
74
81
  build( builder, ...params ) {
75
82
 
76
83
  for ( const node of this.nodes ) {
77
84
 
78
- node.build( builder );
85
+ node.build( builder, 'void' );
79
86
 
80
87
  }
81
88
 
@@ -36,7 +36,7 @@ class UniformNode extends InputNode {
36
36
 
37
37
  const sharedNodeType = sharedNode.getInputType( builder );
38
38
 
39
- const nodeUniform = builder.getUniformFromNode( sharedNode, builder.shaderStage, sharedNodeType );
39
+ const nodeUniform = builder.getUniformFromNode( sharedNode, sharedNodeType, builder.shaderStage, builder.context.label );
40
40
  const propertyName = builder.getPropertyName( nodeUniform );
41
41
 
42
42
  return builder.format( propertyName, type, output );
@@ -80,10 +80,8 @@ class VarNode extends Node {
80
80
 
81
81
  export default VarNode;
82
82
 
83
- export const label = nodeProxy( VarNode );
84
- export const temp = label;
83
+ export const temp = nodeProxy( VarNode );
85
84
 
86
- addNodeElement( 'label', label );
87
85
  addNodeElement( 'temp', temp );
88
86
 
89
87
  addNodeClass( VarNode );
@@ -1,9 +1,9 @@
1
1
  import TempNode from '../core/TempNode.js';
2
2
  import { EPSILON } from '../math/MathNode.js';
3
3
  import { addNodeClass } from '../core/Node.js';
4
- import { addNodeElement, ShaderNode, nodeProxy, vec3 } from '../shadernode/ShaderNode.js';
4
+ import { addNodeElement, tslFn, nodeProxy, vec3 } from '../shadernode/ShaderNode.js';
5
5
 
6
- export const BurnNode = new ShaderNode( ( { base, blend } ) => {
6
+ export const BurnNode = tslFn( ( { base, blend } ) => {
7
7
 
8
8
  const fn = ( c ) => blend[ c ].lessThan( EPSILON ).cond( blend[ c ], base[ c ].oneMinus().div( blend[ c ] ).oneMinus().max( 0 ) );
9
9
 
@@ -11,7 +11,7 @@ export const BurnNode = new ShaderNode( ( { base, blend } ) => {
11
11
 
12
12
  } );
13
13
 
14
- export const DodgeNode = new ShaderNode( ( { base, blend } ) => {
14
+ export const DodgeNode = tslFn( ( { base, blend } ) => {
15
15
 
16
16
  const fn = ( c ) => blend[ c ].equal( 1.0 ).cond( blend[ c ], base[ c ].div( blend[ c ].oneMinus() ).max( 0 ) );
17
17
 
@@ -19,7 +19,7 @@ export const DodgeNode = new ShaderNode( ( { base, blend } ) => {
19
19
 
20
20
  } );
21
21
 
22
- export const ScreenNode = new ShaderNode( ( { base, blend } ) => {
22
+ export const ScreenNode = tslFn( ( { base, blend } ) => {
23
23
 
24
24
  const fn = ( c ) => base[ c ].oneMinus().mul( blend[ c ].oneMinus() ).oneMinus();
25
25
 
@@ -27,7 +27,7 @@ export const ScreenNode = new ShaderNode( ( { base, blend } ) => {
27
27
 
28
28
  } );
29
29
 
30
- export const OverlayNode = new ShaderNode( ( { base, blend } ) => {
30
+ export const OverlayNode = tslFn( ( { base, blend } ) => {
31
31
 
32
32
  const fn = ( c ) => base[ c ].lessThan( 0.5 ).cond( base[ c ].mul( blend[ c ], 2.0 ), base[ c ].oneMinus().mul( blend[ c ].oneMinus() ).oneMinus() );
33
33
 
@@ -57,19 +57,19 @@ class BlendModeNode extends TempNode {
57
57
 
58
58
  if ( blendMode === BlendModeNode.BURN ) {
59
59
 
60
- outputNode = BurnNode.call( params );
60
+ outputNode = BurnNode( params );
61
61
 
62
62
  } else if ( blendMode === BlendModeNode.DODGE ) {
63
63
 
64
- outputNode = DodgeNode.call( params );
64
+ outputNode = DodgeNode( params );
65
65
 
66
66
  } else if ( blendMode === BlendModeNode.SCREEN ) {
67
67
 
68
- outputNode = ScreenNode.call( params );
68
+ outputNode = ScreenNode( params );
69
69
 
70
70
  } else if ( blendMode === BlendModeNode.OVERLAY ) {
71
71
 
72
- outputNode = OverlayNode.call( params );
72
+ outputNode = OverlayNode( params );
73
73
 
74
74
  }
75
75
 
@@ -2,15 +2,15 @@ import TempNode from '../core/TempNode.js';
2
2
  import { dot, mix } from '../math/MathNode.js';
3
3
  import { add } from '../math/OperatorNode.js';
4
4
  import { addNodeClass } from '../core/Node.js';
5
- import { addNodeElement, ShaderNode, nodeProxy, float, vec3, mat3 } from '../shadernode/ShaderNode.js';
5
+ import { addNodeElement, tslFn, nodeProxy, float, vec3, mat3 } from '../shadernode/ShaderNode.js';
6
6
 
7
- const saturationNode = new ShaderNode( ( { color, adjustment } ) => {
7
+ const saturationNode = tslFn( ( { color, adjustment } ) => {
8
8
 
9
9
  return adjustment.mix( luminance( color ), color );
10
10
 
11
11
  } );
12
12
 
13
- const vibranceNode = new ShaderNode( ( { color, adjustment } ) => {
13
+ const vibranceNode = tslFn( ( { color, adjustment } ) => {
14
14
 
15
15
  const average = add( color.r, color.g, color.b ).div( 3.0 );
16
16
 
@@ -21,7 +21,7 @@ const vibranceNode = new ShaderNode( ( { color, adjustment } ) => {
21
21
 
22
22
  } );
23
23
 
24
- const hueNode = new ShaderNode( ( { color, adjustment } ) => {
24
+ const hueNode = tslFn( ( { color, adjustment } ) => {
25
25
 
26
26
  const RGBtoYIQ = mat3( 0.299, 0.587, 0.114, 0.595716, - 0.274453, - 0.321263, 0.211456, - 0.522591, 0.311135 );
27
27
  const YIQtoRGB = mat3( 1.0, 0.9563, 0.6210, 1.0, - 0.2721, - 0.6474, 1.0, - 1.107, 1.7046 );
@@ -58,15 +58,15 @@ class ColorAdjustmentNode extends TempNode {
58
58
 
59
59
  if ( method === ColorAdjustmentNode.SATURATION ) {
60
60
 
61
- outputNode = saturationNode.call( callParams );
61
+ outputNode = saturationNode( callParams );
62
62
 
63
63
  } else if ( method === ColorAdjustmentNode.VIBRANCE ) {
64
64
 
65
- outputNode = vibranceNode.call( callParams );
65
+ outputNode = vibranceNode( callParams );
66
66
 
67
67
  } else if ( method === ColorAdjustmentNode.HUE ) {
68
68
 
69
- outputNode = hueNode.call( callParams );
69
+ outputNode = hueNode( callParams );
70
70
 
71
71
  } else {
72
72
 
@@ -1,17 +1,26 @@
1
1
  import TempNode from '../core/TempNode.js';
2
2
  import { mix } from '../math/MathNode.js';
3
3
  import { addNodeClass } from '../core/Node.js';
4
- import { addNodeElement, ShaderNode, nodeObject, vec4 } from '../shadernode/ShaderNode.js';
4
+ import { addNodeElement, tslFn, nodeObject, nodeProxy, vec4 } from '../shadernode/ShaderNode.js';
5
5
 
6
- import { LinearEncoding, LinearSRGBColorSpace, sRGBEncoding, SRGBColorSpace } from 'three';
6
+ import { LinearSRGBColorSpace, SRGBColorSpace } from 'three';
7
7
 
8
- export const LinearToLinear = new ShaderNode( ( inputs ) => {
8
+ const sRGBToLinearShader = tslFn( ( inputs ) => {
9
9
 
10
- return inputs.value;
10
+ const { value } = inputs;
11
+ const { rgb } = value;
12
+
13
+ const a = rgb.mul( 0.9478672986 ).add( 0.0521327014 ).pow( 2.4 );
14
+ const b = rgb.mul( 0.0773993808 );
15
+ const factor = rgb.lessThanEqual( 0.04045 );
16
+
17
+ const rgbResult = mix( a, b, factor );
18
+
19
+ return vec4( rgbResult, value.a );
11
20
 
12
21
  } );
13
22
 
14
- export const LinearTosRGB = new ShaderNode( ( inputs ) => {
23
+ const LinearTosRGBShader = tslFn( ( inputs ) => {
15
24
 
16
25
  const { value } = inputs;
17
26
  const { rgb } = value;
@@ -26,62 +35,38 @@ export const LinearTosRGB = new ShaderNode( ( inputs ) => {
26
35
 
27
36
  } );
28
37
 
29
- const EncodingLib = {
30
- LinearToLinear,
31
- LinearTosRGB
32
- };
33
-
34
- class ColorSpaceNode extends TempNode {
35
-
36
- constructor( method, node ) {
37
-
38
- super( 'vec4' );
39
-
40
- this.method = method;
41
-
42
- this.node = node;
43
-
44
- }
45
-
46
- fromColorSpace( colorSpace ) {
47
-
48
- let method = null;
49
-
50
- if ( colorSpace === LinearSRGBColorSpace ) {
38
+ const getColorSpaceMethod = ( colorSpace ) => {
51
39
 
52
- method = 'Linear';
40
+ let method = null;
53
41
 
54
- } else if ( colorSpace === SRGBColorSpace ) {
42
+ if ( colorSpace === LinearSRGBColorSpace ) {
55
43
 
56
- method = 'sRGB';
44
+ method = 'Linear';
57
45
 
58
- }
46
+ } else if ( colorSpace === SRGBColorSpace ) {
59
47
 
60
- this.method = 'LinearTo' + method;
61
-
62
- return this;
48
+ method = 'sRGB';
63
49
 
64
50
  }
65
51
 
66
- fromEncoding( encoding ) { // @deprecated, r152
67
-
68
- console.warn( 'THREE.ColorSpaceNode: Method .fromEncoding renamed to .fromColorSpace.' );
52
+ return method;
69
53
 
70
- let method = null;
54
+ };
71
55
 
72
- if ( encoding === LinearEncoding ) {
56
+ const getMethod = ( source, target ) => {
73
57
 
74
- method = 'Linear';
58
+ return getColorSpaceMethod( source ) + 'To' + getColorSpaceMethod( target );
75
59
 
76
- } else if ( encoding === sRGBEncoding ) {
60
+ };
77
61
 
78
- method = 'sRGB';
62
+ class ColorSpaceNode extends TempNode {
79
63
 
80
- }
64
+ constructor( method, node ) {
81
65
 
82
- this.method = 'LinearTo' + method;
66
+ super( 'vec4' );
83
67
 
84
- return this;
68
+ this.method = method;
69
+ this.node = node;
85
70
 
86
71
  }
87
72
 
@@ -89,19 +74,35 @@ class ColorSpaceNode extends TempNode {
89
74
 
90
75
  const { method, node } = this;
91
76
 
92
- return EncodingLib[ method ].call( { value: node } );
77
+ if ( method === ColorSpaceNode.LINEAR_TO_LINEAR )
78
+ return node;
79
+
80
+ return Methods[ method ]( { value: node } );
93
81
 
94
82
  }
95
83
 
96
84
  }
97
85
 
98
86
  ColorSpaceNode.LINEAR_TO_LINEAR = 'LinearToLinear';
99
- ColorSpaceNode.LINEAR_TO_SRGB = 'LinearTosRGB';
87
+ ColorSpaceNode.LINEAR_TO_sRGB = 'LinearTosRGB';
88
+ ColorSpaceNode.sRGB_TO_LINEAR = 'sRGBToLinear';
89
+
90
+ const Methods = {
91
+ [ ColorSpaceNode.LINEAR_TO_sRGB ]: LinearTosRGBShader,
92
+ [ ColorSpaceNode.sRGB_TO_LINEAR ]: sRGBToLinearShader
93
+ };
100
94
 
101
95
  export default ColorSpaceNode;
102
96
 
103
- export const colorSpace = ( node, colorSpace ) => nodeObject( new ColorSpaceNode( null, nodeObject( node ) ).fromColorSpace( colorSpace ) );
97
+ export const linearToColorSpace = ( node, colorSpace ) => nodeObject( new ColorSpaceNode( getMethod( LinearSRGBColorSpace, colorSpace ), nodeObject( node ) ) );
98
+ export const colorSpaceToLinear = ( node, colorSpace ) => nodeObject( new ColorSpaceNode( getMethod( colorSpace, LinearSRGBColorSpace ), nodeObject( node ) ) );
99
+
100
+ export const linearTosRGB = nodeProxy( ColorSpaceNode, ColorSpaceNode.LINEAR_TO_sRGB );
101
+ export const sRGBToLinear = nodeProxy( ColorSpaceNode, ColorSpaceNode.sRGB_TO_LINEAR );
104
102
 
105
- addNodeElement( 'colorSpace', colorSpace );
103
+ addNodeElement( 'linearTosRGB', linearTosRGB );
104
+ addNodeElement( 'sRGBToLinear', sRGBToLinear );
105
+ addNodeElement( 'linearToColorSpace', linearToColorSpace );
106
+ addNodeElement( 'colorSpaceToLinear', colorSpaceToLinear );
106
107
 
107
108
  addNodeClass( ColorSpaceNode );
@@ -8,14 +8,14 @@ import { tangentView } from '../accessors/TangentNode.js';
8
8
  import { uv } from '../accessors/UVNode.js';
9
9
  import { faceDirection } from './FrontFacingNode.js';
10
10
  import { addNodeClass } from '../core/Node.js';
11
- import { ShaderNode, nodeProxy, vec3, mat3 } from '../shadernode/ShaderNode.js';
11
+ import { tslFn, nodeProxy, vec3, mat3 } from '../shadernode/ShaderNode.js';
12
12
 
13
13
  import { TangentSpaceNormalMap, ObjectSpaceNormalMap } from 'three';
14
14
 
15
15
  // Normal Mapping Without Precomputed Tangents
16
16
  // http://www.thetenthplanet.de/archives/1180
17
17
 
18
- const perturbNormal2ArbNode = new ShaderNode( ( inputs ) => {
18
+ const perturbNormal2ArbNode = tslFn( ( inputs ) => {
19
19
 
20
20
  const { eye_pos, surf_norm, mapN, uv } = inputs;
21
21
 
@@ -80,7 +80,7 @@ class NormalMapNode extends TempNode {
80
80
 
81
81
  } else {
82
82
 
83
- outputNode = perturbNormal2ArbNode.call( {
83
+ outputNode = perturbNormal2ArbNode( {
84
84
  eye_pos: positionView,
85
85
  surf_norm: normalView,
86
86
  mapN: normalMap,
@@ -1,18 +1,18 @@
1
1
  import TempNode from '../core/TempNode.js';
2
2
  import { addNodeClass } from '../core/Node.js';
3
- import { ShaderNode, nodeObject, float, vec3, mat3 } from '../shadernode/ShaderNode.js';
3
+ import { tslFn, nodeObject, float, mat3 } from '../shadernode/ShaderNode.js';
4
4
 
5
5
  import { NoToneMapping, LinearToneMapping, ReinhardToneMapping, CineonToneMapping, ACESFilmicToneMapping } from 'three';
6
6
 
7
7
  // exposure only
8
- const LinearToneMappingNode = new ShaderNode( ( { color, exposure } ) => {
8
+ const LinearToneMappingNode = tslFn( ( { color, exposure } ) => {
9
9
 
10
- return color.mul( exposure );
10
+ return color.mul( exposure ).clamp();
11
11
 
12
12
  } );
13
13
 
14
14
  // source: https://www.cs.utah.edu/docs/techreports/2002/pdf/UUCS-02-001.pdf
15
- const ReinhardToneMappingNode = new ShaderNode( ( { color, exposure } ) => {
15
+ const ReinhardToneMappingNode = tslFn( ( { color, exposure } ) => {
16
16
 
17
17
  color = color.mul( exposure );
18
18
 
@@ -21,7 +21,7 @@ const ReinhardToneMappingNode = new ShaderNode( ( { color, exposure } ) => {
21
21
  } );
22
22
 
23
23
  // source: http://filmicworlds.com/blog/filmic-tonemapping-operators/
24
- const OptimizedCineonToneMappingNode = new ShaderNode( ( { color, exposure } ) => {
24
+ const OptimizedCineonToneMappingNode = tslFn( ( { color, exposure } ) => {
25
25
 
26
26
  // optimized filmic operator by Jim Hejl and Richard Burgess-Dawson
27
27
  color = color.mul( exposure );
@@ -35,7 +35,7 @@ const OptimizedCineonToneMappingNode = new ShaderNode( ( { color, exposure } ) =
35
35
  } );
36
36
 
37
37
  // source: https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs
38
- const RRTAndODTFit = new ShaderNode( ( { color } ) => {
38
+ const RRTAndODTFit = tslFn( ( { color } ) => {
39
39
 
40
40
  const a = color.mul( color.add( 0.0245786 ) ).sub( 0.000090537 );
41
41
  const b = color.mul( color.add( 0.4329510 ).mul( 0.983729 ) ).add( 0.238081 );
@@ -45,20 +45,20 @@ const RRTAndODTFit = new ShaderNode( ( { color } ) => {
45
45
  } );
46
46
 
47
47
  // source: https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs
48
- const ACESFilmicToneMappingNode = new ShaderNode( ( { color, exposure } ) => {
48
+ const ACESFilmicToneMappingNode = tslFn( ( { color, exposure } ) => {
49
49
 
50
50
  // sRGB => XYZ => D65_2_D60 => AP1 => RRT_SAT
51
51
  const ACESInputMat = mat3(
52
- vec3( 0.59719, 0.07600, 0.02840 ), // transposed from source
53
- vec3( 0.35458, 0.90834, 0.13383 ),
54
- vec3( 0.04823, 0.01566, 0.83777 )
52
+ 0.59719, 0.35458, 0.04823,
53
+ 0.07600, 0.90834, 0.01566,
54
+ 0.02840, 0.13383, 0.83777
55
55
  );
56
56
 
57
57
  // ODT_SAT => XYZ => D60_2_D65 => sRGB
58
58
  const ACESOutputMat = mat3(
59
- vec3( 1.60475, - 0.10208, - 0.00327 ), // transposed from source
60
- vec3( - 0.53108, 1.10813, - 0.07276 ),
61
- vec3( - 0.07367, - 0.00605, 1.07602 )
59
+ 1.60475, - 0.53108, - 0.07367,
60
+ - 0.10208, 1.10813, - 0.00605,
61
+ - 0.00327, - 0.07276, 1.07602
62
62
  );
63
63
 
64
64
  color = color.mul( exposure ).div( 0.6 );
@@ -66,7 +66,7 @@ const ACESFilmicToneMappingNode = new ShaderNode( ( { color, exposure } ) => {
66
66
  color = ACESInputMat.mul( color );
67
67
 
68
68
  // Apply RRT and ODT
69
- color = RRTAndODTFit.call( { color } );
69
+ color = RRTAndODTFit( { color } );
70
70
 
71
71
  color = ACESOutputMat.mul( color );
72
72
 
@@ -95,6 +95,15 @@ class ToneMappingNode extends TempNode {
95
95
 
96
96
  }
97
97
 
98
+ getCacheKey() {
99
+
100
+ let cacheKey = super.getCacheKey();
101
+ cacheKey = '{toneMapping:' + this.toneMapping + ',nodes:' + cacheKey + '}';
102
+
103
+ return cacheKey;
104
+
105
+ }
106
+
98
107
  construct( builder ) {
99
108
 
100
109
  const colorNode = this.colorNode || builder.context.color;
@@ -109,7 +118,7 @@ class ToneMappingNode extends TempNode {
109
118
 
110
119
  if ( toneMappingNode ) {
111
120
 
112
- outputNode = toneMappingNode.call( toneMappingParams );
121
+ outputNode = toneMappingNode( toneMappingParams );
113
122
 
114
123
  } else {
115
124
 
@@ -0,0 +1,69 @@
1
+ import Node, { addNodeClass } from '../core/Node.js';
2
+ import { nodeImmutable, nodeProxy } from '../shadernode/ShaderNode.js';
3
+ import { cameraNear, cameraFar } from '../accessors/CameraNode.js';
4
+ import { positionView } from '../accessors/PositionNode.js';
5
+ import { viewportDepthTexture } from './ViewportDepthTextureNode.js';
6
+
7
+ class ViewportDepthNode extends Node {
8
+
9
+ constructor( scope, textureNode = null ) {
10
+
11
+ super( 'float' );
12
+
13
+ this.scope = scope;
14
+ this.textureNode = textureNode;
15
+
16
+ this.isViewportDepthNode = true;
17
+
18
+ }
19
+
20
+ construct( /*builder*/ ) {
21
+
22
+ const { scope } = this;
23
+
24
+ let node = null;
25
+
26
+ if ( scope === ViewportDepthNode.DEPTH ) {
27
+
28
+ node = viewZToOrthographicDepth( positionView.z, cameraNear, cameraFar );
29
+
30
+ } else if ( scope === ViewportDepthNode.DEPTH_TEXTURE ) {
31
+
32
+ const texture = this.textureNode || viewportDepthTexture();
33
+
34
+ const viewZ = perspectiveDepthToViewZ( texture, cameraNear, cameraFar );
35
+ node = viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );
36
+
37
+ }
38
+
39
+ return node;
40
+
41
+ }
42
+
43
+ }
44
+
45
+ // NOTE: viewZ, the z-coordinate in camera space, is negative for points in front of the camera
46
+
47
+ // -near maps to 0; -far maps to 1
48
+ export const viewZToOrthographicDepth = ( viewZ, near, far ) => viewZ.add( near ).div( near.sub( far ) );
49
+
50
+ // maps orthographic depth in [ 0, 1 ] to viewZ
51
+ export const orthographicDepthToViewZ = ( depth, near, far ) => near.sub( far ).mul( depth ).sub( near );
52
+
53
+ // NOTE: https://twitter.com/gonnavis/status/1377183786949959682
54
+
55
+ // -near maps to 0; -far maps to 1
56
+ export const viewZToPerspectiveDepth = ( viewZ, near, far ) => near.add( viewZ ).mul( far ).div( near.sub( far ).mul( viewZ ) );
57
+
58
+ // maps perspective depth in [ 0, 1 ] to viewZ
59
+ export const perspectiveDepthToViewZ = ( depth, near, far ) => near.mul( far ).div( far.sub( near ).mul( depth ).sub( far ) );
60
+
61
+ ViewportDepthNode.DEPTH = 'depth';
62
+ ViewportDepthNode.DEPTH_TEXTURE = 'depthTexture';
63
+
64
+ export default ViewportDepthNode;
65
+
66
+ export const depth = nodeImmutable( ViewportDepthNode, ViewportDepthNode.DEPTH );
67
+ export const depthTexture = nodeProxy( ViewportDepthNode, ViewportDepthNode.DEPTH_TEXTURE );
68
+
69
+ addNodeClass( ViewportDepthNode );
@@ -0,0 +1,34 @@
1
+ import ViewportTextureNode from './ViewportTextureNode.js';
2
+ import { addNodeClass } from '../core/Node.js';
3
+ import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
4
+ import { viewportTopLeft } from './ViewportNode.js';
5
+ import { DepthTexture, LinearMipmapLinearFilter, DepthFormat, UnsignedIntType } from 'three';
6
+
7
+ let sharedDepthbuffer = null;
8
+
9
+ class ViewportDepthTextureNode extends ViewportTextureNode {
10
+
11
+ constructor( uvNode = viewportTopLeft, levelNode = null ) {
12
+
13
+ if ( sharedDepthbuffer === null ) {
14
+
15
+ sharedDepthbuffer = new DepthTexture();
16
+ sharedDepthbuffer.minFilter = LinearMipmapLinearFilter;
17
+ sharedDepthbuffer.type = UnsignedIntType;
18
+ sharedDepthbuffer.format = DepthFormat;
19
+
20
+ }
21
+
22
+ super( uvNode, levelNode, sharedDepthbuffer );
23
+
24
+ }
25
+
26
+ }
27
+
28
+ export default ViewportDepthTextureNode;
29
+
30
+ export const viewportDepthTexture = nodeProxy( ViewportDepthTextureNode );
31
+
32
+ addNodeElement( 'viewportDepthTexture', viewportDepthTexture );
33
+
34
+ addNodeClass( ViewportDepthTextureNode );
@@ -2,20 +2,21 @@ import ViewportTextureNode from './ViewportTextureNode.js';
2
2
  import { addNodeClass } from '../core/Node.js';
3
3
  import { addNodeElement, nodeProxy } from '../shadernode/ShaderNode.js';
4
4
  import { viewportTopLeft } from './ViewportNode.js';
5
+ import { FramebufferTexture } from 'three';
5
6
 
6
- let rtt = null;
7
+ let sharedFramebuffer = null;
7
8
 
8
9
  class ViewportSharedTextureNode extends ViewportTextureNode {
9
10
 
10
- constructor( uv = viewportTopLeft ) {
11
+ constructor( uvNode = viewportTopLeft, levelNode = null ) {
11
12
 
12
- super( uv );
13
+ if ( sharedFramebuffer === null ) {
13
14
 
14
- }
15
+ sharedFramebuffer = new FramebufferTexture();
15
16
 
16
- constructRTT( builder ) {
17
+ }
17
18
 
18
- return rtt || ( rtt = builder.getRenderTarget() );
19
+ super( uvNode, levelNode, sharedFramebuffer );
19
20
 
20
21
  }
21
22