@gnsx/three 0.185.16 → 0.186.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/build/three.cjs +10 -82600
- package/build/three.core.js +1309 -807
- package/build/three.module.js +439 -338
- package/build/three.tsl.js +74 -44
- package/build/three.webgpu.js +6036 -2184
- package/build/three.webgpu.nodes.js +6020 -2184
- package/examples/jsm/Addons.js +6 -6
- package/examples/jsm/controls/ArcballControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +44 -20
- package/examples/jsm/controls/OrbitControls.js +9 -0
- package/examples/jsm/controls/TrackballControls.js +109 -4
- package/examples/jsm/csm/CSMShadowNode.js +13 -0
- package/examples/jsm/exporters/GLTFExporter.js +23 -7
- package/examples/jsm/exporters/USDZExporter.js +2 -2
- package/examples/jsm/generators/CityGenerator.js +377 -45
- package/examples/jsm/generators/ForestGenerator.js +12 -12
- package/examples/jsm/generators/TerrainGenerator.js +49 -37
- package/examples/jsm/generators/TreeGenerator.js +70 -76
- package/examples/jsm/generators/city/BenchGenerator.js +127 -0
- package/examples/jsm/generators/city/CarGenerator.js +479 -0
- package/examples/jsm/generators/city/CityGeneratorUtils.js +31 -0
- package/examples/jsm/generators/city/HydrantGenerator.js +106 -0
- package/examples/jsm/generators/city/InstancedMeshGenerator.js +86 -0
- package/examples/jsm/generators/city/PersonGenerator.js +447 -0
- package/examples/jsm/generators/city/SidewalkGenerator.js +33 -38
- package/examples/jsm/generators/city/SkyscraperGenerator.js +448 -48
- package/examples/jsm/generators/city/StreetTreeGenerator.js +231 -0
- package/examples/jsm/generators/city/StreetlightGenerator.js +100 -0
- package/examples/jsm/generators/city/TrafficlightGenerator.js +106 -0
- package/examples/jsm/generators/city/TrashcanGenerator.js +100 -0
- package/examples/jsm/geometries/BoxLineGeometry.js +1 -1
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +1 -1
- package/examples/jsm/gpgpu/CountingSort.js +271 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +60 -239
- package/examples/jsm/helpers/LightProbeGridHelperWebGL.js +221 -0
- package/examples/jsm/inspector/Extension.js +94 -0
- package/examples/jsm/inspector/Inspector.js +145 -41
- package/examples/jsm/inspector/RendererInspector.js +100 -52
- package/examples/jsm/inspector/extensions/color-grading/ColorGrading.js +2609 -0
- package/examples/jsm/inspector/extensions/color-grading/ColorWheel.js +352 -0
- package/examples/jsm/inspector/extensions/color-grading/CurveEditor.js +599 -0
- package/examples/jsm/inspector/extensions/color-grading/LUT3DStyle.js +1201 -0
- package/examples/jsm/inspector/extensions/color-grading/LUTMath.js +788 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/BrightnessModule.js +72 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ColorWheelModule.js +112 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ContrastModule.js +82 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/CurvesModule.js +109 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ExposureHueModule.js +110 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ExposureModule.js +73 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/HueModule.js +78 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/ImportedCubeModule.js +89 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/Module.js +285 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/OutputModule.js +101 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/RendererModule.js +225 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/SatVibranceModule.js +102 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/SaturationModule.js +76 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/VibranceModule.js +76 -0
- package/examples/jsm/inspector/extensions/color-grading/modules/WhiteBalanceModule.js +86 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +26 -31
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +1 -0
- package/examples/jsm/inspector/tabs/Memory.js +0 -2
- package/examples/jsm/inspector/tabs/Settings.js +4 -0
- package/examples/jsm/inspector/tabs/Timeline.js +223 -171
- package/examples/jsm/inspector/tabs/Viewer.js +515 -21
- package/examples/jsm/inspector/ui/List.js +15 -9
- package/examples/jsm/inspector/ui/Profiler.js +170 -14
- package/examples/jsm/inspector/ui/Style.js +269 -23
- package/examples/jsm/inspector/ui/Tab.js +2 -0
- package/examples/jsm/inspector/ui/Values.js +14 -2
- package/examples/jsm/interactive/HTMLMesh.js +19 -3
- package/examples/jsm/lighting/LightProbeGrid.js +484 -889
- package/examples/jsm/lighting/LightProbeGridUtils.js +107 -0
- package/examples/jsm/lighting/LightProbeGridWebGL.js +841 -0
- package/examples/jsm/lighting/vxgi/VXGIConeTracer.js +194 -0
- package/examples/jsm/lighting/vxgi/VXGINode.js +660 -0
- package/examples/jsm/lighting/vxgi/VXGISceneCollector.js +478 -0
- package/examples/jsm/lighting/vxgi/VXGIVolume.js +1430 -0
- package/examples/jsm/lights/SunLight.js +95 -0
- package/examples/jsm/lights/SunLightNode.js +56 -0
- package/examples/jsm/lights/SunLightShadow.js +319 -0
- package/examples/jsm/lights/SunShadowNode.js +312 -0
- package/examples/jsm/loaders/3DMLoader.js +150 -49
- package/examples/jsm/loaders/3MFLoader.js +202 -1
- package/examples/jsm/loaders/FBXLoader.js +81 -5
- package/examples/jsm/loaders/GLTFGaussianSplatLoaderExtension.js +330 -0
- package/examples/jsm/loaders/GLTFLoader.js +79 -14
- package/examples/jsm/loaders/GaussianSplatPLYLoader.js +386 -0
- package/examples/jsm/loaders/KSPLATLoader.js +463 -0
- package/examples/jsm/loaders/MaterialXLoader.js +111 -1010
- package/examples/jsm/loaders/PCDLoader.js +1 -1
- package/examples/jsm/loaders/SPLATLoader.js +139 -0
- package/examples/jsm/loaders/SPZLoader.js +561 -0
- package/examples/jsm/loaders/materialx/MaterialXArchive.js +108 -0
- package/examples/jsm/loaders/materialx/MaterialXDocument.js +878 -0
- package/examples/jsm/loaders/materialx/MaterialXHextile.js +183 -0
- package/examples/jsm/loaders/materialx/MaterialXInterfaceValidation.js +376 -0
- package/examples/jsm/loaders/materialx/MaterialXLog.js +75 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeInterfaceRegistry.js +4 -0
- package/examples/jsm/loaders/materialx/MaterialXNodeLibrary.js +1021 -0
- package/examples/jsm/loaders/materialx/MaterialXSurfaceMappings.js +661 -0
- package/examples/jsm/loaders/materialx/MaterialXUtils.js +57 -0
- package/examples/jsm/loaders/materialx/compile/MaterialXCompileRegistry.js +997 -0
- package/examples/jsm/loaders/materialx/parse/MaterialXParser.js +28 -0
- package/examples/jsm/loaders/usd/USDAParser.js +15 -2
- package/examples/jsm/loaders/usd/USDCParser.js +1 -4
- package/examples/jsm/loaders/usd/USDComposer.js +80 -42
- package/examples/jsm/materials/WoodNodeMaterial.js +6 -108
- package/examples/jsm/misc/RollerCoaster.js +2 -2
- package/examples/jsm/misc/SculptGL.LICENSE.txt +21 -0
- package/examples/jsm/misc/Sculptor.js +1679 -0
- package/examples/jsm/misc/SculptorMesh.js +1504 -0
- package/examples/jsm/misc/SculptorTools.js +1180 -0
- package/examples/jsm/misc/SculptorUtils.js +345 -0
- package/examples/jsm/misc/TubePainter.js +28 -16
- package/examples/jsm/misc/VolumeSlice.js +24 -24
- package/examples/jsm/modifiers/SimplifyModifier.js +63 -556
- package/examples/jsm/objects/GaussianSplat.js +1039 -0
- package/examples/jsm/objects/Sky.js +66 -45
- package/examples/jsm/objects/SkyMesh.js +70 -51
- package/examples/jsm/physics/JoltPhysics.js +1 -1
- package/examples/jsm/postprocessing/AfterimagePass.js +4 -2
- package/examples/jsm/postprocessing/BloomPass.js +2 -2
- package/examples/jsm/postprocessing/GTAOPass.js +1 -1
- package/examples/jsm/postprocessing/OutlinePass.js +5 -5
- package/examples/jsm/postprocessing/SAOPass.js +1 -1
- package/examples/jsm/postprocessing/SSAOPass.js +1 -1
- package/examples/jsm/postprocessing/SSRPass.js +4 -2
- package/examples/jsm/postprocessing/SavePass.js +1 -1
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +30 -13
- package/examples/jsm/renderers/CSS2DRenderer.js +29 -5
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +4 -1
- package/examples/jsm/shaders/ExposureShader.js +1 -1
- package/examples/jsm/shaders/FilmShader.js +2 -1
- package/examples/jsm/transpiler/AST.js +21 -2
- package/examples/jsm/transpiler/GLSLDecoder.js +498 -8
- package/examples/jsm/transpiler/TSLEncoder.js +82 -10
- package/examples/jsm/transpiler/WGSLEncoder.js +33 -4
- package/examples/jsm/tsl/WebGLNodesHandler.js +29 -39
- package/examples/jsm/tsl/display/AfterImageNode.js +2 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +3 -2
- package/examples/jsm/tsl/display/BilateralBlurNode.js +5 -2
- package/examples/jsm/tsl/display/BloomNode.js +55 -30
- package/examples/jsm/tsl/display/DenoiseNode.js +21 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +24 -6
- package/examples/jsm/tsl/display/DotScreenNode.js +11 -11
- package/examples/jsm/tsl/display/FSR1Node.js +8 -4
- package/examples/jsm/tsl/display/GTAONode.js +199 -86
- package/examples/jsm/tsl/display/GaussianBlurNode.js +65 -52
- package/examples/jsm/tsl/display/GodraysNode.js +5 -2
- package/examples/jsm/tsl/display/ImportanceSampledEnvironment.js +2 -2
- package/examples/jsm/tsl/display/LensflareNode.js +5 -2
- package/examples/jsm/tsl/display/OITPassNode.js +352 -0
- package/examples/jsm/tsl/display/OutlineNode.js +2 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +3 -2
- package/examples/jsm/tsl/display/RGBShiftNode.js +9 -9
- package/examples/jsm/tsl/display/RecurrentDenoiseNode.js +7 -4
- package/examples/jsm/tsl/display/RetroPassNode.js +1 -1
- package/examples/jsm/tsl/display/SMAANode.js +22 -61
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -4
- package/examples/jsm/tsl/display/SSAONode.js +436 -0
- package/examples/jsm/tsl/display/SSGINode.js +5 -2
- package/examples/jsm/tsl/display/SSRNode.js +7 -2
- package/examples/jsm/tsl/display/SSSNode.js +5 -2
- package/examples/jsm/tsl/display/SharpenNode.js +5 -4
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +1 -3
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -3
- package/examples/jsm/tsl/display/TAAUNode.js +22 -125
- package/examples/jsm/tsl/display/TRAANode.js +16 -142
- package/examples/jsm/tsl/display/TemporalReprojectNode.js +21 -15
- package/examples/jsm/tsl/display/depthAwareBlur.js +63 -0
- package/examples/jsm/tsl/display/hashBlur.js +3 -2
- package/examples/jsm/tsl/lighting/ClusteredLightsNode.js +38 -27
- package/examples/jsm/tsl/lighting/LightProbeGridNode.js +136 -0
- package/examples/jsm/tsl/math/voronoiNoise.js +112 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +4 -6
- package/examples/jsm/tsl/utils/Raymarching.js +5 -5
- package/examples/jsm/tsl/utils/SoftParticles.js +60 -0
- package/examples/jsm/tsl/utils/TAAUtils.js +195 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +14 -14
- package/examples/jsm/utils/GaussianSplatUtils.js +229 -0
- package/examples/jsm/utils/WebGLTextureUtils.js +1 -1
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/WebGLXRFallback.js +2 -16
- package/examples/jsm/webxr/XRControllerModelFactory.js +16 -4
- package/package.json +9 -16
- package/src/Three.Core.js +2 -1
- package/src/Three.TSL.js +73 -43
- package/src/Three.WebGPU.Nodes.js +1 -0
- package/src/Three.WebGPU.js +1 -0
- package/src/animation/AnimationClip.js +15 -2
- package/src/animation/AnimationObjectGroup.js +18 -6
- package/src/animation/AnimationUtils.js +26 -0
- package/src/animation/KeyframeTrack.js +37 -0
- package/src/constants.js +23 -1
- package/src/core/BufferAttribute.js +3 -2
- package/src/core/BufferGeometry.js +1 -1
- package/src/core/InterleavedBuffer.js +5 -1
- package/src/core/Object3D.js +40 -12
- package/src/core/Raycaster.js +4 -0
- package/src/core/RenderTarget.js +99 -9
- package/src/core/RenderTarget3D.js +12 -8
- package/src/extras/Controls.js +0 -8
- package/src/extras/PMREMGenerator.js +99 -205
- package/src/geometries/TorusGeometry.js +1 -1
- package/src/helpers/ArrowHelper.js +2 -0
- package/src/helpers/AxesHelper.js +2 -0
- package/src/helpers/Box3Helper.js +2 -0
- package/src/helpers/BoxHelper.js +2 -0
- package/src/helpers/CameraHelper.js +2 -0
- package/src/helpers/DirectionalLightHelper.js +2 -0
- package/src/helpers/GridHelper.js +2 -0
- package/src/helpers/HemisphereLightHelper.js +2 -0
- package/src/helpers/PlaneHelper.js +2 -0
- package/src/helpers/PointLightHelper.js +2 -0
- package/src/helpers/PolarGridHelper.js +2 -0
- package/src/helpers/SkeletonHelper.js +2 -0
- package/src/helpers/SpotLightHelper.js +2 -0
- package/src/lights/Light.js +0 -10
- package/src/lights/LightShadow.js +43 -12
- package/src/lights/SpotLightShadow.js +18 -0
- package/src/loaders/BufferGeometryLoader.js +5 -0
- package/src/loaders/ImageBitmapLoader.js +3 -1
- package/src/loaders/ObjectLoader.js +8 -5
- package/src/materials/Material.js +80 -57
- package/src/materials/MeshPhysicalMaterial.js +32 -0
- package/src/materials/nodes/Line2NodeMaterial.js +17 -8
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +42 -5
- package/src/materials/nodes/NodeMaterial.js +19 -13
- package/src/materials/nodes/PointsNodeMaterial.js +2 -1
- package/src/materials/nodes/manager/NodeMaterialObserver.js +282 -55
- package/src/math/Frustum.js +9 -0
- package/src/math/FrustumArray.js +1 -1
- package/src/math/MathUtils.js +5 -3
- package/src/math/Matrix4.js +2 -9
- package/src/math/Plane.js +30 -1
- package/src/math/Quaternion.js +0 -10
- package/src/math/Ray.js +95 -45
- package/src/math/Triangle.js +0 -2
- package/src/math/Vector3.js +2 -2
- package/src/math/Vector4.js +0 -4
- package/src/math/interpolants/BezierInterpolant.js +36 -23
- package/src/nodes/Nodes.js +2 -0
- package/src/nodes/TSL.js +11 -3
- package/src/nodes/accessors/Batch.js +85 -13
- package/src/nodes/accessors/BufferAttributeNode.js +1 -1
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/Instance.js +19 -18
- package/src/nodes/accessors/MaterialNode.js +9 -0
- package/src/nodes/accessors/ModelNode.js +85 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -70
- package/src/nodes/accessors/ReferenceElementNode.js +72 -0
- package/src/nodes/accessors/ReferenceNode.js +1 -70
- package/src/nodes/accessors/Skinning.js +124 -12
- package/src/nodes/accessors/StorageTextureNode.js +7 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +51 -21
- package/src/nodes/accessors/TextureSizeNode.js +4 -2
- package/src/nodes/accessors/UniformArrayNode.js +30 -5
- package/src/nodes/code/CodeNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +12 -2
- package/src/nodes/core/ArrayNode.js +2 -2
- package/src/nodes/core/ContextNode.js +57 -4
- package/src/nodes/core/IndexNode.js +69 -4
- package/src/nodes/core/InspectorNode.js +2 -2
- package/src/nodes/core/MRTNode.js +44 -2
- package/src/nodes/core/Node.js +6 -3
- package/src/nodes/core/NodeBuilder.js +65 -50
- package/src/nodes/core/NodeFrame.js +11 -3
- package/src/nodes/core/NodeUtils.js +88 -0
- package/src/nodes/core/PropertyNode.js +8 -0
- package/src/nodes/core/StackNode.js +0 -1
- package/src/nodes/core/StructNode.js +4 -3
- package/src/nodes/core/UniformGroupNode.js +3 -2
- package/src/nodes/core/UniformNode.js +26 -12
- package/src/nodes/core/VarNode.js +0 -1
- package/src/nodes/display/BumpMapNode.js +2 -2
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/PassNode.js +76 -15
- package/src/nodes/display/ScreenNode.js +22 -65
- package/src/nodes/fog/Fog.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_GGX.js +6 -6
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +1 -1
- package/src/nodes/functions/BSDF/DFGLUT.js +2 -1
- package/src/nodes/functions/BSDF/LTC.js +1 -1
- package/src/nodes/functions/PhongLightingModel.js +1 -1
- package/src/nodes/functions/PhysicalLightingModel.js +83 -25
- package/src/nodes/functions/ToonLightingModel.js +2 -2
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +3 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +64 -13
- package/src/nodes/gpgpu/BarrierNode.js +13 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +20 -17
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +165 -37
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +44 -6
- package/src/nodes/lighting/EnvironmentNode.js +40 -4
- package/src/nodes/lighting/LightsNode.js +20 -4
- package/src/nodes/lighting/ShadowBaseNode.js +158 -1
- package/src/nodes/lighting/ShadowFilterNode.js +2 -106
- package/src/nodes/lighting/ShadowNode.js +22 -91
- package/src/nodes/materialx/{lib/mx_hsv.js → MaterialXColor.js} +3 -6
- package/src/nodes/materialx/{lib/mx_transform_color.js → MaterialXColorTransform.js} +3 -6
- package/src/nodes/materialx/MaterialXCore.js +37 -0
- package/src/nodes/materialx/MaterialXNodes.js +64 -72
- package/src/nodes/materialx/{lib/mx_noise.js → MaterialXNoise.js} +426 -197
- package/src/nodes/math/BitcountNode.js +24 -4
- package/src/nodes/math/MathNode.js +4 -4
- package/src/nodes/math/MathUtils.js +15 -4
- package/src/nodes/math/OperatorNode.js +2 -2
- package/src/nodes/math/PackFloatNode.js +29 -1
- package/src/nodes/math/Packed4x8IntegerNode.js +433 -0
- package/src/nodes/math/UnpackFloatNode.js +30 -2
- package/src/nodes/parsers/GLSLNodeFunction.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +31 -74
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLCore.js +1 -31
- package/src/nodes/utils/EventNode.js +75 -0
- package/src/nodes/utils/LoopNode.js +54 -13
- package/src/nodes/utils/PostProcessingUtils.js +23 -2
- package/src/nodes/utils/RTTNode.js +97 -32
- package/src/nodes/utils/ReflectorNode.js +8 -4
- package/src/nodes/utils/RotateNode.js +85 -8
- package/src/nodes/utils/SpriteUtils.js +58 -23
- package/src/objects/BatchedMesh.js +6 -0
- package/src/objects/InstancedMesh.js +1 -1
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +12 -0
- package/src/objects/Mesh.js +12 -0
- package/src/objects/Points.js +12 -0
- package/src/objects/Sprite.js +12 -0
- package/src/renderers/WebGLRenderer.js +93 -27
- package/src/renderers/common/Animation.js +12 -2
- package/src/renderers/common/Backend.js +38 -10
- package/src/renderers/common/BindGroup.js +0 -1
- package/src/renderers/common/Bindings.js +50 -4
- package/src/renderers/common/BundleGroup.js +4 -0
- package/src/renderers/common/ClippingContext.js +11 -1
- package/src/renderers/common/Color4.js +9 -0
- package/src/renderers/common/Constants.js +0 -5
- package/src/renderers/common/DirectRenderPipeline.js +233 -0
- package/src/renderers/common/Geometries.js +24 -3
- package/src/renderers/common/Info.js +3 -3
- package/src/renderers/common/InspectorBase.js +37 -8
- package/src/renderers/common/Lighting.js +11 -4
- package/src/renderers/common/Pipelines.js +6 -4
- package/src/renderers/common/QuadMesh.js +16 -2
- package/src/renderers/common/RenderContext.js +8 -0
- package/src/renderers/common/RenderList.js +53 -19
- package/src/renderers/common/RenderLists.js +58 -11
- package/src/renderers/common/RenderObject.js +14 -0
- package/src/renderers/common/RenderObjects.js +14 -9
- package/src/renderers/common/RenderPipeline.js +52 -44
- package/src/renderers/common/Renderer.js +226 -55
- package/src/renderers/common/Storage3DTexture.js +16 -0
- package/src/renderers/common/Textures.js +3 -3
- package/src/renderers/common/XRManager.js +79 -72
- package/src/renderers/common/extras/PMREMGenerator.js +76 -144
- package/src/renderers/common/nodes/NodeManager.js +144 -6
- package/src/renderers/common/nodes/NodeStorageBuffer.js +3 -1
- package/src/renderers/common/nodes/NodeUniformBuffer.js +3 -1
- package/src/renderers/shaders/DFGLUTData.js +2 -1
- package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +4 -2
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +48 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +53 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +20 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +20 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +61 -57
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +82 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +9 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +8 -1
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +15 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -0
- package/src/renderers/shaders/ShaderLib.js +1 -0
- package/src/renderers/shaders/UniformsLib.js +16 -0
- package/src/renderers/webgl/WebGLAnimation.js +2 -2
- package/src/renderers/webgl/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl/WebGLLights.js +74 -4
- package/src/renderers/webgl/WebGLMaterials.js +6 -0
- package/src/renderers/webgl/WebGLOutput.js +36 -24
- package/src/renderers/webgl/WebGLProgram.js +3 -0
- package/src/renderers/webgl/WebGLPrograms.js +8 -0
- package/src/renderers/webgl/WebGLRenderLists.js +6 -10
- package/src/renderers/webgl/WebGLShadowMap.js +47 -44
- package/src/renderers/webgl/WebGLTextures.js +7 -7
- package/src/renderers/webgl-fallback/WebGLBackend.js +153 -45
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +83 -29
- package/src/renderers/webgl-fallback/utils/WebGLState.js +163 -17
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +32 -5
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +11 -4
- package/src/renderers/webgpu/WebGPUBackend.js +513 -145
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +99 -20
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +3 -12
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +24 -14
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +80 -14
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +62 -7
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +9 -3
- package/src/renderers/webgpu/utils/WebGPUUtils.js +16 -4
- package/src/renderers/webxr/WebXRManager.js +25 -2
- package/src/scenes/Scene.js +3 -3
- package/src/textures/CompressedArrayTexture.js +16 -0
- package/src/textures/Data3DTexture.js +16 -0
- package/src/textures/DataArrayTexture.js +16 -0
- package/src/textures/DepthTexture.js +3 -3
- package/src/textures/Texture.js +3 -3
- package/src/textures/{Source.js → TextureSource.js} +39 -8
- package/src/utils.js +6 -79
- package/build/three.core.min.js +0 -6
- package/build/three.module.min.js +0 -6
- package/build/three.tsl.min.js +0 -6
- package/build/three.webgpu.min.js +0 -6
- package/build/three.webgpu.nodes.min.js +0 -6
- package/examples/jsm/libs/ecsy.module.js +0 -1792
- package/examples/jsm/loaders/LottieLoader.js +0 -130
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +0 -52
|
@@ -1,7 +1,123 @@
|
|
|
1
1
|
import Node from '../core/Node.js';
|
|
2
|
+
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
3
|
+
import ChainMap from '../../renderers/common/ChainMap.js';
|
|
4
|
+
import { getDataFromObject } from '../core/NodeUtils.js';
|
|
2
5
|
import { NodeUpdateType } from '../core/constants.js';
|
|
3
|
-
import { property } from '../tsl/TSLBase.js';
|
|
6
|
+
import { property, vec4 } from '../tsl/TSLBase.js';
|
|
4
7
|
import { positionWorld } from '../accessors/Position.js';
|
|
8
|
+
import { NoBlending, VSMShadowMap } from '../../constants.js';
|
|
9
|
+
|
|
10
|
+
const _shadowMaterialLib = /*@__PURE__*/ new WeakMap();
|
|
11
|
+
const _shadowRenderObjectLibrary = /*@__PURE__*/ new ChainMap();
|
|
12
|
+
const _shadowRenderObjectKeys = [];
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Retrieves or creates a shadow material for the given light source.
|
|
16
|
+
*
|
|
17
|
+
* This function checks if a shadow material already exists for the provided light.
|
|
18
|
+
* If not, it creates a new `NodeMaterial` configured for shadow rendering and stores it
|
|
19
|
+
* in the `shadowMaterialLib` for future use.
|
|
20
|
+
*
|
|
21
|
+
* @private
|
|
22
|
+
* @function
|
|
23
|
+
* @param {Light} light - The light source for which the shadow material is needed.
|
|
24
|
+
* If the light is a point light, a depth node is calculated
|
|
25
|
+
* using the linear shadow distance.
|
|
26
|
+
* @returns {NodeMaterial} The shadow material associated with the given light.
|
|
27
|
+
*/
|
|
28
|
+
const _getShadowMaterial = ( light ) => {
|
|
29
|
+
|
|
30
|
+
let material = _shadowMaterialLib.get( light );
|
|
31
|
+
|
|
32
|
+
if ( material === undefined ) {
|
|
33
|
+
|
|
34
|
+
material = new NodeMaterial();
|
|
35
|
+
material.colorNode = vec4( 0, 0, 0, 1 );
|
|
36
|
+
material.isShadowPassMaterial = true; // Use to avoid other overrideMaterial override material.colorNode unintentionally when using material.shadowNode
|
|
37
|
+
material.name = 'ShadowMaterial';
|
|
38
|
+
material.blending = NoBlending;
|
|
39
|
+
material.fog = false;
|
|
40
|
+
|
|
41
|
+
_shadowMaterialLib.set( light, material );
|
|
42
|
+
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return material;
|
|
46
|
+
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Disposes the shadow material for the given light source.
|
|
51
|
+
*
|
|
52
|
+
* @private
|
|
53
|
+
* @param {Light} light - The light source.
|
|
54
|
+
*/
|
|
55
|
+
const _disposeShadowMaterial = ( light ) => {
|
|
56
|
+
|
|
57
|
+
const material = _shadowMaterialLib.get( light );
|
|
58
|
+
|
|
59
|
+
if ( material !== undefined ) {
|
|
60
|
+
|
|
61
|
+
material.dispose();
|
|
62
|
+
_shadowMaterialLib.delete( light );
|
|
63
|
+
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Creates a function to render shadow objects in a scene.
|
|
70
|
+
*
|
|
71
|
+
* @private
|
|
72
|
+
* @function
|
|
73
|
+
* @param {Renderer} renderer - The renderer.
|
|
74
|
+
* @param {LightShadow} shadow - The light shadow object containing shadow properties.
|
|
75
|
+
* @param {number} shadowType - The type of shadow map (e.g., BasicShadowMap).
|
|
76
|
+
* @param {boolean} useVelocity - Whether to use velocity data for rendering.
|
|
77
|
+
* @return {shadowRenderObjectFunction} A function that renders shadow objects.
|
|
78
|
+
*/
|
|
79
|
+
const _getShadowRenderObjectFunction = ( renderer, shadow, shadowType, useVelocity ) => {
|
|
80
|
+
|
|
81
|
+
_shadowRenderObjectKeys[ 0 ] = renderer;
|
|
82
|
+
_shadowRenderObjectKeys[ 1 ] = shadow;
|
|
83
|
+
|
|
84
|
+
let renderObjectFunction = _shadowRenderObjectLibrary.get( _shadowRenderObjectKeys );
|
|
85
|
+
|
|
86
|
+
if ( renderObjectFunction === undefined || ( renderObjectFunction.shadowType !== shadowType || renderObjectFunction.useVelocity !== useVelocity ) ) {
|
|
87
|
+
|
|
88
|
+
renderObjectFunction = ( object, scene, _camera, geometry, material, group, lightsNode, clippingContext, passId ) => {
|
|
89
|
+
|
|
90
|
+
if ( object.castShadow === true || ( object.receiveShadow && shadowType === VSMShadowMap ) ) {
|
|
91
|
+
|
|
92
|
+
if ( useVelocity ) {
|
|
93
|
+
|
|
94
|
+
getDataFromObject( object ).useVelocity = true;
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
object.onBeforeShadow( renderer, object, _camera, shadow.camera, geometry, scene.overrideMaterial, group );
|
|
99
|
+
|
|
100
|
+
renderer.renderObject( object, scene, _camera, geometry, material, group, lightsNode, clippingContext, passId );
|
|
101
|
+
|
|
102
|
+
object.onAfterShadow( renderer, object, _camera, shadow.camera, geometry, scene.overrideMaterial, group );
|
|
103
|
+
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
renderObjectFunction.shadowType = shadowType;
|
|
109
|
+
renderObjectFunction.useVelocity = useVelocity;
|
|
110
|
+
|
|
111
|
+
_shadowRenderObjectLibrary.set( _shadowRenderObjectKeys, renderObjectFunction );
|
|
112
|
+
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
_shadowRenderObjectKeys[ 0 ] = null;
|
|
116
|
+
_shadowRenderObjectKeys[ 1 ] = null;
|
|
117
|
+
|
|
118
|
+
return renderObjectFunction;
|
|
119
|
+
|
|
120
|
+
};
|
|
5
121
|
|
|
6
122
|
/**
|
|
7
123
|
* Base class for all shadow nodes.
|
|
@@ -55,6 +171,47 @@ class ShadowBaseNode extends Node {
|
|
|
55
171
|
|
|
56
172
|
}
|
|
57
173
|
|
|
174
|
+
/**
|
|
175
|
+
* Retrieves or creates a shadow material for the shadow casting light source.
|
|
176
|
+
*
|
|
177
|
+
* This method checks if a shadow material already exists for the provided light in the internal library.
|
|
178
|
+
* If not, it creates a new `NodeMaterial` configured for shadow rendering and stores it for future use.
|
|
179
|
+
*
|
|
180
|
+
* @return {NodeMaterial} The shadow material associated with the given light.
|
|
181
|
+
*/
|
|
182
|
+
getShadowMaterial() {
|
|
183
|
+
|
|
184
|
+
return _getShadowMaterial( this.light );
|
|
185
|
+
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Disposes the shadow material for the shadow casting light source.
|
|
190
|
+
*/
|
|
191
|
+
disposeShadowMaterial() {
|
|
192
|
+
|
|
193
|
+
_disposeShadowMaterial( this.light );
|
|
194
|
+
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Returns a function to render shadow objects in a scene for the given light shadow and renderer.
|
|
199
|
+
*
|
|
200
|
+
* @param {Renderer} renderer - The renderer.
|
|
201
|
+
* @param {LightShadow} [shadow=this.light.shadow] - The light shadow object containing shadow properties.
|
|
202
|
+
* @return {Function} A function that renders shadow objects.
|
|
203
|
+
*/
|
|
204
|
+
getShadowRenderObjectFunction( renderer, shadow = this.light.shadow ) {
|
|
205
|
+
|
|
206
|
+
const shadowType = renderer.shadowMap.type;
|
|
207
|
+
|
|
208
|
+
const currentMRT = renderer.getMRT();
|
|
209
|
+
const useVelocity = currentMRT ? currentMRT.has( 'velocity' ) : false;
|
|
210
|
+
|
|
211
|
+
return _getShadowRenderObjectFunction( renderer, shadow, shadowType, useVelocity );
|
|
212
|
+
|
|
213
|
+
}
|
|
214
|
+
|
|
58
215
|
/**
|
|
59
216
|
* Setups the shadow position node which is by default the predefined TSL node object `shadowPositionWorld`.
|
|
60
217
|
*
|
|
@@ -1,15 +1,11 @@
|
|
|
1
|
-
import { float, vec2,
|
|
1
|
+
import { float, vec2, If, Fn } from '../tsl/TSLBase.js';
|
|
2
2
|
import { reference } from '../accessors/ReferenceNode.js';
|
|
3
3
|
import { texture } from '../accessors/TextureNode.js';
|
|
4
|
-
import {
|
|
4
|
+
import { step, max, clamp } from '../math/MathNode.js';
|
|
5
5
|
import { add, sub } from '../math/OperatorNode.js';
|
|
6
6
|
import { renderGroup } from '../core/UniformGroupNode.js';
|
|
7
|
-
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
8
7
|
import { screenCoordinate } from '../display/ScreenNode.js';
|
|
9
8
|
import { interleavedGradientNoise, vogelDiskSample } from '../utils/PostProcessingUtils.js';
|
|
10
|
-
import { NoBlending } from '../../constants.js';
|
|
11
|
-
|
|
12
|
-
const shadowMaterialLib = /*@__PURE__*/ new WeakMap();
|
|
13
9
|
|
|
14
10
|
/**
|
|
15
11
|
* A shadow filtering function performing basic filtering. This is in fact an unfiltered version of the shadow map
|
|
@@ -85,54 +81,6 @@ export const PCFShadowFilter = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord,
|
|
|
85
81
|
|
|
86
82
|
} );
|
|
87
83
|
|
|
88
|
-
/**
|
|
89
|
-
* A shadow filtering function performing PCF soft filtering.
|
|
90
|
-
*
|
|
91
|
-
* @method
|
|
92
|
-
* @param {Object} inputs - The input parameter object.
|
|
93
|
-
* @param {DepthTexture} inputs.depthTexture - A reference to the shadow map's texture data.
|
|
94
|
-
* @param {Node<vec3>} inputs.shadowCoord - The shadow coordinates.
|
|
95
|
-
* @param {LightShadow} inputs.shadow - The light shadow.
|
|
96
|
-
* @return {Node<float>} The filtering result.
|
|
97
|
-
*/
|
|
98
|
-
export const PCFSoftShadowFilter = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord, shadow, depthLayer } ) => {
|
|
99
|
-
|
|
100
|
-
const mapSize = reference( 'mapSize', 'vec2', shadow ).setGroup( renderGroup );
|
|
101
|
-
|
|
102
|
-
const texelSize = vec2( 1 ).div( mapSize );
|
|
103
|
-
|
|
104
|
-
const uv = shadowCoord.xy;
|
|
105
|
-
const f = fract( uv.mul( mapSize ).add( 0.5 ) ).toConst();
|
|
106
|
-
uv.subAssign( f.sub( 0.5 ).mul( texelSize ) );
|
|
107
|
-
|
|
108
|
-
const gatherCompare = ( offset ) => {
|
|
109
|
-
|
|
110
|
-
let t = texture( depthTexture, uv ).offset( offset ).gather();
|
|
111
|
-
|
|
112
|
-
if ( depthTexture.isArrayTexture ) {
|
|
113
|
-
|
|
114
|
-
t = t.depth( depthLayer );
|
|
115
|
-
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
return t.compare( shadowCoord.z );
|
|
119
|
-
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
const c1 = gatherCompare( ivec2( - 1, 1 ) ).toConst();
|
|
123
|
-
const c2 = gatherCompare( ivec2( 1, 1 ) ).toConst();
|
|
124
|
-
const c3 = gatherCompare( ivec2( - 1, - 1 ) ).toConst();
|
|
125
|
-
const c4 = gatherCompare( ivec2( 1, - 1 ) ).toConst();
|
|
126
|
-
|
|
127
|
-
return add(
|
|
128
|
-
mix( c1.x, c2.y, f.x ).add( c1.y ).add( c2.x ).mul( f.y ),
|
|
129
|
-
mix( c1.w, c2.z, f.x ).add( c1.z ).add( c2.w ),
|
|
130
|
-
mix( c3.x, c4.y, f.x ).add( c3.y ).add( c4.x ),
|
|
131
|
-
mix( c3.w, c4.z, f.x ).add( c3.z ).add( c4.w ).mul( f.y.oneMinus() )
|
|
132
|
-
).mul( 1 / 9 );
|
|
133
|
-
|
|
134
|
-
} );
|
|
135
|
-
|
|
136
84
|
/**
|
|
137
85
|
* A shadow filtering function performing VSM filtering.
|
|
138
86
|
*
|
|
@@ -179,55 +127,3 @@ export const VSMShadowFilter = /*@__PURE__*/ Fn( ( { depthTexture, shadowCoord,
|
|
|
179
127
|
|
|
180
128
|
} );
|
|
181
129
|
|
|
182
|
-
/**
|
|
183
|
-
* Retrieves or creates a shadow material for the given light source.
|
|
184
|
-
*
|
|
185
|
-
* This function checks if a shadow material already exists for the provided light.
|
|
186
|
-
* If not, it creates a new `NodeMaterial` configured for shadow rendering and stores it
|
|
187
|
-
* in the `shadowMaterialLib` for future use.
|
|
188
|
-
*
|
|
189
|
-
* @tsl
|
|
190
|
-
* @function
|
|
191
|
-
* @param {Light} light - The light source for which the shadow material is needed.
|
|
192
|
-
* If the light is a point light, a depth node is calculated
|
|
193
|
-
* using the linear shadow distance.
|
|
194
|
-
* @returns {NodeMaterial} The shadow material associated with the given light.
|
|
195
|
-
*/
|
|
196
|
-
export const getShadowMaterial = ( light ) => {
|
|
197
|
-
|
|
198
|
-
let material = shadowMaterialLib.get( light );
|
|
199
|
-
|
|
200
|
-
if ( material === undefined ) {
|
|
201
|
-
|
|
202
|
-
material = new NodeMaterial();
|
|
203
|
-
material.colorNode = vec4( 0, 0, 0, 1 );
|
|
204
|
-
material.isShadowPassMaterial = true; // Use to avoid other overrideMaterial override material.colorNode unintentionally when using material.shadowNode
|
|
205
|
-
material.name = 'ShadowMaterial';
|
|
206
|
-
material.blending = NoBlending;
|
|
207
|
-
material.fog = false;
|
|
208
|
-
|
|
209
|
-
shadowMaterialLib.set( light, material );
|
|
210
|
-
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
return material;
|
|
214
|
-
|
|
215
|
-
};
|
|
216
|
-
|
|
217
|
-
/**
|
|
218
|
-
* Disposes the shadow material for the given light source.
|
|
219
|
-
*
|
|
220
|
-
* @param {Light} light - The light source.
|
|
221
|
-
*/
|
|
222
|
-
export const disposeShadowMaterial = ( light ) => {
|
|
223
|
-
|
|
224
|
-
const material = shadowMaterialLib.get( light );
|
|
225
|
-
|
|
226
|
-
if ( material !== undefined ) {
|
|
227
|
-
|
|
228
|
-
material.dispose();
|
|
229
|
-
shadowMaterialLib.delete( light );
|
|
230
|
-
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
2
2
|
import QuadMesh from '../../renderers/common/QuadMesh.js';
|
|
3
|
-
import ChainMap from '../../renderers/common/ChainMap.js';
|
|
4
3
|
import ShadowBaseNode, { shadowPositionWorld } from './ShadowBaseNode.js';
|
|
5
4
|
import { float, vec2, vec3, vec4, int, Fn } from '../tsl/TSLCore.js';
|
|
6
5
|
import { reference } from '../accessors/ReferenceNode.js';
|
|
@@ -12,80 +11,20 @@ import { add } from '../math/OperatorNode.js';
|
|
|
12
11
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
13
12
|
import { Loop } from '../utils/LoopNode.js';
|
|
14
13
|
import { screenCoordinate } from '../display/ScreenNode.js';
|
|
15
|
-
import { Compatibility, GreaterEqualCompare, HalfFloatType, LessEqualCompare, LinearFilter, NearestFilter, PCFShadowMap,
|
|
14
|
+
import { Compatibility, GreaterEqualCompare, HalfFloatType, LessEqualCompare, LinearFilter, NearestFilter, PCFShadowMap, RGFormat, VSMShadowMap } from '../../constants.js';
|
|
16
15
|
import { renderGroup } from '../core/UniformGroupNode.js';
|
|
17
16
|
import { viewZToLogarithmicDepth, perspectiveDepthToViewZ, orthographicDepthToViewZ, viewZToOrthographicDepth } from '../display/ViewportDepthNode.js';
|
|
18
17
|
import { lightShadowMatrix } from '../accessors/Lights.js';
|
|
19
18
|
import { resetRendererAndSceneState, restoreRendererAndSceneState } from '../../renderers/common/RendererUtils.js';
|
|
20
|
-
import {
|
|
21
|
-
import { getShadowMaterial, disposeShadowMaterial, BasicShadowFilter, PCFShadowFilter, PCFSoftShadowFilter, VSMShadowFilter } from './ShadowFilterNode.js';
|
|
19
|
+
import { BasicShadowFilter, PCFShadowFilter, VSMShadowFilter } from './ShadowFilterNode.js';
|
|
22
20
|
import { positionLocal } from '../accessors/Position.js';
|
|
23
21
|
import { uniform } from '../core/UniformNode.js';
|
|
24
22
|
import { equirectDirection } from '../utils/EquirectUV.js';
|
|
25
|
-
|
|
23
|
+
import { context } from '../core/ContextNode.js';
|
|
26
24
|
// WITH_GENESYS
|
|
27
25
|
import { ProfilerService } from '../../profiler/ProfilerService.js';
|
|
28
26
|
// !WITH_GENESYS
|
|
29
27
|
|
|
30
|
-
//
|
|
31
|
-
|
|
32
|
-
const _shadowRenderObjectLibrary = /*@__PURE__*/ new ChainMap();
|
|
33
|
-
const _shadowRenderObjectKeys = [];
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Creates a function to render shadow objects in a scene.
|
|
37
|
-
*
|
|
38
|
-
* @tsl
|
|
39
|
-
* @function
|
|
40
|
-
* @param {Renderer} renderer - The renderer.
|
|
41
|
-
* @param {LightShadow} shadow - The light shadow object containing shadow properties.
|
|
42
|
-
* @param {number} shadowType - The type of shadow map (e.g., BasicShadowMap).
|
|
43
|
-
* @param {boolean} useVelocity - Whether to use velocity data for rendering.
|
|
44
|
-
* @return {shadowRenderObjectFunction} A function that renders shadow objects.
|
|
45
|
-
*/
|
|
46
|
-
export const getShadowRenderObjectFunction = ( renderer, shadow, shadowType, useVelocity ) => {
|
|
47
|
-
|
|
48
|
-
_shadowRenderObjectKeys[ 0 ] = renderer;
|
|
49
|
-
_shadowRenderObjectKeys[ 1 ] = shadow;
|
|
50
|
-
|
|
51
|
-
let renderObjectFunction = _shadowRenderObjectLibrary.get( _shadowRenderObjectKeys );
|
|
52
|
-
|
|
53
|
-
if ( renderObjectFunction === undefined || ( renderObjectFunction.shadowType !== shadowType || renderObjectFunction.useVelocity !== useVelocity ) ) {
|
|
54
|
-
|
|
55
|
-
renderObjectFunction = ( object, scene, _camera, geometry, material, group, lightsNode, clippingContext, passId ) => {
|
|
56
|
-
|
|
57
|
-
if ( object.castShadow === true || ( object.receiveShadow && shadowType === VSMShadowMap ) ) {
|
|
58
|
-
|
|
59
|
-
if ( useVelocity ) {
|
|
60
|
-
|
|
61
|
-
getDataFromObject( object ).useVelocity = true;
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
object.onBeforeShadow( renderer, object, _camera, shadow.camera, geometry, scene.overrideMaterial, group );
|
|
66
|
-
|
|
67
|
-
renderer.renderObject( object, scene, _camera, geometry, material, group, lightsNode, clippingContext, passId );
|
|
68
|
-
|
|
69
|
-
object.onAfterShadow( renderer, object, _camera, shadow.camera, geometry, scene.overrideMaterial, group );
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
renderObjectFunction.shadowType = shadowType;
|
|
76
|
-
renderObjectFunction.useVelocity = useVelocity;
|
|
77
|
-
|
|
78
|
-
_shadowRenderObjectLibrary.set( _shadowRenderObjectKeys, renderObjectFunction );
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
_shadowRenderObjectKeys[ 0 ] = null;
|
|
83
|
-
_shadowRenderObjectKeys[ 1 ] = null;
|
|
84
|
-
|
|
85
|
-
return renderObjectFunction;
|
|
86
|
-
|
|
87
|
-
};
|
|
88
|
-
|
|
89
28
|
/**
|
|
90
29
|
* Represents the shader code for the first VSM render pass.
|
|
91
30
|
*
|
|
@@ -178,7 +117,7 @@ const VSMPassHorizontal = /*@__PURE__*/ Fn( ( { samples, radius, size, shadowPas
|
|
|
178
117
|
|
|
179
118
|
} );
|
|
180
119
|
|
|
181
|
-
const _shadowFilterLib = [ BasicShadowFilter, PCFShadowFilter,
|
|
120
|
+
const _shadowFilterLib = [ BasicShadowFilter, PCFShadowFilter, null /* PCFSoftShadowMap, removed */, VSMShadowFilter ];
|
|
182
121
|
|
|
183
122
|
//
|
|
184
123
|
|
|
@@ -427,7 +366,7 @@ class ShadowNode extends ShadowBaseNode {
|
|
|
427
366
|
const shadowMapType = renderer.shadowMap.type;
|
|
428
367
|
const hasTextureCompare = renderer.hasCompatibility( Compatibility.TEXTURE_COMPARE );
|
|
429
368
|
|
|
430
|
-
if (
|
|
369
|
+
if ( shadowMapType === PCFShadowMap && hasTextureCompare ) {
|
|
431
370
|
|
|
432
371
|
depthTexture.minFilter = LinearFilter;
|
|
433
372
|
depthTexture.magFilter = LinearFilter;
|
|
@@ -496,12 +435,16 @@ class ShadowNode extends ShadowBaseNode {
|
|
|
496
435
|
const radius = reference( 'radius', 'float', shadow ).setGroup( renderGroup );
|
|
497
436
|
const size = reference( 'mapSize', 'vec2', shadow ).setGroup( renderGroup );
|
|
498
437
|
|
|
438
|
+
const sharedContext = context( builder.getSharedContext() );
|
|
439
|
+
|
|
499
440
|
let material = this.vsmMaterialVertical || ( this.vsmMaterialVertical = new NodeMaterial() );
|
|
500
|
-
material.
|
|
441
|
+
material.contextNode = sharedContext;
|
|
442
|
+
material.fragmentNode = VSMPassVertical( { samples, radius, size, shadowPass: shadowPassVertical, depthLayer: this.depthLayer } );
|
|
501
443
|
material.name = 'VSMVertical';
|
|
502
444
|
|
|
503
445
|
material = this.vsmMaterialHorizontal || ( this.vsmMaterialHorizontal = new NodeMaterial() );
|
|
504
|
-
material.
|
|
446
|
+
material.contextNode = sharedContext;
|
|
447
|
+
material.fragmentNode = VSMPassHorizontal( { samples, radius, size, shadowPass: shadowPassHorizontal, depthLayer: this.depthLayer } );
|
|
505
448
|
material.name = 'VSMHorizontal';
|
|
506
449
|
|
|
507
450
|
}
|
|
@@ -736,11 +679,11 @@ class ShadowNode extends ShadowBaseNode {
|
|
|
736
679
|
*/
|
|
737
680
|
updateShadow( frame ) {
|
|
738
681
|
|
|
739
|
-
const { shadowMap,
|
|
682
|
+
const { shadowMap, shadow } = this;
|
|
740
683
|
const { renderer, scene, camera } = frame;
|
|
741
684
|
|
|
742
685
|
// WITH_GENESYS
|
|
743
|
-
const lightLabel = `shadowMap.render.light (${light.name || light.type})`;
|
|
686
|
+
const lightLabel = `shadowMap.render.light (${this.light.name || this.light.type})`;
|
|
744
687
|
ProfilerService.begin( lightLabel );
|
|
745
688
|
// !WITH_GENESYS
|
|
746
689
|
|
|
@@ -759,17 +702,14 @@ class ShadowNode extends ShadowBaseNode {
|
|
|
759
702
|
|
|
760
703
|
const currentRenderObjectFunction = renderer.getRenderObjectFunction();
|
|
761
704
|
|
|
762
|
-
const currentMRT = renderer.getMRT();
|
|
763
|
-
const useVelocity = currentMRT ? currentMRT.has( 'velocity' ) : false;
|
|
764
|
-
|
|
765
705
|
// WITH_GENESYS
|
|
766
706
|
ProfilerService.begin( 'shadowMap.render.setupPass' );
|
|
767
707
|
// !WITH_GENESYS
|
|
768
708
|
_rendererState = resetRendererAndSceneState( renderer, scene, _rendererState );
|
|
769
709
|
|
|
770
|
-
scene.overrideMaterial = getShadowMaterial(
|
|
710
|
+
scene.overrideMaterial = this.getShadowMaterial();
|
|
771
711
|
|
|
772
|
-
renderer.setRenderObjectFunction( getShadowRenderObjectFunction( renderer, shadow
|
|
712
|
+
renderer.setRenderObjectFunction( this.getShadowRenderObjectFunction( renderer, this.shadow || this.light.shadow ) );
|
|
773
713
|
|
|
774
714
|
renderer.setClearColor( 0x000000, 0 );
|
|
775
715
|
|
|
@@ -861,7 +801,7 @@ class ShadowNode extends ShadowBaseNode {
|
|
|
861
801
|
|
|
862
802
|
this._currentShadowType = null;
|
|
863
803
|
|
|
864
|
-
disposeShadowMaterial(
|
|
804
|
+
this.disposeShadowMaterial();
|
|
865
805
|
|
|
866
806
|
if ( this.shadowMap ) {
|
|
867
807
|
|
|
@@ -899,19 +839,23 @@ class ShadowNode extends ShadowBaseNode {
|
|
|
899
839
|
*/
|
|
900
840
|
updateBefore( frame ) {
|
|
901
841
|
|
|
842
|
+
// do not render shadow maps during precompilation
|
|
843
|
+
|
|
844
|
+
if ( frame.renderer._isPreCompiling === true ) return;
|
|
845
|
+
|
|
902
846
|
const { shadow } = this;
|
|
903
847
|
|
|
904
848
|
let needsUpdate = shadow.needsUpdate || shadow.autoUpdate;
|
|
905
849
|
|
|
906
850
|
if ( needsUpdate ) {
|
|
907
851
|
|
|
908
|
-
if ( this._cameraFrameId
|
|
852
|
+
if ( this._cameraFrameId.get( frame.camera ) === frame.frameId ) {
|
|
909
853
|
|
|
910
854
|
needsUpdate = false;
|
|
911
855
|
|
|
912
856
|
}
|
|
913
857
|
|
|
914
|
-
this._cameraFrameId
|
|
858
|
+
this._cameraFrameId.set( frame.camera, frame.frameId );
|
|
915
859
|
|
|
916
860
|
}
|
|
917
861
|
|
|
@@ -933,19 +877,6 @@ class ShadowNode extends ShadowBaseNode {
|
|
|
933
877
|
|
|
934
878
|
export default ShadowNode;
|
|
935
879
|
|
|
936
|
-
/**
|
|
937
|
-
* Shadow Render Object Function.
|
|
938
|
-
*
|
|
939
|
-
* @function shadowRenderObjectFunction
|
|
940
|
-
* @param {Object3D} object - The 3D object to render.
|
|
941
|
-
* @param {Scene} scene - The scene containing the object.
|
|
942
|
-
* @param {Camera} _camera - The camera used for rendering.
|
|
943
|
-
* @param {BufferGeometry} geometry - The geometry of the object.
|
|
944
|
-
* @param {Material} material - The material of the object.
|
|
945
|
-
* @param {Group} group - The group the object belongs to.
|
|
946
|
-
* @param {...any} params - Additional parameters for rendering.
|
|
947
|
-
*/
|
|
948
|
-
|
|
949
880
|
/**
|
|
950
881
|
* TSL function for creating an instance of `ShadowNode`.
|
|
951
882
|
*
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import { int, float, vec3, If, Fn } from '../../tsl/TSLBase.js';
|
|
5
|
-
import { add } from '../../math/OperatorNode.js';
|
|
6
|
-
import { floor, trunc, max, min } from '../../math/MathNode.js';
|
|
1
|
+
import { int, float, vec3, If, Fn } from '../tsl/TSLBase.js';
|
|
2
|
+
import { add } from '../math/OperatorNode.js';
|
|
3
|
+
import { floor, trunc, max, min } from '../math/MathNode.js';
|
|
7
4
|
|
|
8
5
|
export const mx_hsvtorgb = /*@__PURE__*/ Fn( ( [ hsv ] ) => {
|
|
9
6
|
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import { bvec3, vec3, Fn } from '../../tsl/TSLBase.js';
|
|
5
|
-
import { greaterThan } from '../../math/OperatorNode.js';
|
|
6
|
-
import { max, pow, mix } from '../../math/MathNode.js';
|
|
1
|
+
import { bvec3, vec3, Fn } from '../tsl/TSLBase.js';
|
|
2
|
+
import { greaterThan } from '../math/OperatorNode.js';
|
|
3
|
+
import { max, pow, mix } from '../math/MathNode.js';
|
|
7
4
|
|
|
8
5
|
export const mx_srgb_texture_to_lin_rec709 = /*@__PURE__*/ Fn( ( [ color_immutable ] ) => {
|
|
9
6
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { float, vec2, vec3, add, sub, mul, sin, cos, normalize } from '../tsl/TSLBase.js';
|
|
2
|
+
|
|
3
|
+
export const mx_rotate2d = ( input, amount = 0 ) => {
|
|
4
|
+
|
|
5
|
+
input = vec2( input );
|
|
6
|
+
amount = float( amount );
|
|
7
|
+
|
|
8
|
+
const rotationRadians = mul( amount, Math.PI / 180.0 );
|
|
9
|
+
const sa = sin( rotationRadians );
|
|
10
|
+
const ca = cos( rotationRadians );
|
|
11
|
+
const x = input.x;
|
|
12
|
+
const y = input.y;
|
|
13
|
+
|
|
14
|
+
return vec2( add( mul( ca, x ), mul( sa, y ) ), sub( mul( ca, y ), mul( sa, x ) ) );
|
|
15
|
+
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export const mx_rotate3d = ( input, amount = 0, axis = vec3( 0, 1, 0 ) ) => {
|
|
19
|
+
|
|
20
|
+
input = vec3( input );
|
|
21
|
+
amount = float( amount );
|
|
22
|
+
axis = vec3( axis );
|
|
23
|
+
|
|
24
|
+
const normalizedAxis = normalize( axis );
|
|
25
|
+
const rotationRadians = mul( amount, Math.PI / 180.0 );
|
|
26
|
+
const s = sin( rotationRadians );
|
|
27
|
+
const c = cos( rotationRadians );
|
|
28
|
+
const oc = sub( 1, c );
|
|
29
|
+
|
|
30
|
+
// based on https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula
|
|
31
|
+
// but the code in the Wikipedia article is for v' = M * v, where as
|
|
32
|
+
// MaterialX is v' = v * M, thus the order of parameters into the first cross are reversed
|
|
33
|
+
return input.mul( c )
|
|
34
|
+
.add( input.cross( normalizedAxis ).mul( s ) )
|
|
35
|
+
.add( normalizedAxis.mul( normalizedAxis.dot( input ).mul( oc ) ) );
|
|
36
|
+
|
|
37
|
+
};
|