@plastic-software/three 0.181.3 → 0.183.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 (437) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -4
  3. package/build/three.cjs +11330 -10017
  4. package/build/three.core.js +10011 -9493
  5. package/build/three.core.min.js +2 -2
  6. package/build/three.module.js +1414 -631
  7. package/build/three.module.min.js +2 -2
  8. package/build/three.tsl.js +21 -13
  9. package/build/three.tsl.min.js +2 -2
  10. package/build/three.webgpu.js +8007 -5427
  11. package/build/three.webgpu.min.js +2 -2
  12. package/build/three.webgpu.nodes.js +8005 -5426
  13. package/build/three.webgpu.nodes.min.js +2 -2
  14. package/examples/jsm/Addons.js +0 -3
  15. package/examples/jsm/animation/CCDIKSolver.js +2 -2
  16. package/examples/jsm/controls/ArcballControls.js +3 -3
  17. package/examples/jsm/controls/MapControls.js +55 -1
  18. package/examples/jsm/controls/OrbitControls.js +109 -6
  19. package/examples/jsm/controls/TrackballControls.js +6 -6
  20. package/examples/jsm/csm/CSM.js +2 -1
  21. package/examples/jsm/effects/AnaglyphEffect.js +102 -7
  22. package/examples/jsm/environments/ColorEnvironment.js +59 -0
  23. package/examples/jsm/environments/RoomEnvironment.js +3 -0
  24. package/examples/jsm/exporters/EXRExporter.js +1 -1
  25. package/examples/jsm/exporters/GLTFExporter.js +131 -4
  26. package/examples/jsm/exporters/USDZExporter.js +22 -3
  27. package/examples/jsm/geometries/DecalGeometry.js +1 -1
  28. package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
  29. package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
  30. package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
  31. package/examples/jsm/helpers/ViewHelper.js +67 -8
  32. package/examples/jsm/inspector/Inspector.js +74 -14
  33. package/examples/jsm/inspector/RendererInspector.js +12 -2
  34. package/examples/jsm/inspector/tabs/Console.js +41 -7
  35. package/examples/jsm/inspector/tabs/Parameters.js +18 -2
  36. package/examples/jsm/inspector/tabs/Performance.js +2 -2
  37. package/examples/jsm/inspector/tabs/Viewer.js +4 -4
  38. package/examples/jsm/inspector/ui/Profiler.js +1836 -31
  39. package/examples/jsm/inspector/ui/Style.js +973 -14
  40. package/examples/jsm/inspector/ui/Tab.js +188 -1
  41. package/examples/jsm/inspector/ui/Values.js +17 -1
  42. package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
  43. package/examples/jsm/lines/LineMaterial.js +6 -0
  44. package/examples/jsm/loaders/3DMLoader.js +5 -4
  45. package/examples/jsm/loaders/3MFLoader.js +2 -2
  46. package/examples/jsm/loaders/AMFLoader.js +2 -2
  47. package/examples/jsm/loaders/ColladaLoader.js +24 -4026
  48. package/examples/jsm/loaders/DRACOLoader.js +5 -5
  49. package/examples/jsm/loaders/EXRLoader.js +5 -5
  50. package/examples/jsm/loaders/FBXLoader.js +2 -4
  51. package/examples/jsm/loaders/GCodeLoader.js +34 -8
  52. package/examples/jsm/loaders/GLTFLoader.js +122 -171
  53. package/examples/jsm/loaders/HDRLoader.js +0 -1
  54. package/examples/jsm/loaders/KMZLoader.js +5 -5
  55. package/examples/jsm/loaders/KTX2Loader.js +19 -3
  56. package/examples/jsm/loaders/LDrawLoader.js +2 -3
  57. package/examples/jsm/loaders/LWOLoader.js +7 -39
  58. package/examples/jsm/loaders/NRRDLoader.js +2 -2
  59. package/examples/jsm/loaders/PCDLoader.js +4 -2
  60. package/examples/jsm/loaders/SVGLoader.js +1 -1
  61. package/examples/jsm/loaders/TDSLoader.js +0 -2
  62. package/examples/jsm/loaders/TGALoader.js +0 -2
  63. package/examples/jsm/loaders/USDLoader.js +100 -40
  64. package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
  65. package/examples/jsm/loaders/VOXLoader.js +660 -117
  66. package/examples/jsm/loaders/VRMLLoader.js +79 -2
  67. package/examples/jsm/loaders/VTKLoader.js +37 -24
  68. package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
  69. package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
  70. package/examples/jsm/loaders/usd/USDAParser.js +447 -366
  71. package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
  72. package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
  73. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
  74. package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
  75. package/examples/jsm/math/Octree.js +131 -1
  76. package/examples/jsm/misc/Volume.js +0 -1
  77. package/examples/jsm/misc/VolumeSlice.js +0 -1
  78. package/examples/jsm/objects/LensflareMesh.js +1 -1
  79. package/examples/jsm/objects/Sky.js +76 -4
  80. package/examples/jsm/objects/SkyMesh.js +127 -10
  81. package/examples/jsm/objects/Water.js +4 -3
  82. package/examples/jsm/objects/Water2.js +5 -3
  83. package/examples/jsm/objects/WaterMesh.js +5 -7
  84. package/examples/jsm/physics/AmmoPhysics.js +12 -7
  85. package/examples/jsm/physics/JoltPhysics.js +10 -6
  86. package/examples/jsm/physics/RapierPhysics.js +9 -5
  87. package/examples/jsm/postprocessing/EffectComposer.js +7 -5
  88. package/examples/jsm/postprocessing/OutputPass.js +9 -0
  89. package/examples/jsm/postprocessing/RenderPass.js +10 -0
  90. package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
  91. package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
  92. package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
  93. package/examples/jsm/renderers/Projector.js +268 -30
  94. package/examples/jsm/renderers/SVGRenderer.js +193 -60
  95. package/examples/jsm/shaders/GTAOShader.js +19 -6
  96. package/examples/jsm/shaders/HalftoneShader.js +12 -1
  97. package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
  98. package/examples/jsm/shaders/SAOShader.js +17 -4
  99. package/examples/jsm/shaders/SSAOShader.js +11 -1
  100. package/examples/jsm/shaders/SSRShader.js +6 -5
  101. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
  102. package/examples/jsm/shaders/VignetteShader.js +1 -1
  103. package/examples/jsm/transpiler/AST.js +44 -0
  104. package/examples/jsm/transpiler/GLSLDecoder.js +61 -4
  105. package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
  106. package/examples/jsm/transpiler/TSLEncoder.js +46 -3
  107. package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
  108. package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
  109. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  110. package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
  111. package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
  112. package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
  113. package/examples/jsm/tsl/display/BloomNode.js +16 -6
  114. package/examples/jsm/tsl/display/CRT.js +150 -0
  115. package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
  116. package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
  117. package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
  118. package/examples/jsm/tsl/display/FXAANode.js +2 -2
  119. package/examples/jsm/tsl/display/GTAONode.js +5 -4
  120. package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
  121. package/examples/jsm/tsl/display/GodraysNode.js +624 -0
  122. package/examples/jsm/tsl/display/LensflareNode.js +1 -1
  123. package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
  124. package/examples/jsm/tsl/display/OutlineNode.js +3 -3
  125. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
  126. package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
  127. package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
  128. package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
  129. package/examples/jsm/tsl/display/SMAANode.js +2 -2
  130. package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
  131. package/examples/jsm/tsl/display/SSGINode.js +8 -20
  132. package/examples/jsm/tsl/display/SSRNode.js +8 -8
  133. package/examples/jsm/tsl/display/SSSNode.js +6 -4
  134. package/examples/jsm/tsl/display/Shape.js +29 -0
  135. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
  136. package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
  137. package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
  138. package/examples/jsm/tsl/display/TRAANode.js +273 -125
  139. package/examples/jsm/tsl/display/TransitionNode.js +1 -1
  140. package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
  141. package/examples/jsm/tsl/display/radialBlur.js +68 -0
  142. package/examples/jsm/tsl/math/Bayer.js +40 -1
  143. package/examples/jsm/utils/LDrawUtils.js +1 -1
  144. package/examples/jsm/utils/ShadowMapViewer.js +24 -10
  145. package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
  146. package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
  147. package/package.json +20 -26
  148. package/src/Three.Core.js +2 -1
  149. package/src/Three.TSL.js +19 -11
  150. package/src/Three.WebGPU.Nodes.js +2 -0
  151. package/src/Three.WebGPU.js +3 -0
  152. package/src/Three.js +1 -0
  153. package/src/animation/AnimationAction.js +1 -1
  154. package/src/animation/AnimationClip.js +1 -1
  155. package/src/animation/AnimationMixer.js +6 -0
  156. package/src/animation/AnimationUtils.js +1 -12
  157. package/src/animation/KeyframeTrack.js +47 -8
  158. package/src/animation/PropertyMixer.js +4 -4
  159. package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
  160. package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
  161. package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
  162. package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
  163. package/src/animation/tracks/StringKeyframeTrack.js +1 -1
  164. package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
  165. package/src/audio/Audio.js +1 -1
  166. package/src/audio/AudioListener.js +5 -3
  167. package/src/cameras/Camera.js +32 -2
  168. package/src/cameras/CubeCamera.js +20 -0
  169. package/src/constants.js +90 -5
  170. package/src/core/BufferGeometry.js +14 -2
  171. package/src/core/Clock.js +7 -0
  172. package/src/core/Object3D.js +56 -4
  173. package/src/core/Raycaster.js +2 -2
  174. package/src/core/RenderTarget.js +3 -4
  175. package/src/extras/PMREMGenerator.js +7 -18
  176. package/src/extras/TextureUtils.js +5 -1
  177. package/src/geometries/ExtrudeGeometry.js +2 -2
  178. package/src/geometries/PolyhedronGeometry.js +1 -1
  179. package/src/geometries/TorusGeometry.js +8 -3
  180. package/src/helpers/CameraHelper.js +3 -0
  181. package/src/helpers/DirectionalLightHelper.js +4 -1
  182. package/src/helpers/HemisphereLightHelper.js +3 -0
  183. package/src/helpers/PointLightHelper.js +1 -25
  184. package/src/helpers/SpotLightHelper.js +3 -0
  185. package/src/lights/DirectionalLight.js +13 -0
  186. package/src/lights/HemisphereLight.js +10 -0
  187. package/src/lights/Light.js +1 -11
  188. package/src/lights/LightProbe.js +0 -15
  189. package/src/lights/LightShadow.js +15 -6
  190. package/src/lights/PointLight.js +15 -0
  191. package/src/lights/PointLightShadow.js +0 -86
  192. package/src/lights/SpotLight.js +22 -1
  193. package/src/lights/webgpu/IESSpotLight.js +2 -1
  194. package/src/loaders/Cache.js +28 -0
  195. package/src/loaders/FileLoader.js +1 -1
  196. package/src/loaders/ImageBitmapLoader.js +8 -3
  197. package/src/loaders/Loader.js +6 -0
  198. package/src/loaders/MaterialLoader.js +2 -1
  199. package/src/loaders/ObjectLoader.js +21 -2
  200. package/src/loaders/nodes/NodeLoader.js +2 -2
  201. package/src/materials/Material.js +2 -0
  202. package/src/materials/MeshLambertMaterial.js +9 -0
  203. package/src/materials/MeshPhongMaterial.js +9 -0
  204. package/src/materials/ShaderMaterial.js +20 -1
  205. package/src/materials/nodes/Line2NodeMaterial.js +7 -7
  206. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
  207. package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
  208. package/src/materials/nodes/NodeMaterial.js +72 -25
  209. package/src/materials/nodes/manager/NodeMaterialObserver.js +10 -4
  210. package/src/math/Line3.js +3 -5
  211. package/src/math/MathUtils.js +10 -10
  212. package/src/math/Matrix4.js +74 -65
  213. package/src/math/Quaternion.js +3 -29
  214. package/src/math/Sphere.js +1 -1
  215. package/src/math/Vector3.js +3 -5
  216. package/src/math/interpolants/BezierInterpolant.js +108 -0
  217. package/src/nodes/Nodes.js +87 -68
  218. package/src/nodes/TSL.js +6 -6
  219. package/src/nodes/accessors/Arrays.js +1 -1
  220. package/src/nodes/accessors/BatchNode.js +10 -10
  221. package/src/nodes/accessors/Bitangent.js +5 -5
  222. package/src/nodes/accessors/BufferAttributeNode.js +98 -12
  223. package/src/nodes/accessors/BufferNode.js +29 -2
  224. package/src/nodes/accessors/Camera.js +149 -28
  225. package/src/nodes/accessors/ClippingNode.js +4 -4
  226. package/src/nodes/accessors/CubeTextureNode.js +20 -1
  227. package/src/nodes/accessors/InstanceNode.js +148 -43
  228. package/src/nodes/accessors/MaterialNode.js +9 -1
  229. package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
  230. package/src/nodes/accessors/ModelNode.js +1 -1
  231. package/src/nodes/accessors/Normal.js +11 -11
  232. package/src/nodes/accessors/Position.js +34 -2
  233. package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
  234. package/src/nodes/accessors/ReferenceNode.js +4 -4
  235. package/src/nodes/accessors/RendererReferenceNode.js +1 -2
  236. package/src/nodes/accessors/SceneProperties.js +53 -0
  237. package/src/nodes/accessors/SkinningNode.js +27 -26
  238. package/src/nodes/accessors/StorageBufferNode.js +4 -21
  239. package/src/nodes/accessors/StorageTextureNode.js +37 -1
  240. package/src/nodes/accessors/Tangent.js +4 -14
  241. package/src/nodes/accessors/Texture3DNode.js +32 -35
  242. package/src/nodes/accessors/TextureNode.js +58 -22
  243. package/src/nodes/accessors/UniformArrayNode.js +4 -2
  244. package/src/nodes/accessors/UserDataNode.js +1 -2
  245. package/src/nodes/accessors/VertexColorNode.js +1 -2
  246. package/src/nodes/code/FunctionNode.js +1 -2
  247. package/src/nodes/core/ArrayNode.js +20 -1
  248. package/src/nodes/core/AssignNode.js +2 -2
  249. package/src/nodes/core/AttributeNode.js +2 -2
  250. package/src/nodes/core/ContextNode.js +103 -4
  251. package/src/nodes/core/MRTNode.js +48 -2
  252. package/src/nodes/core/Node.js +29 -3
  253. package/src/nodes/core/NodeBuilder.js +170 -53
  254. package/src/nodes/core/NodeError.js +28 -0
  255. package/src/nodes/core/NodeFrame.js +12 -4
  256. package/src/nodes/core/NodeUtils.js +10 -8
  257. package/src/nodes/core/OutputStructNode.js +12 -10
  258. package/src/nodes/core/ParameterNode.js +3 -3
  259. package/src/nodes/core/PropertyNode.js +19 -3
  260. package/src/nodes/core/StackNode.js +65 -16
  261. package/src/nodes/core/StackTrace.js +139 -0
  262. package/src/nodes/core/StructNode.js +16 -2
  263. package/src/nodes/core/StructTypeNode.js +11 -17
  264. package/src/nodes/core/SubBuildNode.js +1 -1
  265. package/src/nodes/core/UniformNode.js +21 -5
  266. package/src/nodes/core/VarNode.js +47 -22
  267. package/src/nodes/core/VaryingNode.js +1 -18
  268. package/src/nodes/display/BlendModes.js +0 -64
  269. package/src/nodes/display/ColorAdjustment.js +17 -0
  270. package/src/nodes/display/ColorSpaceNode.js +3 -3
  271. package/src/nodes/display/NormalMapNode.js +39 -4
  272. package/src/nodes/display/PassNode.js +98 -9
  273. package/src/nodes/display/RenderOutputNode.js +3 -3
  274. package/src/nodes/display/ScreenNode.js +3 -1
  275. package/src/nodes/display/ToneMappingNode.js +1 -1
  276. package/src/nodes/display/ToonOutlinePassNode.js +2 -2
  277. package/src/nodes/display/ViewportDepthNode.js +52 -4
  278. package/src/nodes/display/ViewportTextureNode.js +21 -4
  279. package/src/nodes/fog/Fog.js +18 -35
  280. package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
  281. package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
  282. package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
  283. package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
  284. package/src/nodes/functions/PhysicalLightingModel.js +126 -45
  285. package/src/nodes/geometry/RangeNode.js +4 -2
  286. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
  287. package/src/nodes/gpgpu/ComputeNode.js +5 -4
  288. package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
  289. package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
  290. package/src/nodes/lighting/AnalyticLightNode.js +53 -0
  291. package/src/nodes/lighting/EnvironmentNode.js +28 -3
  292. package/src/nodes/lighting/LightsNode.js +2 -2
  293. package/src/nodes/lighting/PointShadowNode.js +162 -149
  294. package/src/nodes/lighting/ShadowFilterNode.js +53 -65
  295. package/src/nodes/lighting/ShadowNode.js +97 -41
  296. package/src/nodes/math/BitcountNode.js +433 -0
  297. package/src/nodes/math/ConditionalNode.js +2 -2
  298. package/src/nodes/math/MathNode.js +3 -40
  299. package/src/nodes/math/OperatorNode.js +2 -1
  300. package/src/nodes/math/PackFloatNode.js +98 -0
  301. package/src/nodes/math/UnpackFloatNode.js +96 -0
  302. package/src/nodes/pmrem/PMREMNode.js +1 -1
  303. package/src/nodes/pmrem/PMREMUtils.js +9 -15
  304. package/src/nodes/tsl/TSLCore.js +17 -14
  305. package/src/nodes/utils/ArrayElementNode.js +13 -0
  306. package/src/nodes/utils/DebugNode.js +11 -11
  307. package/src/nodes/utils/EventNode.js +1 -2
  308. package/src/nodes/utils/JoinNode.js +2 -2
  309. package/src/nodes/utils/LoopNode.js +1 -1
  310. package/src/nodes/utils/MemberNode.js +1 -1
  311. package/src/nodes/utils/Packing.js +13 -1
  312. package/src/nodes/utils/PostProcessingUtils.js +33 -1
  313. package/src/nodes/utils/RTTNode.js +1 -1
  314. package/src/nodes/utils/ReflectorNode.js +3 -4
  315. package/src/nodes/utils/SampleNode.js +1 -1
  316. package/src/nodes/utils/SpriteSheetUV.js +35 -0
  317. package/src/nodes/utils/UVUtils.js +28 -0
  318. package/src/objects/BatchedMesh.js +27 -14
  319. package/src/objects/InstancedMesh.js +11 -0
  320. package/src/objects/Line.js +1 -1
  321. package/src/objects/Mesh.js +1 -1
  322. package/src/objects/Points.js +1 -1
  323. package/src/objects/Skeleton.js +9 -0
  324. package/src/renderers/WebGLRenderer.js +178 -92
  325. package/src/renderers/common/Backend.js +29 -0
  326. package/src/renderers/common/Background.js +24 -11
  327. package/src/renderers/common/BindGroup.js +1 -9
  328. package/src/renderers/common/Binding.js +11 -0
  329. package/src/renderers/common/Bindings.js +27 -12
  330. package/src/renderers/common/BlendMode.js +143 -0
  331. package/src/renderers/common/Buffer.js +40 -0
  332. package/src/renderers/common/BundleGroup.js +1 -1
  333. package/src/renderers/common/ChainMap.js +30 -6
  334. package/src/renderers/common/CubeRenderTarget.js +50 -6
  335. package/src/renderers/common/Geometries.js +29 -3
  336. package/src/renderers/common/Lighting.js +5 -21
  337. package/src/renderers/common/Pipelines.js +4 -4
  338. package/src/renderers/common/PostProcessing.js +8 -206
  339. package/src/renderers/common/RenderBundles.js +2 -1
  340. package/src/renderers/common/RenderContext.js +16 -0
  341. package/src/renderers/common/RenderContexts.js +33 -49
  342. package/src/renderers/common/RenderLists.js +2 -1
  343. package/src/renderers/common/RenderObject.js +15 -3
  344. package/src/renderers/common/RenderObjectPipeline.js +40 -0
  345. package/src/renderers/common/RenderObjects.js +18 -2
  346. package/src/renderers/common/RenderPipeline.js +203 -17
  347. package/src/renderers/common/Renderer.js +257 -72
  348. package/src/renderers/common/Sampler.js +4 -4
  349. package/src/renderers/common/StorageBuffer.js +13 -1
  350. package/src/renderers/common/Textures.js +17 -1
  351. package/src/renderers/common/TimestampQueryPool.js +5 -3
  352. package/src/renderers/common/Uniform.js +8 -0
  353. package/src/renderers/common/UniformsGroup.js +61 -0
  354. package/src/renderers/common/XRManager.js +3 -2
  355. package/src/renderers/common/extras/PMREMGenerator.js +2 -8
  356. package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
  357. package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
  358. package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
  359. package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
  360. package/src/renderers/shaders/DFGLUTData.js +19 -34
  361. package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
  362. package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
  363. package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
  364. package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
  365. package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
  366. package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
  367. package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
  368. package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
  369. package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
  370. package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
  371. package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -51
  372. package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
  373. package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
  374. package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
  375. package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
  376. package/src/renderers/shaders/ShaderChunk.js +3 -3
  377. package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
  378. package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
  379. package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
  380. package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
  381. package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
  382. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
  383. package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
  384. package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
  385. package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
  386. package/src/renderers/shaders/ShaderLib.js +7 -5
  387. package/src/renderers/shaders/UniformsLib.js +0 -3
  388. package/src/renderers/webgl/WebGLBackground.js +2 -2
  389. package/src/renderers/webgl/WebGLBindingStates.js +99 -27
  390. package/src/renderers/webgl/WebGLCapabilities.js +3 -4
  391. package/src/renderers/webgl/WebGLEnvironments.js +228 -0
  392. package/src/renderers/webgl/WebGLGeometries.js +10 -7
  393. package/src/renderers/webgl/WebGLLights.js +18 -1
  394. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  395. package/src/renderers/webgl/WebGLObjects.js +3 -1
  396. package/src/renderers/webgl/WebGLOutput.js +267 -0
  397. package/src/renderers/webgl/WebGLProgram.js +45 -109
  398. package/src/renderers/webgl/WebGLPrograms.js +45 -49
  399. package/src/renderers/webgl/WebGLRenderLists.js +15 -0
  400. package/src/renderers/webgl/WebGLShadowMap.js +188 -24
  401. package/src/renderers/webgl/WebGLState.js +32 -37
  402. package/src/renderers/webgl/WebGLTextures.js +89 -28
  403. package/src/renderers/webgl/WebGLUniforms.js +40 -3
  404. package/src/renderers/webgl/WebGLUtils.js +6 -2
  405. package/src/renderers/webgl-fallback/WebGLBackend.js +148 -18
  406. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +156 -35
  407. package/src/renderers/webgl-fallback/utils/WebGLState.js +181 -5
  408. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
  409. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
  410. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
  411. package/src/renderers/webgpu/WebGPUBackend.js +119 -13
  412. package/src/renderers/webgpu/WebGPURenderer.js +2 -1
  413. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +322 -68
  414. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
  415. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
  416. package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -0
  417. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
  418. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
  419. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +65 -42
  420. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
  421. package/src/renderers/webgpu/utils/WebGPUUtils.js +17 -11
  422. package/src/renderers/webxr/WebXRManager.js +2 -2
  423. package/src/textures/CubeDepthTexture.js +76 -0
  424. package/src/textures/Source.js +1 -1
  425. package/src/textures/Texture.js +3 -3
  426. package/src/utils.js +258 -3
  427. package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
  428. package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
  429. package/examples/jsm/shaders/GodRaysShader.js +0 -333
  430. package/src/nodes/accessors/SceneNode.js +0 -145
  431. package/src/nodes/code/ScriptableNode.js +0 -726
  432. package/src/nodes/code/ScriptableValueNode.js +0 -253
  433. package/src/nodes/display/PosterizeNode.js +0 -65
  434. package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
  435. package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
  436. package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
  437. package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
@@ -123,9 +123,7 @@ export * from './loaders/VRMLLoader.js';
123
123
  export * from './loaders/VTKLoader.js';
124
124
  export * from './loaders/XYZLoader.js';
125
125
 
126
- export * from './materials/MeshGouraudMaterial.js';
127
126
  export * from './materials/LDrawConditionalLineMaterial.js';
128
- export * from './materials/MeshPostProcessingMaterial.js';
129
127
 
130
128
  export * from './math/Capsule.js';
131
129
  export * from './math/ColorConverter.js';
@@ -225,7 +223,6 @@ export * from './shaders/FilmShader.js';
225
223
  export * from './shaders/FocusShader.js';
226
224
  export * from './shaders/FreiChenShader.js';
227
225
  export * from './shaders/GammaCorrectionShader.js';
228
- export * from './shaders/GodRaysShader.js';
229
226
  export * from './shaders/GTAOShader.js';
230
227
  export * from './shaders/HalftoneShader.js';
231
228
  export * from './shaders/HorizontalBlurShader.js';
@@ -50,7 +50,7 @@ class CCDIKSolver {
50
50
  /**
51
51
  * The IK objects.
52
52
  *
53
- * @type {SkinnedMesh}
53
+ * @type {Array<CCDIKSolver~IK>}
54
54
  */
55
55
  this.iks = iks;
56
56
 
@@ -357,7 +357,7 @@ class CCDIKHelper extends Object3D {
357
357
  /**
358
358
  * The helpers sphere geometry.
359
359
  *
360
- * @type {SkinnedMesh}
360
+ * @type {SphereGeometry}
361
361
  */
362
362
  this.sphereGeometry = new SphereGeometry( sphereSize, 16, 8 );
363
363
 
@@ -98,9 +98,9 @@ const _EPS = 0.000001;
98
98
  * consistent camera movements. Dragging cursor/fingers will cause camera to orbit around the center of the trackball in a conservative
99
99
  * way (returning to the starting point will make the camera return to its starting orientation).
100
100
  *
101
- * In addition to supporting pan, zoom and pinch gestures, Arcball controls provide focus< functionality with a double click/tap for intuitively
102
- * moving the object's point of interest in the center of the virtual trackball. Focus allows a much better inspection and navigation in complex
103
- * environment. Moreover Arcball controls allow FOV manipulation (in a vertigo-style method) and z-rotation. Saving and restoring of Camera State
101
+ * In addition to supporting pan, zoom and pinch gestures, double clicking/tapping focuses on a point, intuitively moving the object's
102
+ * point of interest to the center of the virtual trackball. Focus allows a much better inspection and navigation in complex environment.
103
+ * Moreover Arcball controls allow FOV manipulation (in a vertigo-style method) and z-rotation. Saving and restoring of Camera State
104
104
  * is supported also through clipboard (use ctrl+c and ctrl+v shortcuts for copy and paste the state).
105
105
  *
106
106
  * Unlike {@link OrbitControls} and {@link TrackballControls}, `ArcballControls` doesn't require `update()` to be called externally in an
@@ -1,7 +1,12 @@
1
- import { MOUSE, TOUCH } from 'three';
1
+ import { MOUSE, TOUCH, Plane, Raycaster, Vector2, Vector3 } from 'three';
2
2
 
3
3
  import { OrbitControls } from './OrbitControls.js';
4
4
 
5
+ const _plane = new Plane();
6
+ const _raycaster = new Raycaster();
7
+ const _mouse = new Vector2();
8
+ const _panCurrent = new Vector3();
9
+
5
10
  /**
6
11
  * This class is intended for transforming a camera over a map from bird's eye perspective.
7
12
  * The class shares its implementation with {@link OrbitControls} but uses a specific preset
@@ -55,6 +60,55 @@ class MapControls extends OrbitControls {
55
60
  */
56
61
  this.touches = { ONE: TOUCH.PAN, TWO: TOUCH.DOLLY_ROTATE };
57
62
 
63
+ this._panWorldStart = new Vector3();
64
+
65
+ }
66
+
67
+ _handleMouseDownPan( event ) {
68
+
69
+ super._handleMouseDownPan( event );
70
+
71
+ this._panOffset.set( 0, 0, 0 );
72
+
73
+ if ( this.screenSpacePanning === true ) return;
74
+
75
+ _plane.setFromNormalAndCoplanarPoint( this.object.up, this.target );
76
+
77
+ const element = this.domElement;
78
+ const rect = element.getBoundingClientRect();
79
+ _mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1;
80
+ _mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1;
81
+
82
+ _raycaster.setFromCamera( _mouse, this.object );
83
+ _raycaster.ray.intersectPlane( _plane, this._panWorldStart );
84
+
85
+ }
86
+
87
+ _handleMouseMovePan( event ) {
88
+
89
+ if ( this.screenSpacePanning === true ) {
90
+
91
+ super._handleMouseMovePan( event );
92
+ return;
93
+
94
+ }
95
+
96
+ const element = this.domElement;
97
+ const rect = element.getBoundingClientRect();
98
+ _mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1;
99
+ _mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1;
100
+
101
+ _raycaster.setFromCamera( _mouse, this.object );
102
+
103
+ if ( _raycaster.ray.intersectPlane( _plane, _panCurrent ) ) {
104
+
105
+ _panCurrent.sub( this._panWorldStart );
106
+ this._panOffset.copy( _panCurrent ).negate();
107
+
108
+ this.update();
109
+
110
+ }
111
+
58
112
  }
59
113
 
60
114
  }
@@ -391,6 +391,8 @@ class OrbitControls extends Controls {
391
391
  */
392
392
  this.zoom0 = this.object.zoom;
393
393
 
394
+ this._cursorStyle = 'auto';
395
+
394
396
  // the target DOM element for key events
395
397
  this._domElementKeyEvents = null;
396
398
 
@@ -462,6 +464,34 @@ class OrbitControls extends Controls {
462
464
 
463
465
  }
464
466
 
467
+ /**
468
+ * Defines the visual representation of the cursor.
469
+ *
470
+ * @type {('auto'|'grab')}
471
+ * @default 'auto'
472
+ */
473
+ set cursorStyle( type ) {
474
+
475
+ this._cursorStyle = type;
476
+
477
+ if ( type === 'grab' ) {
478
+
479
+ this.domElement.style.cursor = 'grab';
480
+
481
+ } else {
482
+
483
+ this.domElement.style.cursor = 'auto';
484
+
485
+ }
486
+
487
+ }
488
+
489
+ get cursorStyle() {
490
+
491
+ return this._cursorStyle;
492
+
493
+ }
494
+
465
495
  connect( element ) {
466
496
 
467
497
  super.connect( element );
@@ -482,8 +512,8 @@ class OrbitControls extends Controls {
482
512
  disconnect() {
483
513
 
484
514
  this.domElement.removeEventListener( 'pointerdown', this._onPointerDown );
485
- this.domElement.removeEventListener( 'pointermove', this._onPointerMove );
486
- this.domElement.removeEventListener( 'pointerup', this._onPointerUp );
515
+ this.domElement.ownerDocument.removeEventListener( 'pointermove', this._onPointerMove );
516
+ this.domElement.ownerDocument.removeEventListener( 'pointerup', this._onPointerUp );
487
517
  this.domElement.removeEventListener( 'pointercancel', this._onPointerUp );
488
518
 
489
519
  this.domElement.removeEventListener( 'wheel', this._onMouseWheel );
@@ -594,6 +624,67 @@ class OrbitControls extends Controls {
594
624
 
595
625
  }
596
626
 
627
+ /**
628
+ * Programmatically pan the camera.
629
+ *
630
+ * @param {number} deltaX - The horizontal pan amount in pixels.
631
+ * @param {number} deltaY - The vertical pan amount in pixels.
632
+ */
633
+ pan( deltaX, deltaY ) {
634
+
635
+ this._pan( deltaX, deltaY );
636
+ this.update();
637
+
638
+ }
639
+
640
+ /**
641
+ * Programmatically dolly in (zoom in for perspective camera).
642
+ *
643
+ * @param {number} dollyScale - The dolly scale factor.
644
+ */
645
+ dollyIn( dollyScale ) {
646
+
647
+ this._dollyIn( dollyScale );
648
+ this.update();
649
+
650
+ }
651
+
652
+ /**
653
+ * Programmatically dolly out (zoom out for perspective camera).
654
+ *
655
+ * @param {number} dollyScale - The dolly scale factor.
656
+ */
657
+ dollyOut( dollyScale ) {
658
+
659
+ this._dollyOut( dollyScale );
660
+ this.update();
661
+
662
+ }
663
+
664
+ /**
665
+ * Programmatically rotate the camera left (around the vertical axis).
666
+ *
667
+ * @param {number} angle - The rotation angle in radians.
668
+ */
669
+ rotateLeft( angle ) {
670
+
671
+ this._rotateLeft( angle );
672
+ this.update();
673
+
674
+ }
675
+
676
+ /**
677
+ * Programmatically rotate the camera up (around the horizontal axis).
678
+ *
679
+ * @param {number} angle - The rotation angle in radians.
680
+ */
681
+ rotateUp( angle ) {
682
+
683
+ this._rotateUp( angle );
684
+ this.update();
685
+
686
+ }
687
+
597
688
  update( deltaTime = null ) {
598
689
 
599
690
  const position = this.object.position;
@@ -1458,8 +1549,8 @@ function onPointerDown( event ) {
1458
1549
 
1459
1550
  this.domElement.setPointerCapture( event.pointerId );
1460
1551
 
1461
- this.domElement.addEventListener( 'pointermove', this._onPointerMove );
1462
- this.domElement.addEventListener( 'pointerup', this._onPointerUp );
1552
+ this.domElement.ownerDocument.addEventListener( 'pointermove', this._onPointerMove );
1553
+ this.domElement.ownerDocument.addEventListener( 'pointerup', this._onPointerUp );
1463
1554
 
1464
1555
  }
1465
1556
 
@@ -1481,6 +1572,12 @@ function onPointerDown( event ) {
1481
1572
 
1482
1573
  }
1483
1574
 
1575
+ if ( this._cursorStyle === 'grab' ) {
1576
+
1577
+ this.domElement.style.cursor = 'grabbing';
1578
+
1579
+ }
1580
+
1484
1581
  }
1485
1582
 
1486
1583
  function onPointerMove( event ) {
@@ -1509,13 +1606,19 @@ function onPointerUp( event ) {
1509
1606
 
1510
1607
  this.domElement.releasePointerCapture( event.pointerId );
1511
1608
 
1512
- this.domElement.removeEventListener( 'pointermove', this._onPointerMove );
1513
- this.domElement.removeEventListener( 'pointerup', this._onPointerUp );
1609
+ this.domElement.ownerDocument.removeEventListener( 'pointermove', this._onPointerMove );
1610
+ this.domElement.ownerDocument.removeEventListener( 'pointerup', this._onPointerUp );
1514
1611
 
1515
1612
  this.dispatchEvent( _endEvent );
1516
1613
 
1517
1614
  this.state = _STATE.NONE;
1518
1615
 
1616
+ if ( this._cursorStyle === 'grab' ) {
1617
+
1618
+ this.domElement.style.cursor = 'grab';
1619
+
1620
+ }
1621
+
1519
1622
  break;
1520
1623
 
1521
1624
  case 1:
@@ -291,8 +291,8 @@ class TrackballControls extends Controls {
291
291
  window.removeEventListener( 'keyup', this._onKeyUp );
292
292
 
293
293
  this.domElement.removeEventListener( 'pointerdown', this._onPointerDown );
294
- this.domElement.removeEventListener( 'pointermove', this._onPointerMove );
295
- this.domElement.removeEventListener( 'pointerup', this._onPointerUp );
294
+ this.domElement.ownerDocument.removeEventListener( 'pointermove', this._onPointerMove );
295
+ this.domElement.ownerDocument.removeEventListener( 'pointerup', this._onPointerUp );
296
296
  this.domElement.removeEventListener( 'pointercancel', this._onPointerCancel );
297
297
  this.domElement.removeEventListener( 'wheel', this._onMouseWheel );
298
298
  this.domElement.removeEventListener( 'contextmenu', this._onContextMenu );
@@ -660,8 +660,8 @@ function onPointerDown( event ) {
660
660
 
661
661
  this.domElement.setPointerCapture( event.pointerId );
662
662
 
663
- this.domElement.addEventListener( 'pointermove', this._onPointerMove );
664
- this.domElement.addEventListener( 'pointerup', this._onPointerUp );
663
+ this.domElement.ownerDocument.addEventListener( 'pointermove', this._onPointerMove );
664
+ this.domElement.ownerDocument.addEventListener( 'pointerup', this._onPointerUp );
665
665
 
666
666
  }
667
667
 
@@ -719,8 +719,8 @@ function onPointerUp( event ) {
719
719
 
720
720
  this.domElement.releasePointerCapture( event.pointerId );
721
721
 
722
- this.domElement.removeEventListener( 'pointermove', this._onPointerMove );
723
- this.domElement.removeEventListener( 'pointerup', this._onPointerUp );
722
+ this.domElement.ownerDocument.removeEventListener( 'pointermove', this._onPointerMove );
723
+ this.domElement.ownerDocument.removeEventListener( 'pointerup', this._onPointerUp );
724
724
 
725
725
  }
726
726
 
@@ -13,6 +13,7 @@ import { CSMShader } from './CSMShader.js';
13
13
  const _cameraToLightMatrix = new Matrix4();
14
14
  const _lightSpaceFrustum = new CSMFrustum( { webGL: true } );
15
15
  const _center = new Vector3();
16
+ const _origin = new Vector3();
16
17
  const _bbox = new Box3();
17
18
  const _uniformArray = [];
18
19
  const _logArray = [];
@@ -367,7 +368,7 @@ export class CSM {
367
368
 
368
369
  // for each frustum we need to find its min-max box aligned with the light orientation
369
370
  // the position in _lightOrientationMatrix does not matter, as we transform there and back
370
- _lightOrientationMatrix.lookAt( new Vector3(), this.lightDirection, _up );
371
+ _lightOrientationMatrix.lookAt( _origin, this.lightDirection, _up );
371
372
  _lightOrientationMatrixInverse.copy( _lightOrientationMatrix ).invert();
372
373
 
373
374
  for ( let i = 0; i < frustums.length; i ++ ) {
@@ -1,16 +1,38 @@
1
1
  import {
2
2
  LinearFilter,
3
+ MathUtils,
3
4
  Matrix3,
4
5
  NearestFilter,
6
+ PerspectiveCamera,
5
7
  RGBAFormat,
6
8
  ShaderMaterial,
7
- StereoCamera,
9
+ Vector3,
8
10
  WebGLRenderTarget
9
11
  } from 'three';
10
12
  import { FullScreenQuad } from '../postprocessing/Pass.js';
13
+ import { frameCorners } from '../utils/CameraUtils.js';
14
+
15
+ const _cameraL = /*@__PURE__*/ new PerspectiveCamera();
16
+ const _cameraR = /*@__PURE__*/ new PerspectiveCamera();
17
+
18
+ // Reusable vectors for screen corner calculations
19
+ const _eyeL = /*@__PURE__*/ new Vector3();
20
+ const _eyeR = /*@__PURE__*/ new Vector3();
21
+ const _screenCenter = /*@__PURE__*/ new Vector3();
22
+ const _screenBottomLeft = /*@__PURE__*/ new Vector3();
23
+ const _screenBottomRight = /*@__PURE__*/ new Vector3();
24
+ const _screenTopLeft = /*@__PURE__*/ new Vector3();
25
+ const _right = /*@__PURE__*/ new Vector3();
26
+ const _up = /*@__PURE__*/ new Vector3();
27
+ const _forward = /*@__PURE__*/ new Vector3();
11
28
 
12
29
  /**
13
- * A class that creates an anaglyph effect.
30
+ * A class that creates an anaglyph effect using physically-correct
31
+ * off-axis stereo projection.
32
+ *
33
+ * This implementation uses CameraUtils.frameCorners() to align stereo
34
+ * camera frustums to a virtual screen plane, providing accurate depth
35
+ * perception with zero parallax at the plane distance.
14
36
  *
15
37
  * Note that this class can only be used with {@link WebGLRenderer}.
16
38
  * When using {@link WebGPURenderer}, use {@link AnaglyphPassNode}.
@@ -42,13 +64,38 @@ class AnaglyphEffect {
42
64
  - 0.00155529, - 0.0184503, 1.2264
43
65
  ] );
44
66
 
45
- const _stereo = new StereoCamera();
67
+ /**
68
+ * The interpupillary distance (eye separation) in world units.
69
+ * Typical human IPD is 0.064 meters (64mm).
70
+ *
71
+ * @type {number}
72
+ * @default 0.064
73
+ */
74
+ this.eyeSep = 0.064;
75
+
76
+ /**
77
+ * The distance in world units from the viewer to the virtual
78
+ * screen plane where zero parallax (screen depth) occurs.
79
+ * Objects at this distance appear at the screen surface.
80
+ * Objects closer appear in front of the screen (negative parallax).
81
+ * Objects further appear behind the screen (positive parallax).
82
+ *
83
+ * The screen dimensions are derived from the camera's FOV and aspect ratio
84
+ * at this distance, ensuring the stereo view matches the camera's field of view.
85
+ *
86
+ * @type {number}
87
+ * @default 0.5
88
+ */
89
+ this.planeDistance = 0.5;
46
90
 
47
91
  const _params = { minFilter: LinearFilter, magFilter: NearestFilter, format: RGBAFormat };
48
92
 
49
93
  const _renderTargetL = new WebGLRenderTarget( width, height, _params );
50
94
  const _renderTargetR = new WebGLRenderTarget( width, height, _params );
51
95
 
96
+ _cameraL.layers.enable( 1 );
97
+ _cameraR.layers.enable( 2 );
98
+
52
99
  const _material = new ShaderMaterial( {
53
100
 
54
101
  uniforms: {
@@ -141,16 +188,64 @@ class AnaglyphEffect {
141
188
 
142
189
  if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
143
190
 
144
- _stereo.update( camera );
145
-
191
+ // Get the camera's local coordinate axes from its world matrix
192
+ camera.matrixWorld.extractBasis( _right, _up, _forward );
193
+ _right.normalize();
194
+ _up.normalize();
195
+ _forward.normalize();
196
+
197
+ // Calculate eye positions
198
+ const halfSep = this.eyeSep / 2;
199
+ _eyeL.copy( camera.position ).addScaledVector( _right, - halfSep );
200
+ _eyeR.copy( camera.position ).addScaledVector( _right, halfSep );
201
+
202
+ // Calculate screen center (at planeDistance in front of the camera center)
203
+ _screenCenter.copy( camera.position ).addScaledVector( _forward, - this.planeDistance );
204
+
205
+ // Calculate screen dimensions from camera FOV and aspect ratio
206
+ const halfHeight = this.planeDistance * Math.tan( MathUtils.DEG2RAD * camera.fov / 2 );
207
+ const halfWidth = halfHeight * camera.aspect;
208
+
209
+ // Calculate screen corners
210
+ _screenBottomLeft.copy( _screenCenter )
211
+ .addScaledVector( _right, - halfWidth )
212
+ .addScaledVector( _up, - halfHeight );
213
+
214
+ _screenBottomRight.copy( _screenCenter )
215
+ .addScaledVector( _right, halfWidth )
216
+ .addScaledVector( _up, - halfHeight );
217
+
218
+ _screenTopLeft.copy( _screenCenter )
219
+ .addScaledVector( _right, - halfWidth )
220
+ .addScaledVector( _up, halfHeight );
221
+
222
+ // Set up left eye camera
223
+ _cameraL.position.copy( _eyeL );
224
+ _cameraL.near = camera.near;
225
+ _cameraL.far = camera.far;
226
+ frameCorners( _cameraL, _screenBottomLeft, _screenBottomRight, _screenTopLeft, true );
227
+ _cameraL.matrixWorld.compose( _cameraL.position, _cameraL.quaternion, _cameraL.scale );
228
+ _cameraL.matrixWorldInverse.copy( _cameraL.matrixWorld ).invert();
229
+
230
+ // Set up right eye camera
231
+ _cameraR.position.copy( _eyeR );
232
+ _cameraR.near = camera.near;
233
+ _cameraR.far = camera.far;
234
+ frameCorners( _cameraR, _screenBottomLeft, _screenBottomRight, _screenTopLeft, true );
235
+ _cameraR.matrixWorld.compose( _cameraR.position, _cameraR.quaternion, _cameraR.scale );
236
+ _cameraR.matrixWorldInverse.copy( _cameraR.matrixWorld ).invert();
237
+
238
+ // Render left eye
146
239
  renderer.setRenderTarget( _renderTargetL );
147
240
  renderer.clear();
148
- renderer.render( scene, _stereo.cameraL );
241
+ renderer.render( scene, _cameraL );
149
242
 
243
+ // Render right eye
150
244
  renderer.setRenderTarget( _renderTargetR );
151
245
  renderer.clear();
152
- renderer.render( scene, _stereo.cameraR );
246
+ renderer.render( scene, _cameraR );
153
247
 
248
+ // Composite anaglyph
154
249
  renderer.setRenderTarget( null );
155
250
  _quad.render( renderer );
156
251
 
@@ -0,0 +1,59 @@
1
+ import {
2
+ BackSide,
3
+ Mesh,
4
+ MeshBasicMaterial,
5
+ SphereGeometry,
6
+ Scene
7
+ } from 'three';
8
+
9
+ /**
10
+ * This class represents a scene with a uniform color that can be used as
11
+ * input for {@link PMREMGenerator#fromScene}. The resulting PMREM represents
12
+ * uniform ambient lighting and can be used for Image Based Lighting by
13
+ * assigning it to {@link Scene#environment}.
14
+ *
15
+ * ```js
16
+ * const environment = new ColorEnvironment( 0x00ff00 );
17
+ * const pmremGenerator = new THREE.PMREMGenerator( renderer );
18
+ *
19
+ * const envMap = pmremGenerator.fromScene( environment ).texture;
20
+ * scene.environment = envMap;
21
+ * ```
22
+ *
23
+ * @augments Scene
24
+ * @three_import import { ColorEnvironment } from 'three/addons/environments/ColorEnvironment.js';
25
+ */
26
+ class ColorEnvironment extends Scene {
27
+
28
+ /**
29
+ * Constructs a new color environment.
30
+ *
31
+ * @param {number|Color} color - The color of the environment.
32
+ */
33
+ constructor( color = 0xffffff ) {
34
+
35
+ super();
36
+
37
+ this.name = 'ColorEnvironment';
38
+
39
+ const geometry = new SphereGeometry( 1, 16, 16 );
40
+ const material = new MeshBasicMaterial( { color: color, side: BackSide } );
41
+
42
+ this.add( new Mesh( geometry, material ) );
43
+
44
+ }
45
+
46
+ /**
47
+ * Frees internal resources. This method should be called
48
+ * when the environment is no longer required.
49
+ */
50
+ dispose() {
51
+
52
+ this.children[ 0 ].geometry.dispose();
53
+ this.children[ 0 ].material.dispose();
54
+
55
+ }
56
+
57
+ }
58
+
59
+ export { ColorEnvironment };
@@ -36,6 +36,9 @@ class RoomEnvironment extends Scene {
36
36
 
37
37
  super();
38
38
 
39
+ this.name = 'RoomEnvironment';
40
+ this.position.y = - 3.5;
41
+
39
42
  const geometry = new BoxGeometry();
40
43
  geometry.deleteAttribute( 'uv' );
41
44
 
@@ -90,7 +90,7 @@ function supportedRTT( renderTarget ) {
90
90
 
91
91
  }
92
92
 
93
- if ( renderTarget.isWebGLCubeRenderTarget || renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {
93
+ if ( renderTarget.isCubeRenderTarget || renderTarget.isWebGLCubeRenderTarget || renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {
94
94
 
95
95
  throw Error( 'EXRExporter.parse: Unsupported render target type, expected instance of WebGLRenderTarget.' );
96
96