@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
|
@@ -7,21 +7,21 @@ import { UniformsUtils } from '../shaders/UniformsUtils.js';
|
|
|
7
7
|
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
8
8
|
import { warn } from '../../utils.js';
|
|
9
9
|
|
|
10
|
-
function WebGLPrograms( renderer,
|
|
10
|
+
function WebGLPrograms( renderer, environments, extensions, capabilities, bindingStates, clipping ) {
|
|
11
11
|
|
|
12
12
|
const _programLayers = new Layers();
|
|
13
13
|
const _customShaders = new WebGLShaderCache();
|
|
14
14
|
const _activeChannels = new Set();
|
|
15
15
|
const programs = [];
|
|
16
|
+
const programsMap = new Map();
|
|
16
17
|
|
|
17
18
|
const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;
|
|
18
|
-
const SUPPORTS_VERTEX_TEXTURES = capabilities.vertexTextures;
|
|
19
19
|
|
|
20
20
|
let precision = capabilities.precision;
|
|
21
21
|
|
|
22
22
|
const shaderIDs = {
|
|
23
23
|
MeshDepthMaterial: 'depth',
|
|
24
|
-
MeshDistanceMaterial: '
|
|
24
|
+
MeshDistanceMaterial: 'distance',
|
|
25
25
|
MeshNormalMaterial: 'normal',
|
|
26
26
|
MeshBasicMaterial: 'basic',
|
|
27
27
|
MeshLambertMaterial: 'lambert',
|
|
@@ -51,9 +51,10 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
51
51
|
|
|
52
52
|
const fog = scene.fog;
|
|
53
53
|
const geometry = object.geometry;
|
|
54
|
-
const environment = material.isMeshStandardMaterial ? scene.environment : null;
|
|
54
|
+
const environment = ( material.isMeshStandardMaterial || material.isMeshLambertMaterial || material.isMeshPhongMaterial ) ? scene.environment : null;
|
|
55
55
|
|
|
56
|
-
const
|
|
56
|
+
const usePMREM = material.isMeshStandardMaterial || ( material.isMeshLambertMaterial && ! material.envMap ) || ( material.isMeshPhongMaterial && ! material.envMap );
|
|
57
|
+
const envMap = environments.get( material.envMap || environment, usePMREM );
|
|
57
58
|
const envMapCubeUVHeight = ( !! envMap ) && ( envMap.mapping === CubeUVReflectionMapping ) ? envMap.image.height : null;
|
|
58
59
|
|
|
59
60
|
const shaderID = shaderIDs[ material.type ];
|
|
@@ -200,7 +201,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
200
201
|
instancingColor: IS_INSTANCEDMESH && object.instanceColor !== null,
|
|
201
202
|
instancingMorph: IS_INSTANCEDMESH && object.morphTexture !== null,
|
|
202
203
|
|
|
203
|
-
supportsVertexTextures: SUPPORTS_VERTEX_TEXTURES,
|
|
204
204
|
outputColorSpace: ( currentRenderTarget === null ) ? renderer.outputColorSpace : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace ),
|
|
205
205
|
alphaToCoverage: !! material.alphaToCoverage,
|
|
206
206
|
|
|
@@ -213,7 +213,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
213
213
|
lightMap: HAS_LIGHTMAP,
|
|
214
214
|
bumpMap: HAS_BUMPMAP,
|
|
215
215
|
normalMap: HAS_NORMALMAP,
|
|
216
|
-
displacementMap:
|
|
216
|
+
displacementMap: HAS_DISPLACEMENTMAP,
|
|
217
217
|
emissiveMap: HAS_EMISSIVEMAP,
|
|
218
218
|
|
|
219
219
|
normalMapObjectSpace: HAS_NORMALMAP && material.normalMapType === ObjectSpaceNormalMap,
|
|
@@ -311,7 +311,12 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
311
311
|
useFog: material.fog === true,
|
|
312
312
|
fogExp2: ( !! fog && fog.isFogExp2 ),
|
|
313
313
|
|
|
314
|
-
flatShading:
|
|
314
|
+
flatShading: material.wireframe === false && (
|
|
315
|
+
material.flatShading === true ||
|
|
316
|
+
( geometry.attributes.normal === undefined && HAS_NORMALMAP === false &&
|
|
317
|
+
( material.isMeshLambertMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial || material.isMeshPhysicalMaterial )
|
|
318
|
+
)
|
|
319
|
+
),
|
|
315
320
|
|
|
316
321
|
sizeAttenuation: material.sizeAttenuation === true,
|
|
317
322
|
logarithmicDepthBuffer: logarithmicDepthBuffer,
|
|
@@ -487,54 +492,52 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
487
492
|
|
|
488
493
|
_programLayers.disableAll();
|
|
489
494
|
|
|
490
|
-
if ( parameters.supportsVertexTextures )
|
|
491
|
-
_programLayers.enable( 0 );
|
|
492
495
|
if ( parameters.instancing )
|
|
493
|
-
_programLayers.enable(
|
|
496
|
+
_programLayers.enable( 0 );
|
|
494
497
|
if ( parameters.instancingColor )
|
|
495
|
-
_programLayers.enable(
|
|
498
|
+
_programLayers.enable( 1 );
|
|
496
499
|
if ( parameters.instancingMorph )
|
|
497
|
-
_programLayers.enable(
|
|
500
|
+
_programLayers.enable( 2 );
|
|
498
501
|
if ( parameters.matcap )
|
|
499
|
-
_programLayers.enable(
|
|
502
|
+
_programLayers.enable( 3 );
|
|
500
503
|
if ( parameters.envMap )
|
|
501
|
-
_programLayers.enable(
|
|
504
|
+
_programLayers.enable( 4 );
|
|
502
505
|
if ( parameters.normalMapObjectSpace )
|
|
503
|
-
_programLayers.enable(
|
|
506
|
+
_programLayers.enable( 5 );
|
|
504
507
|
if ( parameters.normalMapTangentSpace )
|
|
505
|
-
_programLayers.enable(
|
|
508
|
+
_programLayers.enable( 6 );
|
|
506
509
|
if ( parameters.clearcoat )
|
|
507
|
-
_programLayers.enable(
|
|
510
|
+
_programLayers.enable( 7 );
|
|
508
511
|
if ( parameters.iridescence )
|
|
509
|
-
_programLayers.enable(
|
|
512
|
+
_programLayers.enable( 8 );
|
|
510
513
|
if ( parameters.alphaTest )
|
|
511
|
-
_programLayers.enable(
|
|
514
|
+
_programLayers.enable( 9 );
|
|
512
515
|
if ( parameters.vertexColors )
|
|
513
|
-
_programLayers.enable(
|
|
516
|
+
_programLayers.enable( 10 );
|
|
514
517
|
if ( parameters.vertexAlphas )
|
|
515
|
-
_programLayers.enable(
|
|
518
|
+
_programLayers.enable( 11 );
|
|
516
519
|
if ( parameters.vertexUv1s )
|
|
517
|
-
_programLayers.enable(
|
|
520
|
+
_programLayers.enable( 12 );
|
|
518
521
|
if ( parameters.vertexUv2s )
|
|
519
|
-
_programLayers.enable(
|
|
522
|
+
_programLayers.enable( 13 );
|
|
520
523
|
if ( parameters.vertexUv3s )
|
|
521
|
-
_programLayers.enable(
|
|
524
|
+
_programLayers.enable( 14 );
|
|
522
525
|
if ( parameters.vertexTangents )
|
|
523
|
-
_programLayers.enable(
|
|
526
|
+
_programLayers.enable( 15 );
|
|
524
527
|
if ( parameters.anisotropy )
|
|
525
|
-
_programLayers.enable(
|
|
528
|
+
_programLayers.enable( 16 );
|
|
526
529
|
if ( parameters.alphaHash )
|
|
527
|
-
_programLayers.enable(
|
|
530
|
+
_programLayers.enable( 17 );
|
|
528
531
|
if ( parameters.batching )
|
|
529
|
-
_programLayers.enable(
|
|
532
|
+
_programLayers.enable( 18 );
|
|
530
533
|
if ( parameters.dispersion )
|
|
531
|
-
_programLayers.enable(
|
|
534
|
+
_programLayers.enable( 19 );
|
|
532
535
|
if ( parameters.batchingColor )
|
|
533
|
-
_programLayers.enable(
|
|
536
|
+
_programLayers.enable( 20 );
|
|
534
537
|
if ( parameters.gradientMap )
|
|
535
|
-
_programLayers.enable(
|
|
538
|
+
_programLayers.enable( 21 );
|
|
536
539
|
if ( parameters.batchingMatrix )
|
|
537
|
-
_programLayers.enable(
|
|
540
|
+
_programLayers.enable( 22 );
|
|
538
541
|
|
|
539
542
|
array.push( _programLayers.mask );
|
|
540
543
|
_programLayers.disableAll();
|
|
@@ -610,29 +613,19 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
610
613
|
|
|
611
614
|
function acquireProgram( parameters, cacheKey ) {
|
|
612
615
|
|
|
613
|
-
let program;
|
|
614
|
-
|
|
615
|
-
// Check if code has been already compiled
|
|
616
|
-
for ( let p = 0, pl = programs.length; p < pl; p ++ ) {
|
|
617
|
-
|
|
618
|
-
const preexistingProgram = programs[ p ];
|
|
619
|
-
|
|
620
|
-
if ( preexistingProgram.cacheKey === cacheKey ) {
|
|
616
|
+
let program = programsMap.get( cacheKey );
|
|
621
617
|
|
|
622
|
-
|
|
623
|
-
++ program.usedTimes;
|
|
618
|
+
if ( program !== undefined ) {
|
|
624
619
|
|
|
625
|
-
|
|
620
|
+
++ program.usedTimes;
|
|
626
621
|
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
}
|
|
630
|
-
|
|
631
|
-
if ( program === undefined ) {
|
|
622
|
+
} else {
|
|
632
623
|
|
|
633
624
|
program = new WebGLProgram( renderer, cacheKey, parameters, bindingStates );
|
|
634
625
|
programs.push( program );
|
|
635
626
|
|
|
627
|
+
programsMap.set( cacheKey, program );
|
|
628
|
+
|
|
636
629
|
}
|
|
637
630
|
|
|
638
631
|
return program;
|
|
@@ -648,6 +641,9 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
648
641
|
programs[ i ] = programs[ programs.length - 1 ];
|
|
649
642
|
programs.pop();
|
|
650
643
|
|
|
644
|
+
// Remove from map
|
|
645
|
+
programsMap.delete( program.cacheKey );
|
|
646
|
+
|
|
651
647
|
// Free WebGL resources
|
|
652
648
|
program.destroy();
|
|
653
649
|
|
|
@@ -12,6 +12,10 @@ function painterSortStable( a, b ) {
|
|
|
12
12
|
|
|
13
13
|
return a.material.id - b.material.id;
|
|
14
14
|
|
|
15
|
+
} else if ( a.materialVariant !== b.materialVariant ) {
|
|
16
|
+
|
|
17
|
+
return a.materialVariant - b.materialVariant;
|
|
18
|
+
|
|
15
19
|
} else if ( a.z !== b.z ) {
|
|
16
20
|
|
|
17
21
|
return a.z - b.z;
|
|
@@ -66,6 +70,15 @@ function WebGLRenderList() {
|
|
|
66
70
|
|
|
67
71
|
}
|
|
68
72
|
|
|
73
|
+
function materialVariant( object ) {
|
|
74
|
+
|
|
75
|
+
let variant = 0;
|
|
76
|
+
if ( object.isInstancedMesh ) variant += 2;
|
|
77
|
+
if ( object.isSkinnedMesh ) variant += 1;
|
|
78
|
+
return variant;
|
|
79
|
+
|
|
80
|
+
}
|
|
81
|
+
|
|
69
82
|
function getNextRenderItem( object, geometry, material, groupOrder, z, group ) {
|
|
70
83
|
|
|
71
84
|
let renderItem = renderItems[ renderItemsIndex ];
|
|
@@ -77,6 +90,7 @@ function WebGLRenderList() {
|
|
|
77
90
|
object: object,
|
|
78
91
|
geometry: geometry,
|
|
79
92
|
material: material,
|
|
93
|
+
materialVariant: materialVariant( object ),
|
|
80
94
|
groupOrder: groupOrder,
|
|
81
95
|
renderOrder: object.renderOrder,
|
|
82
96
|
z: z,
|
|
@@ -91,6 +105,7 @@ function WebGLRenderList() {
|
|
|
91
105
|
renderItem.object = object;
|
|
92
106
|
renderItem.geometry = geometry;
|
|
93
107
|
renderItem.material = material;
|
|
108
|
+
renderItem.materialVariant = materialVariant( object );
|
|
94
109
|
renderItem.groupOrder = groupOrder;
|
|
95
110
|
renderItem.renderOrder = object.renderOrder;
|
|
96
111
|
renderItem.z = z;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { FrontSide, BackSide, DoubleSide, NearestFilter, PCFShadowMap, VSMShadowMap,
|
|
1
|
+
import { FrontSide, BackSide, DoubleSide, NearestFilter, LinearFilter, PCFShadowMap, VSMShadowMap, NoBlending, LessEqualCompare, GreaterEqualCompare, DepthFormat, UnsignedIntType, RGFormat, HalfFloatType, FloatType, PCFSoftShadowMap } from '../../constants.js';
|
|
2
2
|
import { WebGLRenderTarget } from '../WebGLRenderTarget.js';
|
|
3
|
+
import { WebGLCubeRenderTarget } from '../WebGLCubeRenderTarget.js';
|
|
3
4
|
import { MeshDepthMaterial } from '../../materials/MeshDepthMaterial.js';
|
|
4
5
|
import { MeshDistanceMaterial } from '../../materials/MeshDistanceMaterial.js';
|
|
5
6
|
import { ShaderMaterial } from '../../materials/ShaderMaterial.js';
|
|
@@ -8,10 +9,28 @@ import { BufferGeometry } from '../../core/BufferGeometry.js';
|
|
|
8
9
|
import { Mesh } from '../../objects/Mesh.js';
|
|
9
10
|
import { Vector4 } from '../../math/Vector4.js';
|
|
10
11
|
import { Vector2 } from '../../math/Vector2.js';
|
|
12
|
+
import { Matrix4 } from '../../math/Matrix4.js';
|
|
11
13
|
import { Frustum } from '../../math/Frustum.js';
|
|
14
|
+
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
15
|
+
import { CubeDepthTexture } from '../../textures/CubeDepthTexture.js';
|
|
12
16
|
|
|
13
17
|
import * as vsm from '../shaders/ShaderLib/vsm.glsl.js';
|
|
14
18
|
import { warn } from '../../utils.js';
|
|
19
|
+
import { Vector3 } from '../../math/Vector3.js';
|
|
20
|
+
|
|
21
|
+
const _cubeDirections = [
|
|
22
|
+
/*@__PURE__*/ new Vector3( 1, 0, 0 ), /*@__PURE__*/ new Vector3( - 1, 0, 0 ), /*@__PURE__*/ new Vector3( 0, 1, 0 ),
|
|
23
|
+
/*@__PURE__*/ new Vector3( 0, - 1, 0 ), /*@__PURE__*/ new Vector3( 0, 0, 1 ), /*@__PURE__*/ new Vector3( 0, 0, - 1 )
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
const _cubeUps = [
|
|
27
|
+
/*@__PURE__*/ new Vector3( 0, - 1, 0 ), /*@__PURE__*/ new Vector3( 0, - 1, 0 ), /*@__PURE__*/ new Vector3( 0, 0, 1 ),
|
|
28
|
+
/*@__PURE__*/ new Vector3( 0, 0, - 1 ), /*@__PURE__*/ new Vector3( 0, - 1, 0 ), /*@__PURE__*/ new Vector3( 0, - 1, 0 )
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
const _projScreenMatrix = /*@__PURE__*/ new Matrix4();
|
|
32
|
+
const _lightPositionWorld = /*@__PURE__*/ new Vector3();
|
|
33
|
+
const _lookTarget = /*@__PURE__*/ new Vector3();
|
|
15
34
|
|
|
16
35
|
function WebGLShadowMap( renderer, objects, capabilities ) {
|
|
17
36
|
|
|
@@ -22,7 +41,7 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
|
|
|
22
41
|
|
|
23
42
|
_viewport = new Vector4(),
|
|
24
43
|
|
|
25
|
-
_depthMaterial = new MeshDepthMaterial(
|
|
44
|
+
_depthMaterial = new MeshDepthMaterial(),
|
|
26
45
|
_distanceMaterial = new MeshDistanceMaterial(),
|
|
27
46
|
|
|
28
47
|
_materialCache = {},
|
|
@@ -77,6 +96,13 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
|
|
|
77
96
|
|
|
78
97
|
if ( lights.length === 0 ) return;
|
|
79
98
|
|
|
99
|
+
if ( this.type === PCFSoftShadowMap ) {
|
|
100
|
+
|
|
101
|
+
warn( 'WebGLShadowMap: PCFSoftShadowMap has been deprecated. Using PCFShadowMap instead.' );
|
|
102
|
+
this.type = PCFShadowMap;
|
|
103
|
+
|
|
104
|
+
}
|
|
105
|
+
|
|
80
106
|
const currentRenderTarget = renderer.getRenderTarget();
|
|
81
107
|
const activeCubeFace = renderer.getActiveCubeFace();
|
|
82
108
|
const activeMipmapLevel = renderer.getActiveMipmapLevel();
|
|
@@ -101,8 +127,31 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
|
|
|
101
127
|
|
|
102
128
|
// check for shadow map type changes
|
|
103
129
|
|
|
104
|
-
const
|
|
105
|
-
|
|
130
|
+
const typeChanged = _previousType !== this.type;
|
|
131
|
+
|
|
132
|
+
// When shadow map type changes, materials need recompilation because sampler types change
|
|
133
|
+
// (sampler2DShadow for PCF vs sampler2D for Basic)
|
|
134
|
+
if ( typeChanged ) {
|
|
135
|
+
|
|
136
|
+
scene.traverse( function ( object ) {
|
|
137
|
+
|
|
138
|
+
if ( object.material ) {
|
|
139
|
+
|
|
140
|
+
if ( Array.isArray( object.material ) ) {
|
|
141
|
+
|
|
142
|
+
object.material.forEach( mat => mat.needsUpdate = true );
|
|
143
|
+
|
|
144
|
+
} else {
|
|
145
|
+
|
|
146
|
+
object.material.needsUpdate = true;
|
|
147
|
+
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
} );
|
|
153
|
+
|
|
154
|
+
}
|
|
106
155
|
|
|
107
156
|
// render depth map
|
|
108
157
|
|
|
@@ -148,42 +197,154 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
|
|
|
148
197
|
|
|
149
198
|
}
|
|
150
199
|
|
|
151
|
-
|
|
200
|
+
const reversedDepthBuffer = renderer.state.buffers.depth.getReversed();
|
|
201
|
+
shadow.camera._reversedDepth = reversedDepthBuffer;
|
|
152
202
|
|
|
153
|
-
|
|
203
|
+
if ( shadow.map === null || typeChanged === true ) {
|
|
154
204
|
|
|
155
205
|
if ( shadow.map !== null ) {
|
|
156
206
|
|
|
207
|
+
if ( shadow.map.depthTexture !== null ) {
|
|
208
|
+
|
|
209
|
+
shadow.map.depthTexture.dispose();
|
|
210
|
+
shadow.map.depthTexture = null;
|
|
211
|
+
|
|
212
|
+
}
|
|
213
|
+
|
|
157
214
|
shadow.map.dispose();
|
|
158
215
|
|
|
159
216
|
}
|
|
160
217
|
|
|
161
|
-
|
|
162
|
-
|
|
218
|
+
if ( this.type === VSMShadowMap ) {
|
|
219
|
+
|
|
220
|
+
if ( light.isPointLight ) {
|
|
221
|
+
|
|
222
|
+
warn( 'WebGLShadowMap: VSM shadow maps are not supported for PointLights. Use PCF or BasicShadowMap instead.' );
|
|
223
|
+
continue;
|
|
224
|
+
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, {
|
|
228
|
+
format: RGFormat,
|
|
229
|
+
type: HalfFloatType,
|
|
230
|
+
minFilter: LinearFilter,
|
|
231
|
+
magFilter: LinearFilter,
|
|
232
|
+
generateMipmaps: false
|
|
233
|
+
} );
|
|
234
|
+
shadow.map.texture.name = light.name + '.shadowMap';
|
|
235
|
+
|
|
236
|
+
// Native depth texture for VSM - depth is captured here, then blurred into the color texture
|
|
237
|
+
shadow.map.depthTexture = new DepthTexture( _shadowMapSize.x, _shadowMapSize.y, FloatType );
|
|
238
|
+
shadow.map.depthTexture.name = light.name + '.shadowMapDepth';
|
|
239
|
+
shadow.map.depthTexture.format = DepthFormat;
|
|
240
|
+
shadow.map.depthTexture.compareFunction = null; // For regular sampling (not shadow comparison)
|
|
241
|
+
shadow.map.depthTexture.minFilter = NearestFilter;
|
|
242
|
+
shadow.map.depthTexture.magFilter = NearestFilter;
|
|
243
|
+
|
|
244
|
+
} else {
|
|
245
|
+
|
|
246
|
+
if ( light.isPointLight ) {
|
|
247
|
+
|
|
248
|
+
shadow.map = new WebGLCubeRenderTarget( _shadowMapSize.x );
|
|
249
|
+
shadow.map.depthTexture = new CubeDepthTexture( _shadowMapSize.x, UnsignedIntType );
|
|
250
|
+
|
|
251
|
+
} else {
|
|
252
|
+
|
|
253
|
+
shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y );
|
|
254
|
+
shadow.map.depthTexture = new DepthTexture( _shadowMapSize.x, _shadowMapSize.y, UnsignedIntType );
|
|
255
|
+
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
shadow.map.depthTexture.name = light.name + '.shadowMap';
|
|
259
|
+
shadow.map.depthTexture.format = DepthFormat;
|
|
260
|
+
|
|
261
|
+
if ( this.type === PCFShadowMap ) {
|
|
262
|
+
|
|
263
|
+
shadow.map.depthTexture.compareFunction = reversedDepthBuffer ? GreaterEqualCompare : LessEqualCompare;
|
|
264
|
+
shadow.map.depthTexture.minFilter = LinearFilter;
|
|
265
|
+
shadow.map.depthTexture.magFilter = LinearFilter;
|
|
266
|
+
|
|
267
|
+
} else {
|
|
268
|
+
|
|
269
|
+
shadow.map.depthTexture.compareFunction = null;
|
|
270
|
+
shadow.map.depthTexture.minFilter = NearestFilter;
|
|
271
|
+
shadow.map.depthTexture.magFilter = NearestFilter;
|
|
272
|
+
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
}
|
|
163
276
|
|
|
164
277
|
shadow.camera.updateProjectionMatrix();
|
|
165
278
|
|
|
166
279
|
}
|
|
167
280
|
|
|
168
|
-
|
|
169
|
-
|
|
281
|
+
// For cube render targets (PointLights), render all 6 faces. Otherwise, render once.
|
|
282
|
+
const faceCount = shadow.map.isWebGLCubeRenderTarget ? 6 : 1;
|
|
283
|
+
|
|
284
|
+
for ( let face = 0; face < faceCount; face ++ ) {
|
|
285
|
+
|
|
286
|
+
// For cube render targets, render to each face separately
|
|
287
|
+
if ( shadow.map.isWebGLCubeRenderTarget ) {
|
|
288
|
+
|
|
289
|
+
renderer.setRenderTarget( shadow.map, face );
|
|
290
|
+
renderer.clear();
|
|
291
|
+
|
|
292
|
+
} else {
|
|
293
|
+
|
|
294
|
+
// For 2D render targets, use viewports
|
|
295
|
+
if ( face === 0 ) {
|
|
170
296
|
|
|
171
|
-
|
|
297
|
+
renderer.setRenderTarget( shadow.map );
|
|
298
|
+
renderer.clear();
|
|
172
299
|
|
|
173
|
-
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
const viewport = shadow.getViewport( face );
|
|
303
|
+
|
|
304
|
+
_viewport.set(
|
|
305
|
+
_viewportSize.x * viewport.x,
|
|
306
|
+
_viewportSize.y * viewport.y,
|
|
307
|
+
_viewportSize.x * viewport.z,
|
|
308
|
+
_viewportSize.y * viewport.w
|
|
309
|
+
);
|
|
174
310
|
|
|
175
|
-
|
|
311
|
+
_state.viewport( _viewport );
|
|
312
|
+
|
|
313
|
+
}
|
|
176
314
|
|
|
177
|
-
|
|
178
|
-
_viewportSize.x * viewport.x,
|
|
179
|
-
_viewportSize.y * viewport.y,
|
|
180
|
-
_viewportSize.x * viewport.z,
|
|
181
|
-
_viewportSize.y * viewport.w
|
|
182
|
-
);
|
|
315
|
+
if ( light.isPointLight ) {
|
|
183
316
|
|
|
184
|
-
|
|
317
|
+
const camera = shadow.camera;
|
|
318
|
+
const shadowMatrix = shadow.matrix;
|
|
185
319
|
|
|
186
|
-
|
|
320
|
+
const far = light.distance || camera.far;
|
|
321
|
+
|
|
322
|
+
if ( far !== camera.far ) {
|
|
323
|
+
|
|
324
|
+
camera.far = far;
|
|
325
|
+
camera.updateProjectionMatrix();
|
|
326
|
+
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );
|
|
330
|
+
camera.position.copy( _lightPositionWorld );
|
|
331
|
+
|
|
332
|
+
_lookTarget.copy( camera.position );
|
|
333
|
+
_lookTarget.add( _cubeDirections[ face ] );
|
|
334
|
+
camera.up.copy( _cubeUps[ face ] );
|
|
335
|
+
camera.lookAt( _lookTarget );
|
|
336
|
+
camera.updateMatrixWorld();
|
|
337
|
+
|
|
338
|
+
shadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );
|
|
339
|
+
|
|
340
|
+
_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
|
|
341
|
+
shadow._frustum.setFromProjectionMatrix( _projScreenMatrix, camera.coordinateSystem, camera.reversedDepth );
|
|
342
|
+
|
|
343
|
+
} else {
|
|
344
|
+
|
|
345
|
+
shadow.updateMatrices( light );
|
|
346
|
+
|
|
347
|
+
}
|
|
187
348
|
|
|
188
349
|
_frustum = shadow.getFrustum();
|
|
189
350
|
|
|
@@ -227,13 +388,16 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
|
|
|
227
388
|
|
|
228
389
|
if ( shadow.mapPass === null ) {
|
|
229
390
|
|
|
230
|
-
shadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y
|
|
391
|
+
shadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, {
|
|
392
|
+
format: RGFormat,
|
|
393
|
+
type: HalfFloatType
|
|
394
|
+
} );
|
|
231
395
|
|
|
232
396
|
}
|
|
233
397
|
|
|
234
|
-
// vertical pass
|
|
398
|
+
// vertical pass - read from native depth texture
|
|
235
399
|
|
|
236
|
-
shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.
|
|
400
|
+
shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.depthTexture;
|
|
237
401
|
shadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;
|
|
238
402
|
shadowMaterialVertical.uniforms.radius.value = shadow.radius;
|
|
239
403
|
renderer.setRenderTarget( shadow.mapPass );
|