super-three 0.167.0 → 0.169.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 (387) hide show
  1. package/build/three.cjs +532 -173
  2. package/build/three.module.js +532 -174
  3. package/build/three.module.min.js +1 -1
  4. package/build/three.webgpu.js +18173 -14266
  5. package/build/three.webgpu.min.js +1 -1
  6. package/build/three.webgpu.nodes.js +79941 -0
  7. package/build/three.webgpu.nodes.min.js +6 -0
  8. package/examples/jsm/Addons.js +0 -4
  9. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  10. package/examples/jsm/capabilities/WebGL.js +27 -21
  11. package/examples/jsm/controls/ArcballControls.js +174 -158
  12. package/examples/jsm/controls/DragControls.js +260 -132
  13. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  14. package/examples/jsm/controls/FlyControls.js +194 -188
  15. package/examples/jsm/controls/OrbitControls.js +777 -786
  16. package/examples/jsm/controls/PointerLockControls.js +24 -15
  17. package/examples/jsm/controls/TrackballControls.js +469 -448
  18. package/examples/jsm/controls/TransformControls.js +97 -62
  19. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  20. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  21. package/examples/jsm/effects/StereoEffect.js +6 -1
  22. package/examples/jsm/environments/RoomEnvironment.js +1 -1
  23. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  24. package/examples/jsm/exporters/EXRExporter.js +19 -11
  25. package/examples/jsm/exporters/GLTFExporter.js +6 -1
  26. package/examples/jsm/exporters/KTX2Exporter.js +21 -13
  27. package/examples/jsm/exporters/OBJExporter.js +5 -1
  28. package/examples/jsm/exporters/PLYExporter.js +9 -7
  29. package/examples/jsm/exporters/USDZExporter.js +29 -8
  30. package/examples/jsm/geometries/DecalGeometry.js +4 -1
  31. package/examples/jsm/geometries/InstancedPointsGeometry.js +1 -1
  32. package/examples/jsm/helpers/LightProbeHelper.js +43 -44
  33. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  34. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  35. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  36. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  37. package/examples/jsm/lights/LightProbeGenerator.js +24 -10
  38. package/examples/jsm/loaders/ColladaLoader.js +9 -6
  39. package/examples/jsm/loaders/DRACOLoader.js +3 -1
  40. package/examples/jsm/loaders/FBXLoader.js +30 -20
  41. package/examples/jsm/loaders/GLTFLoader.js +5 -10
  42. package/examples/jsm/loaders/KTX2Loader.js +27 -12
  43. package/examples/jsm/loaders/MTLLoader.js +4 -3
  44. package/examples/jsm/loaders/MaterialXLoader.js +40 -14
  45. package/examples/jsm/loaders/OBJLoader.js +5 -3
  46. package/examples/jsm/loaders/PCDLoader.js +14 -13
  47. package/examples/jsm/loaders/PDBLoader.js +3 -2
  48. package/examples/jsm/loaders/PLYLoader.js +8 -5
  49. package/examples/jsm/loaders/STLLoader.js +3 -2
  50. package/examples/jsm/loaders/VRMLLoader.js +10 -10
  51. package/examples/jsm/loaders/VTKLoader.js +4 -3
  52. package/examples/jsm/loaders/XYZLoader.js +3 -2
  53. package/examples/jsm/misc/Timer.js +1 -1
  54. package/examples/jsm/modifiers/CurveModifierGPU.js +233 -0
  55. package/examples/jsm/objects/LensflareMesh.js +322 -0
  56. package/examples/jsm/objects/SkyMesh.js +187 -0
  57. package/examples/jsm/objects/Water2Mesh.js +158 -0
  58. package/examples/jsm/objects/WaterMesh.js +101 -0
  59. package/examples/jsm/physics/JoltPhysics.js +1 -1
  60. package/examples/jsm/physics/RapierPhysics.js +21 -1
  61. package/examples/jsm/postprocessing/OutlinePass.js +31 -46
  62. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  63. package/examples/jsm/shaders/BleachBypassShader.js +1 -2
  64. package/examples/jsm/shaders/OutputShader.js +1 -1
  65. package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
  66. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -2
  67. package/examples/jsm/transpiler/TSLEncoder.js +8 -8
  68. package/examples/jsm/utils/GeometryCompressionUtils.js +37 -122
  69. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  70. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  71. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  72. package/examples/jsm/utils/TextureUtils.js +2 -1
  73. package/examples/jsm/utils/TextureUtilsGPU.js +63 -0
  74. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  75. package/package.json +3 -2
  76. package/src/Three.WebGPU.Nodes.js +200 -0
  77. package/src/Three.WebGPU.js +7 -0
  78. package/src/Three.js +1 -0
  79. package/src/audio/Audio.js +2 -2
  80. package/src/constants.js +1 -1
  81. package/src/core/BufferAttribute.js +0 -9
  82. package/src/core/Clock.js +1 -1
  83. package/src/core/InterleavedBuffer.js +0 -9
  84. package/src/extras/Controls.js +32 -0
  85. package/src/geometries/CylinderGeometry.js +11 -4
  86. package/src/loaders/MaterialLoader.js +7 -1
  87. package/src/loaders/ObjectLoader.js +3 -3
  88. package/src/{nodes/loaders → loaders/nodes}/NodeLoader.js +25 -5
  89. package/src/{nodes/loaders → loaders/nodes}/NodeMaterialLoader.js +21 -18
  90. package/src/{nodes/loaders → loaders/nodes}/NodeObjectLoader.js +19 -0
  91. package/src/materials/Material.js +4 -7
  92. package/src/materials/nodes/InstancedPointsNodeMaterial.js +156 -0
  93. package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +56 -59
  94. package/src/{nodes/materials → materials/nodes}/LineBasicNodeMaterial.js +8 -5
  95. package/src/{nodes/materials → materials/nodes}/LineDashedNodeMaterial.js +12 -10
  96. package/src/{nodes/materials → materials/nodes}/MeshBasicNodeMaterial.js +16 -12
  97. package/src/{nodes/materials → materials/nodes}/MeshLambertNodeMaterial.js +10 -6
  98. package/src/{nodes/materials → materials/nodes}/MeshMatcapNodeMaterial.js +13 -9
  99. package/src/{nodes/materials → materials/nodes}/MeshNormalNodeMaterial.js +13 -9
  100. package/src/{nodes/materials → materials/nodes}/MeshPhongNodeMaterial.js +14 -9
  101. package/src/{nodes/materials → materials/nodes}/MeshPhysicalNodeMaterial.js +22 -18
  102. package/src/{nodes/materials → materials/nodes}/MeshSSSNodeMaterial.js +10 -7
  103. package/src/{nodes/materials → materials/nodes}/MeshStandardNodeMaterial.js +22 -12
  104. package/src/{nodes/materials → materials/nodes}/MeshToonNodeMaterial.js +9 -5
  105. package/src/{nodes/materials → materials/nodes}/NodeMaterial.js +71 -115
  106. package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -1
  107. package/src/{nodes/materials → materials/nodes}/PointsNodeMaterial.js +8 -5
  108. package/src/{nodes/materials → materials/nodes}/ShadowNodeMaterial.js +9 -5
  109. package/src/{nodes/materials → materials/nodes}/SpriteNodeMaterial.js +47 -14
  110. package/src/{nodes/materials → materials/nodes}/VolumeNodeMaterial.js +24 -22
  111. package/src/materials/nodes/manager/NodeMaterialObserver.js +302 -0
  112. package/src/math/Triangle.js +24 -0
  113. package/src/nodes/Nodes.js +103 -159
  114. package/src/nodes/TSL.js +179 -0
  115. package/src/nodes/accessors/AccessorsUtils.js +8 -8
  116. package/src/nodes/accessors/BatchNode.js +53 -21
  117. package/src/nodes/accessors/{BitangentNode.js → Bitangent.js} +9 -9
  118. package/src/nodes/accessors/BufferAttributeNode.js +8 -5
  119. package/src/nodes/accessors/BufferNode.js +7 -4
  120. package/src/nodes/accessors/Camera.js +13 -0
  121. package/src/nodes/accessors/ClippingNode.js +19 -13
  122. package/src/nodes/accessors/CubeTextureNode.js +9 -8
  123. package/src/nodes/accessors/InstanceNode.js +19 -15
  124. package/src/nodes/accessors/InstancedPointsMaterialNode.js +8 -5
  125. package/src/nodes/accessors/Lights.js +51 -0
  126. package/src/nodes/accessors/MaterialNode.js +56 -55
  127. package/src/nodes/accessors/MaterialProperties.js +3 -0
  128. package/src/nodes/accessors/MaterialReferenceNode.js +9 -4
  129. package/src/nodes/accessors/ModelNode.js +47 -12
  130. package/src/nodes/accessors/ModelViewProjectionNode.js +12 -9
  131. package/src/nodes/accessors/MorphNode.js +17 -13
  132. package/src/nodes/accessors/Normal.js +88 -0
  133. package/src/nodes/accessors/Object3DNode.js +17 -33
  134. package/src/nodes/accessors/PointUVNode.js +9 -5
  135. package/src/nodes/accessors/Position.js +10 -0
  136. package/src/nodes/accessors/ReferenceBaseNode.js +171 -0
  137. package/src/nodes/accessors/ReferenceNode.js +50 -7
  138. package/src/nodes/accessors/ReflectVector.js +10 -0
  139. package/src/nodes/accessors/RendererReferenceNode.js +12 -6
  140. package/src/nodes/accessors/SceneNode.js +9 -6
  141. package/src/nodes/accessors/SkinningNode.js +88 -21
  142. package/src/nodes/accessors/StorageBufferNode.js +22 -5
  143. package/src/nodes/accessors/StorageTextureNode.js +9 -6
  144. package/src/nodes/accessors/Tangent.js +22 -0
  145. package/src/nodes/accessors/Texture3DNode.js +16 -13
  146. package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +3 -32
  147. package/src/nodes/accessors/TextureNode.js +29 -23
  148. package/src/nodes/accessors/TextureSizeNode.js +10 -9
  149. package/src/nodes/accessors/{UniformsNode.js → UniformArrayNode.js} +26 -14
  150. package/src/nodes/accessors/UserDataNode.js +10 -7
  151. package/src/nodes/accessors/VelocityNode.js +134 -0
  152. package/src/nodes/accessors/VertexColorNode.js +7 -4
  153. package/src/nodes/code/CodeNode.js +9 -5
  154. package/src/nodes/code/ExpressionNode.js +10 -6
  155. package/src/nodes/code/FunctionCallNode.js +8 -5
  156. package/src/nodes/code/FunctionNode.js +8 -23
  157. package/src/nodes/code/ScriptableNode.js +13 -10
  158. package/src/nodes/code/ScriptableValueNode.js +9 -7
  159. package/src/nodes/core/AssignNode.js +12 -9
  160. package/src/nodes/core/AttributeNode.js +12 -21
  161. package/src/nodes/core/BypassNode.js +11 -7
  162. package/src/nodes/core/CacheNode.js +10 -6
  163. package/src/nodes/core/ConstNode.js +6 -3
  164. package/src/nodes/core/ContextNode.js +21 -11
  165. package/src/nodes/core/IndexNode.js +35 -8
  166. package/src/nodes/core/InputNode.js +7 -3
  167. package/src/nodes/core/MRTNode.js +16 -7
  168. package/src/nodes/core/Node.js +19 -40
  169. package/src/nodes/core/NodeBuilder.js +117 -38
  170. package/src/nodes/core/NodeUtils.js +49 -6
  171. package/src/nodes/core/OutputStructNode.js +10 -6
  172. package/src/nodes/core/ParameterNode.js +7 -4
  173. package/src/nodes/core/PropertyNode.js +36 -32
  174. package/src/nodes/core/StackNode.js +31 -11
  175. package/src/nodes/core/StructTypeNode.js +7 -3
  176. package/src/nodes/core/TempNode.js +8 -4
  177. package/src/nodes/core/UniformGroupNode.js +14 -11
  178. package/src/nodes/core/UniformNode.js +7 -4
  179. package/src/nodes/core/VarNode.js +12 -8
  180. package/src/nodes/core/VaryingNode.js +10 -6
  181. package/src/nodes/display/AfterImageNode.js +15 -9
  182. package/src/nodes/display/AnaglyphPassNode.js +67 -0
  183. package/src/nodes/display/AnamorphicNode.js +17 -11
  184. package/src/nodes/display/BleachBypass.js +26 -0
  185. package/src/nodes/display/BlendMode.js +54 -0
  186. package/src/nodes/display/BloomNode.js +27 -19
  187. package/src/nodes/display/BumpMapNode.js +13 -12
  188. package/src/nodes/display/ColorAdjustment.js +46 -0
  189. package/src/nodes/display/ColorSpaceFunctions.js +38 -0
  190. package/src/nodes/display/ColorSpaceNode.js +67 -61
  191. package/src/nodes/display/DenoiseNode.js +23 -17
  192. package/src/nodes/display/DepthOfFieldNode.js +12 -7
  193. package/src/nodes/display/DotScreenNode.js +13 -22
  194. package/src/nodes/display/FXAANode.js +21 -16
  195. package/src/nodes/display/FilmNode.js +11 -7
  196. package/src/nodes/display/FrontFacingNode.js +10 -6
  197. package/src/nodes/display/GTAONode.js +22 -15
  198. package/src/nodes/display/GaussianBlurNode.js +14 -8
  199. package/src/nodes/display/Lut3DNode.js +10 -6
  200. package/src/nodes/display/MotionBlur.js +25 -0
  201. package/src/nodes/display/NormalMapNode.js +13 -13
  202. package/src/nodes/display/ParallaxBarrierPassNode.js +58 -0
  203. package/src/nodes/display/PassNode.js +95 -8
  204. package/src/nodes/display/PixelationPassNode.js +20 -8
  205. package/src/nodes/display/PosterizeNode.js +8 -7
  206. package/src/nodes/display/RGBShiftNode.js +11 -7
  207. package/src/nodes/display/RenderOutputNode.js +15 -11
  208. package/src/nodes/display/SSAAPassNode.js +287 -0
  209. package/src/nodes/display/ScreenNode.js +181 -0
  210. package/src/nodes/display/Sepia.js +17 -0
  211. package/src/nodes/display/SobelOperatorNode.js +13 -8
  212. package/src/nodes/display/StereoCompositePassNode.js +110 -0
  213. package/src/nodes/display/StereoPassNode.js +83 -0
  214. package/src/nodes/display/ToneMappingFunctions.js +190 -0
  215. package/src/nodes/display/ToneMappingNode.js +15 -175
  216. package/src/nodes/display/ToonOutlinePassNode.js +111 -0
  217. package/src/nodes/display/TransitionNode.js +12 -8
  218. package/src/nodes/display/ViewportDepthNode.js +34 -29
  219. package/src/nodes/display/ViewportDepthTextureNode.js +10 -9
  220. package/src/nodes/display/ViewportSharedTextureNode.js +10 -9
  221. package/src/nodes/display/ViewportTextureNode.js +11 -11
  222. package/src/nodes/fog/FogExp2Node.js +8 -7
  223. package/src/nodes/fog/FogNode.js +10 -8
  224. package/src/nodes/fog/FogRangeNode.js +8 -7
  225. package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
  226. package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  227. package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  228. package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
  229. package/src/nodes/functions/BSDF/D_GGX.js +2 -2
  230. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
  231. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  232. package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
  233. package/src/nodes/functions/BSDF/LTC.js +6 -6
  234. package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  235. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  236. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  237. package/src/nodes/functions/BasicLightingModel.js +1 -1
  238. package/src/nodes/functions/PhongLightingModel.js +5 -5
  239. package/src/nodes/functions/PhysicalLightingModel.js +34 -33
  240. package/src/nodes/functions/ShadowMaskModel.js +1 -1
  241. package/src/nodes/functions/ToonLightingModel.js +3 -3
  242. package/src/nodes/functions/material/getGeometryRoughness.js +4 -4
  243. package/src/nodes/functions/material/getRoughness.js +2 -2
  244. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  245. package/src/nodes/geometry/RangeNode.js +9 -5
  246. package/src/nodes/gpgpu/AtomicFunctionNode.js +99 -0
  247. package/src/nodes/gpgpu/BarrierNode.js +40 -0
  248. package/src/nodes/gpgpu/ComputeBuiltinNode.js +98 -0
  249. package/src/nodes/gpgpu/ComputeNode.js +10 -6
  250. package/src/nodes/gpgpu/WorkgroupInfoNode.js +100 -0
  251. package/src/nodes/lighting/AONode.js +6 -3
  252. package/src/nodes/lighting/AmbientLightNode.js +6 -8
  253. package/src/nodes/lighting/AnalyticLightNode.js +225 -36
  254. package/src/nodes/lighting/BasicEnvironmentNode.js +8 -4
  255. package/src/nodes/lighting/BasicLightMapNode.js +7 -4
  256. package/src/nodes/lighting/DirectionalLightNode.js +7 -9
  257. package/src/nodes/lighting/EnvironmentNode.js +23 -19
  258. package/src/nodes/lighting/HemisphereLightNode.js +11 -11
  259. package/src/nodes/lighting/IESSpotLightNode.js +7 -9
  260. package/src/nodes/lighting/IrradianceNode.js +6 -3
  261. package/src/nodes/lighting/LightProbeNode.js +53 -0
  262. package/src/nodes/lighting/LightUtils.js +3 -3
  263. package/src/nodes/lighting/LightingContextNode.js +19 -18
  264. package/src/nodes/lighting/LightingNode.js +7 -3
  265. package/src/nodes/lighting/LightsNode.js +112 -75
  266. package/src/nodes/lighting/PointLightNode.js +12 -13
  267. package/src/nodes/lighting/RectAreaLightNode.js +11 -11
  268. package/src/nodes/lighting/SpotLightNode.js +14 -16
  269. package/src/nodes/materialx/MaterialXNodes.js +2 -2
  270. package/src/nodes/materialx/lib/mx_hsv.js +36 -31
  271. package/src/nodes/materialx/lib/mx_noise.js +96 -96
  272. package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
  273. package/src/nodes/math/{CondNode.js → ConditionalNode.js} +38 -10
  274. package/src/nodes/math/Hash.js +13 -0
  275. package/src/nodes/math/MathNode.js +127 -124
  276. package/src/nodes/math/MathUtils.js +0 -7
  277. package/src/nodes/math/OperatorNode.js +97 -52
  278. package/src/nodes/math/TriNoise3D.js +19 -29
  279. package/src/nodes/pmrem/PMREMNode.js +61 -15
  280. package/src/nodes/pmrem/PMREMUtils.js +46 -46
  281. package/src/nodes/procedural/Checker.js +14 -0
  282. package/src/nodes/tsl/TSLBase.js +30 -0
  283. package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +105 -97
  284. package/src/nodes/utils/ArrayElementNode.js +8 -4
  285. package/src/nodes/utils/ConvertNode.js +7 -3
  286. package/src/nodes/utils/CubeMapNode.js +160 -0
  287. package/src/nodes/utils/Discard.js +8 -0
  288. package/src/nodes/utils/EquirectUVNode.js +9 -6
  289. package/src/nodes/utils/FlipNode.js +68 -0
  290. package/src/nodes/utils/FunctionOverloadingNode.js +9 -5
  291. package/src/nodes/utils/JoinNode.js +6 -3
  292. package/src/nodes/utils/LoopNode.js +16 -6
  293. package/src/nodes/utils/MatcapUVNode.js +10 -7
  294. package/src/nodes/utils/MaxMipLevelNode.js +8 -5
  295. package/src/nodes/utils/OscNode.js +12 -8
  296. package/src/nodes/utils/Packing.js +4 -0
  297. package/src/nodes/utils/RTTNode.js +11 -8
  298. package/src/nodes/utils/ReflectorNode.js +12 -4
  299. package/src/nodes/utils/RemapNode.js +12 -8
  300. package/src/nodes/utils/RotateNode.js +8 -13
  301. package/src/nodes/utils/SetNode.js +7 -4
  302. package/src/nodes/utils/SplitNode.js +7 -3
  303. package/src/nodes/utils/SpriteSheetUVNode.js +10 -6
  304. package/src/nodes/utils/SpriteUtils.js +47 -0
  305. package/src/nodes/utils/StorageArrayElementNode.js +11 -12
  306. package/src/nodes/utils/TimerNode.js +8 -5
  307. package/src/nodes/utils/TriplanarTexturesNode.js +11 -9
  308. package/src/nodes/utils/UVUtils.js +19 -0
  309. package/src/nodes/utils/ViewportUtils.js +14 -0
  310. package/src/objects/BatchedMesh.js +78 -13
  311. package/src/objects/LOD.js +21 -0
  312. package/src/objects/Line.js +1 -0
  313. package/src/objects/Mesh.js +7 -23
  314. package/src/objects/Points.js +2 -0
  315. package/src/renderers/WebGLRenderer.js +88 -41
  316. package/src/renderers/common/Backend.js +2 -2
  317. package/src/renderers/common/Background.js +3 -1
  318. package/src/renderers/common/BindGroup.js +3 -1
  319. package/src/renderers/common/Bindings.js +13 -15
  320. package/src/renderers/common/BundleGroup.js +26 -0
  321. package/src/renderers/common/ClippingContext.js +15 -5
  322. package/src/renderers/common/CubeRenderTarget.js +9 -3
  323. package/src/renderers/common/PostProcessing.js +4 -1
  324. package/src/renderers/common/QuadMesh.js +2 -0
  325. package/src/renderers/common/RenderContext.js +23 -0
  326. package/src/renderers/common/RenderList.js +1 -1
  327. package/src/renderers/common/RenderObject.js +117 -6
  328. package/src/renderers/common/RenderObjects.js +8 -1
  329. package/src/renderers/common/Renderer.js +128 -94
  330. package/src/renderers/common/SampledTexture.js +12 -3
  331. package/src/renderers/common/Textures.js +8 -12
  332. package/src/renderers/common/extras/PMREMGenerator.js +19 -22
  333. package/src/renderers/common/nodes/NodeBuilderState.js +4 -4
  334. package/src/renderers/common/nodes/NodeLibrary.js +118 -0
  335. package/src/renderers/common/nodes/NodeSampledTexture.js +2 -2
  336. package/src/renderers/common/nodes/Nodes.js +65 -19
  337. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
  338. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  339. package/src/renderers/webgl/WebGLAttributes.js +45 -14
  340. package/src/renderers/webgl/WebGLCapabilities.js +9 -0
  341. package/src/renderers/webgl/WebGLProgram.js +3 -1
  342. package/src/renderers/webgl/WebGLPrograms.js +21 -17
  343. package/src/renderers/webgl/WebGLProperties.js +7 -0
  344. package/src/renderers/webgl/WebGLState.js +21 -0
  345. package/src/renderers/webgl/WebGLTextures.js +83 -4
  346. package/src/renderers/webgl-fallback/WebGLBackend.js +135 -110
  347. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +60 -12
  348. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +6 -0
  349. package/src/renderers/webgl-fallback/utils/WebGLState.js +20 -2
  350. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +89 -37
  351. package/src/renderers/webgpu/WebGPUBackend.js +112 -86
  352. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +42 -0
  353. package/src/renderers/webgpu/WebGPURenderer.js +9 -6
  354. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +59 -0
  355. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +105 -0
  356. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +189 -73
  357. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +6 -16
  358. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +45 -21
  359. package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -1
  360. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +7 -16
  361. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +62 -5
  362. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +43 -26
  363. package/src/renderers/webgpu/utils/WebGPUUtils.js +19 -2
  364. package/src/renderers/webxr/WebXRManager.js +32 -25
  365. package/src/utils.js +33 -1
  366. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  367. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  368. package/examples/jsm/loaders/TiltLoader.js +0 -520
  369. package/examples/jsm/utils/GPUStatsPanel.js +0 -95
  370. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  371. package/src/nodes/accessors/CameraNode.js +0 -19
  372. package/src/nodes/accessors/NormalNode.js +0 -14
  373. package/src/nodes/accessors/PositionNode.js +0 -10
  374. package/src/nodes/accessors/ReflectVectorNode.js +0 -10
  375. package/src/nodes/accessors/TangentNode.js +0 -23
  376. package/src/nodes/core/NodeKeywords.js +0 -80
  377. package/src/nodes/display/BlendModeNode.js +0 -128
  378. package/src/nodes/display/ColorAdjustmentNode.js +0 -104
  379. package/src/nodes/display/ViewportNode.js +0 -137
  380. package/src/nodes/lighting/LightNode.js +0 -57
  381. package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  382. package/src/nodes/math/HashNode.js +0 -34
  383. package/src/nodes/procedural/CheckerNode.js +0 -42
  384. package/src/nodes/utils/DiscardNode.js +0 -28
  385. package/src/nodes/utils/PackingNode.js +0 -55
  386. package/src/nodes/utils/RotateUVNode.js +0 -35
  387. /package/src/nodes/accessors/{UVNode.js → UV.js} +0 -0
@@ -1,11 +1,16 @@
1
1
  import ReferenceNode from './ReferenceNode.js';
2
2
  //import { renderGroup } from '../core/UniformGroupNode.js';
3
3
  //import { NodeUpdateType } from '../core/constants.js';
4
- import { addNodeClass } from '../core/Node.js';
5
- import { nodeObject } from '../shadernode/ShaderNode.js';
4
+ import { nodeObject } from '../tsl/TSLBase.js';
6
5
 
7
6
  class MaterialReferenceNode extends ReferenceNode {
8
7
 
8
+ static get type() {
9
+
10
+ return 'MaterialReferenceNode';
11
+
12
+ }
13
+
9
14
  constructor( property, inputType, material = null ) {
10
15
 
11
16
  super( property, inputType, material );
@@ -14,6 +19,8 @@ class MaterialReferenceNode extends ReferenceNode {
14
19
 
15
20
  //this.updateType = NodeUpdateType.RENDER;
16
21
 
22
+ this.isMaterialReferenceNode = true;
23
+
17
24
  }
18
25
 
19
26
  /*setNodeType( node ) {
@@ -37,5 +44,3 @@ class MaterialReferenceNode extends ReferenceNode {
37
44
  export default MaterialReferenceNode;
38
45
 
39
46
  export const materialReference = ( name, type, material ) => nodeObject( new MaterialReferenceNode( name, type, material ) );
40
-
41
- addNodeClass( 'MaterialReferenceNode', MaterialReferenceNode );
@@ -1,13 +1,20 @@
1
1
  import Object3DNode from './Object3DNode.js';
2
- import { addNodeClass } from '../core/Node.js';
3
- import { nodeImmutable } from '../shadernode/ShaderNode.js';
2
+ import { Fn, nodeImmutable } from '../tsl/TSLBase.js';
4
3
  import { uniform } from '../core/UniformNode.js';
5
4
 
6
5
  import { Matrix4 } from '../../math/Matrix4.js';
6
+ import { cameraViewMatrix } from './Camera.js';
7
+ import { Matrix3 } from '../../math/Matrix3.js';
7
8
 
8
9
  class ModelNode extends Object3DNode {
9
10
 
10
- constructor( scope = ModelNode.VIEW_MATRIX ) {
11
+ static get type() {
12
+
13
+ return 'ModelNode';
14
+
15
+ }
16
+
17
+ constructor( scope ) {
11
18
 
12
19
  super( scope );
13
20
 
@@ -25,13 +32,41 @@ class ModelNode extends Object3DNode {
25
32
 
26
33
  export default ModelNode;
27
34
 
28
- export const modelDirection = nodeImmutable( ModelNode, ModelNode.DIRECTION );
29
- export const modelViewMatrix = nodeImmutable( ModelNode, ModelNode.VIEW_MATRIX ).label( 'modelViewMatrix' ).temp( 'ModelViewMatrix' );
30
- export const modelNormalMatrix = nodeImmutable( ModelNode, ModelNode.NORMAL_MATRIX );
31
- export const modelWorldMatrix = nodeImmutable( ModelNode, ModelNode.WORLD_MATRIX );
32
- export const modelPosition = nodeImmutable( ModelNode, ModelNode.POSITION );
33
- export const modelScale = nodeImmutable( ModelNode, ModelNode.SCALE );
34
- export const modelViewPosition = nodeImmutable( ModelNode, ModelNode.VIEW_POSITION );
35
- export const modelWorldMatrixInverse = uniform( new Matrix4() ).onObjectUpdate( ( { object }, self ) => self.value.copy( object.matrixWorld ).invert() );
35
+ export const modelDirection = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.DIRECTION );
36
+ export const modelWorldMatrix = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.WORLD_MATRIX );
37
+ export const modelPosition = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.POSITION );
38
+ export const modelScale = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.SCALE );
39
+ export const modelViewPosition = /*@__PURE__*/ nodeImmutable( ModelNode, ModelNode.VIEW_POSITION );
40
+ export const modelNormalMatrix = /*@__PURE__*/ uniform( new Matrix3() ).onObjectUpdate( ( { object }, self ) => self.value.getNormalMatrix( object.matrixWorld ) );
41
+ export const modelWorldMatrixInverse = /*@__PURE__*/ uniform( new Matrix4() ).onObjectUpdate( ( { object }, self ) => self.value.copy( object.matrixWorld ).invert() );
42
+ export const modelViewMatrix = /*@__PURE__*/ cameraViewMatrix.mul( modelWorldMatrix ).toVar( 'modelViewMatrix' );
43
+
44
+ export const highPrecisionModelViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
45
+
46
+ builder.context.isHighPrecisionModelViewMatrix = true;
47
+
48
+ return uniform( 'mat4' ).onObjectUpdate( ( { object, camera } ) => {
49
+
50
+ return object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
51
+
52
+ } );
53
+
54
+ } ).once() )().toVar( 'highPrecisionModelViewMatrix' );
55
+
56
+ export const highPrecisionModelNormalViewMatrix = /*@__PURE__*/ ( Fn( ( builder ) => {
57
+
58
+ const isHighPrecisionModelViewMatrix = builder.context.isHighPrecisionModelViewMatrix;
59
+
60
+ return uniform( 'mat3' ).onObjectUpdate( ( { object, camera } ) => {
61
+
62
+ if ( isHighPrecisionModelViewMatrix !== true ) {
63
+
64
+ object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
65
+
66
+ }
67
+
68
+ return object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
69
+
70
+ } );
36
71
 
37
- addNodeClass( 'ModelNode', ModelNode );
72
+ } ).once() )().toVar( 'highPrecisionModelNormalMatrix' );
@@ -1,13 +1,17 @@
1
- import { addNodeClass } from '../core/Node.js';
2
1
  import TempNode from '../core/TempNode.js';
3
- import { cameraProjectionMatrix } from './CameraNode.js';
2
+ import { cameraProjectionMatrix } from './Camera.js';
3
+ import { positionLocal } from './Position.js';
4
+ import { nodeProxy, varying } from '../tsl/TSLBase.js';
4
5
  import { modelViewMatrix } from './ModelNode.js';
5
- import { positionLocal } from './PositionNode.js';
6
- import { nodeProxy } from '../shadernode/ShaderNode.js';
7
- import { varying } from '../core/VaryingNode.js';
8
6
 
9
7
  class ModelViewProjectionNode extends TempNode {
10
8
 
9
+ static get type() {
10
+
11
+ return 'ModelViewProjectionNode';
12
+
13
+ }
14
+
11
15
  constructor( positionNode = null ) {
12
16
 
13
17
  super( 'vec4' );
@@ -25,8 +29,9 @@ class ModelViewProjectionNode extends TempNode {
25
29
  }
26
30
 
27
31
  const position = this.positionNode || positionLocal;
32
+ const viewMatrix = builder.renderer.nodes.modelViewMatrix || modelViewMatrix;
28
33
 
29
- return cameraProjectionMatrix.mul( modelViewMatrix ).mul( position );
34
+ return cameraProjectionMatrix.mul( viewMatrix ).mul( position );
30
35
 
31
36
  }
32
37
 
@@ -34,6 +39,4 @@ class ModelViewProjectionNode extends TempNode {
34
39
 
35
40
  export default ModelViewProjectionNode;
36
41
 
37
- export const modelViewProjection = nodeProxy( ModelViewProjectionNode );
38
-
39
- addNodeClass( 'ModelViewProjectionNode', ModelViewProjectionNode );
42
+ export const modelViewProjection = /*@__PURE__*/ nodeProxy( ModelViewProjectionNode );
@@ -1,24 +1,24 @@
1
- import Node, { addNodeClass } from '../core/Node.js';
1
+ import Node from '../core/Node.js';
2
2
  import { NodeUpdateType } from '../core/constants.js';
3
- import { float, nodeProxy, tslFn } from '../shadernode/ShaderNode.js';
3
+ import { float, nodeProxy, Fn } from '../tsl/TSLBase.js';
4
4
  import { uniform } from '../core/UniformNode.js';
5
5
  import { reference } from './ReferenceNode.js';
6
- import { positionLocal } from './PositionNode.js';
7
- import { normalLocal } from './NormalNode.js';
6
+ import { positionLocal } from './Position.js';
7
+ import { normalLocal } from './Normal.js';
8
8
  import { textureLoad } from './TextureNode.js';
9
9
  import { instanceIndex, vertexIndex } from '../core/IndexNode.js';
10
- import { ivec2, int } from '../shadernode/ShaderNode.js';
11
- import { loop } from '../utils/LoopNode.js';
10
+ import { ivec2, int } from '../tsl/TSLBase.js';
11
+ import { Loop } from '../utils/LoopNode.js';
12
12
 
13
13
  import { DataArrayTexture } from '../../textures/DataArrayTexture.js';
14
14
  import { Vector2 } from '../../math/Vector2.js';
15
15
  import { Vector4 } from '../../math/Vector4.js';
16
16
  import { FloatType } from '../../constants.js';
17
17
 
18
- const _morphTextures = new WeakMap();
18
+ const _morphTextures = /*@__PURE__*/ new WeakMap();
19
19
  const _morphVec4 = /*@__PURE__*/ new Vector4();
20
20
 
21
- const getMorph = tslFn( ( { bufferMap, influence, stride, width, depth, offset } ) => {
21
+ const getMorph = /*@__PURE__*/ Fn( ( { bufferMap, influence, stride, width, depth, offset } ) => {
22
22
 
23
23
  const texelIndex = int( vertexIndex ).mul( stride ).add( offset );
24
24
 
@@ -160,6 +160,12 @@ function getEntry( geometry ) {
160
160
 
161
161
  class MorphNode extends Node {
162
162
 
163
+ static get type() {
164
+
165
+ return 'MorphNode';
166
+
167
+ }
168
+
163
169
  constructor( mesh ) {
164
170
 
165
171
  super( 'void' );
@@ -176,7 +182,7 @@ class MorphNode extends Node {
176
182
  const { geometry } = builder;
177
183
 
178
184
  const hasMorphPosition = geometry.morphAttributes.position !== undefined;
179
- const hasMorphNormals = geometry.morphAttributes.normal !== undefined;
185
+ const hasMorphNormals = geometry.hasAttribute( 'normal' ) && geometry.morphAttributes.normal !== undefined;
180
186
 
181
187
  const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
182
188
  const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
@@ -190,7 +196,7 @@ class MorphNode extends Node {
190
196
 
191
197
  const width = int( size.width );
192
198
 
193
- loop( morphTargetsCount, ( { i } ) => {
199
+ Loop( morphTargetsCount, ( { i } ) => {
194
200
 
195
201
  const influence = float( 0 ).toVar();
196
202
 
@@ -254,6 +260,4 @@ class MorphNode extends Node {
254
260
 
255
261
  export default MorphNode;
256
262
 
257
- export const morphReference = nodeProxy( MorphNode );
258
-
259
- addNodeClass( 'MorphNode', MorphNode );
263
+ export const morphReference = /*@__PURE__*/ nodeProxy( MorphNode );
@@ -0,0 +1,88 @@
1
+ import { attribute } from '../core/AttributeNode.js';
2
+ import { cameraViewMatrix } from './Camera.js';
3
+ import { modelNormalMatrix, modelWorldMatrix } from './ModelNode.js';
4
+ import { mat3, vec3 } from '../tsl/TSLBase.js';
5
+ import { positionView } from './Position.js';
6
+ import { Fn, varying } from '../tsl/TSLBase.js';
7
+ import { faceDirection } from '../display/FrontFacingNode.js';
8
+
9
+ export const normalGeometry = /*@__PURE__*/ attribute( 'normal', 'vec3' );
10
+
11
+ export const normalLocal = /*@__PURE__*/ ( Fn( ( builder ) => {
12
+
13
+ if ( builder.geometry.hasAttribute( 'normal' ) === false ) {
14
+
15
+ console.warn( 'TSL.NormalNode: Vertex attribute "normal" not found on geometry.' );
16
+
17
+ return vec3( 0, 1, 0 );
18
+
19
+ }
20
+
21
+ return normalGeometry;
22
+
23
+ }, 'vec3' ).once() )().toVar( 'normalLocal' );
24
+
25
+ export const normalFlat = /*@__PURE__*/ positionView.dFdx().cross( positionView.dFdy() ).normalize().toVar( 'normalFlat' );
26
+
27
+ export const normalView = /*@__PURE__*/ ( Fn( ( builder ) => {
28
+
29
+ let node;
30
+
31
+ if ( builder.material.flatShading === true ) {
32
+
33
+ node = normalFlat;
34
+
35
+ } else {
36
+
37
+ node = varying( transformNormalToView( normalLocal ), 'v_normalView' ).normalize();
38
+
39
+ }
40
+
41
+ return node;
42
+
43
+ }, 'vec3' ).once() )().toVar( 'normalView' );
44
+
45
+ export const normalWorld = /*@__PURE__*/ varying( normalView.transformDirection( cameraViewMatrix ), 'v_normalWorld' ).normalize().toVar( 'normalWorld' );
46
+
47
+ export const transformedNormalView = /*@__PURE__*/ ( Fn( ( builder ) => {
48
+
49
+ return builder.context.setupNormal();
50
+
51
+ }, 'vec3' ).once() )().mul( faceDirection ).toVar( 'transformedNormalView' );
52
+
53
+
54
+ export const transformedNormalWorld = /*@__PURE__*/ transformedNormalView.transformDirection( cameraViewMatrix ).toVar( 'transformedNormalWorld' );
55
+
56
+ export const transformedClearcoatNormalView = /*@__PURE__*/ ( Fn( ( builder ) => {
57
+
58
+ return builder.context.setupClearcoatNormal();
59
+
60
+ }, 'vec3' ).once() )().mul( faceDirection ).toVar( 'transformedClearcoatNormalView' );
61
+
62
+ export const transformNormal = /*@__PURE__*/ Fn( ( [ normal, matrix = modelWorldMatrix ] ) => {
63
+
64
+ const m = mat3( matrix );
65
+
66
+ const transformedNormal = normal.div( vec3( m[ 0 ].dot( m[ 0 ] ), m[ 1 ].dot( m[ 1 ] ), m[ 2 ].dot( m[ 2 ] ) ) );
67
+
68
+ return m.mul( transformedNormal ).xyz;
69
+
70
+ } );
71
+
72
+ export const transformNormalToView = /*@__PURE__*/ Fn( ( [ normal ], builder ) => {
73
+
74
+ const modelNormalViewMatrix = builder.renderer.nodes.modelNormalViewMatrix;
75
+
76
+ if ( modelNormalViewMatrix !== null ) {
77
+
78
+ return modelNormalViewMatrix.transformDirection( normal );
79
+
80
+ }
81
+
82
+ //
83
+
84
+ const transformedNormal = modelNormalMatrix.mul( normal );
85
+
86
+ return cameraViewMatrix.transformDirection( transformedNormal );
87
+
88
+ } );
@@ -1,13 +1,19 @@
1
- import Node, { addNodeClass } from '../core/Node.js';
1
+ import Node from '../core/Node.js';
2
2
  import { NodeUpdateType } from '../core/constants.js';
3
3
  import UniformNode from '../core/UniformNode.js';
4
- import { nodeProxy } from '../shadernode/ShaderNode.js';
4
+ import { nodeProxy } from '../tsl/TSLBase.js';
5
5
 
6
6
  import { Vector3 } from '../../math/Vector3.js';
7
7
 
8
8
  class Object3DNode extends Node {
9
9
 
10
- constructor( scope = Object3DNode.VIEW_MATRIX, object3d = null ) {
10
+ static get type() {
11
+
12
+ return 'Object3DNode';
13
+
14
+ }
15
+
16
+ constructor( scope, object3d = null ) {
11
17
 
12
18
  super();
13
19
 
@@ -24,14 +30,10 @@ class Object3DNode extends Node {
24
30
 
25
31
  const scope = this.scope;
26
32
 
27
- if ( scope === Object3DNode.WORLD_MATRIX || scope === Object3DNode.VIEW_MATRIX ) {
33
+ if ( scope === Object3DNode.WORLD_MATRIX ) {
28
34
 
29
35
  return 'mat4';
30
36
 
31
- } else if ( scope === Object3DNode.NORMAL_MATRIX ) {
32
-
33
- return 'mat3';
34
-
35
37
  } else if ( scope === Object3DNode.POSITION || scope === Object3DNode.VIEW_POSITION || scope === Object3DNode.DIRECTION || scope === Object3DNode.SCALE ) {
36
38
 
37
39
  return 'vec3';
@@ -46,15 +48,7 @@ class Object3DNode extends Node {
46
48
  const uniformNode = this._uniformNode;
47
49
  const scope = this.scope;
48
50
 
49
- if ( scope === Object3DNode.VIEW_MATRIX ) {
50
-
51
- uniformNode.value = object.modelViewMatrix;
52
-
53
- } else if ( scope === Object3DNode.NORMAL_MATRIX ) {
54
-
55
- uniformNode.value = object.normalMatrix;
56
-
57
- } else if ( scope === Object3DNode.WORLD_MATRIX ) {
51
+ if ( scope === Object3DNode.WORLD_MATRIX ) {
58
52
 
59
53
  uniformNode.value = object.matrixWorld;
60
54
 
@@ -93,14 +87,10 @@ class Object3DNode extends Node {
93
87
 
94
88
  const scope = this.scope;
95
89
 
96
- if ( scope === Object3DNode.WORLD_MATRIX || scope === Object3DNode.VIEW_MATRIX ) {
90
+ if ( scope === Object3DNode.WORLD_MATRIX ) {
97
91
 
98
92
  this._uniformNode.nodeType = 'mat4';
99
93
 
100
- } else if ( scope === Object3DNode.NORMAL_MATRIX ) {
101
-
102
- this._uniformNode.nodeType = 'mat3';
103
-
104
94
  } else if ( scope === Object3DNode.POSITION || scope === Object3DNode.VIEW_POSITION || scope === Object3DNode.DIRECTION || scope === Object3DNode.SCALE ) {
105
95
 
106
96
  this._uniformNode.nodeType = 'vec3';
@@ -129,8 +119,6 @@ class Object3DNode extends Node {
129
119
 
130
120
  }
131
121
 
132
- Object3DNode.VIEW_MATRIX = 'viewMatrix';
133
- Object3DNode.NORMAL_MATRIX = 'normalMatrix';
134
122
  Object3DNode.WORLD_MATRIX = 'worldMatrix';
135
123
  Object3DNode.POSITION = 'position';
136
124
  Object3DNode.SCALE = 'scale';
@@ -139,12 +127,8 @@ Object3DNode.DIRECTION = 'direction';
139
127
 
140
128
  export default Object3DNode;
141
129
 
142
- export const objectDirection = nodeProxy( Object3DNode, Object3DNode.DIRECTION );
143
- export const objectViewMatrix = nodeProxy( Object3DNode, Object3DNode.VIEW_MATRIX );
144
- export const objectNormalMatrix = nodeProxy( Object3DNode, Object3DNode.NORMAL_MATRIX );
145
- export const objectWorldMatrix = nodeProxy( Object3DNode, Object3DNode.WORLD_MATRIX );
146
- export const objectPosition = nodeProxy( Object3DNode, Object3DNode.POSITION );
147
- export const objectScale = nodeProxy( Object3DNode, Object3DNode.SCALE );
148
- export const objectViewPosition = nodeProxy( Object3DNode, Object3DNode.VIEW_POSITION );
149
-
150
- addNodeClass( 'Object3DNode', Object3DNode );
130
+ export const objectDirection = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.DIRECTION );
131
+ export const objectWorldMatrix = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.WORLD_MATRIX );
132
+ export const objectPosition = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.POSITION );
133
+ export const objectScale = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.SCALE );
134
+ export const objectViewPosition = /*@__PURE__*/ nodeProxy( Object3DNode, Object3DNode.VIEW_POSITION );
@@ -1,8 +1,14 @@
1
- import Node, { addNodeClass } from '../core/Node.js';
2
- import { nodeImmutable } from '../shadernode/ShaderNode.js';
1
+ import Node from '../core/Node.js';
2
+ import { nodeImmutable } from '../tsl/TSLBase.js';
3
3
 
4
4
  class PointUVNode extends Node {
5
5
 
6
+ static get type() {
7
+
8
+ return 'PointUVNode';
9
+
10
+ }
11
+
6
12
  constructor() {
7
13
 
8
14
  super( 'vec2' );
@@ -21,6 +27,4 @@ class PointUVNode extends Node {
21
27
 
22
28
  export default PointUVNode;
23
29
 
24
- export const pointUV = nodeImmutable( PointUVNode );
25
-
26
- addNodeClass( 'PointUVNode', PointUVNode );
30
+ export const pointUV = /*@__PURE__*/ nodeImmutable( PointUVNode );
@@ -0,0 +1,10 @@
1
+ import { attribute } from '../core/AttributeNode.js';
2
+ import { modelWorldMatrix, modelViewMatrix } from './ModelNode.js';
3
+
4
+ export const positionGeometry = /*@__PURE__*/ attribute( 'position', 'vec3' );
5
+ export const positionLocal = /*@__PURE__*/ positionGeometry.varying( 'positionLocal' );
6
+ export const positionPrevious = /*@__PURE__*/ positionGeometry.varying( 'positionPrevious' );
7
+ export const positionWorld = /*@__PURE__*/ modelWorldMatrix.mul( positionLocal ).xyz.varying( 'v_positionWorld' );
8
+ export const positionWorldDirection = /*@__PURE__*/ positionLocal.transformDirection( modelWorldMatrix ).varying( 'v_positionWorldDirection' ).normalize().toVar( 'positionWorldDirection' );
9
+ export const positionView = /*@__PURE__*/ modelViewMatrix.mul( positionLocal ).xyz.varying( 'v_positionView' );
10
+ export const positionViewDirection = /*@__PURE__*/ positionView.negate().varying( 'v_positionViewDirection' ).normalize().toVar( 'positionViewDirection' );
@@ -0,0 +1,171 @@
1
+ import Node from '../core/Node.js';
2
+ import { NodeUpdateType } from '../core/constants.js';
3
+ import { uniform } from '../core/UniformNode.js';
4
+ import { nodeObject } from '../tsl/TSLCore.js';
5
+ import ArrayElementNode from '../utils/ArrayElementNode.js';
6
+
7
+ class ReferenceElementNode extends ArrayElementNode {
8
+
9
+ static get type() {
10
+
11
+ return 'ReferenceElementNode';
12
+
13
+ }
14
+
15
+ constructor( referenceNode, indexNode ) {
16
+
17
+ super( referenceNode, indexNode );
18
+
19
+ this.referenceNode = referenceNode;
20
+
21
+ this.isReferenceElementNode = true;
22
+
23
+ }
24
+
25
+ getNodeType() {
26
+
27
+ return this.referenceNode.uniformType;
28
+
29
+ }
30
+
31
+ generate( builder ) {
32
+
33
+ const snippet = super.generate( builder );
34
+ const arrayType = this.referenceNode.getNodeType();
35
+ const elementType = this.getNodeType();
36
+
37
+ return builder.format( snippet, arrayType, elementType );
38
+
39
+ }
40
+
41
+ }
42
+
43
+ class ReferenceBaseNode extends Node {
44
+
45
+ static get type() {
46
+
47
+ return 'ReferenceBaseNode';
48
+
49
+ }
50
+
51
+ constructor( property, uniformType, object = null, count = null ) {
52
+
53
+ super();
54
+
55
+ this.property = property;
56
+ this.uniformType = uniformType;
57
+ this.object = object;
58
+ this.count = count;
59
+
60
+ this.properties = property.split( '.' );
61
+ this.reference = object;
62
+ this.node = null;
63
+ this.group = null;
64
+
65
+ this.updateType = NodeUpdateType.OBJECT;
66
+
67
+ }
68
+
69
+ setGroup( group ) {
70
+
71
+ this.group = group;
72
+
73
+ return this;
74
+
75
+ }
76
+
77
+ element( indexNode ) {
78
+
79
+ return nodeObject( new ReferenceElementNode( this, nodeObject( indexNode ) ) );
80
+
81
+ }
82
+
83
+ setNodeType( uniformType ) {
84
+
85
+ const node = uniform( null, uniformType ).getSelf();
86
+
87
+ if ( this.group !== null ) {
88
+
89
+ node.setGroup( this.group );
90
+
91
+ }
92
+
93
+ this.node = node;
94
+
95
+ }
96
+
97
+ getNodeType( builder ) {
98
+
99
+ if ( this.node === null ) {
100
+
101
+ this.updateReference( builder );
102
+ this.updateValue();
103
+
104
+ }
105
+
106
+ return this.node.getNodeType( builder );
107
+
108
+ }
109
+
110
+ getValueFromReference( object = this.reference ) {
111
+
112
+ const { properties } = this;
113
+
114
+ let value = object[ properties[ 0 ] ];
115
+
116
+ for ( let i = 1; i < properties.length; i ++ ) {
117
+
118
+ value = value[ properties[ i ] ];
119
+
120
+ }
121
+
122
+ return value;
123
+
124
+ }
125
+
126
+ updateReference( state ) {
127
+
128
+ this.reference = this.object !== null ? this.object : state.object;
129
+
130
+ return this.reference;
131
+
132
+ }
133
+
134
+ setup() {
135
+
136
+ this.updateValue();
137
+
138
+ return this.node;
139
+
140
+ }
141
+
142
+ update( /*frame*/ ) {
143
+
144
+ this.updateValue();
145
+
146
+ }
147
+
148
+ updateValue() {
149
+
150
+ if ( this.node === null ) this.setNodeType( this.uniformType );
151
+
152
+ const value = this.getValueFromReference();
153
+
154
+ if ( Array.isArray( value ) ) {
155
+
156
+ this.node.array = value;
157
+
158
+ } else {
159
+
160
+ this.node.value = value;
161
+
162
+ }
163
+
164
+ }
165
+
166
+ }
167
+
168
+ export default ReferenceBaseNode;
169
+
170
+ export const reference = ( name, type, object ) => nodeObject( new ReferenceBaseNode( name, type, object ) );
171
+ export const referenceBuffer = ( name, type, count, object ) => nodeObject( new ReferenceBaseNode( name, type, object, count ) );