@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.
- package/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +11330 -10017
- package/build/three.core.js +10011 -9493
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1414 -631
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +21 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +8007 -5427
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +8005 -5426
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -3
- package/examples/jsm/animation/CCDIKSolver.js +2 -2
- package/examples/jsm/controls/ArcballControls.js +3 -3
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +109 -6
- package/examples/jsm/controls/TrackballControls.js +6 -6
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +131 -4
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Inspector.js +74 -14
- package/examples/jsm/inspector/RendererInspector.js +12 -2
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Parameters.js +18 -2
- package/examples/jsm/inspector/tabs/Performance.js +2 -2
- package/examples/jsm/inspector/tabs/Viewer.js +4 -4
- package/examples/jsm/inspector/ui/Profiler.js +1836 -31
- package/examples/jsm/inspector/ui/Style.js +973 -14
- package/examples/jsm/inspector/ui/Tab.js +188 -1
- package/examples/jsm/inspector/ui/Values.js +17 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
- package/examples/jsm/lines/LineMaterial.js +6 -0
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +5 -5
- package/examples/jsm/loaders/EXRLoader.js +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -4
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +122 -171
- package/examples/jsm/loaders/HDRLoader.js +0 -1
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +19 -3
- package/examples/jsm/loaders/LDrawLoader.js +2 -3
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +1 -1
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +37 -24
- package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
- package/examples/jsm/loaders/usd/USDAParser.js +447 -366
- package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Sky.js +76 -4
- package/examples/jsm/objects/SkyMesh.js +127 -10
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +268 -30
- package/examples/jsm/renderers/SVGRenderer.js +193 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +61 -4
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +5 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
- package/examples/jsm/tsl/display/GodraysNode.js +624 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +3 -3
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +8 -20
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TRAANode.js +273 -125
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/math/Bayer.js +40 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/package.json +20 -26
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +19 -11
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +1 -1
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +56 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +3 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/FileLoader.js +1 -1
- package/src/loaders/ImageBitmapLoader.js +8 -3
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +2 -1
- package/src/loaders/ObjectLoader.js +21 -2
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +7 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +72 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +10 -4
- package/src/math/Line3.js +3 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix4.js +74 -65
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Vector3.js +3 -5
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +87 -68
- package/src/nodes/TSL.js +6 -6
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +98 -12
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +20 -1
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +4 -4
- package/src/nodes/accessors/ReferenceNode.js +4 -4
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +53 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +4 -21
- package/src/nodes/accessors/StorageTextureNode.js +37 -1
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +58 -22
- package/src/nodes/accessors/UniformArrayNode.js +4 -2
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionNode.js +1 -2
- package/src/nodes/core/ArrayNode.js +20 -1
- package/src/nodes/core/AssignNode.js +2 -2
- package/src/nodes/core/AttributeNode.js +2 -2
- package/src/nodes/core/ContextNode.js +103 -4
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +29 -3
- package/src/nodes/core/NodeBuilder.js +170 -53
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +10 -8
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +3 -3
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +65 -16
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +16 -2
- package/src/nodes/core/StructTypeNode.js +11 -17
- package/src/nodes/core/SubBuildNode.js +1 -1
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +47 -22
- package/src/nodes/core/VaryingNode.js +1 -18
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +98 -9
- package/src/nodes/display/RenderOutputNode.js +3 -3
- package/src/nodes/display/ScreenNode.js +3 -1
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportTextureNode.js +21 -4
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +4 -2
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -2
- package/src/nodes/gpgpu/ComputeNode.js +5 -4
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +1 -1
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +2 -2
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +97 -41
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +2 -2
- package/src/nodes/math/MathNode.js +3 -40
- package/src/nodes/math/OperatorNode.js +2 -1
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLCore.js +17 -14
- package/src/nodes/utils/ArrayElementNode.js +13 -0
- package/src/nodes/utils/DebugNode.js +11 -11
- package/src/nodes/utils/EventNode.js +1 -2
- package/src/nodes/utils/JoinNode.js +2 -2
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +1 -1
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -4
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +27 -14
- package/src/objects/InstancedMesh.js +11 -0
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +9 -0
- package/src/renderers/WebGLRenderer.js +178 -92
- package/src/renderers/common/Backend.js +29 -0
- package/src/renderers/common/Background.js +24 -11
- package/src/renderers/common/BindGroup.js +1 -9
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +27 -12
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/CubeRenderTarget.js +50 -6
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +4 -4
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/RenderBundles.js +2 -1
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +15 -3
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +18 -2
- package/src/renderers/common/RenderPipeline.js +203 -17
- package/src/renderers/common/Renderer.js +257 -72
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +17 -1
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +61 -0
- package/src/renderers/common/XRManager.js +3 -2
- package/src/renderers/common/extras/PMREMGenerator.js +2 -8
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -51
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +3 -3
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -5
- package/src/renderers/shaders/UniformsLib.js +0 -3
- package/src/renderers/webgl/WebGLBackground.js +2 -2
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLCapabilities.js +3 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +267 -0
- package/src/renderers/webgl/WebGLProgram.js +45 -109
- package/src/renderers/webgl/WebGLPrograms.js +45 -49
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +32 -37
- package/src/renderers/webgl/WebGLTextures.js +89 -28
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +148 -18
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +156 -35
- package/src/renderers/webgl-fallback/utils/WebGLState.js +181 -5
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +5 -3
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +9 -9
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +119 -13
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +322 -68
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +4 -17
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +65 -42
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +17 -11
- package/src/renderers/webxr/WebXRManager.js +2 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/Source.js +1 -1
- package/src/textures/Texture.js +3 -3
- package/src/utils.js +258 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
package/examples/jsm/Addons.js
CHANGED
|
@@ -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 {
|
|
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 {
|
|
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,
|
|
102
|
-
*
|
|
103
|
-
*
|
|
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
|
|
package/examples/jsm/csm/CSM.js
CHANGED
|
@@ -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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
241
|
+
renderer.render( scene, _cameraL );
|
|
149
242
|
|
|
243
|
+
// Render right eye
|
|
150
244
|
renderer.setRenderTarget( _renderTargetR );
|
|
151
245
|
renderer.clear();
|
|
152
|
-
renderer.render( scene,
|
|
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 };
|
|
@@ -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
|
|