@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
|
@@ -9,7 +9,7 @@ import RenderLists from './RenderLists.js';
|
|
|
9
9
|
import RenderContexts from './RenderContexts.js';
|
|
10
10
|
import Textures from './Textures.js';
|
|
11
11
|
import Background from './Background.js';
|
|
12
|
-
import
|
|
12
|
+
import NodeManager from './nodes/NodeManager.js';
|
|
13
13
|
import Color4 from './Color4.js';
|
|
14
14
|
import ClippingContext from './ClippingContext.js';
|
|
15
15
|
import QuadMesh from './QuadMesh.js';
|
|
@@ -30,11 +30,12 @@ import { Matrix4 } from '../../math/Matrix4.js';
|
|
|
30
30
|
import { Vector2 } from '../../math/Vector2.js';
|
|
31
31
|
import { Vector4 } from '../../math/Vector4.js';
|
|
32
32
|
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
33
|
-
import { DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoToneMapping, LinearFilter, HalfFloatType, RGBAFormat, PCFShadowMap } from '../../constants.js';
|
|
33
|
+
import { DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoToneMapping, LinearFilter, HalfFloatType, RGBAFormat, PCFShadowMap, VSMShadowMap } from '../../constants.js';
|
|
34
34
|
|
|
35
|
-
import { float, vec3, vec4 } from '../../nodes/tsl/TSLCore.js';
|
|
35
|
+
import { float, vec3, vec4, Fn } from '../../nodes/tsl/TSLCore.js';
|
|
36
36
|
import { reference } from '../../nodes/accessors/ReferenceNode.js';
|
|
37
37
|
import { highpModelNormalViewMatrix, highpModelViewMatrix } from '../../nodes/accessors/ModelNode.js';
|
|
38
|
+
import { context } from '../../nodes/core/ContextNode.js';
|
|
38
39
|
import { error, warn, warnOnce } from '../../utils.js';
|
|
39
40
|
|
|
40
41
|
const _scene = /*@__PURE__*/ new Scene();
|
|
@@ -46,6 +47,8 @@ const _frustumArray = /*@__PURE__*/ new FrustumArray();
|
|
|
46
47
|
const _projScreenMatrix = /*@__PURE__*/ new Matrix4();
|
|
47
48
|
const _vector4 = /*@__PURE__*/ new Vector4();
|
|
48
49
|
|
|
50
|
+
const _shadowSide = { [ FrontSide ]: BackSide, [ BackSide ]: FrontSide, [ DoubleSide ]: DoubleSide };
|
|
51
|
+
|
|
49
52
|
/**
|
|
50
53
|
* Base class for renderers.
|
|
51
54
|
*/
|
|
@@ -56,6 +59,7 @@ class Renderer {
|
|
|
56
59
|
*
|
|
57
60
|
* @typedef {Object} Renderer~Options
|
|
58
61
|
* @property {boolean} [logarithmicDepthBuffer=false] - Whether logarithmic depth buffer is enabled or not.
|
|
62
|
+
* @property {boolean} [reversedDepthBuffer=false] - Whether reversed depth buffer is enabled or not.
|
|
59
63
|
* @property {boolean} [alpha=true] - Whether the default framebuffer (which represents the final contents of the canvas) should be transparent or opaque.
|
|
60
64
|
* @property {boolean} [depth=true] - Whether the default framebuffer should have a depth buffer or not.
|
|
61
65
|
* @property {boolean} [stencil=false] - Whether the default framebuffer should have a stencil buffer or not.
|
|
@@ -63,7 +67,7 @@ class Renderer {
|
|
|
63
67
|
* @property {number} [samples=0] - When `antialias` is `true`, `4` samples are used by default. This parameter can set to any other integer value than 0
|
|
64
68
|
* to overwrite the default.
|
|
65
69
|
* @property {?Function} [getFallback=null] - This callback function can be used to provide a fallback backend, if the primary backend can't be targeted.
|
|
66
|
-
* @property {number} [
|
|
70
|
+
* @property {number} [outputBufferType=HalfFloatType] - Defines the type of output buffers. The default `HalfFloatType` is recommend for best
|
|
67
71
|
* quality. To save memory and bandwidth, `UnsignedByteType` might be used. This will reduce rendering quality though.
|
|
68
72
|
* @property {boolean} [multiview=false] - If set to `true`, the renderer will use multiview during WebXR rendering if supported.
|
|
69
73
|
*/
|
|
@@ -90,13 +94,14 @@ class Renderer {
|
|
|
90
94
|
|
|
91
95
|
const {
|
|
92
96
|
logarithmicDepthBuffer = false,
|
|
97
|
+
reversedDepthBuffer = false,
|
|
93
98
|
alpha = true,
|
|
94
99
|
depth = true,
|
|
95
100
|
stencil = false,
|
|
96
101
|
antialias = false,
|
|
97
102
|
samples = 0,
|
|
98
103
|
getFallback = null,
|
|
99
|
-
|
|
104
|
+
outputBufferType = HalfFloatType,
|
|
100
105
|
multiview = false
|
|
101
106
|
} = parameters;
|
|
102
107
|
|
|
@@ -157,9 +162,19 @@ class Renderer {
|
|
|
157
162
|
*
|
|
158
163
|
* @type {boolean}
|
|
159
164
|
* @default false
|
|
165
|
+
* @readonly
|
|
160
166
|
*/
|
|
161
167
|
this.logarithmicDepthBuffer = logarithmicDepthBuffer;
|
|
162
168
|
|
|
169
|
+
/**
|
|
170
|
+
* Whether reversed depth buffer is enabled or not.
|
|
171
|
+
*
|
|
172
|
+
* @type {boolean}
|
|
173
|
+
* @default false
|
|
174
|
+
* @readonly
|
|
175
|
+
*/
|
|
176
|
+
this.reversedDepthBuffer = reversedDepthBuffer;
|
|
177
|
+
|
|
163
178
|
/**
|
|
164
179
|
* Defines the output color space of the renderer.
|
|
165
180
|
*
|
|
@@ -222,17 +237,13 @@ class Renderer {
|
|
|
222
237
|
this.info = new Info();
|
|
223
238
|
|
|
224
239
|
/**
|
|
225
|
-
*
|
|
240
|
+
* A global context node that stores override nodes for specific transformations or calculations.
|
|
226
241
|
* These nodes can be used to replace default behavior in the rendering pipeline.
|
|
227
242
|
*
|
|
228
|
-
* @type {
|
|
229
|
-
* @property {
|
|
230
|
-
* @property {?Node} modelNormalViewMatrix - An override node for the model normal view matrix.
|
|
243
|
+
* @type {ContextNode}
|
|
244
|
+
* @property {Object} value - The context value object.
|
|
231
245
|
*/
|
|
232
|
-
this.
|
|
233
|
-
modelViewMatrix: null,
|
|
234
|
-
modelNormalViewMatrix: null
|
|
235
|
-
};
|
|
246
|
+
this.contextNode = context();
|
|
236
247
|
|
|
237
248
|
/**
|
|
238
249
|
* The node library defines how certain library objects like materials, lights
|
|
@@ -320,7 +331,7 @@ class Renderer {
|
|
|
320
331
|
* A reference to a renderer module for managing node related logic.
|
|
321
332
|
*
|
|
322
333
|
* @private
|
|
323
|
-
* @type {?
|
|
334
|
+
* @type {?NodeManager}
|
|
324
335
|
* @default null
|
|
325
336
|
*/
|
|
326
337
|
this._nodes = null;
|
|
@@ -563,8 +574,7 @@ class Renderer {
|
|
|
563
574
|
* and pipeline updates.
|
|
564
575
|
*
|
|
565
576
|
* @private
|
|
566
|
-
* @type {
|
|
567
|
-
* @default null
|
|
577
|
+
* @type {Function}
|
|
568
578
|
*/
|
|
569
579
|
this._handleObjectFunction = this._renderObjectDirect;
|
|
570
580
|
|
|
@@ -587,7 +597,7 @@ class Renderer {
|
|
|
587
597
|
this.onDeviceLost = this._onDeviceLost;
|
|
588
598
|
|
|
589
599
|
/**
|
|
590
|
-
* Defines the type of
|
|
600
|
+
* Defines the type of output buffers. The default `HalfFloatType` is recommend for
|
|
591
601
|
* best quality. To save memory and bandwidth, `UnsignedByteType` might be used.
|
|
592
602
|
* This will reduce rendering quality though.
|
|
593
603
|
*
|
|
@@ -595,7 +605,7 @@ class Renderer {
|
|
|
595
605
|
* @type {number}
|
|
596
606
|
* @default HalfFloatType
|
|
597
607
|
*/
|
|
598
|
-
this.
|
|
608
|
+
this._outputBufferType = outputBufferType;
|
|
599
609
|
|
|
600
610
|
/**
|
|
601
611
|
* A cache for shadow nodes per material
|
|
@@ -614,6 +624,16 @@ class Renderer {
|
|
|
614
624
|
*/
|
|
615
625
|
this._initialized = false;
|
|
616
626
|
|
|
627
|
+
/**
|
|
628
|
+
* The call depth of the renderer. Counts the number of
|
|
629
|
+
* nested render calls.
|
|
630
|
+
*
|
|
631
|
+
* @private
|
|
632
|
+
* @type {number}
|
|
633
|
+
* @default - 1
|
|
634
|
+
*/
|
|
635
|
+
this._callDepth = - 1;
|
|
636
|
+
|
|
617
637
|
/**
|
|
618
638
|
* A reference to the promise which initializes the renderer.
|
|
619
639
|
*
|
|
@@ -652,6 +672,7 @@ class Renderer {
|
|
|
652
672
|
* Shadow map configuration
|
|
653
673
|
* @typedef {Object} ShadowMapConfig
|
|
654
674
|
* @property {boolean} enabled - Whether to globally enable shadows or not.
|
|
675
|
+
* @property {boolean} transmitted - Whether to enable light transmission through non-opaque materials.
|
|
655
676
|
* @property {number} type - The shadow map type.
|
|
656
677
|
*/
|
|
657
678
|
|
|
@@ -662,6 +683,7 @@ class Renderer {
|
|
|
662
683
|
*/
|
|
663
684
|
this.shadowMap = {
|
|
664
685
|
enabled: false,
|
|
686
|
+
transmitted: false,
|
|
665
687
|
type: PCFShadowMap
|
|
666
688
|
};
|
|
667
689
|
|
|
@@ -699,7 +721,7 @@ class Renderer {
|
|
|
699
721
|
await this.compileAsync( scene, camera );
|
|
700
722
|
|
|
701
723
|
const renderList = this._renderLists.get( scene, camera );
|
|
702
|
-
const renderContext = this._renderContexts.get(
|
|
724
|
+
const renderContext = this._renderContexts.get( this._renderTarget, this._mrt );
|
|
703
725
|
|
|
704
726
|
const material = scene.overrideMaterial || object.material;
|
|
705
727
|
|
|
@@ -763,7 +785,7 @@ class Renderer {
|
|
|
763
785
|
|
|
764
786
|
}
|
|
765
787
|
|
|
766
|
-
this._nodes = new
|
|
788
|
+
this._nodes = new NodeManager( this, backend );
|
|
767
789
|
this._animation = new Animation( this, this._nodes, this.info );
|
|
768
790
|
this._attributes = new Attributes( backend );
|
|
769
791
|
this._background = new Background( this, this._nodes );
|
|
@@ -774,7 +796,7 @@ class Renderer {
|
|
|
774
796
|
this._objects = new RenderObjects( this, this._nodes, this._geometries, this._pipelines, this._bindings, this.info );
|
|
775
797
|
this._renderLists = new RenderLists( this.lighting );
|
|
776
798
|
this._bundles = new RenderBundles();
|
|
777
|
-
this._renderContexts = new RenderContexts();
|
|
799
|
+
this._renderContexts = new RenderContexts( this );
|
|
778
800
|
|
|
779
801
|
//
|
|
780
802
|
|
|
@@ -835,7 +857,7 @@ class Renderer {
|
|
|
835
857
|
* @param {Object3D} scene - The scene or 3D object to precompile.
|
|
836
858
|
* @param {Camera} camera - The camera that is used to render the scene.
|
|
837
859
|
* @param {?Scene} targetScene - If the first argument is a 3D object, this parameter must represent the scene the 3D object is going to be added.
|
|
838
|
-
* @return {Promise
|
|
860
|
+
* @return {Promise} A Promise that resolves when the compile has been finished.
|
|
839
861
|
*/
|
|
840
862
|
async compileAsync( scene, camera, targetScene = null ) {
|
|
841
863
|
|
|
@@ -850,6 +872,7 @@ class Renderer {
|
|
|
850
872
|
const previousRenderId = nodeFrame.renderId;
|
|
851
873
|
const previousRenderContext = this._currentRenderContext;
|
|
852
874
|
const previousRenderObjectFunction = this._currentRenderObjectFunction;
|
|
875
|
+
const previousHandleObjectFunction = this._handleObjectFunction;
|
|
853
876
|
const previousCompilationPromises = this._compilationPromises;
|
|
854
877
|
|
|
855
878
|
//
|
|
@@ -859,7 +882,7 @@ class Renderer {
|
|
|
859
882
|
if ( targetScene === null ) targetScene = scene;
|
|
860
883
|
|
|
861
884
|
const renderTarget = this._renderTarget;
|
|
862
|
-
const renderContext = this._renderContexts.get(
|
|
885
|
+
const renderContext = this._renderContexts.get( renderTarget, this._mrt );
|
|
863
886
|
const activeMipmapLevel = this._activeMipmapLevel;
|
|
864
887
|
|
|
865
888
|
const compilationPromises = [];
|
|
@@ -933,7 +956,15 @@ class Renderer {
|
|
|
933
956
|
|
|
934
957
|
//
|
|
935
958
|
|
|
936
|
-
|
|
959
|
+
if ( targetScene !== scene ) {
|
|
960
|
+
|
|
961
|
+
this._background.update( targetScene, renderList, renderContext );
|
|
962
|
+
|
|
963
|
+
} else {
|
|
964
|
+
|
|
965
|
+
this._background.update( sceneRef, renderList, renderContext );
|
|
966
|
+
|
|
967
|
+
}
|
|
937
968
|
|
|
938
969
|
// process render lists
|
|
939
970
|
|
|
@@ -951,10 +982,9 @@ class Renderer {
|
|
|
951
982
|
|
|
952
983
|
this._currentRenderContext = previousRenderContext;
|
|
953
984
|
this._currentRenderObjectFunction = previousRenderObjectFunction;
|
|
985
|
+
this._handleObjectFunction = previousHandleObjectFunction;
|
|
954
986
|
this._compilationPromises = previousCompilationPromises;
|
|
955
987
|
|
|
956
|
-
this._handleObjectFunction = this._renderObjectDirect;
|
|
957
|
-
|
|
958
988
|
// wait for all promises setup by backends awaiting compilation/linking/pipeline creation to complete
|
|
959
989
|
|
|
960
990
|
await Promise.all( compilationPromises );
|
|
@@ -996,11 +1026,6 @@ class Renderer {
|
|
|
996
1026
|
|
|
997
1027
|
//
|
|
998
1028
|
|
|
999
|
-
/**
|
|
1000
|
-
* Sets the inspector instance. The inspector can be any class that extends from `InspectorBase`.
|
|
1001
|
-
*
|
|
1002
|
-
* @param {InspectorBase} value - The new inspector.
|
|
1003
|
-
*/
|
|
1004
1029
|
set inspector( value ) {
|
|
1005
1030
|
|
|
1006
1031
|
if ( this._inspector !== null ) {
|
|
@@ -1014,6 +1039,11 @@ class Renderer {
|
|
|
1014
1039
|
|
|
1015
1040
|
}
|
|
1016
1041
|
|
|
1042
|
+
/**
|
|
1043
|
+
* The inspector instance. The inspector can be any class that extends from `InspectorBase`.
|
|
1044
|
+
*
|
|
1045
|
+
* @type {InspectorBase}
|
|
1046
|
+
*/
|
|
1017
1047
|
get inspector() {
|
|
1018
1048
|
|
|
1019
1049
|
return this._inspector;
|
|
@@ -1031,15 +1061,17 @@ class Renderer {
|
|
|
1031
1061
|
*/
|
|
1032
1062
|
set highPrecision( value ) {
|
|
1033
1063
|
|
|
1064
|
+
const contextNodeData = this.contextNode.value;
|
|
1065
|
+
|
|
1034
1066
|
if ( value === true ) {
|
|
1035
1067
|
|
|
1036
|
-
|
|
1037
|
-
|
|
1068
|
+
contextNodeData.modelViewMatrix = highpModelViewMatrix;
|
|
1069
|
+
contextNodeData.modelNormalViewMatrix = highpModelNormalViewMatrix;
|
|
1038
1070
|
|
|
1039
1071
|
} else if ( this.highPrecision ) {
|
|
1040
1072
|
|
|
1041
|
-
|
|
1042
|
-
|
|
1073
|
+
delete contextNodeData.modelViewMatrix;
|
|
1074
|
+
delete contextNodeData.modelNormalViewMatrix;
|
|
1043
1075
|
|
|
1044
1076
|
}
|
|
1045
1077
|
|
|
@@ -1053,7 +1085,9 @@ class Renderer {
|
|
|
1053
1085
|
*/
|
|
1054
1086
|
get highPrecision() {
|
|
1055
1087
|
|
|
1056
|
-
|
|
1088
|
+
const contextNodeData = this.contextNode.value;
|
|
1089
|
+
|
|
1090
|
+
return contextNodeData.modelViewMatrix === highpModelViewMatrix && contextNodeData.modelNormalViewMatrix === highpModelNormalViewMatrix;
|
|
1057
1091
|
|
|
1058
1092
|
}
|
|
1059
1093
|
|
|
@@ -1083,13 +1117,27 @@ class Renderer {
|
|
|
1083
1117
|
}
|
|
1084
1118
|
|
|
1085
1119
|
/**
|
|
1086
|
-
* Returns the
|
|
1120
|
+
* Returns the output buffer type.
|
|
1087
1121
|
*
|
|
1088
|
-
* @return {number} The
|
|
1122
|
+
* @return {number} The output buffer type.
|
|
1089
1123
|
*/
|
|
1090
|
-
|
|
1124
|
+
getOutputBufferType() {
|
|
1091
1125
|
|
|
1092
|
-
return this.
|
|
1126
|
+
return this._outputBufferType;
|
|
1127
|
+
|
|
1128
|
+
}
|
|
1129
|
+
|
|
1130
|
+
/**
|
|
1131
|
+
* Returns the output buffer type.
|
|
1132
|
+
*
|
|
1133
|
+
* @deprecated since r182. Use `.getOutputBufferType()` instead.
|
|
1134
|
+
* @return {number} The output buffer type.
|
|
1135
|
+
*/
|
|
1136
|
+
getColorBufferType() { // @deprecated, r182
|
|
1137
|
+
|
|
1138
|
+
warnOnce( 'Renderer: ".getColorBufferType()" has been renamed to ".getOutputBufferType()".' );
|
|
1139
|
+
|
|
1140
|
+
return this.getOutputBufferType();
|
|
1093
1141
|
|
|
1094
1142
|
}
|
|
1095
1143
|
|
|
@@ -1265,7 +1313,7 @@ class Renderer {
|
|
|
1265
1313
|
frameBufferTarget = new RenderTarget( width, height, {
|
|
1266
1314
|
depthBuffer: depth,
|
|
1267
1315
|
stencilBuffer: stencil,
|
|
1268
|
-
type: this.
|
|
1316
|
+
type: this._outputBufferType,
|
|
1269
1317
|
format: RGBAFormat,
|
|
1270
1318
|
colorSpace: ColorManagement.workingColorSpace,
|
|
1271
1319
|
generateMipmaps: false,
|
|
@@ -1333,9 +1381,12 @@ class Renderer {
|
|
|
1333
1381
|
const previousRenderId = nodeFrame.renderId;
|
|
1334
1382
|
const previousRenderContext = this._currentRenderContext;
|
|
1335
1383
|
const previousRenderObjectFunction = this._currentRenderObjectFunction;
|
|
1384
|
+
const previousHandleObjectFunction = this._handleObjectFunction;
|
|
1336
1385
|
|
|
1337
1386
|
//
|
|
1338
1387
|
|
|
1388
|
+
this._callDepth ++;
|
|
1389
|
+
|
|
1339
1390
|
const sceneRef = ( scene.isScene === true ) ? scene : _scene;
|
|
1340
1391
|
|
|
1341
1392
|
const outputRenderTarget = this._renderTarget || this._outputRenderTarget;
|
|
@@ -1361,10 +1412,11 @@ class Renderer {
|
|
|
1361
1412
|
|
|
1362
1413
|
//
|
|
1363
1414
|
|
|
1364
|
-
const renderContext = this._renderContexts.get(
|
|
1415
|
+
const renderContext = this._renderContexts.get( renderTarget, this._mrt, this._callDepth );
|
|
1365
1416
|
|
|
1366
1417
|
this._currentRenderContext = renderContext;
|
|
1367
1418
|
this._currentRenderObjectFunction = this._renderObjectFunction || this.renderObject;
|
|
1419
|
+
this._handleObjectFunction = this._renderObjectDirect;
|
|
1368
1420
|
|
|
1369
1421
|
//
|
|
1370
1422
|
|
|
@@ -1382,20 +1434,68 @@ class Renderer {
|
|
|
1382
1434
|
|
|
1383
1435
|
//
|
|
1384
1436
|
|
|
1385
|
-
|
|
1437
|
+
|
|
1386
1438
|
const xr = this.xr;
|
|
1387
1439
|
|
|
1388
|
-
if (
|
|
1440
|
+
if ( xr.isPresenting === false ) {
|
|
1441
|
+
|
|
1442
|
+
let projectionMatrixNeedsUpdate = false;
|
|
1443
|
+
|
|
1444
|
+
// reversed depth
|
|
1445
|
+
|
|
1446
|
+
if ( this.reversedDepthBuffer === true && camera.reversedDepth !== true ) {
|
|
1447
|
+
|
|
1448
|
+
camera._reversedDepth = true;
|
|
1449
|
+
|
|
1450
|
+
if ( camera.isArrayCamera ) {
|
|
1451
|
+
|
|
1452
|
+
for ( const subCamera of camera.cameras ) {
|
|
1453
|
+
|
|
1454
|
+
subCamera._reversedDepth = true;
|
|
1455
|
+
|
|
1456
|
+
}
|
|
1457
|
+
|
|
1458
|
+
}
|
|
1459
|
+
|
|
1460
|
+
projectionMatrixNeedsUpdate = true;
|
|
1461
|
+
|
|
1462
|
+
}
|
|
1463
|
+
|
|
1464
|
+
// WebGPU/WebGL coordinate system
|
|
1465
|
+
|
|
1466
|
+
const coordinateSystem = this.coordinateSystem;
|
|
1467
|
+
|
|
1468
|
+
if ( camera.coordinateSystem !== coordinateSystem ) {
|
|
1469
|
+
|
|
1470
|
+
camera.coordinateSystem = coordinateSystem;
|
|
1471
|
+
|
|
1472
|
+
if ( camera.isArrayCamera ) {
|
|
1473
|
+
|
|
1474
|
+
for ( const subCamera of camera.cameras ) {
|
|
1475
|
+
|
|
1476
|
+
subCamera.coordinateSystem = coordinateSystem;
|
|
1477
|
+
|
|
1478
|
+
}
|
|
1479
|
+
|
|
1480
|
+
}
|
|
1481
|
+
|
|
1482
|
+
projectionMatrixNeedsUpdate = true;
|
|
1483
|
+
|
|
1484
|
+
}
|
|
1485
|
+
|
|
1486
|
+
// camera update
|
|
1487
|
+
|
|
1488
|
+
if ( projectionMatrixNeedsUpdate === true ) {
|
|
1389
1489
|
|
|
1390
|
-
|
|
1391
|
-
camera.updateProjectionMatrix();
|
|
1490
|
+
camera.updateProjectionMatrix();
|
|
1392
1491
|
|
|
1393
|
-
|
|
1492
|
+
if ( camera.isArrayCamera ) {
|
|
1394
1493
|
|
|
1395
|
-
|
|
1494
|
+
for ( const subCamera of camera.cameras ) {
|
|
1396
1495
|
|
|
1397
|
-
|
|
1398
|
-
|
|
1496
|
+
subCamera.updateProjectionMatrix();
|
|
1497
|
+
|
|
1498
|
+
}
|
|
1399
1499
|
|
|
1400
1500
|
}
|
|
1401
1501
|
|
|
@@ -1564,9 +1664,12 @@ class Renderer {
|
|
|
1564
1664
|
|
|
1565
1665
|
this._currentRenderContext = previousRenderContext;
|
|
1566
1666
|
this._currentRenderObjectFunction = previousRenderObjectFunction;
|
|
1667
|
+
this._handleObjectFunction = previousHandleObjectFunction;
|
|
1567
1668
|
|
|
1568
1669
|
//
|
|
1569
1670
|
|
|
1671
|
+
this._callDepth --;
|
|
1672
|
+
|
|
1570
1673
|
if ( frameBufferTarget !== null ) {
|
|
1571
1674
|
|
|
1572
1675
|
this.setRenderTarget( outputRenderTarget, activeCubeFace, activeMipmapLevel );
|
|
@@ -1842,9 +1945,9 @@ class Renderer {
|
|
|
1842
1945
|
/**
|
|
1843
1946
|
* Defines the scissor rectangle.
|
|
1844
1947
|
*
|
|
1845
|
-
* @param {number | Vector4} x - The horizontal coordinate for the
|
|
1948
|
+
* @param {number | Vector4} x - The horizontal coordinate for the upper left corner of the box in logical pixel unit.
|
|
1846
1949
|
* Instead of passing four arguments, the method also works with a single four-dimensional vector.
|
|
1847
|
-
* @param {number} y - The vertical coordinate for the
|
|
1950
|
+
* @param {number} y - The vertical coordinate for the upper left corner of the box in logical pixel unit.
|
|
1848
1951
|
* @param {number} width - The width of the scissor box in logical pixel unit.
|
|
1849
1952
|
* @param {number} height - The height of the scissor box in logical pixel unit.
|
|
1850
1953
|
*/
|
|
@@ -1895,8 +1998,8 @@ class Renderer {
|
|
|
1895
1998
|
/**
|
|
1896
1999
|
* Defines the viewport.
|
|
1897
2000
|
*
|
|
1898
|
-
* @param {number | Vector4} x - The horizontal coordinate for the
|
|
1899
|
-
* @param {number} y - The vertical coordinate for the
|
|
2001
|
+
* @param {number | Vector4} x - The horizontal coordinate for the upper left corner of the viewport origin in logical pixel unit.
|
|
2002
|
+
* @param {number} y - The vertical coordinate for the upper left corner of the viewport origin in logical pixel unit.
|
|
1900
2003
|
* @param {number} width - The width of the viewport in logical pixel unit.
|
|
1901
2004
|
* @param {number} height - The height of the viewport in logical pixel unit.
|
|
1902
2005
|
* @param {number} minDepth - The minimum depth value of the viewport. WebGPU only.
|
|
@@ -1962,7 +2065,7 @@ class Renderer {
|
|
|
1962
2065
|
*/
|
|
1963
2066
|
getClearDepth() {
|
|
1964
2067
|
|
|
1965
|
-
return this._clearDepth;
|
|
2068
|
+
return ( this.reversedDepthBuffer === true ) ? 1 - this._clearDepth : this._clearDepth;
|
|
1966
2069
|
|
|
1967
2070
|
}
|
|
1968
2071
|
|
|
@@ -2040,7 +2143,7 @@ class Renderer {
|
|
|
2040
2143
|
|
|
2041
2144
|
const renderTargetData = this._textures.get( renderTarget );
|
|
2042
2145
|
|
|
2043
|
-
renderContext = this._renderContexts.
|
|
2146
|
+
renderContext = this._renderContexts.get( renderTarget );
|
|
2044
2147
|
renderContext.textures = renderTargetData.textures;
|
|
2045
2148
|
renderContext.depthTexture = renderTargetData.depthTexture;
|
|
2046
2149
|
renderContext.width = renderTargetData.width;
|
|
@@ -2049,7 +2152,13 @@ class Renderer {
|
|
|
2049
2152
|
renderContext.depth = renderTarget.depthBuffer;
|
|
2050
2153
|
renderContext.stencil = renderTarget.stencilBuffer;
|
|
2051
2154
|
// #30329
|
|
2052
|
-
|
|
2155
|
+
const color = this.backend.getClearColor();
|
|
2156
|
+
renderContext.clearColorValue.r = color.r;
|
|
2157
|
+
renderContext.clearColorValue.g = color.g;
|
|
2158
|
+
renderContext.clearColorValue.b = color.b;
|
|
2159
|
+
renderContext.clearColorValue.a = color.a;
|
|
2160
|
+
renderContext.clearDepthValue = this.getClearDepth();
|
|
2161
|
+
renderContext.clearStencilValue = this.getClearStencil();
|
|
2053
2162
|
renderContext.activeCubeFace = this.getActiveCubeFace();
|
|
2054
2163
|
renderContext.activeMipmapLevel = this.getActiveMipmapLevel();
|
|
2055
2164
|
|
|
@@ -2360,6 +2469,7 @@ class Renderer {
|
|
|
2360
2469
|
/**
|
|
2361
2470
|
* Resets the renderer to the initial state before WebXR started.
|
|
2362
2471
|
*
|
|
2472
|
+
* @private
|
|
2363
2473
|
*/
|
|
2364
2474
|
_resetXRState() {
|
|
2365
2475
|
|
|
@@ -2641,6 +2751,37 @@ class Renderer {
|
|
|
2641
2751
|
|
|
2642
2752
|
}
|
|
2643
2753
|
|
|
2754
|
+
/**
|
|
2755
|
+
* Initializes the given render target.
|
|
2756
|
+
*
|
|
2757
|
+
* @param {RenderTarget} renderTarget - The render target to intialize.
|
|
2758
|
+
*/
|
|
2759
|
+
initRenderTarget( renderTarget ) {
|
|
2760
|
+
|
|
2761
|
+
if ( this._initialized === false ) {
|
|
2762
|
+
|
|
2763
|
+
throw new Error( 'Renderer: .initRenderTarget() called before the backend is initialized. Use "await renderer.init();" before before using this method.' );
|
|
2764
|
+
|
|
2765
|
+
}
|
|
2766
|
+
|
|
2767
|
+
this._textures.updateRenderTarget( renderTarget );
|
|
2768
|
+
|
|
2769
|
+
const renderTargetData = this._textures.get( renderTarget );
|
|
2770
|
+
|
|
2771
|
+
const renderContext = this._renderContexts.get( renderTarget );
|
|
2772
|
+
|
|
2773
|
+
renderContext.textures = renderTargetData.textures;
|
|
2774
|
+
renderContext.depthTexture = renderTargetData.depthTexture;
|
|
2775
|
+
renderContext.width = renderTargetData.width;
|
|
2776
|
+
renderContext.height = renderTargetData.height;
|
|
2777
|
+
renderContext.renderTarget = renderTarget;
|
|
2778
|
+
renderContext.depth = renderTarget.depthBuffer;
|
|
2779
|
+
renderContext.stencil = renderTarget.stencilBuffer;
|
|
2780
|
+
|
|
2781
|
+
this.backend.initRenderTarget( renderContext );
|
|
2782
|
+
|
|
2783
|
+
}
|
|
2784
|
+
|
|
2644
2785
|
/**
|
|
2645
2786
|
* Copies the current bound framebuffer into the given texture.
|
|
2646
2787
|
*
|
|
@@ -2750,6 +2891,7 @@ class Renderer {
|
|
|
2750
2891
|
* Analyzes the given 3D object's hierarchy and builds render lists from the
|
|
2751
2892
|
* processed hierarchy.
|
|
2752
2893
|
*
|
|
2894
|
+
* @private
|
|
2753
2895
|
* @param {Object3D} object - The 3D object to process (usually a scene).
|
|
2754
2896
|
* @param {Camera} camera - The camera the object is rendered with.
|
|
2755
2897
|
* @param {number} groupOrder - The group order is derived from the `renderOrder` of groups and is used to group 3D objects within groups.
|
|
@@ -2975,6 +3117,7 @@ class Renderer {
|
|
|
2975
3117
|
* Retrieves shadow nodes for the given material. This is used to setup shadow passes.
|
|
2976
3118
|
* The result is cached per material and updated when the material's version changes.
|
|
2977
3119
|
*
|
|
3120
|
+
* @private
|
|
2978
3121
|
* @param {Material} material
|
|
2979
3122
|
* @returns {Object} - The shadow nodes for the material.
|
|
2980
3123
|
*/
|
|
@@ -2989,12 +3132,13 @@ class Renderer {
|
|
|
2989
3132
|
const hasMap = material.map !== null;
|
|
2990
3133
|
const hasColorNode = material.colorNode && material.colorNode.isNode;
|
|
2991
3134
|
const hasCastShadowNode = material.castShadowNode && material.castShadowNode.isNode;
|
|
3135
|
+
const hasMaskNode = ( material.maskShadowNode && material.maskShadowNode.isNode ) || ( material.maskNode && material.maskNode.isNode );
|
|
2992
3136
|
|
|
2993
3137
|
let positionNode = null;
|
|
2994
3138
|
let colorNode = null;
|
|
2995
3139
|
let depthNode = null;
|
|
2996
3140
|
|
|
2997
|
-
if ( hasMap || hasColorNode || hasCastShadowNode ) {
|
|
3141
|
+
if ( hasMap || hasColorNode || hasCastShadowNode || hasMaskNode ) {
|
|
2998
3142
|
|
|
2999
3143
|
let shadowRGB;
|
|
3000
3144
|
let shadowAlpha;
|
|
@@ -3004,6 +3148,12 @@ class Renderer {
|
|
|
3004
3148
|
shadowRGB = material.castShadowNode.rgb;
|
|
3005
3149
|
shadowAlpha = material.castShadowNode.a;
|
|
3006
3150
|
|
|
3151
|
+
if ( this.shadowMap.transmitted !== true ) {
|
|
3152
|
+
|
|
3153
|
+
warnOnce( 'Renderer: `shadowMap.transmitted` needs to be set to `true` when using `material.castShadowNode`.' );
|
|
3154
|
+
|
|
3155
|
+
}
|
|
3156
|
+
|
|
3007
3157
|
} else {
|
|
3008
3158
|
|
|
3009
3159
|
shadowRGB = vec3( 0 );
|
|
@@ -3025,6 +3175,20 @@ class Renderer {
|
|
|
3025
3175
|
|
|
3026
3176
|
colorNode = vec4( shadowRGB, shadowAlpha );
|
|
3027
3177
|
|
|
3178
|
+
if ( hasMaskNode ) {
|
|
3179
|
+
|
|
3180
|
+
const maskNode = material.maskShadowNode || material.maskNode;
|
|
3181
|
+
|
|
3182
|
+
colorNode = Fn( ( [ color ] ) => {
|
|
3183
|
+
|
|
3184
|
+
maskNode.not().discard();
|
|
3185
|
+
|
|
3186
|
+
return color;
|
|
3187
|
+
|
|
3188
|
+
} )( colorNode );
|
|
3189
|
+
|
|
3190
|
+
}
|
|
3191
|
+
|
|
3028
3192
|
}
|
|
3029
3193
|
|
|
3030
3194
|
if ( material.depthNode && material.depthNode.isNode ) {
|
|
@@ -3093,9 +3257,9 @@ class Renderer {
|
|
|
3093
3257
|
materialOverride = true;
|
|
3094
3258
|
|
|
3095
3259
|
// store original nodes
|
|
3096
|
-
materialColorNode =
|
|
3097
|
-
materialDepthNode =
|
|
3098
|
-
materialPositionNode =
|
|
3260
|
+
materialColorNode = ( overrideMaterial.isNodeMaterial ) ? overrideMaterial.colorNode : null;
|
|
3261
|
+
materialDepthNode = ( overrideMaterial.isNodeMaterial ) ? overrideMaterial.depthNode : null;
|
|
3262
|
+
materialPositionNode = ( overrideMaterial.isNodeMaterial ) ? overrideMaterial.positionNode : null;
|
|
3099
3263
|
materialSide = scene.overrideMaterial.side;
|
|
3100
3264
|
|
|
3101
3265
|
if ( material.positionNode && material.positionNode.isNode ) {
|
|
@@ -3114,7 +3278,15 @@ class Renderer {
|
|
|
3114
3278
|
|
|
3115
3279
|
const { colorNode, depthNode, positionNode } = this._getShadowNodes( material );
|
|
3116
3280
|
|
|
3117
|
-
|
|
3281
|
+
if ( this.shadowMap.type === VSMShadowMap ) {
|
|
3282
|
+
|
|
3283
|
+
overrideMaterial.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side;
|
|
3284
|
+
|
|
3285
|
+
} else {
|
|
3286
|
+
|
|
3287
|
+
overrideMaterial.side = ( material.shadowSide !== null ) ? material.shadowSide : _shadowSide[ material.side ];
|
|
3288
|
+
|
|
3289
|
+
}
|
|
3118
3290
|
|
|
3119
3291
|
if ( colorNode !== null ) overrideMaterial.colorNode = colorNode;
|
|
3120
3292
|
if ( depthNode !== null ) overrideMaterial.depthNode = depthNode;
|
|
@@ -3161,6 +3333,19 @@ class Renderer {
|
|
|
3161
3333
|
|
|
3162
3334
|
}
|
|
3163
3335
|
|
|
3336
|
+
/**
|
|
3337
|
+
* Checks if the given compatibility is supported by the selected backend. If the
|
|
3338
|
+
* renderer has not been initialized, this method always returns `false`.
|
|
3339
|
+
*
|
|
3340
|
+
* @param {string} name - The compatibility's name.
|
|
3341
|
+
* @return {boolean} Whether the compatibility is supported or not.
|
|
3342
|
+
*/
|
|
3343
|
+
hasCompatibility( name ) {
|
|
3344
|
+
|
|
3345
|
+
return this.backend.hasCompatibility( name );
|
|
3346
|
+
|
|
3347
|
+
}
|
|
3348
|
+
|
|
3164
3349
|
/**
|
|
3165
3350
|
* This method represents the default `_handleObjectFunction` implementation which creates
|
|
3166
3351
|
* a render object from the given data and performs the draw command with the selected backend.
|
|
@@ -3181,6 +3366,16 @@ class Renderer {
|
|
|
3181
3366
|
renderObject.drawRange = object.geometry.drawRange;
|
|
3182
3367
|
renderObject.group = group;
|
|
3183
3368
|
|
|
3369
|
+
if ( this._currentRenderBundle !== null ) {
|
|
3370
|
+
|
|
3371
|
+
const renderBundleData = this.backend.get( this._currentRenderBundle );
|
|
3372
|
+
|
|
3373
|
+
renderBundleData.renderObjects.push( renderObject );
|
|
3374
|
+
|
|
3375
|
+
renderObject.bundle = this._currentRenderBundle.bundleGroup;
|
|
3376
|
+
|
|
3377
|
+
}
|
|
3378
|
+
|
|
3184
3379
|
//
|
|
3185
3380
|
|
|
3186
3381
|
const needsRefresh = this._nodes.needsRefresh( renderObject );
|
|
@@ -3200,16 +3395,6 @@ class Renderer {
|
|
|
3200
3395
|
|
|
3201
3396
|
//
|
|
3202
3397
|
|
|
3203
|
-
if ( this._currentRenderBundle !== null ) {
|
|
3204
|
-
|
|
3205
|
-
const renderBundleData = this.backend.get( this._currentRenderBundle );
|
|
3206
|
-
|
|
3207
|
-
renderBundleData.renderObjects.push( renderObject );
|
|
3208
|
-
|
|
3209
|
-
renderObject.bundle = this._currentRenderBundle.bundleGroup;
|
|
3210
|
-
|
|
3211
|
-
}
|
|
3212
|
-
|
|
3213
3398
|
this.backend.draw( renderObject, this.info );
|
|
3214
3399
|
|
|
3215
3400
|
if ( needsRefresh ) this._nodes.updateAfter( renderObject );
|