@gnsx/three 0.185.15 → 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 +1303 -728
- 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/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
|
@@ -30,7 +30,7 @@ import { Matrix4 } from '../../math/Matrix4.js';
|
|
|
30
30
|
import { Vector2 } from '../../math/Vector2.js';
|
|
31
31
|
import { Vector4 } from '../../math/Vector4.js';
|
|
32
32
|
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
33
|
-
import { DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoToneMapping, LinearFilter, HalfFloatType, RGBAFormat, PCFShadowMap, VSMShadowMap } from '../../constants.js';
|
|
33
|
+
import { DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoToneMapping, LinearFilter, HalfFloatType, RGBAFormat, PCFShadowMap, PCFSoftShadowMap, VSMShadowMap, RenderObjectRefreshType } from '../../constants.js';
|
|
34
34
|
|
|
35
35
|
import { float, vec3, vec4, Fn } from '../../nodes/tsl/TSLCore.js';
|
|
36
36
|
// WITH_GENESYS
|
|
@@ -277,7 +277,7 @@ class Renderer {
|
|
|
277
277
|
* @type {number}
|
|
278
278
|
* @default 0
|
|
279
279
|
*/
|
|
280
|
-
this._samples = samples || ( antialias === true
|
|
280
|
+
this._samples = samples || ( antialias === true ? 4 : 0 );
|
|
281
281
|
|
|
282
282
|
/**
|
|
283
283
|
* OnCanvasTargetResize callback function.
|
|
@@ -666,6 +666,16 @@ class Renderer {
|
|
|
666
666
|
*/
|
|
667
667
|
this._compilationPromises = null;
|
|
668
668
|
|
|
669
|
+
/**
|
|
670
|
+
* Whether the renderer is currently precompiling a render object in
|
|
671
|
+
* `compileAsync()`.
|
|
672
|
+
*
|
|
673
|
+
* @private
|
|
674
|
+
* @type {boolean}
|
|
675
|
+
* @default false
|
|
676
|
+
*/
|
|
677
|
+
this._isPreCompiling = false;
|
|
678
|
+
|
|
669
679
|
/**
|
|
670
680
|
* When an override material is in use, this property points to the current
|
|
671
681
|
* source material during the rendering of a render object.
|
|
@@ -728,6 +738,9 @@ class Renderer {
|
|
|
728
738
|
* Debug configuration.
|
|
729
739
|
* @typedef {Object} DebugConfig
|
|
730
740
|
* @property {boolean} checkShaderErrors - Whether shader errors should be checked or not.
|
|
741
|
+
* @property {Object} diagnostics - Diagnostics configuration for the shader generation.
|
|
742
|
+
* @property {boolean} diagnostics.keywords - Whether declaration names that collide with reserved keywords should be renamed or not.
|
|
743
|
+
* @property {?Function} onNodeBuilderCreated - A callback function that is executed after a node builder has been created and before it is built.
|
|
731
744
|
* @property {?Function} onShaderError - A callback function that is executed when a shader error happens. Only supported with WebGL 2 right now.
|
|
732
745
|
* @property {Function} getShaderAsync - Allows the get the raw shader code for the given scene, camera and 3D object.
|
|
733
746
|
*/
|
|
@@ -739,6 +752,10 @@ class Renderer {
|
|
|
739
752
|
*/
|
|
740
753
|
this.debug = {
|
|
741
754
|
checkShaderErrors: true,
|
|
755
|
+
diagnostics: {
|
|
756
|
+
keywords: false
|
|
757
|
+
},
|
|
758
|
+
onNodeBuilderCreated: null,
|
|
742
759
|
onShaderError: null,
|
|
743
760
|
getShaderAsync: async ( scene, camera, object ) => {
|
|
744
761
|
|
|
@@ -747,7 +764,7 @@ class Renderer {
|
|
|
747
764
|
const useFrameBufferTarget = this.needsFrameBufferTarget && this._renderTarget === null;
|
|
748
765
|
const renderTarget = useFrameBufferTarget ? this._getFrameBufferTarget() : ( this._renderTarget || this._outputRenderTarget );
|
|
749
766
|
|
|
750
|
-
const renderList = this._renderLists.get( scene, camera );
|
|
767
|
+
const renderList = this._renderLists.get( scene, camera, this.lighting );
|
|
751
768
|
const renderContext = this._renderContexts.get( renderTarget, this._mrt );
|
|
752
769
|
|
|
753
770
|
const material = scene.overrideMaterial || object.material;
|
|
@@ -821,7 +838,7 @@ class Renderer {
|
|
|
821
838
|
this._pipelines = new Pipelines( backend, this._nodes, this.info );
|
|
822
839
|
this._bindings = new Bindings( backend, this._nodes, this._textures, this._attributes, this._pipelines, this.info );
|
|
823
840
|
this._objects = new RenderObjects( this, this._nodes, this._geometries, this._pipelines, this._bindings, this.info );
|
|
824
|
-
this._renderLists = new RenderLists(
|
|
841
|
+
this._renderLists = new RenderLists();
|
|
825
842
|
this._bundles = new RenderBundles();
|
|
826
843
|
this._renderContexts = new RenderContexts( this );
|
|
827
844
|
|
|
@@ -830,12 +847,6 @@ class Renderer {
|
|
|
830
847
|
this._animation.start();
|
|
831
848
|
this._initialized = true;
|
|
832
849
|
|
|
833
|
-
//
|
|
834
|
-
|
|
835
|
-
this._inspector.init();
|
|
836
|
-
|
|
837
|
-
//
|
|
838
|
-
|
|
839
850
|
resolve( this );
|
|
840
851
|
|
|
841
852
|
} );
|
|
@@ -884,14 +895,23 @@ class Renderer {
|
|
|
884
895
|
* @param {Object3D} scene - The scene or 3D object to precompile.
|
|
885
896
|
* @param {Camera} camera - The camera that is used to render the scene.
|
|
886
897
|
* @param {?Scene} targetScene - If the first argument is a 3D object, this parameter must represent the scene the 3D object is going to be added.
|
|
898
|
+
* @param {onProgressCallback} [onProgress] - Executed while the compilation is in progress.
|
|
887
899
|
* @return {Promise} A Promise that resolves when the compile has been finished.
|
|
888
900
|
*/
|
|
889
|
-
async compileAsync( scene, camera, targetScene = null ) {
|
|
901
|
+
async compileAsync( scene, camera, targetScene = null, onProgress = null ) {
|
|
890
902
|
|
|
891
903
|
if ( this._isDeviceLost === true ) return;
|
|
892
904
|
|
|
893
905
|
if ( this._initialized === false ) await this.init();
|
|
894
906
|
|
|
907
|
+
if ( this.shadowMap.type === PCFSoftShadowMap ) {
|
|
908
|
+
|
|
909
|
+
warn( 'WebGPURenderer: PCFSoftShadowMap has been removed. Using PCFShadowMap instead.' );
|
|
910
|
+
|
|
911
|
+
this.shadowMap.type = PCFShadowMap;
|
|
912
|
+
|
|
913
|
+
}
|
|
914
|
+
|
|
895
915
|
// preserve render tree
|
|
896
916
|
|
|
897
917
|
const nodeFrame = this._nodes.nodeFrame;
|
|
@@ -912,7 +932,9 @@ class Renderer {
|
|
|
912
932
|
|
|
913
933
|
// Match render()'s logic: use frameBufferTarget when needsFrameBufferTarget is true
|
|
914
934
|
const useFrameBufferTarget = this.needsFrameBufferTarget && this._renderTarget === null;
|
|
915
|
-
const
|
|
935
|
+
const outputRenderTarget = this._renderTarget || this._outputRenderTarget;
|
|
936
|
+
const useXRCamera = this.xr.isPresenting === true && this.isOutputTarget;
|
|
937
|
+
const renderTarget = useFrameBufferTarget ? this._getFrameBufferTarget() : outputRenderTarget;
|
|
916
938
|
const renderContext = this._renderContexts.get( renderTarget, this._mrt );
|
|
917
939
|
const activeMipmapLevel = this._activeMipmapLevel;
|
|
918
940
|
|
|
@@ -943,7 +965,7 @@ class Renderer {
|
|
|
943
965
|
|
|
944
966
|
if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
|
|
945
967
|
|
|
946
|
-
camera = this._updateCamera( camera );
|
|
968
|
+
camera = this._updateCamera( camera, useXRCamera );
|
|
947
969
|
|
|
948
970
|
//
|
|
949
971
|
|
|
@@ -951,21 +973,20 @@ class Renderer {
|
|
|
951
973
|
|
|
952
974
|
//
|
|
953
975
|
|
|
954
|
-
|
|
976
|
+
_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
|
|
955
977
|
|
|
956
978
|
if ( camera.isArrayCamera ) {
|
|
957
979
|
|
|
958
|
-
|
|
980
|
+
_frustumArray.setFromArrayCamera( camera );
|
|
959
981
|
|
|
960
982
|
} else {
|
|
961
983
|
|
|
962
|
-
|
|
963
|
-
frustum.setFromProjectionMatrix( _projScreenMatrix, camera.coordinateSystem, camera.reversedDepth );
|
|
984
|
+
_frustum.setFromProjectionMatrix( _projScreenMatrix, camera.coordinateSystem, camera.reversedDepth );
|
|
964
985
|
|
|
965
986
|
}
|
|
966
987
|
|
|
967
988
|
// Use sceneRef for render list to ensure lightsNode matches between compileAsync and render
|
|
968
|
-
const renderList = this._renderLists.get( sceneRef, camera );
|
|
989
|
+
const renderList = this._renderLists.get( sceneRef, camera, this.lighting );
|
|
969
990
|
renderList.begin();
|
|
970
991
|
|
|
971
992
|
this._projectObject( scene, camera, 0, renderList, renderContext.clippingContext );
|
|
@@ -1043,6 +1064,9 @@ class Renderer {
|
|
|
1043
1064
|
// Process compilation work items sequentially to avoid freezing
|
|
1044
1065
|
// Yields between objects to keep animation smooth
|
|
1045
1066
|
|
|
1067
|
+
const total = compilationPromises.length;
|
|
1068
|
+
let loaded = 0;
|
|
1069
|
+
|
|
1046
1070
|
for ( const item of compilationPromises ) {
|
|
1047
1071
|
|
|
1048
1072
|
const renderObject = this._objects.get( item.object, item.material, item.scene, item.camera, item.lightsNode, item.renderContext, item.clippingContext, item.passId );
|
|
@@ -1052,10 +1076,12 @@ class Renderer {
|
|
|
1052
1076
|
// Use async node building to yield to main thread
|
|
1053
1077
|
await this._nodes.getForRenderAsync( renderObject );
|
|
1054
1078
|
|
|
1079
|
+
this._isPreCompiling = true; // note: no awaits are allowed when this flag is true otherwise the state leaks outside of this method
|
|
1055
1080
|
this._nodes.updateBefore( renderObject );
|
|
1056
1081
|
this._geometries.updateForRender( renderObject );
|
|
1057
1082
|
this._nodes.updateForRender( renderObject );
|
|
1058
1083
|
this._bindings.updateForRender( renderObject );
|
|
1084
|
+
this._isPreCompiling = false;
|
|
1059
1085
|
|
|
1060
1086
|
// Wait for pipeline creation
|
|
1061
1087
|
const pipelinePromises = [];
|
|
@@ -1066,7 +1092,17 @@ class Renderer {
|
|
|
1066
1092
|
|
|
1067
1093
|
}
|
|
1068
1094
|
|
|
1095
|
+
this._isPreCompiling = true;
|
|
1069
1096
|
this._nodes.updateAfter( renderObject );
|
|
1097
|
+
this._isPreCompiling = false;
|
|
1098
|
+
|
|
1099
|
+
loaded ++;
|
|
1100
|
+
|
|
1101
|
+
if ( onProgress !== null ) {
|
|
1102
|
+
|
|
1103
|
+
onProgress( new ProgressEvent( 'progress', { lengthComputable: true, loaded, total } ) );
|
|
1104
|
+
|
|
1105
|
+
}
|
|
1070
1106
|
|
|
1071
1107
|
// Yield between objects to allow animation frames
|
|
1072
1108
|
await yieldToMain();
|
|
@@ -1075,6 +1111,93 @@ class Renderer {
|
|
|
1075
1111
|
|
|
1076
1112
|
}
|
|
1077
1113
|
|
|
1114
|
+
/**
|
|
1115
|
+
* Compile compute programs. This can be useful to avoid a
|
|
1116
|
+
* phenomenon which is called "shader compilation stutter", which occurs when
|
|
1117
|
+
* rendering an object with a new shader for the first time.
|
|
1118
|
+
*
|
|
1119
|
+
* @async
|
|
1120
|
+
* @param {Node|Array<Node>} computeNodes - The compute node(s).
|
|
1121
|
+
* @param {onProgressCallback} [onProgress] - Executed while the compilation is in progress.
|
|
1122
|
+
* @return {Promise} A Promise that resolves when the compile has been finished.
|
|
1123
|
+
*/
|
|
1124
|
+
async compileComputeAsync( computeNodes, onProgress = null ) {
|
|
1125
|
+
|
|
1126
|
+
if ( this._isDeviceLost === true ) return;
|
|
1127
|
+
|
|
1128
|
+
if ( this._initialized === false ) await this.init();
|
|
1129
|
+
|
|
1130
|
+
const computeList = Array.isArray( computeNodes ) ? computeNodes : [ computeNodes ];
|
|
1131
|
+
|
|
1132
|
+
if ( computeList.length === 0 || computeList.some( ( computeNode ) => computeNode === undefined || computeNode === null || computeNode.isComputeNode !== true ) ) {
|
|
1133
|
+
|
|
1134
|
+
throw new Error( 'THREE.Renderer: .compileComputeAsync() expects a ComputeNode.' );
|
|
1135
|
+
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
const total = computeList.length;
|
|
1139
|
+
let loaded = 0;
|
|
1140
|
+
|
|
1141
|
+
//
|
|
1142
|
+
|
|
1143
|
+
const pipelines = this._pipelines;
|
|
1144
|
+
const bindings = this._bindings;
|
|
1145
|
+
const nodes = this._nodes;
|
|
1146
|
+
|
|
1147
|
+
for ( const computeNode of computeList ) {
|
|
1148
|
+
|
|
1149
|
+
if ( pipelines.has( computeNode ) === false ) {
|
|
1150
|
+
|
|
1151
|
+
const dispose = () => {
|
|
1152
|
+
|
|
1153
|
+
computeNode.removeEventListener( 'dispose', dispose );
|
|
1154
|
+
|
|
1155
|
+
pipelines.delete( computeNode );
|
|
1156
|
+
bindings.deleteForCompute( computeNode );
|
|
1157
|
+
nodes.delete( computeNode );
|
|
1158
|
+
|
|
1159
|
+
};
|
|
1160
|
+
|
|
1161
|
+
computeNode.addEventListener( 'dispose', dispose );
|
|
1162
|
+
|
|
1163
|
+
const onInitFn = computeNode.onInitFunction;
|
|
1164
|
+
|
|
1165
|
+
if ( onInitFn !== null ) {
|
|
1166
|
+
|
|
1167
|
+
onInitFn.call( computeNode, { renderer: this } );
|
|
1168
|
+
|
|
1169
|
+
}
|
|
1170
|
+
|
|
1171
|
+
}
|
|
1172
|
+
|
|
1173
|
+
await nodes.getForComputeAsync( computeNode );
|
|
1174
|
+
|
|
1175
|
+
nodes.updateBeforeForCompute( computeNode );
|
|
1176
|
+
nodes.updateForCompute( computeNode );
|
|
1177
|
+
bindings.updateForCompute( computeNode );
|
|
1178
|
+
|
|
1179
|
+
const computeBindings = bindings.getForCompute( computeNode );
|
|
1180
|
+
const compilationPromises = [];
|
|
1181
|
+
|
|
1182
|
+
pipelines.getForCompute( computeNode, computeBindings, compilationPromises );
|
|
1183
|
+
await Promise.all( compilationPromises );
|
|
1184
|
+
|
|
1185
|
+
nodes.updateAfterForCompute( computeNode );
|
|
1186
|
+
|
|
1187
|
+
loaded ++;
|
|
1188
|
+
|
|
1189
|
+
if ( onProgress !== null ) {
|
|
1190
|
+
|
|
1191
|
+
onProgress( new ProgressEvent( 'progress', { lengthComputable: true, loaded, total } ) );
|
|
1192
|
+
|
|
1193
|
+
}
|
|
1194
|
+
|
|
1195
|
+
if ( loaded < total ) await yieldToMain();
|
|
1196
|
+
|
|
1197
|
+
}
|
|
1198
|
+
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1078
1201
|
/**
|
|
1079
1202
|
* Renders the scene in an async fashion.
|
|
1080
1203
|
*
|
|
@@ -1337,7 +1460,9 @@ class Renderer {
|
|
|
1337
1460
|
|
|
1338
1461
|
const renderObject = renderObjects[ i ];
|
|
1339
1462
|
|
|
1340
|
-
|
|
1463
|
+
const refreshType = this._nodes.needsRefresh( renderObject );
|
|
1464
|
+
|
|
1465
|
+
if ( refreshType === RenderObjectRefreshType.FULL ) {
|
|
1341
1466
|
|
|
1342
1467
|
this._nodes.updateBefore( renderObject );
|
|
1343
1468
|
|
|
@@ -1347,6 +1472,15 @@ class Renderer {
|
|
|
1347
1472
|
|
|
1348
1473
|
this._nodes.updateAfter( renderObject );
|
|
1349
1474
|
|
|
1475
|
+
} else if ( refreshType === RenderObjectRefreshType.SHARED ) {
|
|
1476
|
+
|
|
1477
|
+
this._nodes.updateBefore( renderObject );
|
|
1478
|
+
|
|
1479
|
+
this._nodes.updateForRender( renderObject );
|
|
1480
|
+
this._bindings.updateSharedForRender( renderObject );
|
|
1481
|
+
|
|
1482
|
+
this._nodes.updateAfter( renderObject );
|
|
1483
|
+
|
|
1350
1484
|
}
|
|
1351
1485
|
|
|
1352
1486
|
}
|
|
@@ -1414,7 +1548,9 @@ class Renderer {
|
|
|
1414
1548
|
|
|
1415
1549
|
_renderOutputLayers( quad, renderTarget ) {
|
|
1416
1550
|
|
|
1417
|
-
|
|
1551
|
+
const useMultiview = this.backend.isWebGLBackend === true && renderTarget.multiview === true;
|
|
1552
|
+
|
|
1553
|
+
if ( useMultiview || renderTarget.texture.isArrayTexture !== true || renderTarget.texture.image.depth <= 1 ) {
|
|
1418
1554
|
|
|
1419
1555
|
this._renderScene( quad, quad.camera, false );
|
|
1420
1556
|
return;
|
|
@@ -1453,12 +1589,7 @@ class Renderer {
|
|
|
1453
1589
|
*/
|
|
1454
1590
|
_getFrameBufferTarget() {
|
|
1455
1591
|
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
const useToneMapping = currentToneMapping !== NoToneMapping;
|
|
1459
|
-
const useColorSpace = currentColorSpace !== ColorManagement.workingColorSpace;
|
|
1460
|
-
|
|
1461
|
-
if ( useToneMapping === false && useColorSpace === false ) return null;
|
|
1592
|
+
if ( this.needsFrameBufferTarget === false ) return null;
|
|
1462
1593
|
|
|
1463
1594
|
const { width, height } = this.getDrawingBufferSize( _drawingBufferSize );
|
|
1464
1595
|
const { depth, stencil } = this;
|
|
@@ -1530,6 +1661,10 @@ class Renderer {
|
|
|
1530
1661
|
frameBufferTarget.multiview = outputRenderTarget !== null ? outputRenderTarget.multiview : false;
|
|
1531
1662
|
frameBufferTarget.useArrayDepthTexture = outputRenderTarget !== null ? outputRenderTarget.useArrayDepthTexture : false;
|
|
1532
1663
|
frameBufferTarget.resolveDepthBuffer = outputRenderTarget !== null ? outputRenderTarget.resolveDepthBuffer : true;
|
|
1664
|
+
frameBufferTarget.resolveStencilBuffer = outputRenderTarget !== null ? outputRenderTarget.resolveStencilBuffer : true;
|
|
1665
|
+
frameBufferTarget.storeMultisampledColorBuffer = outputRenderTarget !== null ? outputRenderTarget.storeMultisampledColorBuffer : true;
|
|
1666
|
+
frameBufferTarget.storeMultisampledDepthBuffer = outputRenderTarget !== null ? outputRenderTarget.storeMultisampledDepthBuffer : true;
|
|
1667
|
+
frameBufferTarget.storeMultisampledStencilBuffer = outputRenderTarget !== null ? outputRenderTarget.storeMultisampledStencilBuffer : true;
|
|
1533
1668
|
frameBufferTarget._autoAllocateDepthBuffer = outputRenderTarget !== null ? outputRenderTarget._autoAllocateDepthBuffer : false;
|
|
1534
1669
|
|
|
1535
1670
|
return frameBufferTarget;
|
|
@@ -1549,6 +1684,14 @@ class Renderer {
|
|
|
1549
1684
|
|
|
1550
1685
|
if ( this._isDeviceLost === true ) return;
|
|
1551
1686
|
|
|
1687
|
+
if ( this.shadowMap.type === PCFSoftShadowMap ) {
|
|
1688
|
+
|
|
1689
|
+
warn( 'WebGPURenderer: PCFSoftShadowMap has been removed. Using PCFShadowMap instead.' );
|
|
1690
|
+
|
|
1691
|
+
this.shadowMap.type = PCFShadowMap;
|
|
1692
|
+
|
|
1693
|
+
}
|
|
1694
|
+
|
|
1552
1695
|
//
|
|
1553
1696
|
|
|
1554
1697
|
const frameBufferTarget = useFrameBufferTarget ? this._getFrameBufferTarget() : null;
|
|
@@ -1571,6 +1714,7 @@ class Renderer {
|
|
|
1571
1714
|
const sceneRef = ( scene.isScene === true ) ? scene : _scene;
|
|
1572
1715
|
|
|
1573
1716
|
const outputRenderTarget = this._renderTarget || this._outputRenderTarget;
|
|
1717
|
+
const useXRCamera = this.xr.isPresenting === true && this.isOutputTarget;
|
|
1574
1718
|
|
|
1575
1719
|
const activeCubeFace = this._activeCubeFace;
|
|
1576
1720
|
const activeMipmapLevel = this._activeMipmapLevel;
|
|
@@ -1664,7 +1808,7 @@ class Renderer {
|
|
|
1664
1808
|
ProfilerService.end( 'scene.updateMatrixWorld' );
|
|
1665
1809
|
// !WITH_GENESYS
|
|
1666
1810
|
|
|
1667
|
-
camera = this._updateCamera( camera );
|
|
1811
|
+
camera = this._updateCamera( camera, useXRCamera );
|
|
1668
1812
|
|
|
1669
1813
|
//
|
|
1670
1814
|
|
|
@@ -1710,16 +1854,15 @@ class Renderer {
|
|
|
1710
1854
|
|
|
1711
1855
|
//
|
|
1712
1856
|
|
|
1713
|
-
|
|
1857
|
+
_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
|
|
1714
1858
|
|
|
1715
1859
|
if ( camera.isArrayCamera ) {
|
|
1716
1860
|
|
|
1717
|
-
|
|
1861
|
+
_frustumArray.setFromArrayCamera( camera );
|
|
1718
1862
|
|
|
1719
1863
|
} else {
|
|
1720
1864
|
|
|
1721
|
-
|
|
1722
|
-
frustum.setFromProjectionMatrix( _projScreenMatrix, camera.coordinateSystem, camera.reversedDepth );
|
|
1865
|
+
_frustum.setFromProjectionMatrix( _projScreenMatrix, camera.coordinateSystem, camera.reversedDepth );
|
|
1723
1866
|
|
|
1724
1867
|
}
|
|
1725
1868
|
|
|
@@ -1727,7 +1870,9 @@ class Renderer {
|
|
|
1727
1870
|
ProfilerService.begin( 'buildRenderList' );
|
|
1728
1871
|
// !WITH_GENESYS
|
|
1729
1872
|
|
|
1730
|
-
|
|
1873
|
+
this._renderLists.update( nodeFrame.frameId );
|
|
1874
|
+
|
|
1875
|
+
const renderList = this._renderLists.get( scene, camera, this.lighting );
|
|
1731
1876
|
renderList.begin();
|
|
1732
1877
|
|
|
1733
1878
|
// WITH_GENESYS
|
|
@@ -1744,7 +1889,7 @@ class Renderer {
|
|
|
1744
1889
|
|
|
1745
1890
|
if ( this.sortObjects === true ) {
|
|
1746
1891
|
|
|
1747
|
-
renderList.sort( this._opaqueSort, this._transparentSort
|
|
1892
|
+
renderList.sort( this._opaqueSort, this._transparentSort );
|
|
1748
1893
|
|
|
1749
1894
|
}
|
|
1750
1895
|
|
|
@@ -1784,6 +1929,7 @@ class Renderer {
|
|
|
1784
1929
|
renderContext.activeCubeFace = activeCubeFace;
|
|
1785
1930
|
renderContext.activeMipmapLevel = activeMipmapLevel;
|
|
1786
1931
|
renderContext.occlusionQueryCount = renderList.occlusionQueryCount;
|
|
1932
|
+
renderContext.fullscreenPass = scene.isQuadMesh === true;
|
|
1787
1933
|
|
|
1788
1934
|
// WITH_GENESYS
|
|
1789
1935
|
// Size is finalized above from the active RT or drawing buffer.
|
|
@@ -2233,6 +2379,22 @@ class Renderer {
|
|
|
2233
2379
|
|
|
2234
2380
|
}
|
|
2235
2381
|
|
|
2382
|
+
/**
|
|
2383
|
+
* Resets the backend's internal state cache. Useful when the rendering context is shared with
|
|
2384
|
+
* other libraries that change the state. A no-op for the WebGPU backend.
|
|
2385
|
+
*/
|
|
2386
|
+
resetState() {
|
|
2387
|
+
|
|
2388
|
+
if ( this._initialized === false ) {
|
|
2389
|
+
|
|
2390
|
+
throw new Error( 'THREE.Renderer: .resetState() called before the backend is initialized. Use "await renderer.init();" before using this method.' );
|
|
2391
|
+
|
|
2392
|
+
}
|
|
2393
|
+
|
|
2394
|
+
this.backend.resetState();
|
|
2395
|
+
|
|
2396
|
+
}
|
|
2397
|
+
|
|
2236
2398
|
/**
|
|
2237
2399
|
* Returns the viewport definition.
|
|
2238
2400
|
*
|
|
@@ -2522,6 +2684,7 @@ class Renderer {
|
|
|
2522
2684
|
* Returns `true` if a framebuffer target is needed to perform tone mapping or color space conversion.
|
|
2523
2685
|
* If this is the case, the renderer allocates an internal render target for that purpose.
|
|
2524
2686
|
*
|
|
2687
|
+
* @type {boolean}
|
|
2525
2688
|
*/
|
|
2526
2689
|
get needsFrameBufferTarget() {
|
|
2527
2690
|
|
|
@@ -2548,8 +2711,8 @@ class Renderer {
|
|
|
2548
2711
|
* The current number of samples used for multi-sample anti-aliasing (MSAA).
|
|
2549
2712
|
*
|
|
2550
2713
|
* When rendering to a custom render target, the number of samples of that render target is used.
|
|
2551
|
-
*
|
|
2552
|
-
*
|
|
2714
|
+
* The number of samples is set to 0 when the renderer needs an internal framebuffer target for
|
|
2715
|
+
* tone mapping or color space conversion, or when rendering a fullscreen quad to screen.
|
|
2553
2716
|
*
|
|
2554
2717
|
* @type {number}
|
|
2555
2718
|
*/
|
|
@@ -2561,7 +2724,7 @@ class Renderer {
|
|
|
2561
2724
|
|
|
2562
2725
|
samples = this._renderTarget.samples;
|
|
2563
2726
|
|
|
2564
|
-
} else if ( this.needsFrameBufferTarget ) {
|
|
2727
|
+
} else if ( this.needsFrameBufferTarget || this._currentRenderContext?.fullscreenPass === true ) {
|
|
2565
2728
|
|
|
2566
2729
|
samples = 0;
|
|
2567
2730
|
|
|
@@ -2610,13 +2773,13 @@ class Renderer {
|
|
|
2610
2773
|
* Frees all internal resources of the renderer. Call this method if the renderer
|
|
2611
2774
|
* is no longer in use by your app.
|
|
2612
2775
|
*/
|
|
2613
|
-
dispose() {
|
|
2776
|
+
async dispose() {
|
|
2614
2777
|
|
|
2615
2778
|
if ( this._initialized === true ) {
|
|
2616
2779
|
|
|
2617
2780
|
this.info.dispose();
|
|
2618
|
-
this.backend.dispose();
|
|
2619
2781
|
|
|
2782
|
+
this._inspector.dispose();
|
|
2620
2783
|
this._animation.dispose();
|
|
2621
2784
|
this._objects.dispose();
|
|
2622
2785
|
this._geometries.dispose();
|
|
@@ -2633,11 +2796,7 @@ class Renderer {
|
|
|
2633
2796
|
|
|
2634
2797
|
}
|
|
2635
2798
|
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
if ( queryPool !== null ) queryPool.dispose();
|
|
2639
|
-
|
|
2640
|
-
} );
|
|
2799
|
+
await this.backend.dispose();
|
|
2641
2800
|
|
|
2642
2801
|
// WITH_GENESYS
|
|
2643
2802
|
// Drop the strong reference to the active `RenderContext` so module-level
|
|
@@ -2835,7 +2994,7 @@ class Renderer {
|
|
|
2835
2994
|
|
|
2836
2995
|
if ( this._initialized === false ) {
|
|
2837
2996
|
|
|
2838
|
-
warn( 'Renderer: .compute() called before the backend is initialized. Try using .computeAsync() instead.' );
|
|
2997
|
+
warn( 'Renderer: ".compute()" called before the backend is initialized. Try using ".computeAsync()" instead.' );
|
|
2839
2998
|
|
|
2840
2999
|
return this.computeAsync( computeNodes, dispatchSize );
|
|
2841
3000
|
|
|
@@ -2908,6 +3067,7 @@ class Renderer {
|
|
|
2908
3067
|
|
|
2909
3068
|
}
|
|
2910
3069
|
|
|
3070
|
+
nodes.updateBeforeForCompute( computeNode );
|
|
2911
3071
|
nodes.updateForCompute( computeNode );
|
|
2912
3072
|
bindings.updateForCompute( computeNode );
|
|
2913
3073
|
|
|
@@ -2916,6 +3076,8 @@ class Renderer {
|
|
|
2916
3076
|
|
|
2917
3077
|
backend.compute( computeNodes, computeNode, computeBindings, computePipeline, dispatchSize );
|
|
2918
3078
|
|
|
3079
|
+
nodes.updateAfterForCompute( computeNode );
|
|
3080
|
+
|
|
2919
3081
|
}
|
|
2920
3082
|
|
|
2921
3083
|
backend.finishCompute( computeNodes );
|
|
@@ -3171,7 +3333,7 @@ class Renderer {
|
|
|
3171
3333
|
* @param {number} width - The width of the copy region.
|
|
3172
3334
|
* @param {number} height - The height of the copy region.
|
|
3173
3335
|
* @param {number} [textureIndex=0] - The texture index of a MRT render target.
|
|
3174
|
-
* @param {number} [faceIndex=0] - The
|
|
3336
|
+
* @param {number} [faceIndex=0] - The cube face, depth slice or array layer index.
|
|
3175
3337
|
* @return {Promise<TypedArray>} A Promise that resolves when the read has been finished. The resolve provides the read data as a typed array.
|
|
3176
3338
|
*/
|
|
3177
3339
|
async readRenderTargetPixelsAsync( renderTarget, x, y, width, height, textureIndex = 0, faceIndex = 0 ) {
|
|
@@ -3221,7 +3383,7 @@ class Renderer {
|
|
|
3221
3383
|
|
|
3222
3384
|
const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
|
|
3223
3385
|
|
|
3224
|
-
if ( ! object.frustumCulled ||
|
|
3386
|
+
if ( ! object.frustumCulled || object.intersectsFrustum( frustum ) ) {
|
|
3225
3387
|
|
|
3226
3388
|
if ( this.sortObjects === true ) {
|
|
3227
3389
|
|
|
@@ -3247,7 +3409,7 @@ class Renderer {
|
|
|
3247
3409
|
|
|
3248
3410
|
const frustum = camera.isArrayCamera ? _frustumArray : _frustum;
|
|
3249
3411
|
|
|
3250
|
-
if ( ! object.frustumCulled ||
|
|
3412
|
+
if ( ! object.frustumCulled || object.intersectsFrustum( frustum ) ) {
|
|
3251
3413
|
|
|
3252
3414
|
const { geometry, material } = object;
|
|
3253
3415
|
|
|
@@ -3297,7 +3459,7 @@ class Renderer {
|
|
|
3297
3459
|
|
|
3298
3460
|
// replace render list
|
|
3299
3461
|
|
|
3300
|
-
renderList = this._renderLists.get( object, camera );
|
|
3462
|
+
renderList = this._renderLists.get( object, camera, this.lighting );
|
|
3301
3463
|
|
|
3302
3464
|
const renderBundle = this._bundles.get( object, camera, this._currentRenderContext );
|
|
3303
3465
|
const renderBundleData = this.backend.get( renderBundle );
|
|
@@ -3574,13 +3736,14 @@ class Renderer {
|
|
|
3574
3736
|
*
|
|
3575
3737
|
* @private
|
|
3576
3738
|
* @param {Camera} camera - The camera to update.
|
|
3739
|
+
* @param {boolean} useXRCamera - Whether the XR camera should be used when presenting.
|
|
3577
3740
|
* @return {Camera} The returned camera might be different depending on whether XR is used or not.
|
|
3578
3741
|
*/
|
|
3579
|
-
_updateCamera( camera ) {
|
|
3742
|
+
_updateCamera( camera, useXRCamera ) {
|
|
3580
3743
|
|
|
3581
3744
|
const xr = this.xr;
|
|
3582
3745
|
|
|
3583
|
-
if ( xr.isPresenting === false ) {
|
|
3746
|
+
if ( xr.isPresenting === false || useXRCamera === false ) {
|
|
3584
3747
|
|
|
3585
3748
|
let projectionMatrixNeedsUpdate = false;
|
|
3586
3749
|
|
|
@@ -3650,7 +3813,7 @@ class Renderer {
|
|
|
3650
3813
|
|
|
3651
3814
|
// handle XR
|
|
3652
3815
|
|
|
3653
|
-
if ( xr.enabled === true && xr.isPresenting === true ) {
|
|
3816
|
+
if ( useXRCamera === true && xr.enabled === true && xr.isPresenting === true ) {
|
|
3654
3817
|
|
|
3655
3818
|
if ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );
|
|
3656
3819
|
camera = xr.getCamera(); // use XR camera for rendering
|
|
@@ -3849,9 +4012,9 @@ class Renderer {
|
|
|
3849
4012
|
|
|
3850
4013
|
//
|
|
3851
4014
|
|
|
3852
|
-
const
|
|
4015
|
+
const refreshType = this._nodes.needsRefresh( renderObject );
|
|
3853
4016
|
|
|
3854
|
-
if (
|
|
4017
|
+
if ( refreshType === RenderObjectRefreshType.FULL ) {
|
|
3855
4018
|
|
|
3856
4019
|
this._nodes.updateBefore( renderObject );
|
|
3857
4020
|
|
|
@@ -3860,6 +4023,13 @@ class Renderer {
|
|
|
3860
4023
|
this._nodes.updateForRender( renderObject );
|
|
3861
4024
|
this._bindings.updateForRender( renderObject );
|
|
3862
4025
|
|
|
4026
|
+
} else if ( refreshType === RenderObjectRefreshType.SHARED ) {
|
|
4027
|
+
|
|
4028
|
+
this._nodes.updateBefore( renderObject );
|
|
4029
|
+
|
|
4030
|
+
this._nodes.updateForRender( renderObject );
|
|
4031
|
+
this._bindings.updateSharedForRender( renderObject );
|
|
4032
|
+
|
|
3863
4033
|
}
|
|
3864
4034
|
|
|
3865
4035
|
this._pipelines.updateForRender( renderObject );
|
|
@@ -3870,7 +4040,7 @@ class Renderer {
|
|
|
3870
4040
|
|
|
3871
4041
|
this.backend.draw( renderObject, this.info );
|
|
3872
4042
|
|
|
3873
|
-
if (
|
|
4043
|
+
if ( refreshType !== RenderObjectRefreshType.NONE ) this._nodes.updateAfter( renderObject );
|
|
3874
4044
|
|
|
3875
4045
|
}
|
|
3876
4046
|
|
|
@@ -3950,7 +4120,8 @@ class Renderer {
|
|
|
3950
4120
|
* @param {Object3D} scene - The scene or 3D object to precompile.
|
|
3951
4121
|
* @param {Camera} camera - The camera that is used to render the scene.
|
|
3952
4122
|
* @param {Scene} targetScene - If the first argument is a 3D object, this parameter must represent the scene the 3D object is going to be added.
|
|
3953
|
-
* @
|
|
4123
|
+
* @param {onProgressCallback} [onProgress] - Executed while the compilation is in progress.
|
|
4124
|
+
* @return {function(Object3D, Camera, ?Scene, ?onProgressCallback): Promise|undefined} A Promise that resolves when the compile has been finished.
|
|
3954
4125
|
*/
|
|
3955
4126
|
get compile() {
|
|
3956
4127
|
|
|
@@ -74,6 +74,22 @@ class Storage3DTexture extends Texture {
|
|
|
74
74
|
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
+
/**
|
|
78
|
+
* Copies the values of the given texture to this instance.
|
|
79
|
+
*
|
|
80
|
+
* @param {Storage3DTexture} source - The texture to copy.
|
|
81
|
+
* @return {Storage3DTexture} A reference to this instance.
|
|
82
|
+
*/
|
|
83
|
+
copy( source ) {
|
|
84
|
+
|
|
85
|
+
super.copy( source );
|
|
86
|
+
|
|
87
|
+
this.wrapR = source.wrapR;
|
|
88
|
+
|
|
89
|
+
return this;
|
|
90
|
+
|
|
91
|
+
}
|
|
92
|
+
|
|
77
93
|
/**
|
|
78
94
|
* Sets the size of the storage 3d texture.
|
|
79
95
|
*
|
|
@@ -135,7 +135,7 @@ class Textures extends DataMap {
|
|
|
135
135
|
|
|
136
136
|
textureNeedsUpdate = true;
|
|
137
137
|
|
|
138
|
-
if ( depthTexture ) {
|
|
138
|
+
if ( depthTexture && depthTexture.renderTarget === renderTarget ) {
|
|
139
139
|
|
|
140
140
|
depthTexture.needsUpdate = true;
|
|
141
141
|
depthTexture.image.width = mipWidth;
|
|
@@ -158,7 +158,7 @@ class Textures extends DataMap {
|
|
|
158
158
|
|
|
159
159
|
textureNeedsUpdate = true;
|
|
160
160
|
|
|
161
|
-
if ( depthTexture ) {
|
|
161
|
+
if ( depthTexture && depthTexture.renderTarget === renderTarget ) {
|
|
162
162
|
|
|
163
163
|
depthTexture.needsUpdate = true;
|
|
164
164
|
|
|
@@ -600,7 +600,7 @@ class Textures extends DataMap {
|
|
|
600
600
|
|
|
601
601
|
}
|
|
602
602
|
|
|
603
|
-
if ( depthTexture ) {
|
|
603
|
+
if ( depthTexture && depthTexture.renderTarget === renderTarget ) {
|
|
604
604
|
|
|
605
605
|
this._destroyTexture( depthTexture );
|
|
606
606
|
|