@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
|
@@ -15,7 +15,16 @@ export default /* glsl */`
|
|
|
15
15
|
|
|
16
16
|
#if NUM_DIR_LIGHT_SHADOWS > 0
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
#if defined( SHADOWMAP_TYPE_PCF )
|
|
19
|
+
|
|
20
|
+
uniform sampler2DShadow directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];
|
|
21
|
+
|
|
22
|
+
#else
|
|
23
|
+
|
|
24
|
+
uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];
|
|
25
|
+
|
|
26
|
+
#endif
|
|
27
|
+
|
|
19
28
|
varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];
|
|
20
29
|
|
|
21
30
|
struct DirectionalLightShadow {
|
|
@@ -32,7 +41,15 @@ export default /* glsl */`
|
|
|
32
41
|
|
|
33
42
|
#if NUM_SPOT_LIGHT_SHADOWS > 0
|
|
34
43
|
|
|
35
|
-
|
|
44
|
+
#if defined( SHADOWMAP_TYPE_PCF )
|
|
45
|
+
|
|
46
|
+
uniform sampler2DShadow spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];
|
|
47
|
+
|
|
48
|
+
#else
|
|
49
|
+
|
|
50
|
+
uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];
|
|
51
|
+
|
|
52
|
+
#endif
|
|
36
53
|
|
|
37
54
|
struct SpotLightShadow {
|
|
38
55
|
float shadowIntensity;
|
|
@@ -48,7 +65,16 @@ export default /* glsl */`
|
|
|
48
65
|
|
|
49
66
|
#if NUM_POINT_LIGHT_SHADOWS > 0
|
|
50
67
|
|
|
51
|
-
|
|
68
|
+
#if defined( SHADOWMAP_TYPE_PCF )
|
|
69
|
+
|
|
70
|
+
uniform samplerCubeShadow pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];
|
|
71
|
+
|
|
72
|
+
#elif defined( SHADOWMAP_TYPE_BASIC )
|
|
73
|
+
|
|
74
|
+
uniform samplerCube pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];
|
|
75
|
+
|
|
76
|
+
#endif
|
|
77
|
+
|
|
52
78
|
varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];
|
|
53
79
|
|
|
54
80
|
struct PointLightShadow {
|
|
@@ -65,273 +91,286 @@ export default /* glsl */`
|
|
|
65
91
|
|
|
66
92
|
#endif
|
|
67
93
|
|
|
68
|
-
|
|
94
|
+
#if defined( SHADOWMAP_TYPE_PCF )
|
|
69
95
|
|
|
70
|
-
|
|
96
|
+
// Interleaved Gradient Noise for randomizing sampling patterns
|
|
97
|
+
float interleavedGradientNoise( vec2 position ) {
|
|
71
98
|
|
|
72
|
-
|
|
99
|
+
return fract( 52.9829189 * fract( dot( position, vec2( 0.06711056, 0.00583715 ) ) ) );
|
|
73
100
|
|
|
74
|
-
|
|
101
|
+
}
|
|
75
102
|
|
|
76
|
-
|
|
103
|
+
// Vogel disk sampling for uniform circular distribution
|
|
104
|
+
vec2 vogelDiskSample( int sampleIndex, int samplesCount, float phi ) {
|
|
77
105
|
|
|
78
|
-
|
|
106
|
+
const float goldenAngle = 2.399963229728653;
|
|
107
|
+
float r = sqrt( ( float( sampleIndex ) + 0.5 ) / float( samplesCount ) );
|
|
108
|
+
float theta = float( sampleIndex ) * goldenAngle + phi;
|
|
109
|
+
return vec2( cos( theta ), sin( theta ) ) * r;
|
|
79
110
|
|
|
80
|
-
|
|
111
|
+
}
|
|
81
112
|
|
|
82
|
-
|
|
113
|
+
#endif
|
|
83
114
|
|
|
84
|
-
|
|
115
|
+
#if defined( SHADOWMAP_TYPE_PCF )
|
|
85
116
|
|
|
86
|
-
|
|
117
|
+
float getShadow( sampler2DShadow shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {
|
|
87
118
|
|
|
88
|
-
|
|
119
|
+
float shadow = 1.0;
|
|
89
120
|
|
|
90
|
-
|
|
121
|
+
shadowCoord.xyz /= shadowCoord.w;
|
|
122
|
+
shadowCoord.z += shadowBias;
|
|
91
123
|
|
|
92
|
-
|
|
124
|
+
bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;
|
|
125
|
+
bool frustumTest = inFrustum && shadowCoord.z <= 1.0;
|
|
93
126
|
|
|
94
|
-
|
|
127
|
+
if ( frustumTest ) {
|
|
95
128
|
|
|
96
|
-
|
|
129
|
+
// Hardware PCF with LinearFilter gives us 4-tap filtering per sample
|
|
130
|
+
// 5 samples using Vogel disk + IGN = effectively 20 filtered taps with better distribution
|
|
131
|
+
vec2 texelSize = vec2( 1.0 ) / shadowMapSize;
|
|
132
|
+
float radius = shadowRadius * texelSize.x;
|
|
97
133
|
|
|
98
|
-
|
|
134
|
+
// Use IGN to rotate sampling pattern per pixel
|
|
135
|
+
float phi = interleavedGradientNoise( gl_FragCoord.xy ) * PI2;
|
|
99
136
|
|
|
100
|
-
|
|
137
|
+
shadow = (
|
|
138
|
+
texture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 0, 5, phi ) * radius, shadowCoord.z ) ) +
|
|
139
|
+
texture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 1, 5, phi ) * radius, shadowCoord.z ) ) +
|
|
140
|
+
texture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 2, 5, phi ) * radius, shadowCoord.z ) ) +
|
|
141
|
+
texture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 3, 5, phi ) * radius, shadowCoord.z ) ) +
|
|
142
|
+
texture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 4, 5, phi ) * radius, shadowCoord.z ) )
|
|
143
|
+
) * 0.2;
|
|
101
144
|
|
|
102
|
-
|
|
145
|
+
}
|
|
103
146
|
|
|
104
|
-
|
|
147
|
+
return mix( 1.0, shadow, shadowIntensity );
|
|
148
|
+
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
#elif defined( SHADOWMAP_TYPE_VSM )
|
|
152
|
+
|
|
153
|
+
float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {
|
|
154
|
+
|
|
155
|
+
float shadow = 1.0;
|
|
156
|
+
|
|
157
|
+
shadowCoord.xyz /= shadowCoord.w;
|
|
158
|
+
|
|
159
|
+
#ifdef USE_REVERSED_DEPTH_BUFFER
|
|
160
|
+
|
|
161
|
+
shadowCoord.z -= shadowBias;
|
|
162
|
+
|
|
163
|
+
#else
|
|
164
|
+
|
|
165
|
+
shadowCoord.z += shadowBias;
|
|
166
|
+
|
|
167
|
+
#endif
|
|
168
|
+
|
|
169
|
+
bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;
|
|
170
|
+
bool frustumTest = inFrustum && shadowCoord.z <= 1.0;
|
|
171
|
+
|
|
172
|
+
if ( frustumTest ) {
|
|
173
|
+
|
|
174
|
+
vec2 distribution = texture2D( shadowMap, shadowCoord.xy ).rg;
|
|
175
|
+
|
|
176
|
+
float mean = distribution.x;
|
|
177
|
+
float variance = distribution.y * distribution.y;
|
|
178
|
+
|
|
179
|
+
#ifdef USE_REVERSED_DEPTH_BUFFER
|
|
180
|
+
|
|
181
|
+
float hard_shadow = step( mean, shadowCoord.z );
|
|
105
182
|
|
|
106
|
-
|
|
183
|
+
#else
|
|
107
184
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
185
|
+
float hard_shadow = step( shadowCoord.z, mean );
|
|
186
|
+
|
|
187
|
+
#endif
|
|
188
|
+
|
|
189
|
+
// Early return if fully lit
|
|
190
|
+
if ( hard_shadow == 1.0 ) {
|
|
191
|
+
|
|
192
|
+
shadow = 1.0;
|
|
193
|
+
|
|
194
|
+
} else {
|
|
195
|
+
|
|
196
|
+
// Variance must be non-zero to avoid division by zero
|
|
197
|
+
variance = max( variance, 0.0000001 );
|
|
198
|
+
|
|
199
|
+
// Distance from mean
|
|
200
|
+
float d = shadowCoord.z - mean;
|
|
201
|
+
|
|
202
|
+
// Chebyshev's inequality for upper bound on probability
|
|
203
|
+
float p_max = variance / ( variance + d * d );
|
|
204
|
+
|
|
205
|
+
// Reduce light bleeding by remapping [amount, 1] to [0, 1]
|
|
206
|
+
p_max = clamp( ( p_max - 0.3 ) / 0.65, 0.0, 1.0 );
|
|
207
|
+
|
|
208
|
+
shadow = max( hard_shadow, p_max );
|
|
209
|
+
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
return mix( 1.0, shadow, shadowIntensity );
|
|
113
215
|
|
|
114
216
|
}
|
|
115
|
-
return occlusion;
|
|
116
217
|
|
|
117
|
-
|
|
218
|
+
#else // SHADOWMAP_TYPE_BASIC
|
|
118
219
|
|
|
119
|
-
|
|
220
|
+
float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {
|
|
120
221
|
|
|
121
|
-
|
|
222
|
+
float shadow = 1.0;
|
|
122
223
|
|
|
123
|
-
|
|
124
|
-
shadowCoord.z += shadowBias;
|
|
224
|
+
shadowCoord.xyz /= shadowCoord.w;
|
|
125
225
|
|
|
126
|
-
|
|
127
|
-
bool frustumTest = inFrustum && shadowCoord.z <= 1.0;
|
|
226
|
+
#ifdef USE_REVERSED_DEPTH_BUFFER
|
|
128
227
|
|
|
129
|
-
|
|
228
|
+
shadowCoord.z -= shadowBias;
|
|
130
229
|
|
|
131
|
-
|
|
230
|
+
#else
|
|
132
231
|
|
|
133
|
-
|
|
232
|
+
shadowCoord.z += shadowBias;
|
|
134
233
|
|
|
135
|
-
|
|
136
|
-
float dy0 = - texelSize.y * shadowRadius;
|
|
137
|
-
float dx1 = + texelSize.x * shadowRadius;
|
|
138
|
-
float dy1 = + texelSize.y * shadowRadius;
|
|
139
|
-
float dx2 = dx0 / 2.0;
|
|
140
|
-
float dy2 = dy0 / 2.0;
|
|
141
|
-
float dx3 = dx1 / 2.0;
|
|
142
|
-
float dy3 = dy1 / 2.0;
|
|
234
|
+
#endif
|
|
143
235
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +
|
|
147
|
-
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +
|
|
148
|
-
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +
|
|
149
|
-
texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +
|
|
150
|
-
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +
|
|
151
|
-
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +
|
|
152
|
-
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +
|
|
153
|
-
texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +
|
|
154
|
-
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +
|
|
155
|
-
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +
|
|
156
|
-
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +
|
|
157
|
-
texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +
|
|
158
|
-
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +
|
|
159
|
-
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +
|
|
160
|
-
texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +
|
|
161
|
-
texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )
|
|
162
|
-
) * ( 1.0 / 17.0 );
|
|
163
|
-
|
|
164
|
-
#elif defined( SHADOWMAP_TYPE_PCF_SOFT )
|
|
165
|
-
|
|
166
|
-
vec2 texelSize = vec2( 1.0 ) / shadowMapSize;
|
|
167
|
-
float dx = texelSize.x;
|
|
168
|
-
float dy = texelSize.y;
|
|
169
|
-
|
|
170
|
-
vec2 uv = shadowCoord.xy;
|
|
171
|
-
vec2 f = fract( uv * shadowMapSize + 0.5 );
|
|
172
|
-
uv -= f * texelSize;
|
|
236
|
+
bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;
|
|
237
|
+
bool frustumTest = inFrustum && shadowCoord.z <= 1.0;
|
|
173
238
|
|
|
174
|
-
|
|
175
|
-
texture2DCompare( shadowMap, uv, shadowCoord.z ) +
|
|
176
|
-
texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +
|
|
177
|
-
texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +
|
|
178
|
-
texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +
|
|
179
|
-
mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),
|
|
180
|
-
texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),
|
|
181
|
-
f.x ) +
|
|
182
|
-
mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),
|
|
183
|
-
texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),
|
|
184
|
-
f.x ) +
|
|
185
|
-
mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),
|
|
186
|
-
texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),
|
|
187
|
-
f.y ) +
|
|
188
|
-
mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),
|
|
189
|
-
texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),
|
|
190
|
-
f.y ) +
|
|
191
|
-
mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),
|
|
192
|
-
texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),
|
|
193
|
-
f.x ),
|
|
194
|
-
mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),
|
|
195
|
-
texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),
|
|
196
|
-
f.x ),
|
|
197
|
-
f.y )
|
|
198
|
-
) * ( 1.0 / 9.0 );
|
|
199
|
-
|
|
200
|
-
#elif defined( SHADOWMAP_TYPE_VSM )
|
|
201
|
-
|
|
202
|
-
shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );
|
|
203
|
-
|
|
204
|
-
#else // no percentage-closer filtering:
|
|
205
|
-
|
|
206
|
-
shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );
|
|
239
|
+
if ( frustumTest ) {
|
|
207
240
|
|
|
208
|
-
|
|
241
|
+
float depth = texture2D( shadowMap, shadowCoord.xy ).r;
|
|
242
|
+
|
|
243
|
+
#ifdef USE_REVERSED_DEPTH_BUFFER
|
|
244
|
+
|
|
245
|
+
shadow = step( depth, shadowCoord.z );
|
|
246
|
+
|
|
247
|
+
#else
|
|
248
|
+
|
|
249
|
+
shadow = step( shadowCoord.z, depth );
|
|
250
|
+
|
|
251
|
+
#endif
|
|
252
|
+
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
return mix( 1.0, shadow, shadowIntensity );
|
|
209
256
|
|
|
210
257
|
}
|
|
211
258
|
|
|
212
|
-
|
|
259
|
+
#endif
|
|
213
260
|
|
|
214
|
-
|
|
261
|
+
#if NUM_POINT_LIGHT_SHADOWS > 0
|
|
215
262
|
|
|
216
|
-
|
|
217
|
-
// vector suitable for 2D texture mapping. This code uses the following layout for the
|
|
218
|
-
// 2D texture:
|
|
219
|
-
//
|
|
220
|
-
// xzXZ
|
|
221
|
-
// y Y
|
|
222
|
-
//
|
|
223
|
-
// Y - Positive y direction
|
|
224
|
-
// y - Negative y direction
|
|
225
|
-
// X - Positive x direction
|
|
226
|
-
// x - Negative x direction
|
|
227
|
-
// Z - Positive z direction
|
|
228
|
-
// z - Negative z direction
|
|
229
|
-
//
|
|
230
|
-
// Source and test bed:
|
|
231
|
-
// https://gist.github.com/tschw/da10c43c467ce8afd0c4
|
|
263
|
+
#if defined( SHADOWMAP_TYPE_PCF )
|
|
232
264
|
|
|
233
|
-
|
|
265
|
+
float getPointShadow( samplerCubeShadow shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {
|
|
234
266
|
|
|
235
|
-
|
|
267
|
+
float shadow = 1.0;
|
|
236
268
|
|
|
237
|
-
|
|
269
|
+
// for point lights, the uniform @vShadowCoord is re-purposed to hold
|
|
270
|
+
// the vector from the light to the world-space position of the fragment.
|
|
271
|
+
vec3 lightToPosition = shadowCoord.xyz;
|
|
238
272
|
|
|
239
|
-
//
|
|
273
|
+
// Direction from light to fragment
|
|
274
|
+
vec3 bd3D = normalize( lightToPosition );
|
|
240
275
|
|
|
241
|
-
|
|
242
|
-
|
|
276
|
+
// For cube shadow maps, depth is stored as distance along each face's view axis, not radial distance
|
|
277
|
+
// The view-space depth is the maximum component of the direction vector (which face is sampled)
|
|
278
|
+
vec3 absVec = abs( lightToPosition );
|
|
279
|
+
float viewSpaceZ = max( max( absVec.x, absVec.y ), absVec.z );
|
|
243
280
|
|
|
244
|
-
|
|
281
|
+
if ( viewSpaceZ - shadowCameraFar <= 0.0 && viewSpaceZ - shadowCameraNear >= 0.0 ) {
|
|
245
282
|
|
|
246
|
-
|
|
247
|
-
v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );
|
|
283
|
+
// viewZ to perspective depth
|
|
248
284
|
|
|
249
|
-
|
|
285
|
+
#ifdef USE_REVERSED_DEPTH_BUFFER
|
|
250
286
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
// #X## dim := ( 4 , 2 )
|
|
254
|
-
// # # center := ( 1 , 1 )
|
|
287
|
+
float dp = ( shadowCameraNear * ( shadowCameraFar - viewSpaceZ ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );
|
|
288
|
+
dp -= shadowBias;
|
|
255
289
|
|
|
256
|
-
|
|
290
|
+
#else
|
|
257
291
|
|
|
258
|
-
|
|
259
|
-
|
|
292
|
+
float dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );
|
|
293
|
+
dp += shadowBias;
|
|
260
294
|
|
|
261
|
-
|
|
295
|
+
#endif
|
|
262
296
|
|
|
263
|
-
|
|
264
|
-
|
|
297
|
+
// Hardware PCF with LinearFilter gives us 4-tap filtering per sample
|
|
298
|
+
// Use Vogel disk + IGN sampling for better quality
|
|
299
|
+
float texelSize = shadowRadius / shadowMapSize.x;
|
|
265
300
|
|
|
266
|
-
|
|
301
|
+
// Build a tangent-space coordinate system for applying offsets
|
|
302
|
+
vec3 absDir = abs( bd3D );
|
|
303
|
+
vec3 tangent = absDir.x > absDir.z ? vec3( 0.0, 1.0, 0.0 ) : vec3( 1.0, 0.0, 0.0 );
|
|
304
|
+
tangent = normalize( cross( bd3D, tangent ) );
|
|
305
|
+
vec3 bitangent = cross( bd3D, tangent );
|
|
267
306
|
|
|
268
|
-
|
|
269
|
-
|
|
307
|
+
// Use IGN to rotate sampling pattern per pixel
|
|
308
|
+
float phi = interleavedGradientNoise( gl_FragCoord.xy ) * PI2;
|
|
270
309
|
|
|
271
|
-
|
|
310
|
+
vec2 sample0 = vogelDiskSample( 0, 5, phi );
|
|
311
|
+
vec2 sample1 = vogelDiskSample( 1, 5, phi );
|
|
312
|
+
vec2 sample2 = vogelDiskSample( 2, 5, phi );
|
|
313
|
+
vec2 sample3 = vogelDiskSample( 3, 5, phi );
|
|
314
|
+
vec2 sample4 = vogelDiskSample( 4, 5, phi );
|
|
272
315
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
316
|
+
shadow = (
|
|
317
|
+
texture( shadowMap, vec4( bd3D + ( tangent * sample0.x + bitangent * sample0.y ) * texelSize, dp ) ) +
|
|
318
|
+
texture( shadowMap, vec4( bd3D + ( tangent * sample1.x + bitangent * sample1.y ) * texelSize, dp ) ) +
|
|
319
|
+
texture( shadowMap, vec4( bd3D + ( tangent * sample2.x + bitangent * sample2.y ) * texelSize, dp ) ) +
|
|
320
|
+
texture( shadowMap, vec4( bd3D + ( tangent * sample3.x + bitangent * sample3.y ) * texelSize, dp ) ) +
|
|
321
|
+
texture( shadowMap, vec4( bd3D + ( tangent * sample4.x + bitangent * sample4.y ) * texelSize, dp ) )
|
|
322
|
+
) * 0.2;
|
|
276
323
|
|
|
277
324
|
}
|
|
278
325
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
// scale := 0.5 / dim
|
|
282
|
-
// translate := ( center + 0.5 ) / dim
|
|
283
|
-
return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );
|
|
326
|
+
return mix( 1.0, shadow, shadowIntensity );
|
|
284
327
|
|
|
285
328
|
}
|
|
286
329
|
|
|
287
|
-
|
|
330
|
+
#elif defined( SHADOWMAP_TYPE_BASIC )
|
|
331
|
+
|
|
332
|
+
float getPointShadow( samplerCube shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {
|
|
288
333
|
|
|
289
334
|
float shadow = 1.0;
|
|
290
335
|
|
|
291
336
|
// for point lights, the uniform @vShadowCoord is re-purposed to hold
|
|
292
337
|
// the vector from the light to the world-space position of the fragment.
|
|
293
338
|
vec3 lightToPosition = shadowCoord.xyz;
|
|
294
|
-
|
|
295
|
-
float lightToPositionLength = length( lightToPosition );
|
|
296
|
-
|
|
297
|
-
if ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {
|
|
298
339
|
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
340
|
+
// For cube shadow maps, depth is stored as distance along each face's view axis, not radial distance
|
|
341
|
+
// The view-space depth is the maximum component of the direction vector (which face is sampled)
|
|
342
|
+
vec3 absVec = abs( lightToPosition );
|
|
343
|
+
float viewSpaceZ = max( max( absVec.x, absVec.y ), absVec.z );
|
|
302
344
|
|
|
303
|
-
|
|
304
|
-
vec3 bd3D = normalize( lightToPosition );
|
|
345
|
+
if ( viewSpaceZ - shadowCameraFar <= 0.0 && viewSpaceZ - shadowCameraNear >= 0.0 ) {
|
|
305
346
|
|
|
306
|
-
|
|
347
|
+
// viewZ to perspective depth
|
|
307
348
|
|
|
308
|
-
|
|
349
|
+
float dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) );
|
|
350
|
+
dp += shadowBias;
|
|
309
351
|
|
|
310
|
-
|
|
352
|
+
// Direction from light to fragment
|
|
353
|
+
vec3 bd3D = normalize( lightToPosition );
|
|
311
354
|
|
|
312
|
-
|
|
313
|
-
texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +
|
|
314
|
-
texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +
|
|
315
|
-
texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +
|
|
316
|
-
texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +
|
|
317
|
-
texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +
|
|
318
|
-
texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +
|
|
319
|
-
texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +
|
|
320
|
-
texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +
|
|
321
|
-
texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )
|
|
322
|
-
) * ( 1.0 / 9.0 );
|
|
355
|
+
float depth = textureCube( shadowMap, bd3D ).r;
|
|
323
356
|
|
|
324
|
-
#
|
|
357
|
+
#ifdef USE_REVERSED_DEPTH_BUFFER
|
|
325
358
|
|
|
326
|
-
|
|
359
|
+
depth = 1.0 - depth;
|
|
327
360
|
|
|
328
361
|
#endif
|
|
329
362
|
|
|
363
|
+
shadow = step( dp, depth );
|
|
364
|
+
|
|
330
365
|
}
|
|
331
366
|
|
|
332
367
|
return mix( 1.0, shadow, shadowIntensity );
|
|
333
368
|
|
|
334
369
|
}
|
|
335
370
|
|
|
371
|
+
#endif
|
|
372
|
+
|
|
373
|
+
#endif
|
|
374
|
+
|
|
336
375
|
#endif
|
|
337
376
|
`;
|
|
@@ -24,7 +24,7 @@ export default /* glsl */`
|
|
|
24
24
|
vec3 n = inverseTransformDirection( normal, viewMatrix );
|
|
25
25
|
|
|
26
26
|
vec4 transmitted = getIBLVolumeRefraction(
|
|
27
|
-
n, v, material.roughness, material.
|
|
27
|
+
n, v, material.roughness, material.diffuseContribution, material.specularColorBlended, material.specularF90,
|
|
28
28
|
pos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,
|
|
29
29
|
material.attenuationColor, material.attenuationDistance );
|
|
30
30
|
|
|
@@ -111,7 +111,7 @@ import * as background from './ShaderLib/background.glsl.js';
|
|
|
111
111
|
import * as backgroundCube from './ShaderLib/backgroundCube.glsl.js';
|
|
112
112
|
import * as cube from './ShaderLib/cube.glsl.js';
|
|
113
113
|
import * as depth from './ShaderLib/depth.glsl.js';
|
|
114
|
-
import * as
|
|
114
|
+
import * as distance from './ShaderLib/distance.glsl.js';
|
|
115
115
|
import * as equirect from './ShaderLib/equirect.glsl.js';
|
|
116
116
|
import * as linedashed from './ShaderLib/linedashed.glsl.js';
|
|
117
117
|
import * as meshbasic from './ShaderLib/meshbasic.glsl.js';
|
|
@@ -243,8 +243,8 @@ export const ShaderChunk = {
|
|
|
243
243
|
cube_frag: cube.fragment,
|
|
244
244
|
depth_vert: depth.vertex,
|
|
245
245
|
depth_frag: depth.fragment,
|
|
246
|
-
|
|
247
|
-
|
|
246
|
+
distance_vert: distance.vertex,
|
|
247
|
+
distance_frag: distance.fragment,
|
|
248
248
|
equirect_vert: equirect.vertex,
|
|
249
249
|
equirect_frag: equirect.fragment,
|
|
250
250
|
linedashed_vert: linedashed.vertex,
|
|
@@ -99,14 +99,17 @@ void main() {
|
|
|
99
99
|
|
|
100
100
|
#elif DEPTH_PACKING == 3201
|
|
101
101
|
|
|
102
|
+
// TODO Deprecate
|
|
102
103
|
gl_FragColor = packDepthToRGBA( fragCoordZ );
|
|
103
104
|
|
|
104
105
|
#elif DEPTH_PACKING == 3202
|
|
105
106
|
|
|
107
|
+
// TODO Deprecate
|
|
106
108
|
gl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );
|
|
107
109
|
|
|
108
110
|
#elif DEPTH_PACKING == 3203
|
|
109
111
|
|
|
112
|
+
// TODO Deprecate
|
|
110
113
|
gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );
|
|
111
114
|
|
|
112
115
|
#endif
|
|
@@ -50,7 +50,6 @@ uniform float farDistance;
|
|
|
50
50
|
varying vec3 vWorldPosition;
|
|
51
51
|
|
|
52
52
|
#include <common>
|
|
53
|
-
#include <packing>
|
|
54
53
|
#include <uv_pars_fragment>
|
|
55
54
|
#include <map_pars_fragment>
|
|
56
55
|
#include <alphamap_pars_fragment>
|
|
@@ -72,7 +71,7 @@ void main () {
|
|
|
72
71
|
dist = ( dist - nearDistance ) / ( farDistance - nearDistance );
|
|
73
72
|
dist = saturate( dist ); // clamp to [ 0, 1 ]
|
|
74
73
|
|
|
75
|
-
gl_FragColor =
|
|
74
|
+
gl_FragColor = vec4( dist, 0.0, 0.0, 1.0 );
|
|
76
75
|
|
|
77
76
|
}
|
|
78
77
|
`;
|
|
@@ -58,7 +58,6 @@ uniform vec3 emissive;
|
|
|
58
58
|
uniform float opacity;
|
|
59
59
|
|
|
60
60
|
#include <common>
|
|
61
|
-
#include <packing>
|
|
62
61
|
#include <dithering_pars_fragment>
|
|
63
62
|
#include <color_pars_fragment>
|
|
64
63
|
#include <uv_pars_fragment>
|
|
@@ -69,8 +68,10 @@ uniform float opacity;
|
|
|
69
68
|
#include <aomap_pars_fragment>
|
|
70
69
|
#include <lightmap_pars_fragment>
|
|
71
70
|
#include <emissivemap_pars_fragment>
|
|
71
|
+
#include <cube_uv_reflection_fragment>
|
|
72
72
|
#include <envmap_common_pars_fragment>
|
|
73
73
|
#include <envmap_pars_fragment>
|
|
74
|
+
#include <envmap_physical_pars_fragment>
|
|
74
75
|
#include <fog_pars_fragment>
|
|
75
76
|
#include <bsdfs>
|
|
76
77
|
#include <lights_pars_begin>
|
|
@@ -58,7 +58,6 @@ uniform float opacity;
|
|
|
58
58
|
|
|
59
59
|
#endif
|
|
60
60
|
|
|
61
|
-
#include <packing>
|
|
62
61
|
#include <uv_pars_fragment>
|
|
63
62
|
#include <normal_pars_fragment>
|
|
64
63
|
#include <bumpmap_pars_fragment>
|
|
@@ -75,7 +74,7 @@ void main() {
|
|
|
75
74
|
#include <normal_fragment_begin>
|
|
76
75
|
#include <normal_fragment_maps>
|
|
77
76
|
|
|
78
|
-
gl_FragColor = vec4(
|
|
77
|
+
gl_FragColor = vec4( normalize( normal ) * 0.5 + 0.5, diffuseColor.a );
|
|
79
78
|
|
|
80
79
|
#ifdef OPAQUE
|
|
81
80
|
|
|
@@ -60,7 +60,6 @@ uniform float shininess;
|
|
|
60
60
|
uniform float opacity;
|
|
61
61
|
|
|
62
62
|
#include <common>
|
|
63
|
-
#include <packing>
|
|
64
63
|
#include <dithering_pars_fragment>
|
|
65
64
|
#include <color_pars_fragment>
|
|
66
65
|
#include <uv_pars_fragment>
|
|
@@ -71,8 +70,10 @@ uniform float opacity;
|
|
|
71
70
|
#include <aomap_pars_fragment>
|
|
72
71
|
#include <lightmap_pars_fragment>
|
|
73
72
|
#include <emissivemap_pars_fragment>
|
|
73
|
+
#include <cube_uv_reflection_fragment>
|
|
74
74
|
#include <envmap_common_pars_fragment>
|
|
75
75
|
#include <envmap_pars_fragment>
|
|
76
|
+
#include <envmap_physical_pars_fragment>
|
|
76
77
|
#include <fog_pars_fragment>
|
|
77
78
|
#include <bsdfs>
|
|
78
79
|
#include <lights_pars_begin>
|