@plastic-software/three 0.179.0 → 0.181.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (430) hide show
  1. package/build/three.cjs +1108 -591
  2. package/build/three.core.js +616 -345
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +488 -250
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +37 -6
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +6576 -2152
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +6575 -2151
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
  13. package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
  14. package/examples/jsm/Addons.js +1 -1
  15. package/examples/jsm/animation/CCDIKSolver.js +1 -1
  16. package/examples/jsm/controls/ArcballControls.js +8 -8
  17. package/examples/jsm/controls/DragControls.js +7 -57
  18. package/examples/jsm/controls/FirstPersonControls.js +3 -3
  19. package/examples/jsm/controls/FlyControls.js +1 -1
  20. package/examples/jsm/controls/OrbitControls.js +2 -2
  21. package/examples/jsm/controls/PointerLockControls.js +2 -10
  22. package/examples/jsm/controls/TrackballControls.js +1 -1
  23. package/examples/jsm/controls/TransformControls.js +1 -1
  24. package/examples/jsm/effects/AsciiEffect.js +8 -8
  25. package/examples/jsm/exporters/DRACOExporter.js +2 -2
  26. package/examples/jsm/exporters/EXRExporter.js +1 -1
  27. package/examples/jsm/exporters/GLTFExporter.js +33 -25
  28. package/examples/jsm/exporters/KTX2Exporter.js +4 -2
  29. package/examples/jsm/exporters/PLYExporter.js +1 -1
  30. package/examples/jsm/exporters/USDZExporter.js +9 -2
  31. package/examples/jsm/geometries/DecalGeometry.js +2 -2
  32. package/examples/jsm/geometries/ParametricGeometry.js +1 -1
  33. package/examples/jsm/geometries/TeapotGeometry.js +2 -2
  34. package/examples/jsm/geometries/TextGeometry.js +3 -2
  35. package/examples/jsm/gpgpu/BitonicSort.js +715 -0
  36. package/examples/jsm/helpers/ViewHelper.js +43 -5
  37. package/examples/jsm/inspector/Inspector.js +427 -0
  38. package/examples/jsm/inspector/RendererInspector.js +415 -0
  39. package/examples/jsm/inspector/tabs/Console.js +204 -0
  40. package/examples/jsm/inspector/tabs/Parameters.js +332 -0
  41. package/examples/jsm/inspector/tabs/Performance.js +268 -0
  42. package/examples/jsm/inspector/tabs/Viewer.js +166 -0
  43. package/examples/jsm/inspector/ui/Graph.js +95 -0
  44. package/examples/jsm/inspector/ui/Item.js +170 -0
  45. package/examples/jsm/inspector/ui/List.js +75 -0
  46. package/examples/jsm/inspector/ui/Profiler.js +170 -0
  47. package/examples/jsm/inspector/ui/Style.js +654 -0
  48. package/examples/jsm/inspector/ui/Tab.js +46 -0
  49. package/examples/jsm/inspector/ui/Values.js +423 -0
  50. package/examples/jsm/inspector/ui/utils.js +56 -0
  51. package/examples/jsm/interactive/HTMLMesh.js +6 -10
  52. package/examples/jsm/interactive/InteractiveGroup.js +1 -1
  53. package/examples/jsm/interactive/SelectionBox.js +30 -0
  54. package/examples/jsm/libs/ktx-parse.module.js +1 -1
  55. package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
  56. package/examples/jsm/lines/Line2.js +3 -3
  57. package/examples/jsm/lines/LineGeometry.js +1 -1
  58. package/examples/jsm/lines/LineSegments2.js +2 -2
  59. package/examples/jsm/lines/Wireframe.js +2 -2
  60. package/examples/jsm/lines/WireframeGeometry2.js +1 -1
  61. package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
  62. package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
  63. package/examples/jsm/loaders/3MFLoader.js +1 -1
  64. package/examples/jsm/loaders/ColladaLoader.js +3 -3
  65. package/examples/jsm/loaders/DDSLoader.js +1 -1
  66. package/examples/jsm/loaders/DRACOLoader.js +73 -22
  67. package/examples/jsm/loaders/EXRLoader.js +5 -5
  68. package/examples/jsm/loaders/FBXLoader.js +2 -2
  69. package/examples/jsm/loaders/FontLoader.js +23 -5
  70. package/examples/jsm/loaders/GLTFLoader.js +14 -8
  71. package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
  72. package/examples/jsm/loaders/HDRLoader.js +486 -0
  73. package/examples/jsm/loaders/KTX2Loader.js +136 -49
  74. package/examples/jsm/loaders/KTXLoader.js +2 -2
  75. package/examples/jsm/loaders/LDrawLoader.js +1 -1
  76. package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
  77. package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
  78. package/examples/jsm/loaders/LWOLoader.js +2 -2
  79. package/examples/jsm/loaders/MaterialXLoader.js +22 -5
  80. package/examples/jsm/loaders/OBJLoader.js +1 -1
  81. package/examples/jsm/loaders/PDBLoader.js +1 -1
  82. package/examples/jsm/loaders/RGBELoader.js +7 -473
  83. package/examples/jsm/loaders/SVGLoader.js +2 -2
  84. package/examples/jsm/loaders/TTFLoader.js +4 -4
  85. package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
  86. package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
  87. package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
  88. package/examples/jsm/math/ColorSpaces.js +19 -1
  89. package/examples/jsm/math/ConvexHull.js +3 -3
  90. package/examples/jsm/math/ImprovedNoise.js +1 -1
  91. package/examples/jsm/math/Lut.js +2 -2
  92. package/examples/jsm/math/SimplexNoise.js +1 -1
  93. package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
  94. package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
  95. package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
  96. package/examples/jsm/misc/TubePainter.js +383 -40
  97. package/examples/jsm/misc/Volume.js +1 -1
  98. package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
  99. package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
  100. package/examples/jsm/objects/Sky.js +1 -1
  101. package/examples/jsm/objects/SkyMesh.js +1 -1
  102. package/examples/jsm/objects/Water.js +3 -3
  103. package/examples/jsm/objects/WaterMesh.js +6 -6
  104. package/examples/jsm/postprocessing/GlitchPass.js +2 -2
  105. package/examples/jsm/postprocessing/OutlinePass.js +1 -1
  106. package/examples/jsm/postprocessing/SSRPass.js +37 -8
  107. package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
  108. package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
  109. package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
  110. package/examples/jsm/renderers/SVGRenderer.js +1 -1
  111. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
  112. package/examples/jsm/shaders/AfterimageShader.js +1 -1
  113. package/examples/jsm/shaders/BleachBypassShader.js +1 -1
  114. package/examples/jsm/shaders/BokehShader.js +1 -1
  115. package/examples/jsm/shaders/BokehShader2.js +1 -1
  116. package/examples/jsm/shaders/DotScreenShader.js +1 -1
  117. package/examples/jsm/shaders/FocusShader.js +1 -1
  118. package/examples/jsm/shaders/GTAOShader.js +2 -2
  119. package/examples/jsm/shaders/GodRaysShader.js +1 -1
  120. package/examples/jsm/shaders/KaleidoShader.js +1 -1
  121. package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
  122. package/examples/jsm/shaders/SSRShader.js +1 -1
  123. package/examples/jsm/shaders/SepiaShader.js +1 -1
  124. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
  125. package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
  126. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +1 -1
  127. package/examples/jsm/shaders/VignetteShader.js +1 -1
  128. package/examples/jsm/transpiler/GLSLDecoder.js +22 -19
  129. package/examples/jsm/transpiler/TSLEncoder.js +9 -10
  130. package/examples/jsm/transpiler/WGSLEncoder.js +24 -0
  131. package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
  132. package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
  133. package/examples/jsm/tsl/display/BloomNode.js +7 -3
  134. package/examples/jsm/tsl/display/ChromaticAberrationNode.js +2 -1
  135. package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
  136. package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
  137. package/examples/jsm/tsl/display/GTAONode.js +53 -5
  138. package/examples/jsm/tsl/display/GaussianBlurNode.js +49 -35
  139. package/examples/jsm/tsl/display/OutlineNode.js +13 -2
  140. package/examples/jsm/tsl/display/SSGINode.js +654 -0
  141. package/examples/jsm/tsl/display/SSRNode.js +182 -65
  142. package/examples/jsm/tsl/display/SSSNode.js +488 -0
  143. package/examples/jsm/tsl/display/TRAANode.js +124 -7
  144. package/examples/jsm/tsl/display/boxBlur.js +65 -0
  145. package/examples/jsm/tsl/display/hashBlur.js +16 -18
  146. package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
  147. package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
  148. package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
  149. package/examples/jsm/webxr/OculusHandModel.js +1 -1
  150. package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
  151. package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
  152. package/package.json +5 -10
  153. package/src/Three.Core.js +4 -2
  154. package/src/Three.TSL.js +36 -5
  155. package/src/Three.WebGPU.Nodes.js +2 -0
  156. package/src/Three.WebGPU.js +2 -0
  157. package/src/animation/AnimationClip.js +20 -4
  158. package/src/animation/AnimationMixer.js +3 -3
  159. package/src/animation/AnimationObjectGroup.js +2 -1
  160. package/src/animation/KeyframeTrack.js +7 -6
  161. package/src/animation/PropertyBinding.js +12 -11
  162. package/src/audio/Audio.js +10 -9
  163. package/src/audio/PositionalAudio.js +1 -1
  164. package/src/cameras/OrthographicCamera.js +1 -1
  165. package/src/cameras/PerspectiveCamera.js +1 -1
  166. package/src/cameras/StereoCamera.js +2 -2
  167. package/src/constants.js +11 -3
  168. package/src/core/BufferGeometry.js +10 -10
  169. package/src/core/EventDispatcher.js +1 -1
  170. package/src/core/InterleavedBuffer.js +1 -1
  171. package/src/core/InterleavedBufferAttribute.js +3 -2
  172. package/src/core/Object3D.js +3 -2
  173. package/src/core/Raycaster.js +2 -1
  174. package/src/core/RenderTarget.js +10 -1
  175. package/src/extras/Controls.js +5 -4
  176. package/src/extras/DataUtils.js +2 -1
  177. package/src/extras/Earcut.js +6 -0
  178. package/src/extras/ImageUtils.js +2 -2
  179. package/src/extras/PMREMGenerator.js +268 -55
  180. package/src/extras/TextureUtils.js +2 -1
  181. package/src/extras/core/Curve.js +2 -1
  182. package/src/extras/core/Interpolations.js +7 -1
  183. package/src/extras/core/ShapePath.js +4 -4
  184. package/src/extras/lib/earcut.js +8 -8
  185. package/src/geometries/BoxGeometry.js +1 -0
  186. package/src/geometries/CapsuleGeometry.js +1 -0
  187. package/src/geometries/CircleGeometry.js +1 -0
  188. package/src/geometries/ConeGeometry.js +1 -0
  189. package/src/geometries/CylinderGeometry.js +1 -0
  190. package/src/geometries/DodecahedronGeometry.js +1 -0
  191. package/src/geometries/ExtrudeGeometry.js +8 -6
  192. package/src/geometries/IcosahedronGeometry.js +1 -0
  193. package/src/geometries/LatheGeometry.js +1 -0
  194. package/src/geometries/OctahedronGeometry.js +1 -0
  195. package/src/geometries/PlaneGeometry.js +1 -0
  196. package/src/geometries/RingGeometry.js +1 -0
  197. package/src/geometries/ShapeGeometry.js +1 -0
  198. package/src/geometries/SphereGeometry.js +1 -0
  199. package/src/geometries/TetrahedronGeometry.js +1 -0
  200. package/src/geometries/TorusGeometry.js +1 -0
  201. package/src/geometries/TorusKnotGeometry.js +1 -0
  202. package/src/geometries/TubeGeometry.js +1 -0
  203. package/src/helpers/CameraHelper.js +1 -1
  204. package/src/lights/webgpu/ProjectorLight.js +1 -1
  205. package/src/loaders/AnimationLoader.js +2 -1
  206. package/src/loaders/AudioLoader.js +2 -1
  207. package/src/loaders/BufferGeometryLoader.js +2 -2
  208. package/src/loaders/Cache.js +2 -2
  209. package/src/loaders/DataTextureLoader.js +1 -1
  210. package/src/loaders/FileLoader.js +3 -2
  211. package/src/loaders/ImageBitmapLoader.js +5 -4
  212. package/src/loaders/ImageLoader.js +1 -1
  213. package/src/loaders/Loader.js +3 -3
  214. package/src/loaders/LoadingManager.js +25 -3
  215. package/src/loaders/MaterialLoader.js +3 -2
  216. package/src/loaders/ObjectLoader.js +13 -13
  217. package/src/loaders/TextureLoader.js +1 -1
  218. package/src/loaders/nodes/NodeLoader.js +3 -2
  219. package/src/materials/Material.js +16 -3
  220. package/src/materials/MeshBasicMaterial.js +1 -0
  221. package/src/materials/MeshDepthMaterial.js +1 -0
  222. package/src/materials/MeshDistanceMaterial.js +1 -1
  223. package/src/materials/MeshLambertMaterial.js +2 -1
  224. package/src/materials/MeshMatcapMaterial.js +22 -0
  225. package/src/materials/MeshNormalMaterial.js +1 -0
  226. package/src/materials/MeshPhongMaterial.js +2 -1
  227. package/src/materials/MeshPhysicalMaterial.js +2 -1
  228. package/src/materials/MeshStandardMaterial.js +8 -7
  229. package/src/materials/MeshToonMaterial.js +1 -0
  230. package/src/materials/PointsMaterial.js +1 -1
  231. package/src/materials/ShaderMaterial.js +2 -2
  232. package/src/materials/nodes/Line2NodeMaterial.js +2 -2
  233. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  234. package/src/materials/nodes/NodeMaterial.js +62 -22
  235. package/src/materials/nodes/PointsNodeMaterial.js +81 -28
  236. package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
  237. package/src/materials/nodes/manager/NodeMaterialObserver.js +3 -2
  238. package/src/math/Color.js +6 -5
  239. package/src/math/ColorManagement.js +9 -3
  240. package/src/math/Cylindrical.js +1 -1
  241. package/src/math/Euler.js +2 -1
  242. package/src/math/MathUtils.js +13 -11
  243. package/src/math/Matrix2.js +1 -1
  244. package/src/math/Matrix3.js +2 -2
  245. package/src/math/Matrix4.js +7 -7
  246. package/src/math/Plane.js +1 -1
  247. package/src/math/Quaternion.js +68 -66
  248. package/src/math/Spherical.js +1 -1
  249. package/src/nodes/Nodes.js +4 -1
  250. package/src/nodes/TSL.js +4 -1
  251. package/src/nodes/accessors/BufferNode.js +1 -1
  252. package/src/nodes/accessors/Camera.js +133 -7
  253. package/src/nodes/accessors/ClippingNode.js +6 -5
  254. package/src/nodes/accessors/CubeTextureNode.js +5 -4
  255. package/src/nodes/accessors/InstanceNode.js +25 -5
  256. package/src/nodes/accessors/Lights.js +10 -0
  257. package/src/nodes/accessors/Normal.js +5 -4
  258. package/src/nodes/accessors/Object3DNode.js +1 -1
  259. package/src/nodes/accessors/Position.js +18 -2
  260. package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
  261. package/src/nodes/accessors/ReferenceNode.js +3 -2
  262. package/src/nodes/accessors/SceneNode.js +2 -1
  263. package/src/nodes/accessors/StorageBufferNode.js +2 -1
  264. package/src/nodes/accessors/StorageTextureNode.js +22 -0
  265. package/src/nodes/accessors/Texture3DNode.js +14 -1
  266. package/src/nodes/accessors/TextureNode.js +130 -44
  267. package/src/nodes/code/FunctionCallNode.js +24 -4
  268. package/src/nodes/code/FunctionNode.js +23 -0
  269. package/src/nodes/core/ArrayNode.js +1 -0
  270. package/src/nodes/core/AssignNode.js +4 -3
  271. package/src/nodes/core/AttributeNode.js +2 -1
  272. package/src/nodes/core/ContextNode.js +29 -10
  273. package/src/nodes/core/IndexNode.js +2 -2
  274. package/src/nodes/core/InputNode.js +2 -1
  275. package/src/nodes/core/InspectorNode.js +128 -0
  276. package/src/nodes/core/{CacheNode.js → IsolateNode.js} +40 -7
  277. package/src/nodes/core/Node.js +152 -31
  278. package/src/nodes/core/NodeBuilder.js +183 -35
  279. package/src/nodes/core/NodeFrame.js +21 -21
  280. package/src/nodes/core/NodeFunction.js +2 -1
  281. package/src/nodes/core/NodeParser.js +2 -1
  282. package/src/nodes/core/NodeUniform.js +1 -1
  283. package/src/nodes/core/NodeUtils.js +17 -91
  284. package/src/nodes/core/ParameterNode.js +31 -0
  285. package/src/nodes/core/PropertyNode.js +7 -0
  286. package/src/nodes/core/StackNode.js +43 -16
  287. package/src/nodes/core/StructNode.js +5 -5
  288. package/src/nodes/core/StructTypeNode.js +1 -0
  289. package/src/nodes/core/SubBuildNode.js +2 -2
  290. package/src/nodes/core/UniformNode.js +18 -10
  291. package/src/nodes/core/VarNode.js +70 -33
  292. package/src/nodes/core/VaryingNode.js +3 -2
  293. package/src/nodes/display/BlendModes.js +5 -4
  294. package/src/nodes/display/BumpMapNode.js +1 -1
  295. package/src/nodes/display/ColorAdjustment.js +1 -1
  296. package/src/nodes/display/FrontFacingNode.js +4 -8
  297. package/src/nodes/display/NormalMapNode.js +2 -1
  298. package/src/nodes/display/PassNode.js +52 -11
  299. package/src/nodes/display/RenderOutputNode.js +28 -2
  300. package/src/nodes/display/ScreenNode.js +44 -14
  301. package/src/nodes/display/ToneMappingNode.js +31 -4
  302. package/src/nodes/display/ToonOutlinePassNode.js +8 -0
  303. package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
  304. package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
  305. package/src/nodes/display/ViewportTextureNode.js +42 -12
  306. package/src/nodes/fog/Fog.js +3 -2
  307. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
  308. package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
  309. package/src/nodes/functions/BasicLightingModel.js +2 -1
  310. package/src/nodes/functions/PhysicalLightingModel.js +3 -2
  311. package/src/nodes/functions/VolumetricLightingModel.js +5 -5
  312. package/src/nodes/geometry/RangeNode.js +40 -4
  313. package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
  314. package/src/nodes/gpgpu/ComputeNode.js +17 -5
  315. package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
  316. package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
  317. package/src/nodes/lighting/EnvironmentNode.js +6 -6
  318. package/src/nodes/lighting/LightsNode.js +3 -4
  319. package/src/nodes/lighting/PointShadowNode.js +6 -0
  320. package/src/nodes/lighting/ShadowFilterNode.js +2 -0
  321. package/src/nodes/lighting/ShadowNode.js +75 -8
  322. package/src/nodes/math/BitcastNode.js +156 -0
  323. package/src/nodes/math/ConditionalNode.js +24 -7
  324. package/src/nodes/math/MathNode.js +25 -19
  325. package/src/nodes/math/OperatorNode.js +7 -5
  326. package/src/nodes/pmrem/PMREMUtils.js +117 -2
  327. package/src/nodes/shapes/Shapes.js +1 -1
  328. package/src/nodes/tsl/TSLBase.js +5 -2
  329. package/src/nodes/tsl/TSLCore.js +460 -159
  330. package/src/nodes/utils/DebugNode.js +2 -1
  331. package/src/nodes/utils/EventNode.js +36 -0
  332. package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
  333. package/src/nodes/utils/JoinNode.js +6 -3
  334. package/src/nodes/utils/LoopNode.js +20 -24
  335. package/src/nodes/utils/MemberNode.js +59 -7
  336. package/src/nodes/utils/PostProcessingUtils.js +28 -1
  337. package/src/nodes/utils/RTTNode.js +13 -3
  338. package/src/nodes/utils/ReflectorNode.js +58 -7
  339. package/src/nodes/utils/SampleNode.js +12 -2
  340. package/src/nodes/utils/SplitNode.js +11 -0
  341. package/src/nodes/utils/Timer.js +0 -47
  342. package/src/objects/BatchedMesh.js +2 -2
  343. package/src/objects/LOD.js +1 -1
  344. package/src/objects/Line.js +2 -1
  345. package/src/objects/LineSegments.js +2 -1
  346. package/src/objects/Skeleton.js +3 -2
  347. package/src/objects/SkinnedMesh.js +3 -1
  348. package/src/objects/Sprite.js +4 -3
  349. package/src/renderers/WebGLRenderer.js +48 -41
  350. package/src/renderers/common/Animation.js +13 -1
  351. package/src/renderers/common/Attributes.js +1 -1
  352. package/src/renderers/common/Backend.js +108 -27
  353. package/src/renderers/common/Background.js +2 -1
  354. package/src/renderers/common/Bindings.js +58 -2
  355. package/src/renderers/common/CanvasTarget.js +341 -0
  356. package/src/renderers/common/ChainMap.js +1 -1
  357. package/src/renderers/common/DataMap.js +1 -1
  358. package/src/renderers/common/Geometries.js +26 -0
  359. package/src/renderers/common/Info.js +4 -2
  360. package/src/renderers/common/InspectorBase.js +146 -0
  361. package/src/renderers/common/Pipelines.js +1 -1
  362. package/src/renderers/common/PostProcessing.js +6 -25
  363. package/src/renderers/common/QuadMesh.js +7 -1
  364. package/src/renderers/common/RenderContext.js +2 -2
  365. package/src/renderers/common/RenderList.js +7 -3
  366. package/src/renderers/common/RenderObject.js +16 -2
  367. package/src/renderers/common/RenderObjects.js +1 -1
  368. package/src/renderers/common/Renderer.js +473 -245
  369. package/src/renderers/common/RendererUtils.js +9 -0
  370. package/src/renderers/common/SampledTexture.js +9 -1
  371. package/src/renderers/common/Sampler.js +50 -12
  372. package/src/renderers/common/StorageTexture.js +9 -1
  373. package/src/renderers/common/Textures.js +121 -45
  374. package/src/renderers/common/TimestampQueryPool.js +65 -3
  375. package/src/renderers/common/UniformsGroup.js +2 -1
  376. package/src/renderers/common/XRManager.js +42 -22
  377. package/src/renderers/common/extras/PMREMGenerator.js +160 -65
  378. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  379. package/src/renderers/common/nodes/NodeLibrary.js +9 -7
  380. package/src/renderers/common/nodes/NodeSampler.js +13 -1
  381. package/src/renderers/common/nodes/Nodes.js +38 -16
  382. package/src/renderers/shaders/DFGLUTData.js +64 -0
  383. package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
  384. package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
  385. package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
  386. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
  387. package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
  388. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
  389. package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
  390. package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
  391. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +7 -15
  392. package/src/renderers/shaders/ShaderLib/depth.glsl.js +1 -1
  393. package/src/renderers/shaders/UniformsLib.js +1 -0
  394. package/src/renderers/shaders/UniformsUtils.js +25 -4
  395. package/src/renderers/webgl/WebGLCapabilities.js +2 -1
  396. package/src/renderers/webgl/WebGLExtensions.js +2 -25
  397. package/src/renderers/webgl/WebGLInfo.js +3 -1
  398. package/src/renderers/webgl/WebGLProgram.js +15 -14
  399. package/src/renderers/webgl/WebGLPrograms.js +2 -1
  400. package/src/renderers/webgl/WebGLShadowMap.js +3 -2
  401. package/src/renderers/webgl/WebGLState.js +15 -14
  402. package/src/renderers/webgl/WebGLTextures.js +19 -14
  403. package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
  404. package/src/renderers/webgl/WebGLUtils.js +3 -2
  405. package/src/renderers/webgl-fallback/WebGLBackend.js +199 -167
  406. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +181 -25
  407. package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
  408. package/src/renderers/webgl-fallback/utils/WebGLState.js +7 -6
  409. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +169 -19
  410. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
  411. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
  412. package/src/renderers/webgpu/WebGPUBackend.js +153 -123
  413. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
  414. package/src/renderers/webgpu/WebGPURenderer.js +3 -2
  415. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +142 -50
  416. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
  417. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
  418. package/src/renderers/webgpu/utils/WebGPUConstants.js +7 -2
  419. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +53 -34
  420. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
  421. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +260 -99
  422. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
  423. package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
  424. package/src/renderers/webxr/WebXRManager.js +42 -26
  425. package/src/textures/ExternalTexture.js +15 -4
  426. package/src/textures/Source.js +3 -2
  427. package/src/textures/Texture.js +3 -2
  428. package/src/textures/VideoTexture.js +2 -3
  429. package/src/utils.js +67 -3
  430. package/examples/jsm/loaders/RGBMLoader.js +0 -1148
@@ -137,6 +137,8 @@ class SSRPass extends Pass {
137
137
 
138
138
  this._selects = selects;
139
139
 
140
+ this._resolutionScale = 1;
141
+
140
142
  /**
141
143
  * Whether the pass is selective or not.
142
144
  *
@@ -457,6 +459,29 @@ class SSRPass extends Pass {
457
459
 
458
460
  }
459
461
 
462
+
463
+ /**
464
+ * The resolution scale. Valid values are in the range
465
+ * `[0,1]`. `1` means best quality but also results in
466
+ * more computational overhead. Setting to `0.5` means
467
+ * the effect is computed in half-resolution.
468
+ *
469
+ * @type {number}
470
+ * @default 1
471
+ */
472
+ get resolutionScale() {
473
+
474
+ return this._resolutionScale;
475
+
476
+ }
477
+
478
+ set resolutionScale( value ) {
479
+
480
+ this._resolutionScale = value;
481
+ this.setSize( this.width, this.height ); // force a resize when resolution scaling changes
482
+
483
+ }
484
+
460
485
  /**
461
486
  * Frees the GPU-related resources allocated by this instance. Call this
462
487
  * method whenever the pass is no longer used in your app.
@@ -661,23 +686,27 @@ class SSRPass extends Pass {
661
686
  this.width = width;
662
687
  this.height = height;
663
688
 
664
- this.ssrMaterial.defines.MAX_STEP = Math.sqrt( width * width + height * height );
689
+ const effectiveWidth = Math.round( this.resolutionScale * width );
690
+ const effectiveHeight = Math.round( this.resolutionScale * height );
691
+
692
+ this.ssrMaterial.defines.MAX_STEP = Math.sqrt( effectiveWidth * effectiveWidth + effectiveHeight * effectiveHeight );
665
693
  this.ssrMaterial.needsUpdate = true;
694
+
666
695
  this.beautyRenderTarget.setSize( width, height );
667
- this.prevRenderTarget.setSize( width, height );
668
- this.ssrRenderTarget.setSize( width, height );
669
696
  this.normalRenderTarget.setSize( width, height );
670
697
  this.metalnessRenderTarget.setSize( width, height );
671
- this.blurRenderTarget.setSize( width, height );
672
- this.blurRenderTarget2.setSize( width, height );
698
+ this.ssrRenderTarget.setSize( effectiveWidth, effectiveHeight );
699
+ this.prevRenderTarget.setSize( effectiveWidth, effectiveHeight );
700
+ this.blurRenderTarget.setSize( effectiveWidth, effectiveHeight );
701
+ this.blurRenderTarget2.setSize( effectiveWidth, effectiveHeight );
673
702
  // this.blurRenderTarget3.setSize(width, height);
674
703
 
675
- this.ssrMaterial.uniforms[ 'resolution' ].value.set( width, height );
704
+ this.ssrMaterial.uniforms[ 'resolution' ].value.set( effectiveWidth, effectiveHeight );
676
705
  this.ssrMaterial.uniforms[ 'cameraProjectionMatrix' ].value.copy( this.camera.projectionMatrix );
677
706
  this.ssrMaterial.uniforms[ 'cameraInverseProjectionMatrix' ].value.copy( this.camera.projectionMatrixInverse );
678
707
 
679
- this.blurMaterial.uniforms[ 'resolution' ].value.set( width, height );
680
- this.blurMaterial2.uniforms[ 'resolution' ].value.set( width, height );
708
+ this.blurMaterial.uniforms[ 'resolution' ].value.set( effectiveWidth, effectiveHeight );
709
+ this.blurMaterial2.uniforms[ 'resolution' ].value.set( effectiveWidth, effectiveHeight );
681
710
 
682
711
  }
683
712
 
@@ -22,7 +22,7 @@ import { LuminosityHighPassShader } from '../shaders/LuminosityHighPassShader.js
22
22
  * When using this pass, tone mapping must be enabled in the renderer settings.
23
23
  *
24
24
  * Reference:
25
- * - [Bloom in Unreal Engine]{@link https://docs.unrealengine.com/latest/INT/Engine/Rendering/PostProcessEffects/Bloom/}
25
+ * - [Bloom in Unreal Engine](https://docs.unrealengine.com/latest/INT/Engine/Rendering/PostProcessEffects/Bloom/)
26
26
  *
27
27
  * ```js
28
28
  * const resolution = new THREE.Vector2( window.innerWidth, window.innerHeight );
@@ -145,7 +145,9 @@ class UnrealBloomPass extends Pass {
145
145
  // gaussian blur materials
146
146
 
147
147
  this.separableBlurMaterials = [];
148
- const kernelSizeArray = [ 3, 5, 7, 9, 11 ];
148
+ // These sizes have been changed to account for the altered coefficients-calculation to avoid blockiness,
149
+ // while retaining the same blur-strength. For details see https://github.com/mrdoob/three.js/pull/31528
150
+ const kernelSizeArray = [ 6, 10, 14, 18, 22 ];
149
151
  resx = Math.round( this.resolution.x / 2 );
150
152
  resy = Math.round( this.resolution.y / 2 );
151
153
 
@@ -376,10 +378,11 @@ class UnrealBloomPass extends Pass {
376
378
  _getSeparableBlurMaterial( kernelRadius ) {
377
379
 
378
380
  const coefficients = [];
381
+ const sigma = kernelRadius / 3;
379
382
 
380
383
  for ( let i = 0; i < kernelRadius; i ++ ) {
381
384
 
382
- coefficients.push( 0.39894 * Math.exp( - 0.5 * i * i / ( kernelRadius * kernelRadius ) ) / kernelRadius );
385
+ coefficients.push( 0.39894 * Math.exp( - 0.5 * i * i / ( sigma * sigma ) ) / sigma );
383
386
 
384
387
  }
385
388
 
@@ -420,10 +423,9 @@ class UnrealBloomPass extends Pass {
420
423
  vec2 uvOffset = direction * invSize * x;
421
424
  vec3 sample1 = texture2D( colorTexture, vUv + uvOffset ).rgb;
422
425
  vec3 sample2 = texture2D( colorTexture, vUv - uvOffset ).rgb;
423
- diffuseSum += (sample1 + sample2) * w;
424
- weightSum += 2.0 * w;
426
+ diffuseSum += ( sample1 + sample2 ) * w;
425
427
  }
426
- gl_FragColor = vec4(diffuseSum/weightSum, 1.0);
428
+ gl_FragColor = vec4( diffuseSum, 1.0 );
427
429
  }`
428
430
  } );
429
431
 
@@ -16,7 +16,7 @@ class CSS2DObject extends Object3D {
16
16
  /**
17
17
  * Constructs a new CSS2D object.
18
18
  *
19
- * @param {DOMElement} [element] - The DOM element.
19
+ * @param {HTMLElement} [element] - The DOM element.
20
20
  */
21
21
  constructor( element = document.createElement( 'div' ) ) {
22
22
 
@@ -34,7 +34,7 @@ class CSS2DObject extends Object3D {
34
34
  /**
35
35
  * The DOM element which defines the appearance of this 3D object.
36
36
  *
37
- * @type {DOMElement}
37
+ * @type {HTMLElement}
38
38
  * @readonly
39
39
  * @default true
40
40
  */
@@ -59,6 +59,7 @@ class CSS2DObject extends Object3D {
59
59
  this.traverse( function ( object ) {
60
60
 
61
61
  if (
62
+ object.element &&
62
63
  object.element instanceof object.element.ownerDocument.defaultView.Element &&
63
64
  object.element.parentNode !== null
64
65
  ) {
@@ -132,10 +133,20 @@ class CSS2DRenderer {
132
133
  /**
133
134
  * The DOM where the renderer appends its child-elements.
134
135
  *
135
- * @type {DOMElement}
136
+ * @type {HTMLElement}
136
137
  */
137
138
  this.domElement = domElement;
138
139
 
140
+ /**
141
+ * Controls whether the renderer assigns `z-index` values to CSS2DObject DOM elements.
142
+ * If set to `true`, z-index values are assigned first based on the `renderOrder`
143
+ * and secondly - the distance to the camera. If set to `false`, no z-index values are assigned.
144
+ *
145
+ * @type {boolean}
146
+ * @default true
147
+ */
148
+ this.sortObjects = true;
149
+
139
150
  /**
140
151
  * Returns an object containing the width and height of the renderer.
141
152
  *
@@ -165,7 +176,7 @@ class CSS2DRenderer {
165
176
  _viewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, _viewMatrix );
166
177
 
167
178
  renderObject( scene, scene, camera );
168
- zOrder( scene );
179
+ if ( this.sortObjects ) zOrder( scene );
169
180
 
170
181
  };
171
182
 
@@ -310,7 +321,7 @@ class CSS2DRenderer {
310
321
  * Constructor parameters of `CSS2DRenderer`.
311
322
  *
312
323
  * @typedef {Object} CSS2DRenderer~Parameters
313
- * @property {DOMElement} [element] - A DOM element where the renderer appends its child-elements.
324
+ * @property {HTMLElement} [element] - A DOM element where the renderer appends its child-elements.
314
325
  * If not passed in here, a new div element will be created.
315
326
  **/
316
327
 
@@ -22,7 +22,7 @@ class CSS3DObject extends Object3D {
22
22
  /**
23
23
  * Constructs a new CSS3D object.
24
24
  *
25
- * @param {DOMElement} [element] - The DOM element.
25
+ * @param {HTMLElement} [element] - The DOM element.
26
26
  */
27
27
  constructor( element = document.createElement( 'div' ) ) {
28
28
 
@@ -40,7 +40,7 @@ class CSS3DObject extends Object3D {
40
40
  /**
41
41
  * The DOM element which defines the appearance of this 3D object.
42
42
  *
43
- * @type {DOMElement}
43
+ * @type {HTMLElement}
44
44
  * @readonly
45
45
  * @default true
46
46
  */
@@ -56,6 +56,7 @@ class CSS3DObject extends Object3D {
56
56
  this.traverse( function ( object ) {
57
57
 
58
58
  if (
59
+ object.element &&
59
60
  object.element instanceof object.element.ownerDocument.defaultView.Element &&
60
61
  object.element.parentNode !== null
61
62
  ) {
@@ -94,7 +95,7 @@ class CSS3DSprite extends CSS3DObject {
94
95
  /**
95
96
  * Constructs a new CSS3D sprite object.
96
97
  *
97
- * @param {DOMElement} [element] - The DOM element.
98
+ * @param {HTMLElement} [element] - The DOM element.
98
99
  */
99
100
  constructor( element ) {
100
101
 
@@ -138,7 +139,7 @@ const _matrix2 = new Matrix4();
138
139
 
139
140
  /**
140
141
  * This renderer can be used to apply hierarchical 3D transformations to DOM elements
141
- * via the CSS3 [transform]{@link https://www.w3schools.com/cssref/css3_pr_transform.asp} property.
142
+ * via the CSS3 [transform](https://www.w3schools.com/cssref/css3_pr_transform.asp) property.
142
143
  * `CSS3DRenderer` is particularly interesting if you want to apply 3D effects to a website without
143
144
  * canvas based rendering. It can also be used in order to combine DOM elements with WebGLcontent.
144
145
  *
@@ -179,7 +180,7 @@ class CSS3DRenderer {
179
180
  /**
180
181
  * The DOM where the renderer appends its child-elements.
181
182
  *
182
- * @type {DOMElement}
183
+ * @type {HTMLElement}
183
184
  */
184
185
  this.domElement = domElement;
185
186
 
@@ -446,7 +447,7 @@ class CSS3DRenderer {
446
447
  * Constructor parameters of `CSS3DRenderer`.
447
448
  *
448
449
  * @typedef {Object} CSS3DRenderer~Parameters
449
- * @property {DOMElement} [element] - A DOM element where the renderer appends its child-elements.
450
+ * @property {HTMLElement} [element] - A DOM element where the renderer appends its child-elements.
450
451
  * If not passed in here, a new div element will be created.
451
452
  **/
452
453
 
@@ -120,7 +120,7 @@ class SVGRenderer {
120
120
  /**
121
121
  * The DOM where the renderer appends its child-elements.
122
122
  *
123
- * @type {DOMElement}
123
+ * @type {SVGSVGElement}
124
124
  */
125
125
  this.domElement = _svg;
126
126
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  /**
7
7
  * ACES Filmic Tone Mapping Shader by Stephen Hill.
8
- * Reference: [ltc_blit.fs]{@link https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs}
8
+ * Reference: [ltc_blit.fs](https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs)
9
9
  *
10
10
  * This implementation of ACES is modified to accommodate a brighter viewing environment.
11
11
  * The scale factor of 1/0.6 is subjective. See discussion in #19621.
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  /**
7
- * Inspired by [Three.js FBO motion trails]{@link https://codepen.io/brunoimbrizi/pen/MoRJaN?page=1&}.
7
+ * Inspired by [Three.js FBO motion trails](https://codepen.io/brunoimbrizi/pen/MoRJaN?page=1&).
8
8
  *
9
9
  * @constant
10
10
  * @type {ShaderMaterial~Shader}
@@ -6,7 +6,7 @@
6
6
 
7
7
  /**
8
8
  * Bleach bypass shader [http://en.wikipedia.org/wiki/Bleach_bypass] based on
9
- * [Nvidia Shader library]{@link http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.html#post_bleach_bypass}.
9
+ * [Nvidia Shader library](http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.html#post_bleach_bypass).
10
10
  *
11
11
  * @constant
12
12
  * @type {ShaderMaterial~Shader}
@@ -5,7 +5,7 @@
5
5
 
6
6
  /**
7
7
  * Depth-of-field shader with bokeh ported from
8
- * [GLSL shader by Martins Upitis]{@link http://artmartinsh.blogspot.com/2010/02/glsl-lens-blur-filter-with-bokeh.html}.
8
+ * [GLSL shader by Martins Upitis](http://artmartinsh.blogspot.com/2010/02/glsl-lens-blur-filter-with-bokeh.html).
9
9
  *
10
10
  * @constant
11
11
  * @type {ShaderMaterial~Shader}
@@ -9,7 +9,7 @@ import {
9
9
 
10
10
  /**
11
11
  * Depth-of-field shader with bokeh ported from
12
- * [GLSL shader by Martins Upitis]{@link http://blenderartists.org/forum/showthread.php?237488-GLSL-depth-of-field-with-bokeh-v2-4-(update)}.
12
+ * [GLSL shader by Martins Upitis](http://blenderartists.org/forum/showthread.php?237488-GLSL-depth-of-field-with-bokeh-v2-4-(update)).
13
13
  *
14
14
  * Requires #define RINGS and SAMPLES integers
15
15
  *
@@ -8,7 +8,7 @@ import {
8
8
  */
9
9
 
10
10
  /**
11
- * Dot screen shader based on [glfx.js sepia shader]{@link https://github.com/evanw/glfx.js}.
11
+ * Dot screen shader based on [glfx.js sepia shader](https://github.com/evanw/glfx.js).
12
12
  *
13
13
  * @constant
14
14
  * @type {ShaderMaterial~Shader}
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  /**
7
- * Focus shader based on [PaintEffect postprocess from ro.me]{@link http://code.google.com/p/3-dreams-of-black/source/browse/deploy/js/effects/PaintEffect.js}.
7
+ * Focus shader based on [PaintEffect postprocess from ro.me](http://code.google.com/p/3-dreams-of-black/source/browse/deploy/js/effects/PaintEffect.js).
8
8
  *
9
9
  * @constant
10
10
  * @type {ShaderMaterial~Shader}
@@ -15,8 +15,8 @@ import {
15
15
  * GTAO shader. Use by {@link GTAOPass}.
16
16
  *
17
17
  * References:
18
- * - [Practical Realtime Strategies for Accurate Indirect Occlusion]{@link https://iryoku.com/downloads/Practical-Realtime-Strategies-for-Accurate-Indirect-Occlusion.pdf}.
19
- * - [Horizon-Based Indirect Lighting (HBIL)]{@link https://github.com/Patapom/GodComplex/blob/master/Tests/TestHBIL/2018%20Mayaux%20-%20Horizon-Based%20Indirect%20Lighting%20(HBIL).pdf}
18
+ * - [Practical Realtime Strategies for Accurate Indirect Occlusion](https://iryoku.com/downloads/Practical-Realtime-Strategies-for-Accurate-Indirect-Occlusion.pdf).
19
+ * - [Horizon-Based Indirect Lighting (HBIL)](https://github.com/Patapom/GodComplex/blob/master/Tests/TestHBIL/2018%20Mayaux%20-%20Horizon-Based%20Indirect%20Lighting%20(HBIL).pdf)
20
20
  *
21
21
  * @constant
22
22
  * @type {ShaderMaterial~Shader}
@@ -22,7 +22,7 @@ import {
22
22
  * 6*6*6 = 216 samples.
23
23
  *
24
24
  * References:
25
- * - [Sousa2008, Crysis Next Gen Effects, GDC2008]{@link http://www.crytek.com/sites/default/files/GDC08_SousaT_CrysisEffects.ppt}.
25
+ * - [Sousa2008, Crysis Next Gen Effects, GDC2008](http://www.crytek.com/sites/default/files/GDC08_SousaT_CrysisEffects.ppt).
26
26
  *
27
27
  * @constant
28
28
  * @type {ShaderMaterial~Shader}
@@ -7,7 +7,7 @@
7
7
  * Kaleidoscope Shader.
8
8
  * Radial reflection around center point
9
9
  * Ported from: {@link http://pixelshaders.com/editor/}
10
- * by [Toby Schachman]{@link http://tobyschachman.com/}
10
+ * by [Toby Schachman](http://tobyschachman.com/)
11
11
  *
12
12
  * sides: number of reflections
13
13
  * angle: initial angle in radians
@@ -13,8 +13,8 @@ import {
13
13
  * Poisson Denoise Shader.
14
14
  *
15
15
  * References:
16
- * - [Self-Supervised Poisson-Gaussian Denoising]{@link https://openaccess.thecvf.com/content/WACV2021/papers/Khademi_Self-Supervised_Poisson-Gaussian_Denoising_WACV_2021_paper.pdf}.
17
- * - [Poisson2Sparse: Self-Supervised Poisson Denoising From a Single Image]{@link https://arxiv.org/pdf/2206.01856.pdf}
16
+ * - [Self-Supervised Poisson-Gaussian Denoising](https://openaccess.thecvf.com/content/WACV2021/papers/Khademi_Self-Supervised_Poisson-Gaussian_Denoising_WACV_2021_paper.pdf).
17
+ * - [Poisson2Sparse: Self-Supervised Poisson Denoising From a Single Image](https://arxiv.org/pdf/2206.01856.pdf)
18
18
  *
19
19
  * @constant
20
20
  * @type {ShaderMaterial~Shader}
@@ -8,7 +8,7 @@ import {
8
8
  * A collection of shaders used for SSR.
9
9
  *
10
10
  * References:
11
- * - [3D Game Shaders For Beginners, Screen Space Reflection (SSR)]{@link https://lettier.github.io/3d-game-shaders-for-beginners/screen-space-reflection.html}.
11
+ * - [3D Game Shaders For Beginners, Screen Space Reflection (SSR)](https://lettier.github.io/3d-game-shaders-for-beginners/screen-space-reflection.html).
12
12
  *
13
13
  * @module SSRShader
14
14
  * @three_import import * as SSRShader from 'three/addons/shaders/SSRShader.js';
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  /**
7
- * Sepia tone shader based on [glfx.js sepia shader]{@link https://github.com/evanw/glfx.js}.
7
+ * Sepia tone shader based on [glfx.js sepia shader](https://github.com/evanw/glfx.js).
8
8
  *
9
9
  * @constant
10
10
  * @type {ShaderMaterial~Shader}
@@ -22,7 +22,7 @@ const meshphong_frag_body = ShaderChunk[ 'meshphong_frag' ].slice( ShaderChunk[
22
22
  /**
23
23
  * Subsurface Scattering shader.
24
24
  *
25
- * Based on GDC 2011 – [Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look]{@link https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/}
25
+ * Based on GDC 2011 – [Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look](https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/)
26
26
  *
27
27
  * @constant
28
28
  * @type {ShaderMaterial~Shader}
@@ -8,7 +8,7 @@ import {
8
8
  */
9
9
 
10
10
  /**
11
- * Triangle blur shader based on [glfx.js triangle blur shader]{@link https://github.com/evanw/glfx.js}.
11
+ * Triangle blur shader based on [glfx.js triangle blur shader](https://github.com/evanw/glfx.js).
12
12
  *
13
13
  * A basic blur filter, which convolves the image with a
14
14
  * pyramid filter. The pyramid filter is separable and is applied as two
@@ -45,7 +45,7 @@ const UnpackDepthRGBAShader = {
45
45
 
46
46
  float depth = unpackRGBAToDepth( texture2D( tDiffuse, vUv ) );
47
47
 
48
- #ifdef USE_REVERSEDEPTHBUF
48
+ #ifdef USE_REVERSED_DEPTH_BUFFER
49
49
 
50
50
  gl_FragColor = vec4( vec3( depth ), opacity );
51
51
 
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  /**
7
- * Based on [PaintEffect postprocess from ro.me]{@link http://code.google.com/p/3-dreams-of-black/source/browse/deploy/js/effects/PaintEffect.js}.
7
+ * Based on [PaintEffect postprocess from ro.me](http://code.google.com/p/3-dreams-of-black/source/browse/deploy/js/effects/PaintEffect.js).
8
8
  *
9
9
  * @constant
10
10
  * @type {ShaderMaterial~Shader}
@@ -11,22 +11,21 @@ const arithmeticOperators = [
11
11
  ];
12
12
 
13
13
  const precedenceOperators = [
14
- '/', '*', '%',
15
- '-', '+',
16
- '<<', '>>',
17
- '<', '>', '<=', '>=',
18
- '==', '!=',
19
- '&',
20
- '^',
21
- '|',
22
- '&&',
23
- '^^',
24
- '||',
25
- '?',
26
- '=',
27
- '+=', '-=', '*=', '/=', '%=', '^=', '&=', '|=', '<<=', '>>=',
28
- ','
29
- ].reverse();
14
+ [ ',' ],
15
+ [ '=', '+=', '-=', '*=', '/=', '%=', '^=', '&=', '|=', '<<=', '>>=' ],
16
+ [ '?' ],
17
+ [ '||' ],
18
+ [ '^^' ],
19
+ [ '&&' ],
20
+ [ '|' ],
21
+ [ '^' ],
22
+ [ '&' ],
23
+ [ '==', '!=' ],
24
+ [ '<', '>', '<=', '>=' ],
25
+ [ '<<', '>>' ],
26
+ [ '+', '-' ],
27
+ [ '*', '/', '%' ]
28
+ ];
30
29
 
31
30
  const associativityRightToLeft = [
32
31
  '=',
@@ -334,7 +333,7 @@ class GLSLDecoder {
334
333
 
335
334
  let groupIndex = 0;
336
335
 
337
- for ( const operator of precedenceOperators ) {
336
+ for ( const operators of precedenceOperators ) {
338
337
 
339
338
  const parseToken = ( i, inverse = false ) => {
340
339
 
@@ -351,7 +350,9 @@ class GLSLDecoder {
351
350
 
352
351
  }
353
352
 
354
- if ( groupIndex === 0 && token.str === operator ) {
353
+ if ( groupIndex === 0 && operators.includes( token.str ) ) {
354
+
355
+ const operator = token.str;
355
356
 
356
357
  if ( operator === '?' ) {
357
358
 
@@ -396,7 +397,9 @@ class GLSLDecoder {
396
397
 
397
398
  };
398
399
 
399
- if ( associativityRightToLeft.includes( operator ) ) {
400
+ const isRightAssociative = operators.some( op => associativityRightToLeft.includes( op ) );
401
+
402
+ if ( isRightAssociative ) {
400
403
 
401
404
  for ( let i = 0; i < tokens.length; i ++ ) {
402
405
 
@@ -340,7 +340,7 @@ class TSLEncoder {
340
340
 
341
341
  if ( node.hasAssignment ) {
342
342
 
343
- if ( node.after === false ) {
343
+ if ( node.after === false && ( node.type === '++' || node.type === '--' ) ) {
344
344
 
345
345
  type += 'Before';
346
346
 
@@ -665,15 +665,7 @@ ${ this.tab }} )`;
665
665
 
666
666
  }
667
667
 
668
- if ( node.linker.assignments.length > 0 ) {
669
-
670
- varStr += ' = ' + valueStr + '.toVar()';
671
-
672
- } else {
673
-
674
- varStr += ' = ' + valueStr;
675
-
676
- }
668
+ varStr += ' = ' + valueStr;
677
669
 
678
670
  } else {
679
671
 
@@ -689,6 +681,12 @@ ${ this.tab }} )`;
689
681
 
690
682
  }
691
683
 
684
+ if ( node.needsToVar ) {
685
+
686
+ varStr = varStr + '.toVar()';
687
+
688
+ }
689
+
692
690
  return varStr;
693
691
 
694
692
  }
@@ -758,6 +756,7 @@ ${ this.tab }} )`;
758
756
  const mutableParam = new VariableDeclaration( param.type, param.name, new Accessor( param.name + '_immutable' ), null, true );
759
757
  mutableParam.parent = param.parent; // link to the original node
760
758
  mutableParam.linker.assignments.push( mutableParam );
759
+ mutableParam.needsToVar = true; // force var declaration
761
760
 
762
761
  node.body.unshift( mutableParam );
763
762
 
@@ -80,6 +80,10 @@ const wgslLib = {
80
80
  'textureLod': 'textureSampleLevel',
81
81
  'texelFetch': 'textureLoad',
82
82
  'textureGrad': 'textureSampleGrad',
83
+ 'floatBitsToInt': 'bitcast<i32>',
84
+ 'floatBitsToUint': 'bitcast<u32>',
85
+ 'intBitsToFloat': 'bitcast<f32>',
86
+ 'uintBitsToFloat': 'bitcast<f32>',
83
87
  };
84
88
 
85
89
  class WGSLEncoder {
@@ -170,6 +174,26 @@ class WGSLEncoder {
170
174
 
171
175
  code = `${ modFnName }( ${ snippets.join( ', ' ) } )`;
172
176
 
177
+ } else if ( fnName.startsWith( 'bitcast' ) ) {
178
+
179
+ const params = node.params.map( p => this.emitExpression( p ) ).join( ',' );
180
+ const types = node.params.map( p => p.getType() );
181
+
182
+ if ( /.*vec[234]/.test( types[ 0 ] ) ) {
183
+
184
+ const conversionType = fnName.substring( 8, fnName.length - 1 );
185
+ const vectorType = types[ 0 ].substring( - 1 );
186
+
187
+ code = `bitcast<${ vectorType }<${ conversionType }>>`;
188
+
189
+ } else {
190
+
191
+ code = fnName;
192
+
193
+ }
194
+
195
+ code += `( ${ params } )`;
196
+
173
197
  } else if ( fnName.startsWith( 'texture' ) ) {
174
198
 
175
199
  // Handle texture functions separately due to sampler handling