@plastic-software/three 0.167.3 → 0.174.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 (748) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/build/three.cjs +36277 -24023
  4. package/build/three.core.js +48830 -0
  5. package/build/three.core.min.js +6 -0
  6. package/build/three.module.js +10175 -46743
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +550 -0
  9. package/build/three.tsl.min.js +6 -0
  10. package/build/three.webgpu.js +44348 -50670
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +70301 -0
  13. package/build/three.webgpu.nodes.min.js +6 -0
  14. package/examples/jsm/Addons.js +3 -15
  15. package/examples/jsm/animation/AnimationClipCreator.js +1 -1
  16. package/examples/jsm/animation/CCDIKSolver.js +61 -11
  17. package/examples/jsm/capabilities/WebGL.js +27 -21
  18. package/examples/jsm/capabilities/WebGPU.js +1 -10
  19. package/examples/jsm/controls/ArcballControls.js +262 -231
  20. package/examples/jsm/controls/DragControls.js +1 -1
  21. package/examples/jsm/controls/FirstPersonControls.js +175 -163
  22. package/examples/jsm/controls/FlyControls.js +194 -188
  23. package/examples/jsm/controls/OrbitControls.js +801 -777
  24. package/examples/jsm/controls/PointerLockControls.js +26 -20
  25. package/examples/jsm/controls/TrackballControls.js +469 -448
  26. package/examples/jsm/controls/TransformControls.js +119 -68
  27. package/examples/jsm/csm/CSM.js +2 -2
  28. package/examples/jsm/csm/CSMFrustum.js +7 -4
  29. package/examples/jsm/csm/CSMHelper.js +2 -0
  30. package/examples/jsm/csm/CSMShadowNode.js +442 -0
  31. package/examples/jsm/curves/NURBSCurve.js +33 -2
  32. package/examples/jsm/curves/NURBSUtils.js +3 -0
  33. package/examples/jsm/effects/AnaglyphEffect.js +6 -13
  34. package/examples/jsm/effects/OutlineEffect.js +1 -1
  35. package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
  36. package/examples/jsm/effects/StereoEffect.js +6 -1
  37. package/examples/jsm/exporters/DRACOExporter.js +4 -2
  38. package/examples/jsm/exporters/EXRExporter.js +19 -11
  39. package/examples/jsm/exporters/GLTFExporter.js +181 -109
  40. package/examples/jsm/exporters/KTX2Exporter.js +54 -23
  41. package/examples/jsm/exporters/OBJExporter.js +5 -1
  42. package/examples/jsm/exporters/PLYExporter.js +11 -9
  43. package/examples/jsm/exporters/USDZExporter.js +50 -11
  44. package/examples/jsm/geometries/DecalGeometry.js +73 -21
  45. package/examples/jsm/geometries/TextGeometry.js +1 -12
  46. package/examples/jsm/helpers/LightProbeHelper.js +43 -44
  47. package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
  48. package/examples/jsm/helpers/TextureHelperGPU.js +185 -0
  49. package/examples/jsm/helpers/VertexNormalsHelper.js +2 -0
  50. package/examples/jsm/interactive/HTMLMesh.js +1 -0
  51. package/examples/jsm/interactive/InteractiveGroup.js +108 -51
  52. package/examples/jsm/interactive/SelectionHelper.js +3 -1
  53. package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
  54. package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
  55. package/examples/jsm/libs/demuxer_mp4.js +109 -0
  56. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  57. package/examples/jsm/lighting/TiledLighting.js +18 -0
  58. package/examples/jsm/lights/LightProbeGenerator.js +26 -12
  59. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  60. package/examples/jsm/lines/LineGeometry.js +25 -0
  61. package/examples/jsm/lines/LineMaterial.js +0 -1
  62. package/examples/jsm/lines/LineSegmentsGeometry.js +2 -0
  63. package/examples/jsm/lines/webgpu/Line2.js +2 -1
  64. package/examples/jsm/lines/webgpu/LineSegments2.js +16 -21
  65. package/examples/jsm/lines/webgpu/Wireframe.js +57 -0
  66. package/examples/jsm/loaders/3DMLoader.js +1 -0
  67. package/examples/jsm/loaders/3MFLoader.js +104 -2
  68. package/examples/jsm/loaders/BVHLoader.js +1 -1
  69. package/examples/jsm/loaders/ColladaLoader.js +15 -12
  70. package/examples/jsm/loaders/DDSLoader.js +42 -0
  71. package/examples/jsm/loaders/DRACOLoader.js +3 -1
  72. package/examples/jsm/loaders/FBXLoader.js +71 -22
  73. package/examples/jsm/loaders/GCodeLoader.js +4 -2
  74. package/examples/jsm/loaders/GLTFLoader.js +29 -14
  75. package/examples/jsm/loaders/KTX2Loader.js +160 -58
  76. package/examples/jsm/loaders/KTXLoader.js +4 -4
  77. package/examples/jsm/loaders/LDrawLoader.js +22 -136
  78. package/examples/jsm/loaders/LottieLoader.js +2 -1
  79. package/examples/jsm/loaders/MTLLoader.js +27 -7
  80. package/examples/jsm/loaders/MaterialXLoader.js +40 -14
  81. package/examples/jsm/loaders/NRRDLoader.js +1 -1
  82. package/examples/jsm/loaders/OBJLoader.js +5 -3
  83. package/examples/jsm/loaders/PCDLoader.js +14 -13
  84. package/examples/jsm/loaders/PDBLoader.js +3 -2
  85. package/examples/jsm/loaders/PLYLoader.js +15 -12
  86. package/examples/jsm/loaders/PVRLoader.js +1 -1
  87. package/examples/jsm/loaders/STLLoader.js +3 -2
  88. package/examples/jsm/loaders/SVGLoader.js +2 -2
  89. package/examples/jsm/loaders/TDSLoader.js +17 -18
  90. package/examples/jsm/loaders/VRMLLoader.js +17 -17
  91. package/examples/jsm/loaders/VTKLoader.js +4 -3
  92. package/examples/jsm/loaders/XYZLoader.js +3 -2
  93. package/examples/jsm/loaders/lwo/IFFParser.js +4 -4
  94. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +143 -0
  95. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +114 -0
  96. package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
  97. package/examples/jsm/math/ColorSpaces.js +76 -0
  98. package/examples/jsm/math/ConvexHull.js +1 -1
  99. package/examples/jsm/math/OBB.js +17 -0
  100. package/examples/jsm/misc/GPUComputationRenderer.js +6 -7
  101. package/examples/jsm/misc/ProgressiveLightMap.js +54 -41
  102. package/examples/jsm/misc/ProgressiveLightMapGPU.js +294 -0
  103. package/examples/jsm/misc/Timer.js +27 -12
  104. package/examples/jsm/misc/Volume.js +28 -18
  105. package/examples/jsm/misc/VolumeSlice.js +19 -16
  106. package/examples/jsm/modifiers/CurveModifier.js +10 -8
  107. package/examples/jsm/modifiers/CurveModifierGPU.js +235 -0
  108. package/examples/jsm/modifiers/SimplifyModifier.js +2 -2
  109. package/examples/jsm/objects/GroundedSkybox.js +4 -4
  110. package/examples/jsm/objects/LensflareMesh.js +324 -0
  111. package/examples/jsm/objects/Reflector.js +5 -2
  112. package/examples/jsm/objects/Sky.js +2 -2
  113. package/examples/jsm/objects/SkyMesh.js +14 -14
  114. package/examples/jsm/objects/Water2.js +1 -1
  115. package/examples/jsm/objects/Water2Mesh.js +11 -9
  116. package/examples/jsm/objects/WaterMesh.js +38 -33
  117. package/examples/jsm/physics/JoltPhysics.js +8 -8
  118. package/examples/jsm/physics/RapierPhysics.js +5 -5
  119. package/examples/jsm/postprocessing/AfterimagePass.js +14 -3
  120. package/examples/jsm/postprocessing/BloomPass.js +2 -2
  121. package/examples/jsm/postprocessing/EffectComposer.js +1 -2
  122. package/examples/jsm/postprocessing/OutlinePass.js +37 -51
  123. package/examples/jsm/postprocessing/OutputPass.js +2 -0
  124. package/examples/jsm/postprocessing/SAOPass.js +1 -2
  125. package/examples/jsm/postprocessing/SMAAPass.js +1 -3
  126. package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
  127. package/examples/jsm/postprocessing/SSAOPass.js +2 -4
  128. package/examples/jsm/postprocessing/SSRPass.js +8 -4
  129. package/examples/jsm/postprocessing/UnrealBloomPass.js +2 -2
  130. package/examples/jsm/renderers/CSS2DRenderer.js +6 -3
  131. package/examples/jsm/renderers/CSS3DRenderer.js +7 -4
  132. package/examples/jsm/renderers/SVGRenderer.js +6 -4
  133. package/examples/jsm/shaders/BokehShader2.js +1 -1
  134. package/examples/jsm/shaders/FXAAShader.js +225 -224
  135. package/examples/jsm/shaders/GodRaysShader.js +3 -3
  136. package/examples/jsm/shaders/OutputShader.js +6 -2
  137. package/examples/jsm/shaders/SobelOperatorShader.js +1 -1
  138. package/examples/jsm/transpiler/AST.js +12 -2
  139. package/examples/jsm/transpiler/GLSLDecoder.js +77 -31
  140. package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -3
  141. package/examples/jsm/transpiler/TSLEncoder.js +96 -21
  142. package/examples/jsm/tsl/display/AfterImageNode.js +243 -0
  143. package/examples/jsm/tsl/display/AnaglyphPassNode.js +106 -0
  144. package/examples/jsm/tsl/display/AnamorphicNode.js +257 -0
  145. package/{src/nodes/display/BleachBypassNode.js → examples/jsm/tsl/display/BleachBypass.js} +11 -6
  146. package/{src/nodes → examples/jsm/tsl}/display/BloomNode.js +252 -67
  147. package/examples/jsm/tsl/display/DenoiseNode.js +332 -0
  148. package/{src/nodes → examples/jsm/tsl}/display/DepthOfFieldNode.js +92 -14
  149. package/examples/jsm/tsl/display/DotScreenNode.js +103 -0
  150. package/examples/jsm/tsl/display/FXAANode.js +364 -0
  151. package/examples/jsm/tsl/display/FilmNode.js +100 -0
  152. package/examples/jsm/tsl/display/GTAONode.js +521 -0
  153. package/examples/jsm/tsl/display/GaussianBlurNode.js +393 -0
  154. package/examples/jsm/tsl/display/LensflareNode.js +278 -0
  155. package/examples/jsm/tsl/display/Lut3DNode.js +108 -0
  156. package/examples/jsm/tsl/display/MotionBlur.js +33 -0
  157. package/examples/jsm/tsl/display/OutlineNode.js +750 -0
  158. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +88 -0
  159. package/{src/nodes → examples/jsm/tsl}/display/PixelationPassNode.js +160 -28
  160. package/examples/jsm/tsl/display/RGBShiftNode.js +95 -0
  161. package/examples/jsm/tsl/display/SMAANode.js +767 -0
  162. package/examples/jsm/tsl/display/SSAAPassNode.js +357 -0
  163. package/examples/jsm/tsl/display/SSRNode.js +538 -0
  164. package/examples/jsm/tsl/display/Sepia.js +24 -0
  165. package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +66 -20
  166. package/examples/jsm/tsl/display/StereoCompositePassNode.js +184 -0
  167. package/examples/jsm/tsl/display/StereoPassNode.js +119 -0
  168. package/examples/jsm/tsl/display/TRAAPassNode.js +451 -0
  169. package/examples/jsm/tsl/display/TransitionNode.js +140 -0
  170. package/examples/jsm/tsl/display/hashBlur.js +34 -0
  171. package/examples/jsm/tsl/lighting/TiledLightsNode.js +395 -0
  172. package/examples/jsm/tsl/math/Bayer.js +18 -0
  173. package/examples/jsm/tsl/utils/Raymarching.js +65 -0
  174. package/examples/jsm/utils/BufferGeometryUtils.js +2 -2
  175. package/examples/jsm/utils/CameraUtils.js +4 -1
  176. package/examples/jsm/utils/GeometryCompressionUtils.js +38 -123
  177. package/examples/jsm/utils/GeometryUtils.js +22 -19
  178. package/examples/jsm/utils/SceneOptimizer.js +410 -0
  179. package/examples/jsm/utils/SceneUtils.js +2 -2
  180. package/examples/jsm/utils/ShadowMapViewer.js +3 -8
  181. package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
  182. package/examples/jsm/utils/SkeletonUtils.js +84 -66
  183. package/examples/jsm/utils/UVsDebug.js +1 -1
  184. package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +1 -0
  185. package/examples/jsm/utils/WebGPUTextureUtils.js +64 -0
  186. package/examples/jsm/webxr/OculusHandPointerModel.js +21 -21
  187. package/examples/jsm/webxr/Text2D.js +6 -6
  188. package/examples/jsm/webxr/XRControllerModelFactory.js +7 -2
  189. package/examples/jsm/webxr/XREstimatedLight.js +1 -1
  190. package/package.json +14 -9
  191. package/src/Three.Core.js +182 -0
  192. package/src/Three.Legacy.js +0 -21
  193. package/src/Three.TSL.js +543 -0
  194. package/src/Three.WebGPU.Nodes.js +23 -0
  195. package/src/Three.WebGPU.js +13 -184
  196. package/src/Three.js +1 -176
  197. package/src/animation/AnimationClip.js +2 -2
  198. package/src/animation/AnimationObjectGroup.js +2 -2
  199. package/src/animation/AnimationUtils.js +1 -1
  200. package/src/animation/PropertyBinding.js +2 -2
  201. package/src/audio/Audio.js +379 -2
  202. package/src/audio/AudioAnalyser.js +58 -1
  203. package/src/audio/AudioContext.js +15 -0
  204. package/src/audio/AudioListener.js +76 -0
  205. package/src/audio/PositionalAudio.js +107 -0
  206. package/src/cameras/ArrayCamera.js +29 -0
  207. package/src/cameras/Camera.js +47 -0
  208. package/src/cameras/CubeCamera.js +66 -0
  209. package/src/cameras/OrthographicCamera.js +109 -0
  210. package/src/cameras/PerspectiveCamera.js +173 -34
  211. package/src/cameras/StereoCamera.js +48 -2
  212. package/src/constants.js +6 -6
  213. package/src/core/BufferAttribute.js +4 -9
  214. package/src/core/BufferGeometry.js +48 -8
  215. package/src/core/Clock.js +1 -1
  216. package/src/core/EventDispatcher.js +52 -8
  217. package/src/core/InterleavedBuffer.js +4 -13
  218. package/src/core/Object3D.js +573 -3
  219. package/src/core/RenderTarget.js +22 -4
  220. package/src/core/RenderTarget3D.js +22 -0
  221. package/src/core/RenderTargetArray.js +22 -0
  222. package/src/extras/Controls.js +104 -0
  223. package/src/extras/DataUtils.js +48 -8
  224. package/src/extras/Earcut.js +18 -7
  225. package/src/extras/ImageUtils.js +18 -11
  226. package/src/extras/PMREMGenerator.js +40 -9
  227. package/src/extras/ShapeUtils.js +24 -2
  228. package/src/extras/TextureUtils.js +96 -10
  229. package/src/extras/core/Curve.js +153 -53
  230. package/src/extras/core/CurvePath.js +63 -22
  231. package/src/extras/core/Interpolations.js +29 -3
  232. package/src/extras/core/Path.js +134 -1
  233. package/src/extras/core/Shape.js +66 -3
  234. package/src/extras/core/ShapePath.js +76 -0
  235. package/src/extras/curves/ArcCurve.js +22 -0
  236. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  237. package/src/extras/curves/CubicBezierCurve.js +67 -0
  238. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  239. package/src/extras/curves/EllipseCurve.js +102 -0
  240. package/src/extras/curves/LineCurve.js +36 -0
  241. package/src/extras/curves/LineCurve3.js +36 -0
  242. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  243. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  244. package/src/extras/curves/SplineCurve.js +48 -0
  245. package/src/geometries/BoxGeometry.js +38 -0
  246. package/src/geometries/CapsuleGeometry.js +34 -0
  247. package/src/geometries/CircleGeometry.js +40 -0
  248. package/src/geometries/ConeGeometry.js +38 -0
  249. package/src/geometries/CylinderGeometry.js +50 -4
  250. package/src/geometries/DodecahedronGeometry.js +32 -0
  251. package/src/geometries/EdgesGeometry.js +30 -2
  252. package/src/geometries/ExtrudeGeometry.js +52 -0
  253. package/src/geometries/IcosahedronGeometry.js +32 -0
  254. package/src/geometries/LatheGeometry.js +43 -3
  255. package/src/geometries/OctahedronGeometry.js +32 -0
  256. package/src/geometries/PlaneGeometry.js +34 -0
  257. package/src/geometries/PolyhedronGeometry.js +29 -0
  258. package/src/geometries/RingGeometry.js +36 -0
  259. package/src/geometries/ShapeGeometry.js +37 -0
  260. package/src/geometries/SphereGeometry.js +37 -0
  261. package/src/geometries/TetrahedronGeometry.js +32 -0
  262. package/src/geometries/TorusGeometry.js +35 -0
  263. package/src/geometries/TorusKnotGeometry.js +38 -0
  264. package/src/geometries/TubeGeometry.js +49 -0
  265. package/src/geometries/WireframeGeometry.js +32 -0
  266. package/src/helpers/ArrowHelper.js +60 -3
  267. package/src/helpers/AxesHelper.js +28 -0
  268. package/src/helpers/Box3Helper.js +28 -0
  269. package/src/helpers/BoxHelper.js +43 -7
  270. package/src/helpers/CameraHelper.js +61 -18
  271. package/src/helpers/DirectionalLightHelper.js +52 -0
  272. package/src/helpers/GridHelper.js +26 -0
  273. package/src/helpers/HemisphereLightHelper.js +39 -0
  274. package/src/helpers/PlaneHelper.js +33 -0
  275. package/src/helpers/PointLightHelper.js +43 -0
  276. package/src/helpers/PolarGridHelper.js +30 -0
  277. package/src/helpers/SkeletonHelper.js +39 -2
  278. package/src/helpers/SpotLightHelper.js +40 -0
  279. package/src/lights/AmbientLight.js +25 -0
  280. package/src/lights/DirectionalLight.js +57 -0
  281. package/src/lights/DirectionalLightShadow.js +15 -0
  282. package/src/lights/HemisphereLight.js +32 -0
  283. package/src/lights/Light.js +36 -0
  284. package/src/lights/LightProbe.js +43 -0
  285. package/src/lights/LightShadow.js +159 -0
  286. package/src/lights/PointLight.js +59 -0
  287. package/src/lights/PointLightShadow.js +21 -0
  288. package/src/lights/RectAreaLight.js +59 -0
  289. package/src/lights/SpotLight.js +102 -0
  290. package/src/lights/SpotLightShadow.js +24 -2
  291. package/src/lights/webgpu/IESSpotLight.js +21 -0
  292. package/src/loaders/Loader.js +132 -0
  293. package/src/loaders/MaterialLoader.js +7 -1
  294. package/src/loaders/nodes/NodeLoader.js +189 -0
  295. package/src/loaders/nodes/NodeMaterialLoader.js +108 -0
  296. package/src/loaders/nodes/NodeObjectLoader.js +151 -0
  297. package/src/materials/LineDashedMaterial.js +0 -1
  298. package/src/materials/Material.js +469 -7
  299. package/src/materials/MeshPhongMaterial.js +1 -1
  300. package/src/materials/MeshPhysicalMaterial.js +2 -2
  301. package/src/materials/MeshStandardMaterial.js +2 -2
  302. package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +192 -82
  303. package/src/materials/nodes/LineBasicNodeMaterial.js +46 -0
  304. package/src/materials/nodes/LineDashedNodeMaterial.js +132 -0
  305. package/src/materials/nodes/MeshBasicNodeMaterial.js +133 -0
  306. package/src/materials/nodes/MeshLambertNodeMaterial.js +82 -0
  307. package/src/materials/nodes/MeshMatcapNodeMaterial.js +77 -0
  308. package/src/materials/nodes/MeshNormalNodeMaterial.js +67 -0
  309. package/src/materials/nodes/MeshPhongNodeMaterial.js +141 -0
  310. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +517 -0
  311. package/src/materials/nodes/MeshSSSNodeMaterial.js +175 -0
  312. package/src/materials/nodes/MeshStandardNodeMaterial.js +186 -0
  313. package/src/materials/nodes/MeshToonNodeMaterial.js +66 -0
  314. package/src/materials/nodes/NodeMaterial.js +1180 -0
  315. package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -2
  316. package/src/materials/nodes/PointsNodeMaterial.js +153 -0
  317. package/src/materials/nodes/ShadowNodeMaterial.js +67 -0
  318. package/src/materials/nodes/SpriteNodeMaterial.js +198 -0
  319. package/src/materials/nodes/VolumeNodeMaterial.js +72 -0
  320. package/src/materials/nodes/manager/NodeMaterialObserver.js +509 -0
  321. package/src/math/Box2.js +177 -0
  322. package/src/math/Box3.js +243 -0
  323. package/src/math/Color.js +343 -0
  324. package/src/math/ColorManagement.js +143 -102
  325. package/src/math/Cylindrical.js +65 -6
  326. package/src/math/Euler.js +137 -4
  327. package/src/math/Frustum.js +83 -0
  328. package/src/math/Interpolant.js +87 -8
  329. package/src/math/Line3.js +96 -2
  330. package/src/math/MathUtils.js +182 -19
  331. package/src/math/Matrix2.js +70 -0
  332. package/src/math/Matrix3.js +229 -4
  333. package/src/math/Matrix4.js +368 -3
  334. package/src/math/Plane.js +164 -2
  335. package/src/math/Quaternion.js +265 -9
  336. package/src/math/Ray.js +160 -0
  337. package/src/math/Sphere.js +147 -0
  338. package/src/math/Spherical.js +73 -11
  339. package/src/math/SphericalHarmonics3.js +112 -14
  340. package/src/math/Triangle.js +230 -2
  341. package/src/math/Vector2.js +396 -10
  342. package/src/math/Vector3.js +550 -13
  343. package/src/math/Vector4.js +415 -9
  344. package/src/math/interpolants/CubicInterpolant.js +10 -1
  345. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  346. package/src/math/interpolants/LinearInterpolant.js +13 -0
  347. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  348. package/src/nodes/Nodes.js +84 -166
  349. package/src/nodes/TSL.js +167 -0
  350. package/src/nodes/accessors/AccessorsUtils.js +39 -10
  351. package/src/nodes/accessors/Arrays.js +68 -0
  352. package/src/nodes/accessors/BatchNode.js +93 -26
  353. package/src/nodes/accessors/Bitangent.js +54 -0
  354. package/src/nodes/accessors/BufferAttributeNode.js +189 -11
  355. package/src/nodes/accessors/BufferNode.js +70 -5
  356. package/src/nodes/accessors/BuiltinNode.js +63 -0
  357. package/src/nodes/accessors/Camera.js +129 -0
  358. package/src/nodes/accessors/ClippingNode.js +152 -43
  359. package/src/nodes/accessors/CubeTextureNode.js +76 -13
  360. package/src/nodes/accessors/InstanceNode.js +118 -35
  361. package/src/nodes/accessors/InstancedMeshNode.js +50 -0
  362. package/src/nodes/accessors/Lights.js +129 -0
  363. package/src/nodes/accessors/MaterialNode.js +394 -58
  364. package/src/nodes/accessors/MaterialProperties.js +57 -1
  365. package/src/nodes/accessors/MaterialReferenceNode.js +60 -18
  366. package/src/nodes/accessors/ModelNode.js +159 -12
  367. package/src/nodes/accessors/ModelViewProjectionNode.js +10 -36
  368. package/src/nodes/accessors/MorphNode.js +60 -13
  369. package/src/nodes/accessors/Normal.js +156 -0
  370. package/src/nodes/accessors/Object3DNode.js +154 -35
  371. package/src/nodes/accessors/PointUVNode.js +35 -6
  372. package/src/nodes/accessors/Position.js +64 -0
  373. package/src/nodes/accessors/ReferenceBaseNode.js +357 -0
  374. package/src/nodes/accessors/ReferenceNode.js +243 -6
  375. package/src/nodes/accessors/ReflectVector.js +36 -0
  376. package/src/nodes/accessors/RendererReferenceNode.js +57 -7
  377. package/src/nodes/accessors/SceneNode.js +98 -6
  378. package/src/nodes/accessors/SkinningNode.js +214 -21
  379. package/src/nodes/accessors/StorageBufferNode.js +288 -28
  380. package/src/nodes/accessors/StorageTextureNode.js +139 -12
  381. package/src/nodes/accessors/Tangent.js +62 -0
  382. package/src/nodes/accessors/Texture3DNode.js +98 -12
  383. package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +14 -34
  384. package/src/nodes/accessors/TextureNode.js +347 -34
  385. package/src/nodes/accessors/TextureSizeNode.js +51 -9
  386. package/src/nodes/accessors/UV.js +11 -0
  387. package/src/nodes/accessors/UniformArrayNode.js +241 -32
  388. package/src/nodes/accessors/UserDataNode.js +55 -7
  389. package/src/nodes/accessors/VelocityNode.js +223 -0
  390. package/src/nodes/accessors/VertexColorNode.js +45 -6
  391. package/src/nodes/code/CodeNode.js +108 -8
  392. package/src/nodes/code/ExpressionNode.js +38 -7
  393. package/src/nodes/code/FunctionCallNode.js +62 -11
  394. package/src/nodes/code/FunctionNode.js +54 -24
  395. package/src/nodes/code/ScriptableNode.js +241 -17
  396. package/src/nodes/code/ScriptableValueNode.js +93 -8
  397. package/src/nodes/core/ArrayNode.js +142 -0
  398. package/src/nodes/core/AssignNode.js +60 -12
  399. package/src/nodes/core/AttributeNode.js +55 -22
  400. package/src/nodes/core/BypassNode.js +59 -11
  401. package/src/nodes/core/CacheNode.js +64 -10
  402. package/src/nodes/core/ConstNode.js +38 -3
  403. package/src/nodes/core/ContextNode.js +87 -12
  404. package/src/nodes/core/IndexNode.js +102 -10
  405. package/src/nodes/core/InputNode.js +55 -3
  406. package/src/nodes/core/LightingModel.js +65 -5
  407. package/src/nodes/core/MRTNode.js +81 -7
  408. package/src/nodes/core/Node.js +368 -50
  409. package/src/nodes/core/NodeAttribute.js +38 -0
  410. package/src/nodes/core/NodeBuilder.js +1317 -83
  411. package/src/nodes/core/NodeCache.js +41 -2
  412. package/src/nodes/core/NodeCode.js +31 -0
  413. package/src/nodes/core/NodeFrame.js +123 -2
  414. package/src/nodes/core/NodeFunction.js +46 -0
  415. package/src/nodes/core/NodeFunctionInput.js +44 -0
  416. package/src/nodes/core/NodeParser.js +11 -0
  417. package/src/nodes/core/NodeUniform.js +52 -0
  418. package/src/nodes/core/NodeUtils.js +226 -6
  419. package/src/nodes/core/NodeVar.js +47 -1
  420. package/src/nodes/core/NodeVarying.js +28 -0
  421. package/src/nodes/core/OutputStructNode.js +61 -17
  422. package/src/nodes/core/ParameterNode.js +34 -4
  423. package/src/nodes/core/PropertyNode.js +296 -32
  424. package/src/nodes/core/StackNode.js +108 -8
  425. package/src/nodes/core/StructNode.js +120 -0
  426. package/src/nodes/core/StructType.js +13 -0
  427. package/src/nodes/core/StructTypeNode.js +116 -9
  428. package/src/nodes/core/TempNode.js +37 -7
  429. package/src/nodes/core/UniformGroupNode.js +98 -17
  430. package/src/nodes/core/UniformNode.js +72 -4
  431. package/src/nodes/core/VarNode.js +170 -13
  432. package/src/nodes/core/VaryingNode.js +109 -8
  433. package/src/nodes/core/constants.js +40 -0
  434. package/src/nodes/display/BlendModes.js +193 -0
  435. package/src/nodes/display/BumpMapNode.js +47 -10
  436. package/src/nodes/display/ColorAdjustment.js +141 -0
  437. package/src/nodes/display/ColorSpaceFunctions.js +54 -0
  438. package/src/nodes/display/ColorSpaceNode.js +147 -68
  439. package/src/nodes/display/FrontFacingNode.js +39 -6
  440. package/src/nodes/display/NormalMapNode.js +55 -13
  441. package/src/nodes/display/PassNode.js +420 -19
  442. package/src/nodes/display/PosterizeNode.js +40 -7
  443. package/src/nodes/display/RenderOutputNode.js +81 -13
  444. package/src/nodes/display/ScreenNode.js +286 -0
  445. package/src/nodes/display/ToneMappingFunctions.js +242 -0
  446. package/src/nodes/display/ToneMappingNode.js +68 -175
  447. package/src/nodes/display/ToonOutlinePassNode.js +183 -0
  448. package/src/nodes/display/ViewportDepthNode.js +210 -36
  449. package/src/nodes/display/ViewportDepthTextureNode.js +32 -9
  450. package/src/nodes/display/ViewportSharedTextureNode.js +32 -9
  451. package/src/nodes/display/ViewportTextureNode.js +68 -11
  452. package/src/nodes/fog/Fog.js +113 -0
  453. package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
  454. package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
  455. package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
  456. package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
  457. package/src/nodes/functions/BSDF/D_GGX.js +2 -2
  458. package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
  459. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  460. package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
  461. package/src/nodes/functions/BSDF/LTC.js +50 -6
  462. package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
  463. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
  464. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  465. package/src/nodes/functions/BasicLightingModel.js +27 -6
  466. package/src/nodes/functions/PhongLightingModel.js +38 -8
  467. package/src/nodes/functions/PhysicalLightingModel.js +215 -51
  468. package/src/nodes/functions/ShadowMaskModel.js +24 -1
  469. package/src/nodes/functions/ToonLightingModel.js +24 -5
  470. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  471. package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
  472. package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
  473. package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
  474. package/src/nodes/functions/material/getRoughness.js +2 -2
  475. package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
  476. package/src/nodes/geometry/RangeNode.js +62 -7
  477. package/src/nodes/gpgpu/AtomicFunctionNode.js +280 -0
  478. package/src/nodes/gpgpu/BarrierNode.js +89 -0
  479. package/src/nodes/gpgpu/ComputeBuiltinNode.js +227 -0
  480. package/src/nodes/gpgpu/ComputeNode.js +124 -9
  481. package/src/nodes/gpgpu/WorkgroupInfoNode.js +208 -0
  482. package/src/nodes/lighting/AONode.js +24 -3
  483. package/src/nodes/lighting/AmbientLightNode.js +16 -8
  484. package/src/nodes/lighting/AnalyticLightNode.js +151 -231
  485. package/src/nodes/lighting/BasicEnvironmentNode.js +25 -3
  486. package/src/nodes/lighting/BasicLightMapNode.js +25 -5
  487. package/src/nodes/lighting/DirectionalLightNode.js +19 -20
  488. package/src/nodes/lighting/EnvironmentNode.js +34 -17
  489. package/src/nodes/lighting/HemisphereLightNode.js +42 -11
  490. package/src/nodes/lighting/IESSpotLightNode.js +18 -9
  491. package/src/nodes/lighting/IrradianceNode.js +23 -3
  492. package/src/nodes/lighting/LightProbeNode.js +29 -36
  493. package/src/nodes/lighting/LightUtils.js +12 -4
  494. package/src/nodes/lighting/LightingContextNode.js +70 -21
  495. package/src/nodes/lighting/LightingNode.js +22 -9
  496. package/src/nodes/lighting/LightsNode.js +309 -86
  497. package/src/nodes/lighting/PointLightNode.js +66 -32
  498. package/src/nodes/lighting/PointShadowNode.js +306 -0
  499. package/src/nodes/lighting/RectAreaLightNode.js +61 -25
  500. package/src/nodes/lighting/ShadowBaseNode.js +92 -0
  501. package/src/nodes/lighting/ShadowNode.js +812 -0
  502. package/src/nodes/lighting/SpotLightNode.js +73 -31
  503. package/src/nodes/materialx/MaterialXNodes.js +2 -2
  504. package/src/nodes/materialx/lib/mx_hsv.js +27 -22
  505. package/src/nodes/materialx/lib/mx_noise.js +70 -70
  506. package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
  507. package/src/nodes/math/ConditionalNode.js +230 -0
  508. package/src/nodes/math/Hash.js +21 -0
  509. package/src/nodes/math/MathNode.js +812 -131
  510. package/src/nodes/math/MathUtils.js +47 -8
  511. package/src/nodes/math/OperatorNode.js +410 -66
  512. package/src/nodes/math/TriNoise3D.js +32 -32
  513. package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
  514. package/src/nodes/parsers/GLSLNodeParser.js +11 -0
  515. package/src/nodes/pmrem/PMREMNode.js +188 -28
  516. package/src/nodes/pmrem/PMREMUtils.js +24 -24
  517. package/src/nodes/procedural/Checker.js +22 -0
  518. package/src/nodes/shapes/Shapes.js +32 -0
  519. package/src/nodes/tsl/TSLBase.js +31 -0
  520. package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +114 -98
  521. package/src/nodes/utils/ArrayElementNode.js +45 -5
  522. package/src/nodes/utils/ConvertNode.js +39 -4
  523. package/src/nodes/utils/CubeMapNode.js +88 -8
  524. package/src/nodes/utils/Discard.js +24 -0
  525. package/src/nodes/utils/EquirectUVNode.js +39 -7
  526. package/src/nodes/utils/FlipNode.js +106 -0
  527. package/src/nodes/utils/FunctionOverloadingNode.js +61 -6
  528. package/src/nodes/utils/JoinNode.js +31 -3
  529. package/src/nodes/utils/LoopNode.js +95 -9
  530. package/src/nodes/utils/MatcapUVNode.js +27 -8
  531. package/src/nodes/utils/MaxMipLevelNode.js +57 -6
  532. package/src/nodes/utils/MemberNode.js +68 -0
  533. package/src/nodes/utils/Oscillators.js +41 -0
  534. package/src/nodes/utils/Packing.js +21 -0
  535. package/src/nodes/utils/PostProcessingUtils.js +95 -0
  536. package/src/nodes/utils/RTTNode.js +141 -9
  537. package/src/nodes/utils/ReflectorNode.js +295 -21
  538. package/src/nodes/utils/RemapNode.js +93 -10
  539. package/src/nodes/utils/RotateNode.js +48 -13
  540. package/src/nodes/utils/SetNode.js +50 -4
  541. package/src/nodes/utils/SplitNode.js +62 -6
  542. package/src/nodes/utils/SpriteSheetUVNode.js +56 -7
  543. package/src/nodes/utils/SpriteUtils.js +21 -5
  544. package/src/nodes/utils/StorageArrayElementNode.js +64 -12
  545. package/src/nodes/utils/Timer.js +73 -0
  546. package/src/nodes/utils/TriplanarTexturesNode.js +96 -10
  547. package/src/nodes/utils/UVUtils.js +27 -9
  548. package/src/nodes/utils/ViewportUtils.js +16 -4
  549. package/src/objects/BatchedMesh.js +808 -281
  550. package/src/objects/Bone.js +24 -0
  551. package/src/objects/ClippingGroup.js +68 -0
  552. package/src/objects/Group.js +24 -0
  553. package/src/objects/InstancedMesh.js +120 -2
  554. package/src/objects/LOD.js +120 -5
  555. package/src/objects/Line.js +89 -6
  556. package/src/objects/LineLoop.js +20 -0
  557. package/src/objects/LineSegments.js +18 -0
  558. package/src/objects/Mesh.js +82 -23
  559. package/src/objects/Points.js +62 -0
  560. package/src/objects/Skeleton.js +107 -2
  561. package/src/objects/SkinnedMesh.js +99 -5
  562. package/src/objects/Sprite.js +54 -0
  563. package/src/renderers/WebGLRenderer.js +274 -157
  564. package/src/renderers/common/Animation.js +109 -12
  565. package/src/renderers/common/Attributes.js +40 -0
  566. package/src/renderers/common/Backend.js +504 -44
  567. package/src/renderers/common/Background.js +67 -9
  568. package/src/renderers/common/BindGroup.js +45 -1
  569. package/src/renderers/common/Binding.js +35 -0
  570. package/src/renderers/common/Bindings.js +136 -19
  571. package/src/renderers/common/Buffer.js +49 -0
  572. package/src/renderers/common/BufferUtils.js +25 -0
  573. package/src/renderers/common/BundleGroup.js +83 -0
  574. package/src/renderers/common/ChainMap.js +45 -6
  575. package/src/renderers/common/ClippingContext.js +175 -80
  576. package/src/renderers/common/Color4.js +40 -0
  577. package/src/renderers/common/ComputePipeline.js +24 -0
  578. package/src/renderers/common/Constants.js +2 -1
  579. package/src/renderers/common/CubeRenderTarget.js +22 -3
  580. package/src/renderers/common/DataMap.js +37 -1
  581. package/src/renderers/common/Geometries.js +111 -14
  582. package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
  583. package/src/renderers/common/Info.js +78 -35
  584. package/src/renderers/common/Lighting.js +73 -0
  585. package/src/renderers/common/Pipeline.js +22 -0
  586. package/src/renderers/common/Pipelines.js +148 -5
  587. package/src/renderers/common/PostProcessing.js +112 -11
  588. package/src/renderers/common/ProgrammableStage.js +60 -2
  589. package/src/renderers/common/QuadMesh.js +56 -5
  590. package/src/renderers/common/RenderBundle.js +14 -8
  591. package/src/renderers/common/RenderBundles.js +39 -10
  592. package/src/renderers/common/RenderContext.js +205 -7
  593. package/src/renderers/common/RenderContexts.js +59 -6
  594. package/src/renderers/common/RenderList.js +230 -21
  595. package/src/renderers/common/RenderLists.js +45 -6
  596. package/src/renderers/common/RenderObject.js +552 -41
  597. package/src/renderers/common/RenderObjects.js +118 -9
  598. package/src/renderers/common/RenderPipeline.js +24 -0
  599. package/src/renderers/common/Renderer.js +1537 -239
  600. package/src/renderers/common/RendererUtils.js +191 -0
  601. package/src/renderers/common/SampledTexture.js +132 -3
  602. package/src/renderers/common/Sampler.js +30 -0
  603. package/src/renderers/common/StorageBuffer.js +24 -0
  604. package/src/renderers/common/StorageBufferAttribute.js +31 -2
  605. package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
  606. package/src/renderers/common/StorageTexture.js +38 -0
  607. package/src/renderers/common/Textures.js +142 -32
  608. package/src/renderers/common/TimestampQueryPool.js +98 -0
  609. package/src/renderers/common/Uniform.js +225 -3
  610. package/src/renderers/common/UniformBuffer.js +19 -0
  611. package/src/renderers/common/UniformsGroup.js +157 -6
  612. package/src/renderers/common/XRManager.js +1185 -0
  613. package/src/renderers/common/XRRenderTarget.js +74 -0
  614. package/src/renderers/common/extras/PMREMGenerator.js +211 -53
  615. package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
  616. package/src/renderers/common/nodes/NodeLibrary.js +194 -0
  617. package/src/renderers/common/nodes/NodeSampledTexture.js +92 -4
  618. package/src/renderers/common/nodes/NodeSampler.js +28 -0
  619. package/src/renderers/common/nodes/NodeStorageBuffer.js +37 -3
  620. package/src/renderers/common/nodes/NodeUniform.js +285 -2
  621. package/src/renderers/common/nodes/NodeUniformBuffer.js +29 -0
  622. package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
  623. package/src/renderers/common/nodes/Nodes.js +390 -70
  624. package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
  625. package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
  626. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +2 -2
  627. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
  628. package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
  629. package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
  630. package/src/renderers/shaders/ShaderLib/points.glsl.js +2 -0
  631. package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
  632. package/src/renderers/webgl/WebGLAttributes.js +45 -14
  633. package/src/renderers/webgl/WebGLBackground.js +24 -1
  634. package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
  635. package/src/renderers/webgl/WebGLCapabilities.js +2 -0
  636. package/src/renderers/webgl/WebGLGeometries.js +0 -28
  637. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
  638. package/src/renderers/webgl/WebGLProgram.js +27 -29
  639. package/src/renderers/webgl/WebGLPrograms.js +24 -16
  640. package/src/renderers/webgl/WebGLState.js +68 -11
  641. package/src/renderers/webgl/WebGLTextures.js +49 -10
  642. package/src/renderers/webgl-fallback/WebGLBackend.js +1055 -238
  643. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
  644. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +425 -48
  645. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +64 -1
  646. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
  647. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
  648. package/src/renderers/webgl-fallback/utils/WebGLState.js +419 -14
  649. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +281 -59
  650. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +367 -0
  651. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +43 -0
  652. package/src/renderers/webgpu/WebGPUBackend.js +816 -236
  653. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +78 -0
  654. package/src/renderers/webgpu/WebGPURenderer.js +45 -6
  655. package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +63 -0
  656. package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +97 -0
  657. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +954 -147
  658. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +29 -4
  659. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
  660. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +147 -31
  661. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +213 -31
  662. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +146 -28
  663. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +161 -7
  664. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +333 -50
  665. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +287 -0
  666. package/src/renderers/webgpu/utils/WebGPUUtils.js +131 -3
  667. package/src/renderers/webxr/WebXRDepthSensing.js +1 -1
  668. package/src/renderers/webxr/WebXRManager.js +54 -32
  669. package/src/scenes/Fog.js +60 -0
  670. package/src/scenes/FogExp2.js +51 -0
  671. package/src/scenes/Scene.js +87 -0
  672. package/src/textures/Data3DTexture.js +2 -2
  673. package/src/textures/DepthTexture.js +2 -0
  674. package/src/textures/Source.js +2 -2
  675. package/src/textures/Texture.js +368 -5
  676. package/src/textures/VideoFrameTexture.js +35 -0
  677. package/src/utils.js +33 -1
  678. package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
  679. package/examples/jsm/animation/MMDPhysics.js +0 -1406
  680. package/examples/jsm/cameras/CinematicCamera.js +0 -208
  681. package/examples/jsm/controls/Controls.js +0 -32
  682. package/examples/jsm/exporters/MMDExporter.js +0 -217
  683. package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
  684. package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
  685. package/examples/jsm/libs/mmdparser.module.js +0 -11530
  686. package/examples/jsm/loaders/LogLuvLoader.js +0 -606
  687. package/examples/jsm/loaders/MMDLoader.js +0 -2295
  688. package/examples/jsm/loaders/TiltLoader.js +0 -520
  689. package/examples/jsm/objects/InstancedPoints.js +0 -21
  690. package/examples/jsm/shaders/MMDToonShader.js +0 -134
  691. package/examples/jsm/utils/GPUStatsPanel.js +0 -95
  692. package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
  693. package/src/nodes/accessors/BitangentNode.js +0 -13
  694. package/src/nodes/accessors/CameraNode.js +0 -19
  695. package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -21
  696. package/src/nodes/accessors/NormalNode.js +0 -14
  697. package/src/nodes/accessors/PositionNode.js +0 -10
  698. package/src/nodes/accessors/ReflectVectorNode.js +0 -10
  699. package/src/nodes/accessors/TangentNode.js +0 -23
  700. package/src/nodes/accessors/UVNode.js +0 -3
  701. package/src/nodes/core/NodeKeywords.js +0 -80
  702. package/src/nodes/core/UniformGroup.js +0 -13
  703. package/src/nodes/display/AfterImageNode.js +0 -152
  704. package/src/nodes/display/AnamorphicNode.js +0 -145
  705. package/src/nodes/display/BlendModeNode.js +0 -128
  706. package/src/nodes/display/ColorAdjustmentNode.js +0 -104
  707. package/src/nodes/display/DenoiseNode.js +0 -198
  708. package/src/nodes/display/DotScreenNode.js +0 -75
  709. package/src/nodes/display/FXAANode.js +0 -327
  710. package/src/nodes/display/FilmNode.js +0 -52
  711. package/src/nodes/display/GTAONode.js +0 -324
  712. package/src/nodes/display/GaussianBlurNode.js +0 -207
  713. package/src/nodes/display/Lut3DNode.js +0 -53
  714. package/src/nodes/display/RGBShiftNode.js +0 -49
  715. package/src/nodes/display/SepiaNode.js +0 -18
  716. package/src/nodes/display/TransitionNode.js +0 -76
  717. package/src/nodes/display/ViewportNode.js +0 -137
  718. package/src/nodes/fog/FogExp2Node.js +0 -34
  719. package/src/nodes/fog/FogNode.js +0 -48
  720. package/src/nodes/fog/FogRangeNode.js +0 -35
  721. package/src/nodes/lighting/LightNode.js +0 -57
  722. package/src/nodes/loaders/NodeLoader.js +0 -110
  723. package/src/nodes/loaders/NodeMaterialLoader.js +0 -60
  724. package/src/nodes/loaders/NodeObjectLoader.js +0 -71
  725. package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
  726. package/src/nodes/materials/LineBasicNodeMaterial.js +0 -28
  727. package/src/nodes/materials/LineDashedNodeMaterial.js +0 -55
  728. package/src/nodes/materials/MeshBasicNodeMaterial.js +0 -73
  729. package/src/nodes/materials/MeshLambertNodeMaterial.js +0 -43
  730. package/src/nodes/materials/MeshMatcapNodeMaterial.js +0 -53
  731. package/src/nodes/materials/MeshNormalNodeMaterial.js +0 -40
  732. package/src/nodes/materials/MeshPhongNodeMaterial.js +0 -74
  733. package/src/nodes/materials/MeshPhysicalNodeMaterial.js +0 -244
  734. package/src/nodes/materials/MeshSSSNodeMaterial.js +0 -84
  735. package/src/nodes/materials/MeshStandardNodeMaterial.js +0 -104
  736. package/src/nodes/materials/MeshToonNodeMaterial.js +0 -34
  737. package/src/nodes/materials/NodeMaterial.js +0 -680
  738. package/src/nodes/materials/PointsNodeMaterial.js +0 -39
  739. package/src/nodes/materials/ShadowNodeMaterial.js +0 -34
  740. package/src/nodes/materials/SpriteNodeMaterial.js +0 -90
  741. package/src/nodes/materials/VolumeNodeMaterial.js +0 -106
  742. package/src/nodes/math/CondNode.js +0 -139
  743. package/src/nodes/math/HashNode.js +0 -34
  744. package/src/nodes/procedural/CheckerNode.js +0 -42
  745. package/src/nodes/utils/DiscardNode.js +0 -28
  746. package/src/nodes/utils/OscNode.js +0 -81
  747. package/src/nodes/utils/PackingNode.js +0 -55
  748. package/src/nodes/utils/TimerNode.js +0 -94
@@ -1,15 +1,14 @@
1
- import { MathNode, GLSLNodeParser, NodeBuilder, TextureNode, vectorComponents } from '../../../nodes/Nodes.js';
1
+ import { GLSLNodeParser, NodeBuilder, TextureNode, vectorComponents } from '../../../nodes/Nodes.js';
2
2
 
3
3
  import NodeUniformBuffer from '../../common/nodes/NodeUniformBuffer.js';
4
4
  import NodeUniformsGroup from '../../common/nodes/NodeUniformsGroup.js';
5
5
 
6
6
  import { NodeSampledTexture, NodeSampledCubeTexture, NodeSampledTexture3D } from '../../common/nodes/NodeSampledTexture.js';
7
7
 
8
- import { ByteType, ShortType, RGBAIntegerFormat, RGBIntegerFormat, RedIntegerFormat, RGIntegerFormat, UnsignedByteType, UnsignedIntType, UnsignedShortType, RedFormat, RGFormat, IntType, RGBFormat, RGBAFormat, FloatType } from '../../../constants.js';
8
+ import { NoColorSpace, ByteType, ShortType, RGBAIntegerFormat, RGBIntegerFormat, RedIntegerFormat, RGIntegerFormat, UnsignedByteType, UnsignedIntType, UnsignedShortType, RedFormat, RGFormat, IntType, RGBFormat, RGBAFormat, FloatType } from '../../../constants.js';
9
9
  import { DataTexture } from '../../../textures/DataTexture.js';
10
10
 
11
11
  const glslMethods = {
12
- [ MathNode.ATAN2 ]: 'atan',
13
12
  textureDimensions: 'textureSize',
14
13
  equals: 'equal'
15
14
  };
@@ -46,34 +45,109 @@ precision highp isampler2DArray;
46
45
  precision lowp sampler2DShadow;
47
46
  `;
48
47
 
48
+ /**
49
+ * A node builder targeting GLSL.
50
+ *
51
+ * This module generates GLSL shader code from node materials and also
52
+ * generates the respective bindings and vertex buffer definitions. These
53
+ * data are later used by the renderer to create render and compute pipelines
54
+ * for render objects.
55
+ *
56
+ * @augments NodeBuilder
57
+ */
49
58
  class GLSLNodeBuilder extends NodeBuilder {
50
59
 
60
+ /**
61
+ * Constructs a new GLSL node builder renderer.
62
+ *
63
+ * @param {Object3D} object - The 3D object.
64
+ * @param {Renderer} renderer - The renderer.
65
+ */
51
66
  constructor( object, renderer ) {
52
67
 
53
68
  super( object, renderer, new GLSLNodeParser() );
54
69
 
70
+ /**
71
+ * A dictionary holds for each shader stage ('vertex', 'fragment', 'compute')
72
+ * another dictionary which manages UBOs per group ('render','frame','object').
73
+ *
74
+ * @type {Object<string,Object<string,NodeUniformsGroup>>}
75
+ */
55
76
  this.uniformGroups = {};
77
+
78
+ /**
79
+ * An array that holds objects defining the varying and attribute data in
80
+ * context of Transform Feedback.
81
+ *
82
+ * @type {Object<string,Map<string,Object>>}
83
+ */
56
84
  this.transforms = [];
57
- this.extensions = {};
58
85
 
59
- this.instanceBindGroups = false;
86
+ /**
87
+ * A dictionary that holds for each shader stage a Map of used extensions.
88
+ *
89
+ * @type {Object<string,Map<string,Object>>}
90
+ */
91
+ this.extensions = {};
60
92
 
93
+ /**
94
+ * A dictionary that holds for each shader stage an Array of used builtins.
95
+ *
96
+ * @type {Object<string,Array<string>>}
97
+ */
98
+ this.builtins = { vertex: [], fragment: [], compute: [] };
99
+
100
+ /**
101
+ * Whether comparison in shader code are generated with methods or not.
102
+ *
103
+ * @type {boolean}
104
+ * @default true
105
+ */
61
106
  this.useComparisonMethod = true;
62
107
 
63
108
  }
64
109
 
110
+ /**
111
+ * Checks if the given texture requires a manual conversion to the working color space.
112
+ *
113
+ * @param {Texture} texture - The texture to check.
114
+ * @return {boolean} Whether the given texture requires a conversion to working color space or not.
115
+ */
116
+ needsToWorkingColorSpace( texture ) {
117
+
118
+ return texture.isVideoTexture === true && texture.colorSpace !== NoColorSpace;
119
+
120
+ }
121
+
122
+ /**
123
+ * Returns the native shader method name for a given generic name.
124
+ *
125
+ * @param {string} method - The method name to resolve.
126
+ * @return {string} The resolved GLSL method name.
127
+ */
65
128
  getMethod( method ) {
66
129
 
67
130
  return glslMethods[ method ] || method;
68
131
 
69
132
  }
70
133
 
134
+ /**
135
+ * Returns the output struct name. Not relevant for GLSL.
136
+ *
137
+ * @return {string}
138
+ */
71
139
  getOutputStructName() {
72
140
 
73
141
  return '';
74
142
 
75
143
  }
76
144
 
145
+ /**
146
+ * Builds the given shader node.
147
+ *
148
+ * @param {ShaderNodeInternal} shaderNode - The shader node.
149
+ * @return {string} The GLSL function code.
150
+ */
77
151
  buildFunctionCode( shaderNode ) {
78
152
 
79
153
  const layout = shaderNode.layout;
@@ -104,6 +178,12 @@ ${ flowData.code }
104
178
 
105
179
  }
106
180
 
181
+ /**
182
+ * Setups the Pixel Buffer Object (PBO) for the given storage
183
+ * buffer node.
184
+ *
185
+ * @param {StorageBufferNode} storageBufferNode - The storage buffer node.
186
+ */
107
187
  setupPBO( storageBufferNode ) {
108
188
 
109
189
  const attribute = storageBufferNode.value;
@@ -119,7 +199,6 @@ ${ flowData.code }
119
199
 
120
200
  let format = isInteger ? RedIntegerFormat : RedFormat;
121
201
 
122
-
123
202
  if ( itemSize === 2 ) {
124
203
 
125
204
  format = isInteger ? RGIntegerFormat : RGFormat;
@@ -173,6 +252,13 @@ ${ flowData.code }
173
252
 
174
253
  }
175
254
 
255
+ /**
256
+ * Returns a GLSL snippet that represents the property name of the given node.
257
+ *
258
+ * @param {Node} node - The node.
259
+ * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
260
+ * @return {string} The property name.
261
+ */
176
262
  getPropertyName( node, shaderStage = this.shaderStage ) {
177
263
 
178
264
  if ( node.isNodeUniform && node.node.isTextureNode !== true && node.node.isBufferNode !== true ) {
@@ -185,6 +271,13 @@ ${ flowData.code }
185
271
 
186
272
  }
187
273
 
274
+ /**
275
+ * Setups the Pixel Buffer Object (PBO) for the given storage
276
+ * buffer node.
277
+ *
278
+ * @param {StorageArrayElementNode} storageArrayElementNode - The storage array element node.
279
+ * @return {string} The property name.
280
+ */
188
281
  generatePBO( storageArrayElementNode ) {
189
282
 
190
283
  const { node, indexNode } = storageArrayElementNode;
@@ -197,11 +290,10 @@ ${ flowData.code }
197
290
 
198
291
  }
199
292
 
200
-
201
293
  const nodeUniform = this.getUniformFromNode( attribute.pboNode, 'texture', this.shaderStage, this.context.label );
202
294
  const textureName = this.getPropertyName( nodeUniform );
203
295
 
204
- indexNode.increaseUsage( this ); // force cache generate to be used as index in x,y
296
+ this.increaseUsage( indexNode ); // force cache generate to be used as index in x,y
205
297
  const indexSnippet = indexNode.build( this, 'uint' );
206
298
 
207
299
  const elementNodeData = this.getDataFromNode( storageArrayElementNode );
@@ -228,7 +320,7 @@ ${ flowData.code }
228
320
 
229
321
  this.getVarFromNode( node, propertySizeName, 'uint' );
230
322
 
231
- this.addLineFlowCode( `${ propertySizeName } = uint( textureSize( ${ textureName }, 0 ).x )` );
323
+ this.addLineFlowCode( `${ propertySizeName } = uint( textureSize( ${ textureName }, 0 ).x )`, storageArrayElementNode );
232
324
 
233
325
  bufferNodeData.propertySizeName = propertySizeName;
234
326
 
@@ -258,7 +350,7 @@ ${ flowData.code }
258
350
 
259
351
  }
260
352
 
261
- this.addLineFlowCode( `${ propertyName } = ${prefix}(${ snippet })${channel}` );
353
+ this.addLineFlowCode( `${ propertyName } = ${prefix}(${ snippet })${channel}`, storageArrayElementNode );
262
354
 
263
355
  elementNodeData.propertyName = propertyName;
264
356
 
@@ -268,6 +360,16 @@ ${ flowData.code }
268
360
 
269
361
  }
270
362
 
363
+ /**
364
+ * Generates the GLSL snippet that reads a single texel from a texture without sampling or filtering.
365
+ *
366
+ * @param {Texture} texture - The texture.
367
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
368
+ * @param {string} uvIndexSnippet - A GLSL snippet that represents texture coordinates used for sampling.
369
+ * @param {?string} depthSnippet - A GLSL snippet that represents the 0-based texture array index to sample.
370
+ * @param {string} [levelSnippet='0u'] - A GLSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
371
+ * @return {string} The GLSL snippet.
372
+ */
271
373
  generateTextureLoad( texture, textureProperty, uvIndexSnippet, depthSnippet, levelSnippet = '0' ) {
272
374
 
273
375
  if ( depthSnippet ) {
@@ -282,6 +384,15 @@ ${ flowData.code }
282
384
 
283
385
  }
284
386
 
387
+ /**
388
+ * Generates the GLSL snippet for sampling/loading the given texture.
389
+ *
390
+ * @param {Texture} texture - The texture.
391
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
392
+ * @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
393
+ * @param {?string} depthSnippet - A GLSL snippet that represents the 0-based texture array index to sample.
394
+ * @return {string} The GLSL snippet.
395
+ */
285
396
  generateTexture( texture, textureProperty, uvSnippet, depthSnippet ) {
286
397
 
287
398
  if ( texture.isDepthTexture ) {
@@ -298,24 +409,63 @@ ${ flowData.code }
298
409
 
299
410
  }
300
411
 
412
+ /**
413
+ * Generates the GLSL snippet when sampling textures with explicit mip level.
414
+ *
415
+ * @param {Texture} texture - The texture.
416
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
417
+ * @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
418
+ * @param {string} levelSnippet - A GLSL snippet that represents the mip level, with level 0 containing a full size version of the texture.
419
+ * @return {string} The GLSL snippet.
420
+ */
301
421
  generateTextureLevel( texture, textureProperty, uvSnippet, levelSnippet ) {
302
422
 
303
423
  return `textureLod( ${ textureProperty }, ${ uvSnippet }, ${ levelSnippet } )`;
304
424
 
305
425
  }
306
426
 
427
+ /**
428
+ * Generates the GLSL snippet when sampling textures with a bias to the mip level.
429
+ *
430
+ * @param {Texture} texture - The texture.
431
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
432
+ * @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
433
+ * @param {string} biasSnippet - A GLSL snippet that represents the bias to apply to the mip level before sampling.
434
+ * @return {string} The GLSL snippet.
435
+ */
307
436
  generateTextureBias( texture, textureProperty, uvSnippet, biasSnippet ) {
308
437
 
309
438
  return `texture( ${ textureProperty }, ${ uvSnippet }, ${ biasSnippet } )`;
310
439
 
311
440
  }
312
441
 
442
+ /**
443
+ * Generates the GLSL snippet for sampling/loading the given texture using explicit gradients.
444
+ *
445
+ * @param {Texture} texture - The texture.
446
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
447
+ * @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
448
+ * @param {Array<string>} gradSnippet - An array holding both gradient GLSL snippets.
449
+ * @return {string} The GLSL snippet.
450
+ */
313
451
  generateTextureGrad( texture, textureProperty, uvSnippet, gradSnippet ) {
314
452
 
315
453
  return `textureGrad( ${ textureProperty }, ${ uvSnippet }, ${ gradSnippet[ 0 ] }, ${ gradSnippet[ 1 ] } )`;
316
454
 
317
455
  }
318
456
 
457
+ /**
458
+ * Generates the GLSL snippet for sampling a depth texture and comparing the sampled depth values
459
+ * against a reference value.
460
+ *
461
+ * @param {Texture} texture - The texture.
462
+ * @param {string} textureProperty - The name of the texture uniform in the shader.
463
+ * @param {string} uvSnippet - A GLSL snippet that represents texture coordinates used for sampling.
464
+ * @param {string} compareSnippet - A GLSL snippet that represents the reference value.
465
+ * @param {?string} depthSnippet - A GLSL snippet that represents 0-based texture array index to sample.
466
+ * @param {string} [shaderStage=this.shaderStage] - The shader stage this code snippet is generated for.
467
+ * @return {string} The GLSL snippet.
468
+ */
319
469
  generateTextureCompare( texture, textureProperty, uvSnippet, compareSnippet, depthSnippet, shaderStage = this.shaderStage ) {
320
470
 
321
471
  if ( shaderStage === 'fragment' ) {
@@ -330,6 +480,12 @@ ${ flowData.code }
330
480
 
331
481
  }
332
482
 
483
+ /**
484
+ * Returns the variables of the given shader stage as a GLSL string.
485
+ *
486
+ * @param {string} shaderStage - The shader stage.
487
+ * @return {string} The GLSL snippet that defines the variables.
488
+ */
333
489
  getVars( shaderStage ) {
334
490
 
335
491
  const snippets = [];
@@ -340,7 +496,7 @@ ${ flowData.code }
340
496
 
341
497
  for ( const variable of vars ) {
342
498
 
343
- snippets.push( `${ this.getVar( variable.type, variable.name ) };` );
499
+ snippets.push( `${ this.getVar( variable.type, variable.name, variable.count ) };` );
344
500
 
345
501
  }
346
502
 
@@ -350,6 +506,12 @@ ${ flowData.code }
350
506
 
351
507
  }
352
508
 
509
+ /**
510
+ * Returns the uniforms of the given shader stage as a GLSL string.
511
+ *
512
+ * @param {string} shaderStage - The shader stage.
513
+ * @return {string} The GLSL snippet that defines the uniforms.
514
+ */
353
515
  getUniforms( shaderStage ) {
354
516
 
355
517
  const uniforms = this.uniforms[ shaderStage ];
@@ -362,14 +524,13 @@ ${ flowData.code }
362
524
  let snippet = null;
363
525
  let group = false;
364
526
 
365
- if ( uniform.type === 'texture' ) {
527
+ if ( uniform.type === 'texture' || uniform.type === 'texture3D' ) {
366
528
 
367
529
  const texture = uniform.node.value;
368
530
 
369
531
  let typePrefix = '';
370
532
 
371
- if ( texture.isDataTexture === true ) {
372
-
533
+ if ( texture.isDataTexture === true || texture.isData3DTexture === true ) {
373
534
 
374
535
  if ( texture.type === UnsignedIntType ) {
375
536
 
@@ -383,11 +544,15 @@ ${ flowData.code }
383
544
 
384
545
  }
385
546
 
386
- if ( texture.compareFunction ) {
547
+ if ( uniform.type === 'texture3D' ) {
548
+
549
+ snippet = `${typePrefix}sampler3D ${ uniform.name };`;
550
+
551
+ } else if ( texture.compareFunction ) {
387
552
 
388
553
  snippet = `sampler2DShadow ${ uniform.name };`;
389
554
 
390
- } else if ( texture.isDataArrayTexture === true ) {
555
+ } else if ( texture.isDataArrayTexture === true || texture.isCompressedArrayTexture === true ) {
391
556
 
392
557
  snippet = `${typePrefix}sampler2DArray ${ uniform.name };`;
393
558
 
@@ -401,10 +566,6 @@ ${ flowData.code }
401
566
 
402
567
  snippet = `samplerCube ${ uniform.name };`;
403
568
 
404
- } else if ( uniform.type === 'texture3D' ) {
405
-
406
- snippet = `sampler3D ${ uniform.name };`;
407
-
408
569
  } else if ( uniform.type === 'buffer' ) {
409
570
 
410
571
  const bufferNode = uniform.node;
@@ -467,6 +628,12 @@ ${ flowData.code }
467
628
 
468
629
  }
469
630
 
631
+ /**
632
+ * Returns the type for a given buffer attribute.
633
+ *
634
+ * @param {BufferAttribute} attribute - The buffer attribute.
635
+ * @return {string} The type.
636
+ */
470
637
  getTypeFromAttribute( attribute ) {
471
638
 
472
639
  let nodeType = super.getTypeFromAttribute( attribute );
@@ -491,6 +658,12 @@ ${ flowData.code }
491
658
 
492
659
  }
493
660
 
661
+ /**
662
+ * Returns the shader attributes of the given shader stage as a GLSL string.
663
+ *
664
+ * @param {string} shaderStage - The shader stage.
665
+ * @return {string} The GLSL snippet that defines the shader attributes.
666
+ */
494
667
  getAttributes( shaderStage ) {
495
668
 
496
669
  let snippet = '';
@@ -513,15 +686,19 @@ ${ flowData.code }
513
686
 
514
687
  }
515
688
 
689
+ /**
690
+ * Returns the members of the given struct type node as a GLSL string.
691
+ *
692
+ * @param {StructTypeNode} struct - The struct type node.
693
+ * @return {string} The GLSL snippet that defines the struct members.
694
+ */
516
695
  getStructMembers( struct ) {
517
696
 
518
697
  const snippets = [];
519
- const members = struct.getMemberTypes();
520
698
 
521
- for ( let i = 0; i < members.length; i ++ ) {
699
+ for ( const member of struct.members ) {
522
700
 
523
- const member = members[ i ];
524
- snippets.push( `layout( location = ${i} ) out ${ member} m${i};` );
701
+ snippets.push( `\t${ member.type } ${ member.name };` );
525
702
 
526
703
  }
527
704
 
@@ -529,33 +706,57 @@ ${ flowData.code }
529
706
 
530
707
  }
531
708
 
709
+ /**
710
+ * Returns the structs of the given shader stage as a GLSL string.
711
+ *
712
+ * @param {string} shaderStage - The shader stage.
713
+ * @return {string} The GLSL snippet that defines the structs.
714
+ */
532
715
  getStructs( shaderStage ) {
533
716
 
534
717
  const snippets = [];
535
718
  const structs = this.structs[ shaderStage ];
536
719
 
537
- if ( structs.length === 0 ) {
720
+ const outputSnippet = [];
538
721
 
539
- return 'layout( location = 0 ) out vec4 fragColor;\n';
722
+ for ( const struct of structs ) {
540
723
 
541
- }
724
+ if ( struct.output ) {
725
+
726
+ for ( const member of struct.members ) {
727
+
728
+ outputSnippet.push( `layout( location = ${ member.index } ) out ${ member.type } ${ member.name };` );
542
729
 
543
- for ( let index = 0, length = structs.length; index < length; index ++ ) {
730
+ }
544
731
 
545
- const struct = structs[ index ];
732
+ } else {
546
733
 
547
- let snippet = '\n';
548
- snippet += this.getStructMembers( struct );
549
- snippet += '\n';
734
+ let snippet = 'struct ' + struct.name + ' {\n';
735
+ snippet += this.getStructMembers( struct );
736
+ snippet += '\n};\n';
550
737
 
551
- snippets.push( snippet );
738
+ snippets.push( snippet );
739
+
740
+ }
552
741
 
553
742
  }
554
743
 
555
- return snippets.join( '\n\n' );
744
+ if ( outputSnippet.length === 0 ) {
745
+
746
+ outputSnippet.push( 'layout( location = 0 ) out vec4 fragColor;' );
747
+
748
+ }
749
+
750
+ return '\n' + outputSnippet.join( '\n' ) + '\n\n' + snippets.join( '\n' );
556
751
 
557
752
  }
558
753
 
754
+ /**
755
+ * Returns the varyings of the given shader stage as a GLSL string.
756
+ *
757
+ * @param {string} shaderStage - The shader stage.
758
+ * @return {string} The GLSL snippet that defines the varyings.
759
+ */
559
760
  getVaryings( shaderStage ) {
560
761
 
561
762
  let snippet = '';
@@ -567,10 +768,20 @@ ${ flowData.code }
567
768
  for ( const varying of varyings ) {
568
769
 
569
770
  if ( shaderStage === 'compute' ) varying.needsInterpolation = true;
570
- const type = varying.type;
571
- const flat = type.includes( 'int' ) || type.includes( 'uv' ) || type.includes( 'iv' ) ? 'flat ' : '';
572
771
 
573
- snippet += `${flat}${varying.needsInterpolation ? 'out' : '/*out*/'} ${type} ${varying.name};\n`;
772
+ const type = this.getType( varying.type );
773
+
774
+ if ( varying.needsInterpolation ) {
775
+
776
+ const flat = type.includes( 'int' ) || type.includes( 'uv' ) || type.includes( 'iv' ) ? 'flat ' : '';
777
+
778
+ snippet += `${flat} out ${type} ${varying.name};\n`;
779
+
780
+ } else {
781
+
782
+ snippet += `${type} ${varying.name};\n`; // generate variable (no varying required)
783
+
784
+ }
574
785
 
575
786
  }
576
787
 
@@ -580,7 +791,7 @@ ${ flowData.code }
580
791
 
581
792
  if ( varying.needsInterpolation ) {
582
793
 
583
- const type = varying.type;
794
+ const type = this.getType( varying.type );
584
795
  const flat = type.includes( 'int' ) || type.includes( 'uv' ) || type.includes( 'iv' ) ? 'flat ' : '';
585
796
 
586
797
  snippet += `${flat}in ${type} ${varying.name};\n`;
@@ -591,22 +802,58 @@ ${ flowData.code }
591
802
 
592
803
  }
593
804
 
805
+ for ( const builtin of this.builtins[ shaderStage ] ) {
806
+
807
+ snippet += `${builtin};\n`;
808
+
809
+ }
810
+
594
811
  return snippet;
595
812
 
596
813
  }
597
814
 
815
+ /**
816
+ * Returns the vertex index builtin.
817
+ *
818
+ * @return {string} The vertex index.
819
+ */
598
820
  getVertexIndex() {
599
821
 
600
822
  return 'uint( gl_VertexID )';
601
823
 
602
824
  }
603
825
 
826
+ /**
827
+ * Returns the instance index builtin.
828
+ *
829
+ * @return {string} The instance index.
830
+ */
604
831
  getInstanceIndex() {
605
832
 
606
833
  return 'uint( gl_InstanceID )';
607
834
 
608
835
  }
609
836
 
837
+ /**
838
+ * Returns the invocation local index builtin.
839
+ *
840
+ * @return {string} The invocation local index.
841
+ */
842
+ getInvocationLocalIndex() {
843
+
844
+ const workgroupSize = this.object.workgroupSize;
845
+
846
+ const size = workgroupSize.reduce( ( acc, curr ) => acc * curr, 1 );
847
+
848
+ return `uint( gl_InstanceID ) % ${size}u`;
849
+
850
+ }
851
+
852
+ /**
853
+ * Returns the draw index builtin.
854
+ *
855
+ * @return {?string} The drawIndex shader string. Returns `null` if `WEBGL_multi_draw` isn't supported by the device.
856
+ */
610
857
  getDrawIndex() {
611
858
 
612
859
  const extensions = this.renderer.backend.extensions;
@@ -621,24 +868,46 @@ ${ flowData.code }
621
868
 
622
869
  }
623
870
 
871
+ /**
872
+ * Returns the front facing builtin.
873
+ *
874
+ * @return {string} The front facing builtin.
875
+ */
624
876
  getFrontFacing() {
625
877
 
626
878
  return 'gl_FrontFacing';
627
879
 
628
880
  }
629
881
 
882
+ /**
883
+ * Returns the frag coord builtin.
884
+ *
885
+ * @return {string} The frag coord builtin.
886
+ */
630
887
  getFragCoord() {
631
888
 
632
- return 'gl_FragCoord';
889
+ return 'gl_FragCoord.xy';
633
890
 
634
891
  }
635
892
 
893
+ /**
894
+ * Returns the frag depth builtin.
895
+ *
896
+ * @return {string} The frag depth builtin.
897
+ */
636
898
  getFragDepth() {
637
899
 
638
900
  return 'gl_FragDepth';
639
901
 
640
902
  }
641
903
 
904
+ /**
905
+ * Enables the given extension.
906
+ *
907
+ * @param {string} name - The extension name.
908
+ * @param {string} behavior - The extension behavior.
909
+ * @param {string} [shaderStage=this.shaderStage] - The shader stage.
910
+ */
642
911
  enableExtension( name, behavior, shaderStage = this.shaderStage ) {
643
912
 
644
913
  const map = this.extensions[ shaderStage ] || ( this.extensions[ shaderStage ] = new Map() );
@@ -654,6 +923,12 @@ ${ flowData.code }
654
923
 
655
924
  }
656
925
 
926
+ /**
927
+ * Returns the enabled extensions of the given shader stage as a GLSL string.
928
+ *
929
+ * @param {string} shaderStage - The shader stage.
930
+ * @return {string} The GLSL snippet that defines the enabled extensions.
931
+ */
657
932
  getExtensions( shaderStage ) {
658
933
 
659
934
  const snippets = [];
@@ -665,7 +940,7 @@ ${ flowData.code }
665
940
 
666
941
  if ( isBatchedMesh && ext.has( 'WEBGL_multi_draw' ) ) {
667
942
 
668
- this.enableExtension( 'GL_ANGLE_multi_draw', 'require' );
943
+ this.enableExtension( 'GL_ANGLE_multi_draw', 'require', shaderStage );
669
944
 
670
945
  }
671
946
 
@@ -687,24 +962,53 @@ ${ flowData.code }
687
962
 
688
963
  }
689
964
 
965
+ /**
966
+ * Returns the clip distances builtin.
967
+ *
968
+ * @return {string} The clip distances builtin.
969
+ */
970
+ getClipDistance() {
971
+
972
+ return 'gl_ClipDistance';
973
+
974
+ }
975
+
976
+ /**
977
+ * Whether the requested feature is available or not.
978
+ *
979
+ * @param {string} name - The requested feature.
980
+ * @return {boolean} Whether the requested feature is supported or not.
981
+ */
690
982
  isAvailable( name ) {
691
983
 
692
984
  let result = supports[ name ];
693
985
 
694
986
  if ( result === undefined ) {
695
987
 
696
- if ( name === 'float32Filterable' ) {
988
+ let extensionName;
697
989
 
698
- const extensions = this.renderer.backend.extensions;
990
+ result = false;
699
991
 
700
- if ( extensions.has( 'OES_texture_float_linear' ) ) {
992
+ switch ( name ) {
701
993
 
702
- extensions.get( 'OES_texture_float_linear' );
703
- result = true;
994
+ case 'float32Filterable':
995
+ extensionName = 'OES_texture_float_linear';
996
+ break;
704
997
 
705
- } else {
998
+ case 'clipDistance':
999
+ extensionName = 'WEBGL_clip_cull_distance';
1000
+ break;
1001
+
1002
+ }
1003
+
1004
+ if ( extensionName !== undefined ) {
706
1005
 
707
- result = false;
1006
+ const extensions = this.renderer.backend.extensions;
1007
+
1008
+ if ( extensions.has( extensionName ) ) {
1009
+
1010
+ extensions.get( extensionName );
1011
+ result = true;
708
1012
 
709
1013
  }
710
1014
 
@@ -718,18 +1022,48 @@ ${ flowData.code }
718
1022
 
719
1023
  }
720
1024
 
1025
+ /**
1026
+ * Whether to flip texture data along its vertical axis or not.
1027
+ *
1028
+ * @return {boolean} Returns always `true` in context of GLSL.
1029
+ */
721
1030
  isFlipY() {
722
1031
 
723
1032
  return true;
724
1033
 
725
1034
  }
726
1035
 
1036
+ /**
1037
+ * Enables hardware clipping.
1038
+ *
1039
+ * @param {string} planeCount - The clipping plane count.
1040
+ */
1041
+ enableHardwareClipping( planeCount ) {
1042
+
1043
+ this.enableExtension( 'GL_ANGLE_clip_cull_distance', 'require' );
1044
+
1045
+ this.builtins[ 'vertex' ].push( `out float gl_ClipDistance[ ${ planeCount } ]` );
1046
+
1047
+ }
1048
+
1049
+ /**
1050
+ * Registers a transform in context of Transform Feedback.
1051
+ *
1052
+ * @param {string} varyingName - The varying name.
1053
+ * @param {AttributeNode} attributeNode - The attribute node.
1054
+ */
727
1055
  registerTransform( varyingName, attributeNode ) {
728
1056
 
729
1057
  this.transforms.push( { varyingName, attributeNode } );
730
1058
 
731
1059
  }
732
1060
 
1061
+ /**
1062
+ * Returns the transforms of the given shader stage as a GLSL string.
1063
+ *
1064
+ * @param {string} shaderStage - The shader stage.
1065
+ * @return {string} The GLSL snippet that defines the transforms.
1066
+ */
733
1067
  getTransforms( /* shaderStage */ ) {
734
1068
 
735
1069
  const transforms = this.transforms;
@@ -750,6 +1084,14 @@ ${ flowData.code }
750
1084
 
751
1085
  }
752
1086
 
1087
+ /**
1088
+ * Returns a GLSL struct based on the given name and variables.
1089
+ *
1090
+ * @private
1091
+ * @param {string} name - The struct name.
1092
+ * @param {string} vars - The struct variables.
1093
+ * @return {string} The GLSL snippet representing a struct.
1094
+ */
753
1095
  _getGLSLUniformStruct( name, vars ) {
754
1096
 
755
1097
  return `
@@ -759,11 +1101,20 @@ ${vars}
759
1101
 
760
1102
  }
761
1103
 
1104
+ /**
1105
+ * Returns a GLSL vertex shader based on the given shader data.
1106
+ *
1107
+ * @private
1108
+ * @param {Object} shaderData - The shader data.
1109
+ * @return {string} The vertex shader.
1110
+ */
762
1111
  _getGLSLVertexCode( shaderData ) {
763
1112
 
764
1113
  return `#version 300 es
765
1114
 
766
- // extensions
1115
+ ${ this.getSignature() }
1116
+
1117
+ // extensions
767
1118
  ${shaderData.extensions}
768
1119
 
769
1120
  // precision
@@ -799,6 +1150,13 @@ void main() {
799
1150
 
800
1151
  }
801
1152
 
1153
+ /**
1154
+ * Returns a GLSL fragment shader based on the given shader data.
1155
+ *
1156
+ * @private
1157
+ * @param {Object} shaderData - The shader data.
1158
+ * @return {string} The vertex shader.
1159
+ */
802
1160
  _getGLSLFragmentCode( shaderData ) {
803
1161
 
804
1162
  return `#version 300 es
@@ -817,6 +1175,7 @@ ${shaderData.varyings}
817
1175
  // codes
818
1176
  ${shaderData.codes}
819
1177
 
1178
+ // structs
820
1179
  ${shaderData.structs}
821
1180
 
822
1181
  void main() {
@@ -832,10 +1191,15 @@ void main() {
832
1191
 
833
1192
  }
834
1193
 
1194
+ /**
1195
+ * Controls the code build of the shader stages.
1196
+ */
835
1197
  buildCode() {
836
1198
 
837
1199
  const shadersData = this.material !== null ? { fragment: {}, vertex: {} } : { compute: {} };
838
1200
 
1201
+ this.sortBindingGroups();
1202
+
839
1203
  for ( const shaderStage in shadersData ) {
840
1204
 
841
1205
  let flow = '// code\n\n';
@@ -910,6 +1274,19 @@ void main() {
910
1274
 
911
1275
  }
912
1276
 
1277
+ /**
1278
+ * This method is one of the more important ones since it's responsible
1279
+ * for generating a matching binding instance for the given uniform node.
1280
+ *
1281
+ * These bindings are later used in the renderer to create bind groups
1282
+ * and layouts.
1283
+ *
1284
+ * @param {UniformNode} node - The uniform node.
1285
+ * @param {string} type - The node data type.
1286
+ * @param {string} shaderStage - The shader stage.
1287
+ * @param {?string} [name=null] - An optional uniform name.
1288
+ * @return {NodeUniform} The node uniform object.
1289
+ */
913
1290
  getUniformFromNode( node, type, shaderStage, name = null ) {
914
1291
 
915
1292
  const uniformNode = super.getUniformFromNode( node, type, shaderStage, name );