super-three 0.181.0 → 0.184.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 (539) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +13152 -11354
  4. package/build/three.core.js +12319 -11539
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1808 -781
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +27 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +10523 -6263
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +10484 -6262
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +11 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +7 -3
  16. package/examples/jsm/controls/ArcballControls.js +7 -4
  17. package/examples/jsm/controls/DragControls.js +2 -2
  18. package/examples/jsm/controls/FirstPersonControls.js +58 -54
  19. package/examples/jsm/controls/FlyControls.js +4 -0
  20. package/examples/jsm/controls/MapControls.js +55 -1
  21. package/examples/jsm/controls/OrbitControls.js +111 -8
  22. package/examples/jsm/controls/TrackballControls.js +8 -8
  23. package/examples/jsm/controls/TransformControls.js +34 -2
  24. package/examples/jsm/csm/CSM.js +2 -1
  25. package/examples/jsm/csm/CSMShadowNode.js +6 -2
  26. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  27. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  28. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  29. package/examples/jsm/exporters/EXRExporter.js +1 -1
  30. package/examples/jsm/exporters/GLTFExporter.js +152 -9
  31. package/examples/jsm/exporters/USDZExporter.js +22 -3
  32. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  33. package/examples/jsm/geometries/TextGeometry.js +18 -0
  34. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  35. package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
  36. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  37. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  38. package/examples/jsm/helpers/ViewHelper.js +67 -8
  39. package/examples/jsm/inspector/Extension.js +13 -0
  40. package/examples/jsm/inspector/Inspector.js +203 -88
  41. package/examples/jsm/inspector/RendererInspector.js +14 -4
  42. package/examples/jsm/inspector/extensions/extensions.json +6 -0
  43. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
  44. package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
  45. package/examples/jsm/inspector/tabs/Console.js +41 -7
  46. package/examples/jsm/inspector/tabs/Memory.js +128 -0
  47. package/examples/jsm/inspector/tabs/Parameters.js +51 -3
  48. package/examples/jsm/inspector/tabs/Performance.js +4 -4
  49. package/examples/jsm/inspector/tabs/Settings.js +264 -0
  50. package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
  51. package/examples/jsm/inspector/tabs/Viewer.js +107 -5
  52. package/examples/jsm/inspector/ui/Graph.js +2 -2
  53. package/examples/jsm/inspector/ui/List.js +1 -1
  54. package/examples/jsm/inspector/ui/Profiler.js +1936 -34
  55. package/examples/jsm/inspector/ui/Style.js +1044 -31
  56. package/examples/jsm/inspector/ui/Tab.js +222 -3
  57. package/examples/jsm/inspector/ui/Values.js +55 -2
  58. package/examples/jsm/inspector/ui/utils.js +13 -0
  59. package/examples/jsm/interaction/InteractionManager.js +226 -0
  60. package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
  61. package/examples/jsm/lighting/DynamicLighting.js +82 -0
  62. package/examples/jsm/lighting/LightProbeGrid.js +651 -0
  63. package/examples/jsm/lines/LineMaterial.js +7 -1
  64. package/examples/jsm/loaders/3DMLoader.js +5 -4
  65. package/examples/jsm/loaders/3MFLoader.js +2 -2
  66. package/examples/jsm/loaders/AMFLoader.js +2 -2
  67. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  68. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  69. package/examples/jsm/loaders/EXRLoader.js +687 -48
  70. package/examples/jsm/loaders/FBXLoader.js +235 -37
  71. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  72. package/examples/jsm/loaders/GLTFLoader.js +146 -178
  73. package/examples/jsm/loaders/HDRLoader.js +1 -2
  74. package/examples/jsm/loaders/KMZLoader.js +5 -5
  75. package/examples/jsm/loaders/KTX2Loader.js +27 -5
  76. package/examples/jsm/loaders/LDrawLoader.js +41 -50
  77. package/examples/jsm/loaders/LWOLoader.js +7 -39
  78. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  79. package/examples/jsm/loaders/PCDLoader.js +4 -2
  80. package/examples/jsm/loaders/SVGLoader.js +2 -2
  81. package/examples/jsm/loaders/TDSLoader.js +0 -2
  82. package/examples/jsm/loaders/TGALoader.js +0 -2
  83. package/examples/jsm/loaders/USDLoader.js +100 -40
  84. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  85. package/examples/jsm/loaders/VOXLoader.js +660 -117
  86. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  87. package/examples/jsm/loaders/VTKLoader.js +42 -25
  88. package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
  89. package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
  90. package/examples/jsm/loaders/usd/USDAParser.js +450 -363
  91. package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
  92. package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
  93. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  94. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  95. package/examples/jsm/math/Octree.js +131 -1
  96. package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
  97. package/examples/jsm/misc/RollerCoaster.js +42 -4
  98. package/examples/jsm/misc/Volume.js +0 -1
  99. package/examples/jsm/misc/VolumeSlice.js +0 -1
  100. package/examples/jsm/modifiers/TessellateModifier.js +1 -1
  101. package/examples/jsm/objects/LensflareMesh.js +1 -1
  102. package/examples/jsm/objects/Reflector.js +73 -25
  103. package/examples/jsm/objects/Sky.js +90 -6
  104. package/examples/jsm/objects/SkyMesh.js +150 -16
  105. package/examples/jsm/objects/Water.js +4 -3
  106. package/examples/jsm/objects/Water2.js +5 -3
  107. package/examples/jsm/objects/WaterMesh.js +5 -7
  108. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  109. package/examples/jsm/physics/JoltPhysics.js +10 -6
  110. package/examples/jsm/physics/RapierPhysics.js +9 -5
  111. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  112. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  113. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  114. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  115. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  116. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  117. package/examples/jsm/renderers/Projector.js +246 -28
  118. package/examples/jsm/renderers/SVGRenderer.js +174 -60
  119. package/examples/jsm/shaders/GTAOShader.js +19 -6
  120. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  122. package/examples/jsm/shaders/SAOShader.js +17 -4
  123. package/examples/jsm/shaders/SSAOShader.js +11 -1
  124. package/examples/jsm/shaders/SSRShader.js +6 -5
  125. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  126. package/examples/jsm/shaders/VignetteShader.js +1 -1
  127. package/examples/jsm/transpiler/AST.js +44 -0
  128. package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
  129. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  130. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  131. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  132. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  133. package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
  134. package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
  135. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  136. package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
  137. package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
  138. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  139. package/examples/jsm/tsl/display/CRT.js +150 -0
  140. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
  141. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  142. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  143. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  144. package/examples/jsm/tsl/display/FSR1Node.js +477 -0
  145. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  146. package/examples/jsm/tsl/display/GTAONode.js +6 -4
  147. package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
  148. package/examples/jsm/tsl/display/GodraysNode.js +615 -0
  149. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  150. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  151. package/examples/jsm/tsl/display/OutlineNode.js +69 -19
  152. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  153. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  154. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  155. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  156. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  157. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  158. package/examples/jsm/tsl/display/SSGINode.js +8 -24
  159. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  160. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  161. package/examples/jsm/tsl/display/Shape.js +29 -0
  162. package/examples/jsm/tsl/display/SharpenNode.js +283 -0
  163. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  164. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  165. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  166. package/examples/jsm/tsl/display/TAAUNode.js +835 -0
  167. package/examples/jsm/tsl/display/TRAANode.js +315 -126
  168. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  169. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  170. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  171. package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
  172. package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
  173. package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
  174. package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
  175. package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
  176. package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
  177. package/examples/jsm/tsl/math/Bayer.js +53 -3
  178. package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
  179. package/examples/jsm/utils/ColorUtils.js +76 -0
  180. package/examples/jsm/utils/LDrawUtils.js +1 -1
  181. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  182. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  183. package/examples/jsm/utils/SkeletonUtils.js +14 -8
  184. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  185. package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
  186. package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
  187. package/package.json +24 -30
  188. package/src/Three.Core.js +3 -1
  189. package/src/Three.TSL.js +25 -11
  190. package/src/Three.WebGPU.Nodes.js +5 -0
  191. package/src/Three.WebGPU.js +9 -0
  192. package/src/Three.js +1 -0
  193. package/src/animation/AnimationAction.js +12 -2
  194. package/src/animation/AnimationClip.js +1 -1
  195. package/src/animation/AnimationMixer.js +6 -0
  196. package/src/animation/AnimationUtils.js +1 -12
  197. package/src/animation/KeyframeTrack.js +47 -8
  198. package/src/animation/PropertyMixer.js +4 -4
  199. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  200. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  201. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  202. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  203. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  204. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  205. package/src/audio/Audio.js +1 -1
  206. package/src/audio/AudioContext.js +2 -2
  207. package/src/audio/AudioListener.js +5 -3
  208. package/src/cameras/Camera.js +32 -2
  209. package/src/cameras/CubeCamera.js +20 -0
  210. package/src/constants.js +90 -5
  211. package/src/core/BufferAttribute.js +13 -1
  212. package/src/core/BufferGeometry.js +14 -2
  213. package/src/core/Clock.js +7 -0
  214. package/src/core/Object3D.js +52 -4
  215. package/src/core/Raycaster.js +2 -2
  216. package/src/core/RenderTarget.js +4 -4
  217. package/src/extras/PMREMGenerator.js +7 -18
  218. package/src/extras/TextureUtils.js +5 -1
  219. package/src/extras/curves/CatmullRomCurve3.js +3 -2
  220. package/src/geometries/ExtrudeGeometry.js +2 -2
  221. package/src/geometries/PolyhedronGeometry.js +1 -1
  222. package/src/geometries/TorusGeometry.js +8 -3
  223. package/src/helpers/CameraHelper.js +3 -0
  224. package/src/helpers/DirectionalLightHelper.js +4 -1
  225. package/src/helpers/HemisphereLightHelper.js +3 -0
  226. package/src/helpers/PointLightHelper.js +1 -25
  227. package/src/helpers/SpotLightHelper.js +3 -0
  228. package/src/lights/DirectionalLight.js +13 -0
  229. package/src/lights/HemisphereLight.js +10 -0
  230. package/src/lights/Light.js +1 -11
  231. package/src/lights/LightProbe.js +0 -15
  232. package/src/lights/LightShadow.js +15 -6
  233. package/src/lights/PointLight.js +15 -0
  234. package/src/lights/PointLightShadow.js +0 -86
  235. package/src/lights/SpotLight.js +22 -1
  236. package/src/lights/webgpu/IESSpotLight.js +2 -1
  237. package/src/loaders/AudioLoader.js +11 -1
  238. package/src/loaders/Cache.js +28 -0
  239. package/src/loaders/DataTextureLoader.js +6 -4
  240. package/src/loaders/FileLoader.js +2 -3
  241. package/src/loaders/ImageBitmapLoader.js +12 -9
  242. package/src/loaders/Loader.js +6 -0
  243. package/src/loaders/MaterialLoader.js +3 -2
  244. package/src/loaders/ObjectLoader.js +46 -6
  245. package/src/loaders/nodes/NodeLoader.js +2 -2
  246. package/src/loaders/nodes/NodeObjectLoader.js +18 -0
  247. package/src/materials/Material.js +2 -0
  248. package/src/materials/MeshLambertMaterial.js +9 -0
  249. package/src/materials/MeshPhongMaterial.js +9 -0
  250. package/src/materials/MeshToonMaterial.js +1 -1
  251. package/src/materials/ShaderMaterial.js +20 -1
  252. package/src/materials/nodes/Line2NodeMaterial.js +34 -7
  253. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  254. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  255. package/src/materials/nodes/NodeMaterial.js +45 -25
  256. package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
  257. package/src/math/Line3.js +6 -5
  258. package/src/math/MathUtils.js +10 -10
  259. package/src/math/Matrix2.js +13 -9
  260. package/src/math/Matrix3.js +13 -9
  261. package/src/math/Matrix4.js +87 -74
  262. package/src/math/Plane.js +4 -3
  263. package/src/math/Quaternion.js +3 -29
  264. package/src/math/Sphere.js +1 -1
  265. package/src/math/Triangle.js +1 -1
  266. package/src/math/Vector2.js +11 -7
  267. package/src/math/Vector3.js +15 -13
  268. package/src/math/Vector4.js +13 -9
  269. package/src/math/interpolants/BezierInterpolant.js +108 -0
  270. package/src/nodes/Nodes.js +86 -68
  271. package/src/nodes/TSL.js +7 -7
  272. package/src/nodes/accessors/Arrays.js +1 -1
  273. package/src/nodes/accessors/BatchNode.js +10 -10
  274. package/src/nodes/accessors/Bitangent.js +5 -5
  275. package/src/nodes/accessors/BufferAttributeNode.js +107 -15
  276. package/src/nodes/accessors/BufferNode.js +29 -2
  277. package/src/nodes/accessors/Camera.js +149 -28
  278. package/src/nodes/accessors/ClippingNode.js +4 -4
  279. package/src/nodes/accessors/CubeTextureNode.js +27 -2
  280. package/src/nodes/accessors/InstanceNode.js +148 -43
  281. package/src/nodes/accessors/MaterialNode.js +9 -1
  282. package/src/nodes/accessors/MaterialProperties.js +2 -5
  283. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  284. package/src/nodes/accessors/ModelNode.js +1 -1
  285. package/src/nodes/accessors/Normal.js +11 -11
  286. package/src/nodes/accessors/Object3DNode.js +1 -1
  287. package/src/nodes/accessors/Position.js +34 -2
  288. package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
  289. package/src/nodes/accessors/ReferenceNode.js +8 -8
  290. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  291. package/src/nodes/accessors/SceneProperties.js +47 -0
  292. package/src/nodes/accessors/SkinningNode.js +27 -26
  293. package/src/nodes/accessors/StorageBufferNode.js +14 -25
  294. package/src/nodes/accessors/StorageTextureNode.js +40 -9
  295. package/src/nodes/accessors/Tangent.js +4 -14
  296. package/src/nodes/accessors/Texture3DNode.js +32 -35
  297. package/src/nodes/accessors/TextureNode.js +67 -23
  298. package/src/nodes/accessors/UniformArrayNode.js +6 -4
  299. package/src/nodes/accessors/UserDataNode.js +1 -2
  300. package/src/nodes/accessors/VertexColorNode.js +1 -2
  301. package/src/nodes/code/FunctionCallNode.js +1 -1
  302. package/src/nodes/code/FunctionNode.js +2 -3
  303. package/src/nodes/core/ArrayNode.js +21 -2
  304. package/src/nodes/core/AssignNode.js +3 -3
  305. package/src/nodes/core/AttributeNode.js +3 -3
  306. package/src/nodes/core/BypassNode.js +1 -1
  307. package/src/nodes/core/ContextNode.js +104 -5
  308. package/src/nodes/core/IndexNode.js +2 -1
  309. package/src/nodes/core/InputNode.js +1 -1
  310. package/src/nodes/core/InspectorNode.js +1 -1
  311. package/src/nodes/core/IsolateNode.js +1 -1
  312. package/src/nodes/core/MRTNode.js +48 -2
  313. package/src/nodes/core/Node.js +112 -15
  314. package/src/nodes/core/NodeBuilder.js +284 -66
  315. package/src/nodes/core/NodeError.js +28 -0
  316. package/src/nodes/core/NodeFrame.js +12 -4
  317. package/src/nodes/core/NodeUtils.js +11 -9
  318. package/src/nodes/core/OutputStructNode.js +12 -10
  319. package/src/nodes/core/ParameterNode.js +4 -4
  320. package/src/nodes/core/PropertyNode.js +19 -3
  321. package/src/nodes/core/StackNode.js +66 -17
  322. package/src/nodes/core/StackTrace.js +139 -0
  323. package/src/nodes/core/StructNode.js +17 -3
  324. package/src/nodes/core/StructTypeNode.js +12 -18
  325. package/src/nodes/core/SubBuildNode.js +2 -2
  326. package/src/nodes/core/UniformGroupNode.js +36 -6
  327. package/src/nodes/core/UniformNode.js +21 -5
  328. package/src/nodes/core/VarNode.js +48 -23
  329. package/src/nodes/core/VaryingNode.js +2 -19
  330. package/src/nodes/display/BlendModes.js +0 -64
  331. package/src/nodes/display/ColorAdjustment.js +17 -0
  332. package/src/nodes/display/ColorSpaceNode.js +3 -3
  333. package/src/nodes/display/NormalMapNode.js +39 -4
  334. package/src/nodes/display/PassNode.js +125 -16
  335. package/src/nodes/display/RenderOutputNode.js +7 -7
  336. package/src/nodes/display/ScreenNode.js +4 -2
  337. package/src/nodes/display/ToneMappingNode.js +1 -1
  338. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  339. package/src/nodes/display/ViewportDepthNode.js +52 -4
  340. package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
  341. package/src/nodes/display/ViewportTextureNode.js +39 -11
  342. package/src/nodes/fog/Fog.js +18 -35
  343. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  344. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  345. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  346. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
  347. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  348. package/src/nodes/geometry/RangeNode.js +5 -3
  349. package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
  350. package/src/nodes/gpgpu/BarrierNode.js +9 -0
  351. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
  352. package/src/nodes/gpgpu/ComputeNode.js +74 -48
  353. package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
  354. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  355. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  356. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  357. package/src/nodes/lighting/LightsNode.js +7 -28
  358. package/src/nodes/lighting/PointShadowNode.js +162 -149
  359. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  360. package/src/nodes/lighting/ShadowNode.js +120 -42
  361. package/src/nodes/math/BitcastNode.js +1 -1
  362. package/src/nodes/math/BitcountNode.js +433 -0
  363. package/src/nodes/math/ConditionalNode.js +3 -3
  364. package/src/nodes/math/MathNode.js +76 -41
  365. package/src/nodes/math/OperatorNode.js +3 -2
  366. package/src/nodes/math/PackFloatNode.js +98 -0
  367. package/src/nodes/math/UnpackFloatNode.js +96 -0
  368. package/src/nodes/pmrem/PMREMNode.js +1 -1
  369. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  370. package/src/nodes/tsl/TSLBase.js +1 -1
  371. package/src/nodes/tsl/TSLCore.js +38 -17
  372. package/src/nodes/utils/ArrayElementNode.js +14 -1
  373. package/src/nodes/utils/ConvertNode.js +1 -1
  374. package/src/nodes/utils/DebugNode.js +12 -12
  375. package/src/nodes/utils/EventNode.js +31 -2
  376. package/src/nodes/utils/FlipNode.js +1 -1
  377. package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
  378. package/src/nodes/utils/JoinNode.js +3 -3
  379. package/src/nodes/utils/LoopNode.js +1 -1
  380. package/src/nodes/utils/MemberNode.js +2 -2
  381. package/src/nodes/utils/Packing.js +13 -1
  382. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  383. package/src/nodes/utils/RTTNode.js +1 -1
  384. package/src/nodes/utils/ReflectorNode.js +3 -4
  385. package/src/nodes/utils/Remap.js +48 -0
  386. package/src/nodes/utils/RotateNode.js +1 -1
  387. package/src/nodes/utils/SampleNode.js +1 -1
  388. package/src/nodes/utils/SetNode.js +1 -1
  389. package/src/nodes/utils/SplitNode.js +1 -1
  390. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  391. package/src/nodes/utils/UVUtils.js +28 -0
  392. package/src/objects/BatchedMesh.js +44 -16
  393. package/src/objects/InstancedMesh.js +30 -3
  394. package/src/objects/Line.js +1 -1
  395. package/src/objects/Mesh.js +1 -1
  396. package/src/objects/Points.js +1 -1
  397. package/src/objects/Skeleton.js +9 -0
  398. package/src/objects/SkinnedMesh.js +26 -9
  399. package/src/renderers/WebGLRenderer.js +329 -145
  400. package/src/renderers/common/Animation.js +3 -3
  401. package/src/renderers/common/Attributes.js +15 -1
  402. package/src/renderers/common/Backend.js +29 -8
  403. package/src/renderers/common/Background.js +26 -13
  404. package/src/renderers/common/BindGroup.js +1 -16
  405. package/src/renderers/common/Binding.js +11 -0
  406. package/src/renderers/common/Bindings.js +29 -14
  407. package/src/renderers/common/BlendMode.js +143 -0
  408. package/src/renderers/common/Buffer.js +40 -0
  409. package/src/renderers/common/BundleGroup.js +1 -1
  410. package/src/renderers/common/ChainMap.js +30 -6
  411. package/src/renderers/common/ComputePipeline.js +1 -1
  412. package/src/renderers/common/CubeRenderTarget.js +51 -7
  413. package/src/renderers/common/Geometries.js +29 -3
  414. package/src/renderers/common/Info.js +333 -4
  415. package/src/renderers/common/InspectorBase.js +6 -1
  416. package/src/renderers/common/Lighting.js +5 -21
  417. package/src/renderers/common/Pipelines.js +40 -7
  418. package/src/renderers/common/PostProcessing.js +8 -206
  419. package/src/renderers/common/ReadbackBuffer.js +78 -0
  420. package/src/renderers/common/RenderBundle.js +3 -1
  421. package/src/renderers/common/RenderBundles.js +7 -3
  422. package/src/renderers/common/RenderContext.js +16 -0
  423. package/src/renderers/common/RenderContexts.js +33 -49
  424. package/src/renderers/common/RenderLists.js +2 -1
  425. package/src/renderers/common/RenderObject.js +17 -5
  426. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  427. package/src/renderers/common/RenderObjects.js +21 -5
  428. package/src/renderers/common/RenderPipeline.js +232 -17
  429. package/src/renderers/common/Renderer.js +481 -117
  430. package/src/renderers/common/Sampler.js +4 -4
  431. package/src/renderers/common/StorageBuffer.js +13 -1
  432. package/src/renderers/common/Textures.js +89 -4
  433. package/src/renderers/common/TimestampQueryPool.js +5 -3
  434. package/src/renderers/common/Uniform.js +8 -0
  435. package/src/renderers/common/UniformsGroup.js +62 -1
  436. package/src/renderers/common/XRManager.js +37 -29
  437. package/src/renderers/common/extras/PMREMGenerator.js +25 -23
  438. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  439. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
  440. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  441. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  442. package/src/renderers/shaders/DFGLUTData.js +19 -34
  443. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  444. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  445. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  446. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  447. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  448. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
  449. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
  450. package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
  451. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
  452. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  453. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  454. package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
  455. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  456. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
  457. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
  458. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  459. package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
  460. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  461. package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
  462. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  463. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  464. package/src/renderers/shaders/ShaderChunk.js +5 -3
  465. package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
  466. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  467. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  468. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  469. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  470. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  471. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  472. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  473. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  474. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  475. package/src/renderers/shaders/ShaderLib.js +7 -6
  476. package/src/renderers/shaders/UniformsLib.js +7 -5
  477. package/src/renderers/shaders/UniformsUtils.js +27 -5
  478. package/src/renderers/webgl/WebGLAnimation.js +2 -1
  479. package/src/renderers/webgl/WebGLBackground.js +15 -15
  480. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  481. package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
  482. package/src/renderers/webgl/WebGLCapabilities.js +9 -4
  483. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  484. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  485. package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
  486. package/src/renderers/webgl/WebGLLights.js +18 -1
  487. package/src/renderers/webgl/WebGLMaterials.js +24 -13
  488. package/src/renderers/webgl/WebGLObjects.js +3 -1
  489. package/src/renderers/webgl/WebGLOutput.js +270 -0
  490. package/src/renderers/webgl/WebGLProgram.js +49 -109
  491. package/src/renderers/webgl/WebGLPrograms.js +63 -51
  492. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  493. package/src/renderers/webgl/WebGLRenderStates.js +13 -2
  494. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  495. package/src/renderers/webgl/WebGLState.js +75 -37
  496. package/src/renderers/webgl/WebGLTextures.js +215 -54
  497. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  498. package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
  499. package/src/renderers/webgl/WebGLUtils.js +6 -2
  500. package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
  501. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
  502. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
  503. package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
  504. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
  505. package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
  506. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
  507. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
  508. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  509. package/src/renderers/webgpu/WebGPUBackend.js +260 -140
  510. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  511. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
  512. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
  513. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  514. package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
  515. package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
  516. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  517. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  518. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
  519. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  520. package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
  521. package/src/renderers/webxr/WebXRController.js +12 -0
  522. package/src/renderers/webxr/WebXRManager.js +4 -2
  523. package/src/textures/CubeDepthTexture.js +76 -0
  524. package/src/textures/HTMLTexture.js +74 -0
  525. package/src/textures/Source.js +2 -2
  526. package/src/textures/Texture.js +16 -5
  527. package/src/utils.js +280 -3
  528. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  529. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  530. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  531. package/src/nodes/accessors/SceneNode.js +0 -145
  532. package/src/nodes/code/ScriptableNode.js +0 -726
  533. package/src/nodes/code/ScriptableValueNode.js +0 -253
  534. package/src/nodes/display/PosterizeNode.js +0 -65
  535. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  536. package/src/nodes/utils/RemapNode.js +0 -125
  537. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  538. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  539. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -8,12 +8,13 @@ import {
8
8
  SRGBColorSpace,
9
9
  Vector3
10
10
  } from 'three';
11
+
11
12
  import {
12
13
  Projector,
13
14
  RenderableFace,
14
15
  RenderableLine,
15
16
  RenderableSprite
16
- } from '../renderers/Projector.js';
17
+ } from './Projector.js';
17
18
 
18
19
  /**
19
20
  * Can be used to wrap SVG elements into a 3D object.
@@ -87,6 +88,8 @@ class SVGRenderer {
87
88
 
88
89
  _svgNode,
89
90
  _pathCount = 0,
91
+ _svgObjectCount = 0,
92
+ _renderListCount = 0,
90
93
 
91
94
  _precision = null,
92
95
  _quality = 1,
@@ -113,6 +116,8 @@ class SVGRenderer {
113
116
  _viewProjectionMatrix = new Matrix4(),
114
117
 
115
118
  _svgPathPool = [],
119
+ _svgObjectsPool = [],
120
+ _renderListPool = [],
116
121
 
117
122
  _projector = new Projector(),
118
123
  _svg = document.createElementNS( 'http://www.w3.org/2000/svg', 'svg' );
@@ -183,8 +188,8 @@ class SVGRenderer {
183
188
  };
184
189
 
185
190
  /**
186
- * Sets the render quality. Setting to `high` means This value indicates that the browser
187
- * tries to improve the SVG quality over rendering speed and geometric precision.
191
+ * Sets the render quality. Setting to `high` makes the browser improve SVG quality
192
+ * over rendering speed and geometric precision.
188
193
  *
189
194
  * @param {('low'|'high')} quality - The quality.
190
195
  */
@@ -275,6 +280,26 @@ class SVGRenderer {
275
280
 
276
281
  }
277
282
 
283
+ function renderSort( a, b ) {
284
+
285
+ const aOrder = a.data.renderOrder !== undefined ? a.data.renderOrder : 0;
286
+ const bOrder = b.data.renderOrder !== undefined ? b.data.renderOrder : 0;
287
+
288
+ if ( aOrder !== bOrder ) {
289
+
290
+ return aOrder - bOrder;
291
+
292
+ } else {
293
+
294
+ const aZ = a.data.z !== undefined ? a.data.z : 0;
295
+ const bZ = b.data.z !== undefined ? b.data.z : 0;
296
+
297
+ return bZ - aZ; // Painter's algorithm: far to near
298
+
299
+ }
300
+
301
+ }
302
+
278
303
  /**
279
304
  * Performs a manual clear with the defined clear color.
280
305
  */
@@ -327,10 +352,7 @@ class SVGRenderer {
327
352
 
328
353
  calculateLights( _lights );
329
354
 
330
- // reset accumulated path
331
-
332
- _currentPath = '';
333
- _currentStyle = '';
355
+ _renderListCount = 0;
334
356
 
335
357
  for ( let e = 0, el = _elements.length; e < el; e ++ ) {
336
358
 
@@ -339,88 +361,130 @@ class SVGRenderer {
339
361
 
340
362
  if ( material === undefined || material.opacity === 0 ) continue;
341
363
 
342
- _elemBox.makeEmpty();
364
+ getRenderItem( _renderListCount ++, 'element', element, material );
343
365
 
344
- if ( element instanceof RenderableSprite ) {
366
+ }
367
+
368
+ _svgObjectCount = 0;
345
369
 
346
- _v1 = element;
347
- _v1.x *= _svgWidthHalf; _v1.y *= - _svgHeightHalf;
370
+ scene.traverseVisible( function ( object ) {
348
371
 
349
- renderSprite( _v1, element, material );
372
+ if ( object.isSVGObject ) {
350
373
 
351
- } else if ( element instanceof RenderableLine ) {
374
+ _vector3.setFromMatrixPosition( object.matrixWorld );
375
+ _vector3.applyMatrix4( _viewProjectionMatrix );
352
376
 
353
- _v1 = element.v1; _v2 = element.v2;
377
+ if ( _vector3.z < - 1 || _vector3.z > 1 ) return;
354
378
 
355
- _v1.positionScreen.x *= _svgWidthHalf; _v1.positionScreen.y *= - _svgHeightHalf;
356
- _v2.positionScreen.x *= _svgWidthHalf; _v2.positionScreen.y *= - _svgHeightHalf;
379
+ const x = _vector3.x * _svgWidthHalf;
380
+ const y = - _vector3.y * _svgHeightHalf;
357
381
 
358
- _elemBox.setFromPoints( [ _v1.positionScreen, _v2.positionScreen ] );
382
+ const svgObject = getSVGObjectData( _svgObjectCount ++ );
359
383
 
360
- if ( _clipBox.intersectsBox( _elemBox ) === true ) {
384
+ svgObject.node = object.node;
385
+ svgObject.x = x;
386
+ svgObject.y = y;
387
+ svgObject.z = _vector3.z;
388
+ svgObject.renderOrder = object.renderOrder;
361
389
 
362
- renderLine( _v1, _v2, material );
390
+ getRenderItem( _renderListCount ++, 'svgObject', svgObject, null );
363
391
 
364
- }
392
+ }
365
393
 
366
- } else if ( element instanceof RenderableFace ) {
394
+ } );
367
395
 
368
- _v1 = element.v1; _v2 = element.v2; _v3 = element.v3;
396
+ _renderListPool.length = _renderListCount;
369
397
 
370
- if ( _v1.positionScreen.z < - 1 || _v1.positionScreen.z > 1 ) continue;
371
- if ( _v2.positionScreen.z < - 1 || _v2.positionScreen.z > 1 ) continue;
372
- if ( _v3.positionScreen.z < - 1 || _v3.positionScreen.z > 1 ) continue;
398
+ if ( this.sortElements && _svgObjectCount > 0 ) {
373
399
 
374
- _v1.positionScreen.x *= _svgWidthHalf; _v1.positionScreen.y *= - _svgHeightHalf;
375
- _v2.positionScreen.x *= _svgWidthHalf; _v2.positionScreen.y *= - _svgHeightHalf;
376
- _v3.positionScreen.x *= _svgWidthHalf; _v3.positionScreen.y *= - _svgHeightHalf;
400
+ // Elements are already sorted by the Projector.
401
+ // Only re-sort when SVGObjects need depth-interleaving.
402
+ _renderListPool.sort( renderSort );
377
403
 
378
- if ( this.overdraw > 0 ) {
404
+ }
379
405
 
380
- expand( _v1.positionScreen, _v2.positionScreen, this.overdraw );
381
- expand( _v2.positionScreen, _v3.positionScreen, this.overdraw );
382
- expand( _v3.positionScreen, _v1.positionScreen, this.overdraw );
406
+ // Reset accumulated path
407
+ _currentPath = '';
408
+ _currentStyle = '';
383
409
 
384
- }
410
+ // Render in sorted order
411
+ for ( let i = 0; i < _renderListCount; i ++ ) {
385
412
 
386
- _elemBox.setFromPoints( [
387
- _v1.positionScreen,
388
- _v2.positionScreen,
389
- _v3.positionScreen
390
- ] );
413
+ const item = _renderListPool[ i ];
391
414
 
392
- if ( _clipBox.intersectsBox( _elemBox ) === true ) {
415
+ if ( item.type === 'svgObject' ) {
393
416
 
394
- renderFace3( _v1, _v2, _v3, element, material );
417
+ flushPath(); // Flush any accumulated paths before inserting SVG node
395
418
 
396
- }
419
+ const svgObject = item.data;
420
+ const node = svgObject.node;
421
+ node.setAttribute( 'transform', 'translate(' + svgObject.x + ',' + svgObject.y + ')' );
422
+ _svg.appendChild( node );
397
423
 
398
- }
424
+ } else {
399
425
 
400
- }
426
+ const element = item.data;
427
+ const material = item.material;
401
428
 
402
- flushPath(); // just to flush last svg:path
429
+ _elemBox.makeEmpty();
403
430
 
404
- scene.traverseVisible( function ( object ) {
431
+ if ( element instanceof RenderableSprite ) {
405
432
 
406
- if ( object.isSVGObject ) {
433
+ _v1 = element;
434
+ _v1.x *= _svgWidthHalf; _v1.y *= - _svgHeightHalf;
407
435
 
408
- _vector3.setFromMatrixPosition( object.matrixWorld );
409
- _vector3.applyMatrix4( _viewProjectionMatrix );
436
+ renderSprite( _v1, element, material );
410
437
 
411
- if ( _vector3.z < - 1 || _vector3.z > 1 ) return;
438
+ } else if ( element instanceof RenderableLine ) {
412
439
 
413
- const x = _vector3.x * _svgWidthHalf;
414
- const y = - _vector3.y * _svgHeightHalf;
440
+ _v1 = element.v1; _v2 = element.v2;
415
441
 
416
- const node = object.node;
417
- node.setAttribute( 'transform', 'translate(' + x + ',' + y + ')' );
442
+ _v1.positionScreen.x *= _svgWidthHalf; _v1.positionScreen.y *= - _svgHeightHalf;
443
+ _v2.positionScreen.x *= _svgWidthHalf; _v2.positionScreen.y *= - _svgHeightHalf;
418
444
 
419
- _svg.appendChild( node );
445
+ _elemBox.setFromPoints( [ _v1.positionScreen, _v2.positionScreen ] );
446
+
447
+ if ( _clipBox.intersectsBox( _elemBox ) === true ) {
448
+
449
+ renderLine( _v1, _v2, material );
450
+
451
+ }
452
+
453
+ } else if ( element instanceof RenderableFace ) {
454
+
455
+ _v1 = element.v1; _v2 = element.v2; _v3 = element.v3;
456
+
457
+ _v1.positionScreen.x *= _svgWidthHalf; _v1.positionScreen.y *= - _svgHeightHalf;
458
+ _v2.positionScreen.x *= _svgWidthHalf; _v2.positionScreen.y *= - _svgHeightHalf;
459
+ _v3.positionScreen.x *= _svgWidthHalf; _v3.positionScreen.y *= - _svgHeightHalf;
460
+
461
+ if ( this.overdraw > 0 ) {
462
+
463
+ expand( _v1.positionScreen, _v2.positionScreen, this.overdraw );
464
+ expand( _v2.positionScreen, _v3.positionScreen, this.overdraw );
465
+ expand( _v3.positionScreen, _v1.positionScreen, this.overdraw );
466
+
467
+ }
468
+
469
+ _elemBox.setFromPoints( [
470
+ _v1.positionScreen,
471
+ _v2.positionScreen,
472
+ _v3.positionScreen
473
+ ] );
474
+
475
+ if ( _clipBox.intersectsBox( _elemBox ) === true ) {
476
+
477
+ renderFace3( _v1, _v2, _v3, element, material );
478
+
479
+ }
480
+
481
+ }
420
482
 
421
483
  }
422
484
 
423
- } );
485
+ }
486
+
487
+ flushPath(); // Flush any remaining paths
424
488
 
425
489
  };
426
490
 
@@ -660,21 +724,71 @@ class SVGRenderer {
660
724
 
661
725
  function getPathNode( id ) {
662
726
 
663
- if ( _svgPathPool[ id ] == null ) {
727
+ let path = _svgPathPool[ id ];
728
+
729
+ if ( path === undefined ) {
664
730
 
665
- _svgPathPool[ id ] = document.createElementNS( 'http://www.w3.org/2000/svg', 'path' );
731
+ path = document.createElementNS( 'http://www.w3.org/2000/svg', 'path' );
666
732
 
667
733
  if ( _quality == 0 ) {
668
734
 
669
- _svgPathPool[ id ].setAttribute( 'shape-rendering', 'crispEdges' ); //optimizeSpeed
735
+ path.setAttribute( 'shape-rendering', 'crispEdges' ); //optimizeSpeed
670
736
 
671
737
  }
672
738
 
673
- return _svgPathPool[ id ];
739
+ _svgPathPool[ id ] = path;
674
740
 
675
741
  }
676
742
 
677
- return _svgPathPool[ id ];
743
+ return path;
744
+
745
+ }
746
+
747
+ function getSVGObjectData( id ) {
748
+
749
+ let svgObject = _svgObjectsPool[ id ];
750
+
751
+ if ( svgObject === undefined ) {
752
+
753
+ svgObject = {
754
+ node: null,
755
+ x: 0,
756
+ y: 0,
757
+ z: 0,
758
+ renderOrder: 0
759
+ };
760
+
761
+ _svgObjectsPool[ id ] = svgObject;
762
+
763
+ }
764
+
765
+ return svgObject;
766
+
767
+ }
768
+
769
+ function getRenderItem( id, type, data, material ) {
770
+
771
+ let item = _renderListPool[ id ];
772
+
773
+ if ( item === undefined ) {
774
+
775
+ item = {
776
+ type: type,
777
+ data: data,
778
+ material: material
779
+ };
780
+
781
+ _renderListPool[ id ] = item;
782
+
783
+ return item;
784
+
785
+ }
786
+
787
+ item.type = type;
788
+ item.data = data;
789
+ item.material = material;
790
+
791
+ return item;
678
792
 
679
793
  }
680
794
 
@@ -91,8 +91,12 @@ const GTAOShader = {
91
91
  #define FRAGMENT_OUTPUT vec4(vec3(ao), 1.)
92
92
  #endif
93
93
 
94
- vec3 getViewPosition(const in vec2 screenPosition, const in float depth) {
95
- vec4 clipSpacePosition = vec4(vec3(screenPosition, depth) * 2.0 - 1.0, 1.0);
94
+ vec3 getViewPosition( const in vec2 screenPosition, const in float depth ) {
95
+ #ifdef USE_REVERSED_DEPTH_BUFFER
96
+ vec4 clipSpacePosition = vec4( vec2( screenPosition ) * 2.0 - 1.0, depth, 1.0 );
97
+ #else
98
+ vec4 clipSpacePosition = vec4( vec3( screenPosition, depth ) * 2.0 - 1.0, 1.0 );
99
+ #endif
96
100
  vec4 viewSpacePosition = cameraProjectionMatrixInverse * clipSpacePosition;
97
101
  return viewSpacePosition.xyz / viewSpacePosition.w;
98
102
  }
@@ -154,10 +158,19 @@ const GTAOShader = {
154
158
 
155
159
  void main() {
156
160
  float depth = getDepth(vUv.xy);
157
- if (depth >= 1.0) {
158
- discard;
159
- return;
160
- }
161
+
162
+ #ifdef USE_REVERSED_DEPTH_BUFFER
163
+ if (depth <= 0.0) {
164
+ discard;
165
+ return;
166
+ }
167
+ #else
168
+ if (depth >= 1.0) {
169
+ discard;
170
+ return;
171
+ }
172
+ #endif
173
+
161
174
  vec3 viewPos = getViewPosition(vUv, depth);
162
175
  vec3 viewNormal = getViewNormal(vUv);
163
176
 
@@ -8,7 +8,7 @@
8
8
  *
9
9
  * Used by {@link HalftonePass}.
10
10
  *
11
- * Shape (1 = Dot, 2 = Ellipse, 3 = Line, 4 = Square)
11
+ * Shape (1 = Dot, 2 = Ellipse, 3 = Line, 4 = Square, 5 = Diamond)
12
12
  * Blending Mode (1 = Linear, 2 = Multiply, 3 = Add, 4 = Lighter, 5 = Darker)
13
13
  *
14
14
  * @constant
@@ -49,11 +49,13 @@ const HalftoneShader = {
49
49
 
50
50
  #define SQRT2_MINUS_ONE 0.41421356
51
51
  #define SQRT2_HALF_MINUS_ONE 0.20710678
52
+ #define PI 3.14159265
52
53
  #define PI2 6.28318531
53
54
  #define SHAPE_DOT 1
54
55
  #define SHAPE_ELLIPSE 2
55
56
  #define SHAPE_LINE 3
56
57
  #define SHAPE_SQUARE 4
58
+ #define SHAPE_DIAMOND 5
57
59
  #define BLENDING_LINEAR 1
58
60
  #define BLENDING_MULTIPLY 2
59
61
  #define BLENDING_ADD 3
@@ -129,6 +131,15 @@ const HalftoneShader = {
129
131
  rad = pow( abs( rad ), 1.4 );
130
132
  rad = rad_max * ( rad + ( ( sin_t > cos_t ) ? rad - sin_t * rad : rad - cos_t * rad ) );
131
133
 
134
+ } else if ( shape == SHAPE_DIAMOND ) {
135
+
136
+ float angle45 = PI / 4.0;
137
+ float theta = atan( p.y - coord.y, p.x - coord.x ) - angle - angle45;
138
+ float sin_t = abs( sin( theta ) );
139
+ float cos_t = abs( cos( theta ) );
140
+ rad = pow( abs( rad ), 1.4 );
141
+ rad = rad_max * ( rad + ( ( sin_t > cos_t ) ? rad - sin_t * rad : rad - cos_t * rad ) );
142
+
132
143
  }
133
144
 
134
145
  return rad - dist;
@@ -86,8 +86,12 @@ const PoissonDenoiseShader = {
86
86
 
87
87
  const vec3 poissonDisk[SAMPLES] = SAMPLE_VECTORS;
88
88
 
89
- vec3 getViewPosition(const in vec2 screenPosition, const in float depth) {
90
- vec4 clipSpacePosition = vec4(vec3(screenPosition, depth) * 2.0 - 1.0, 1.0);
89
+ vec3 getViewPosition( const in vec2 screenPosition, const in float depth ) {
90
+ #ifdef USE_REVERSED_DEPTH_BUFFER
91
+ vec4 clipSpacePosition = vec4( vec2( screenPosition ) * 2.0 - 1.0, depth, 1.0 );
92
+ #else
93
+ vec4 clipSpacePosition = vec4( vec3( screenPosition, depth ) * 2.0 - 1.0, 1.0 );
94
+ #endif
91
95
  vec4 viewSpacePosition = cameraProjectionMatrixInverse * clipSpacePosition;
92
96
  return viewSpacePosition.xyz / viewSpacePosition.w;
93
97
  }
@@ -153,9 +153,15 @@ const SAOShader = {
153
153
  angle += ANGLE_STEP;
154
154
 
155
155
  float sampleDepth = getDepth( sampleUv );
156
- if( sampleDepth >= ( 1.0 - EPSILON ) ) {
156
+ #ifdef USE_REVERSED_DEPTH_BUFFER
157
+ if( sampleDepth <= 0.0 + EPSILON ) {
157
158
  continue;
158
159
  }
160
+ #else
161
+ if( sampleDepth >= 1.0 - EPSILON ) {
162
+ continue;
163
+ }
164
+ #endif
159
165
 
160
166
  float sampleViewZ = getViewZ( sampleDepth );
161
167
  vec3 sampleViewPosition = getViewPosition( sampleUv, sampleDepth, sampleViewZ );
@@ -170,9 +176,16 @@ const SAOShader = {
170
176
 
171
177
  void main() {
172
178
  float centerDepth = getDepth( vUv );
173
- if( centerDepth >= ( 1.0 - EPSILON ) ) {
174
- discard;
175
- }
179
+
180
+ #ifdef USE_REVERSED_DEPTH_BUFFER
181
+ if( centerDepth <= 0.0 + EPSILON ) {
182
+ discard;
183
+ }
184
+ #else
185
+ if( centerDepth >= 1.0 - EPSILON ) {
186
+ discard;
187
+ }
188
+ #endif
176
189
 
177
190
  float centerViewZ = getViewZ( centerDepth );
178
191
  vec3 viewPosition = getViewPosition( vUv, centerDepth, centerViewZ );
@@ -79,6 +79,16 @@ const SSAOShader = {
79
79
 
80
80
  #include <packing>
81
81
 
82
+ #ifdef USE_REVERSED_DEPTH_BUFFER
83
+
84
+ const float depthThreshold = 0.0;
85
+
86
+ #else
87
+
88
+ const float depthThreshold = 1.0;
89
+
90
+ #endif
91
+
82
92
  float getDepth( const in vec2 screenPosition ) {
83
93
 
84
94
  return texture2D( tDepth, screenPosition ).x;
@@ -137,7 +147,7 @@ const SSAOShader = {
137
147
 
138
148
  float depth = getDepth( vUv );
139
149
 
140
- if ( depth == 1.0 ) {
150
+ if ( depth == depthThreshold ) {
141
151
 
142
152
  gl_FragColor = vec4( 1.0 ); // don't influence background
143
153
 
@@ -96,7 +96,7 @@ const SSRShader = {
96
96
  float x0=point.x,y0=point.y,z0=point.z;
97
97
  float x=planePoint.x,y=planePoint.y,z=planePoint.z;
98
98
  float d=-(a*x+b*y+c*z);
99
- float distance=(a*x0+b*y0+c*z0+d)/sqrt(a*a+b*b+c*c);
99
+ float distance=a*x0+b*y0+c*z0+d;
100
100
  return distance;
101
101
  }
102
102
  float getDepth( const in vec2 uv ) {
@@ -170,17 +170,17 @@ const SSRShader = {
170
170
  #endif
171
171
  d1=viewPositionToXY(d1viewPosition);
172
172
 
173
- float totalLen=length(d1-d0);
174
173
  float xLen=d1.x-d0.x;
175
174
  float yLen=d1.y-d0.y;
176
175
  float totalStep=max(abs(xLen),abs(yLen));
177
176
  float xSpan=xLen/totalStep;
178
177
  float ySpan=yLen/totalStep;
179
- for(float i=0.;i<float(MAX_STEP);i++){
178
+ float sStep=1./totalStep;
179
+ float s=sStep; // start at sStep since loop starts at i=1
180
+ for(float i=1.;i<float(MAX_STEP);i++){
180
181
  if(i>=totalStep) break;
181
182
  vec2 xy=vec2(d0.x+i*xSpan,d0.y+i*ySpan);
182
183
  if(xy.x<0.||xy.x>resolution.x||xy.y<0.||xy.y>resolution.y) break;
183
- float s=length(xy-d0)/totalLen;
184
184
  vec2 uv=xy/resolution;
185
185
 
186
186
  float d = getDepth(uv);
@@ -221,7 +221,7 @@ const SSRShader = {
221
221
 
222
222
  if(hit){
223
223
  vec3 vN=getViewNormal( uv );
224
- if(dot(viewReflectDir,vN)>=0.) continue;
224
+ if(dot(viewReflectDir,vN)>=0.) break; // treat backfaces as opaque
225
225
  float distance=pointPlaneDistance(vP,viewPosition,viewNormal);
226
226
  if(distance>maxDistance) break;
227
227
  float op=opacity;
@@ -240,6 +240,7 @@ const SSRShader = {
240
240
  break;
241
241
  }
242
242
  }
243
+ s+=sStep;
243
244
  }
244
245
  }
245
246
  `
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  /**
7
- * Unpack RGBA depth shader that shows RGBA encoded depth as monochrome color.
7
+ * Depth visualization shader that shows depth values as monochrome color.
8
8
  *
9
9
  * @constant
10
10
  * @type {ShaderMaterial~Shader}
@@ -39,11 +39,9 @@ const UnpackDepthRGBAShader = {
39
39
 
40
40
  varying vec2 vUv;
41
41
 
42
- #include <packing>
43
-
44
42
  void main() {
45
43
 
46
- float depth = unpackRGBAToDepth( texture2D( tDiffuse, vUv ) );
44
+ float depth = texture2D( tDiffuse, vUv ).r;
47
45
 
48
46
  #ifdef USE_REVERSED_DEPTH_BUFFER
49
47
 
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  /**
7
- * Based on [PaintEffect postprocess from ro.me](http://code.google.com/p/3-dreams-of-black/source/browse/deploy/js/effects/PaintEffect.js).
7
+ * Based on [PaintEffect postprocess from ro.me](https://github.com/dataarts/3-dreams-of-black/blob/master/deploy/js/effects/PaintEffect.js).
8
8
  *
9
9
  * @constant
10
10
  * @type {ShaderMaterial~Shader}
@@ -46,6 +46,20 @@ export class ASTNode {
46
46
 
47
47
  }
48
48
 
49
+ getProgram() {
50
+
51
+ let current = this;
52
+
53
+ while ( current.parent !== null ) {
54
+
55
+ current = current.parent;
56
+
57
+ }
58
+
59
+ return current.isProgram === true ? current : null;
60
+
61
+ }
62
+
49
63
  getParent( parents = [] ) {
50
64
 
51
65
  if ( this.parent === null ) {
@@ -114,6 +128,7 @@ export class Program extends ASTNode {
114
128
  super();
115
129
 
116
130
  this.body = body;
131
+ this.structTypes = new Map();
117
132
 
118
133
  this.isProgram = true;
119
134
 
@@ -629,3 +644,32 @@ export class SwitchCase extends ASTNode {
629
644
  }
630
645
 
631
646
  }
647
+
648
+ // helper class for StructDefinition
649
+ export class StructMember {
650
+
651
+ constructor( type, name ) {
652
+
653
+ this.type = type;
654
+ this.name = name;
655
+ this.isStructMember = true;
656
+
657
+ }
658
+
659
+ }
660
+
661
+ export class StructDefinition extends ASTNode {
662
+
663
+ constructor( name, members = [] ) {
664
+
665
+ super();
666
+
667
+ this.name = name;
668
+ this.members = members;
669
+ this.isStructDefinition = true;
670
+
671
+ this.initialize();
672
+
673
+ }
674
+
675
+ }