super-three 0.181.0 → 0.184.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 +13152 -11354
- package/build/three.core.js +12319 -11539
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1808 -781
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +27 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +10523 -6263
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +10484 -6262
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +11 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +7 -4
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +58 -54
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +34 -2
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- 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 +152 -9
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -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/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +203 -88
- package/examples/jsm/inspector/RendererInspector.js +14 -4
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +51 -3
- package/examples/jsm/inspector/tabs/Performance.js +4 -4
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +107 -5
- package/examples/jsm/inspector/ui/Graph.js +2 -2
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +1936 -34
- package/examples/jsm/inspector/ui/Style.js +1044 -31
- package/examples/jsm/inspector/ui/Tab.js +222 -3
- package/examples/jsm/inspector/ui/Values.js +55 -2
- package/examples/jsm/inspector/ui/utils.js +13 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lines/LineMaterial.js +7 -1
- 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 +687 -48
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +1 -2
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +27 -5
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- 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 +2 -2
- 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 +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -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/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- 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 +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -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 +63 -6
- 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/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- 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/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +6 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -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 +69 -19
- 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 -24
- 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/SharpenNode.js +283 -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/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- 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/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
- package/examples/jsm/utils/ColorUtils.js +76 -0
- 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/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +24 -30
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +25 -11
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +9 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- 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/AudioContext.js +2 -2
- 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/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +52 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +4 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- 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/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +46 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +34 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +45 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +13 -9
- package/src/math/Matrix4.js +87 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -68
- package/src/nodes/TSL.js +7 -7
- 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 +107 -15
- 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 +27 -2
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- 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/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +8 -8
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -25
- package/src/nodes/accessors/StorageTextureNode.js +40 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +67 -23
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +2 -3
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +112 -15
- package/src/nodes/core/NodeBuilder.js +284 -66
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +11 -9
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +66 -17
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +17 -3
- package/src/nodes/core/StructTypeNode.js +12 -18
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +48 -23
- package/src/nodes/core/VaryingNode.js +2 -19
- 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 +125 -16
- package/src/nodes/display/RenderOutputNode.js +7 -7
- package/src/nodes/display/ScreenNode.js +4 -2
- 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/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- 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 +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- 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 +7 -28
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +120 -42
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +76 -41
- package/src/nodes/math/OperatorNode.js +3 -2
- 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/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +38 -17
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- 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/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +44 -16
- package/src/objects/InstancedMesh.js +30 -3
- 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/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +329 -145
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +29 -8
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +29 -14
- 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/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +333 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- 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 +17 -5
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +481 -117
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +89 -4
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +62 -1
- package/src/renderers/common/XRManager.js +37 -29
- package/src/renderers/common/extras/PMREMGenerator.js +25 -23
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
- 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_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -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_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- 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 +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- 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 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +49 -109
- package/src/renderers/webgl/WebGLPrograms.js +63 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +215 -54
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +260 -140
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -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 +156 -59
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -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/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -82,8 +82,16 @@ float viewZToOrthographicDepth( const in float viewZ, const in float near, const
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
float orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
|
|
86
|
+
#ifdef USE_REVERSED_DEPTH_BUFFER
|
|
87
|
+
|
|
88
|
+
return depth * ( far - near ) - far;
|
|
89
|
+
|
|
90
|
+
#else
|
|
91
|
+
|
|
92
|
+
return depth * ( near - far ) - near;
|
|
93
|
+
|
|
94
|
+
#endif
|
|
87
95
|
}
|
|
88
96
|
|
|
89
97
|
// NOTE: https://twitter.com/gonnavis/status/1377183786949959682
|
|
@@ -94,7 +102,15 @@ float viewZToPerspectiveDepth( const in float viewZ, const in float near, const
|
|
|
94
102
|
}
|
|
95
103
|
|
|
96
104
|
float perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {
|
|
97
|
-
|
|
98
|
-
|
|
105
|
+
|
|
106
|
+
#ifdef USE_REVERSED_DEPTH_BUFFER
|
|
107
|
+
|
|
108
|
+
return ( near * far ) / ( ( near - far ) * depth - near );
|
|
109
|
+
|
|
110
|
+
#else
|
|
111
|
+
|
|
112
|
+
return ( near * far ) / ( ( far - near ) * depth - far );
|
|
113
|
+
|
|
114
|
+
#endif
|
|
99
115
|
}
|
|
100
116
|
`;
|
|
@@ -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
|
`;
|
|
@@ -2,8 +2,18 @@ export default /* glsl */`
|
|
|
2
2
|
|
|
3
3
|
#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
#ifdef HAS_NORMAL
|
|
6
|
+
|
|
7
|
+
// Offsetting the position used for querying occlusion along the world normal can be used to reduce shadow acne.
|
|
8
|
+
|
|
9
|
+
vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );
|
|
10
|
+
|
|
11
|
+
#else
|
|
12
|
+
|
|
13
|
+
vec3 shadowWorldNormal = vec3( 0.0 ); // fallback, see #21483
|
|
14
|
+
|
|
15
|
+
#endif
|
|
16
|
+
|
|
7
17
|
vec4 shadowWorldPosition;
|
|
8
18
|
|
|
9
19
|
#endif
|
|
@@ -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
|
|
|
@@ -54,6 +54,7 @@ import lights_physical_pars_fragment from './ShaderChunk/lights_physical_pars_fr
|
|
|
54
54
|
import lights_fragment_begin from './ShaderChunk/lights_fragment_begin.glsl.js';
|
|
55
55
|
import lights_fragment_maps from './ShaderChunk/lights_fragment_maps.glsl.js';
|
|
56
56
|
import lights_fragment_end from './ShaderChunk/lights_fragment_end.glsl.js';
|
|
57
|
+
import lightprobes_pars_fragment from './ShaderChunk/lightprobes_pars_fragment.glsl.js';
|
|
57
58
|
import logdepthbuf_fragment from './ShaderChunk/logdepthbuf_fragment.glsl.js';
|
|
58
59
|
import logdepthbuf_pars_fragment from './ShaderChunk/logdepthbuf_pars_fragment.glsl.js';
|
|
59
60
|
import logdepthbuf_pars_vertex from './ShaderChunk/logdepthbuf_pars_vertex.glsl.js';
|
|
@@ -110,7 +111,7 @@ import * as background from './ShaderLib/background.glsl.js';
|
|
|
110
111
|
import * as backgroundCube from './ShaderLib/backgroundCube.glsl.js';
|
|
111
112
|
import * as cube from './ShaderLib/cube.glsl.js';
|
|
112
113
|
import * as depth from './ShaderLib/depth.glsl.js';
|
|
113
|
-
import * as
|
|
114
|
+
import * as distance from './ShaderLib/distance.glsl.js';
|
|
114
115
|
import * as equirect from './ShaderLib/equirect.glsl.js';
|
|
115
116
|
import * as linedashed from './ShaderLib/linedashed.glsl.js';
|
|
116
117
|
import * as meshbasic from './ShaderLib/meshbasic.glsl.js';
|
|
@@ -181,6 +182,7 @@ export const ShaderChunk = {
|
|
|
181
182
|
lights_fragment_begin: lights_fragment_begin,
|
|
182
183
|
lights_fragment_maps: lights_fragment_maps,
|
|
183
184
|
lights_fragment_end: lights_fragment_end,
|
|
185
|
+
lightprobes_pars_fragment: lightprobes_pars_fragment,
|
|
184
186
|
logdepthbuf_fragment: logdepthbuf_fragment,
|
|
185
187
|
logdepthbuf_pars_fragment: logdepthbuf_pars_fragment,
|
|
186
188
|
logdepthbuf_pars_vertex: logdepthbuf_pars_vertex,
|
|
@@ -241,8 +243,8 @@ export const ShaderChunk = {
|
|
|
241
243
|
cube_frag: cube.fragment,
|
|
242
244
|
depth_vert: depth.vertex,
|
|
243
245
|
depth_frag: depth.fragment,
|
|
244
|
-
|
|
245
|
-
|
|
246
|
+
distance_vert: distance.vertex,
|
|
247
|
+
distance_frag: distance.fragment,
|
|
246
248
|
equirect_vert: equirect.vertex,
|
|
247
249
|
equirect_frag: equirect.fragment,
|
|
248
250
|
linedashed_vert: linedashed.vertex,
|
|
@@ -27,7 +27,6 @@ export const fragment = /* glsl */`
|
|
|
27
27
|
|
|
28
28
|
#endif
|
|
29
29
|
|
|
30
|
-
uniform float flipEnvMap;
|
|
31
30
|
uniform float backgroundBlurriness;
|
|
32
31
|
uniform float backgroundIntensity;
|
|
33
32
|
uniform mat3 backgroundRotation;
|
|
@@ -40,7 +39,7 @@ void main() {
|
|
|
40
39
|
|
|
41
40
|
#ifdef ENVMAP_TYPE_CUBE
|
|
42
41
|
|
|
43
|
-
vec4 texColor = textureCube( envMap, backgroundRotation *
|
|
42
|
+
vec4 texColor = textureCube( envMap, backgroundRotation * vWorldDirection );
|
|
44
43
|
|
|
45
44
|
#elif defined( ENVMAP_TYPE_CUBE_UV )
|
|
46
45
|
|