@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
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { output, renderOutput, uniform } from '../../nodes/TSL.js';
|
|
2
|
+
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
3
|
+
import { NoToneMapping } from '../../constants.js';
|
|
4
|
+
import RenderPipeline from './RenderPipeline.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* An alternative render pipeline that applies output processing directly in
|
|
8
|
+
* material shaders. This avoids the intermediate framebuffer and output pass
|
|
9
|
+
* used by {@link Renderer}, but changes blending and is not compatible with
|
|
10
|
+
* materials that sample the framebuffer, such as transmissive materials.
|
|
11
|
+
*
|
|
12
|
+
* ```js
|
|
13
|
+
* const renderPipeline = new DirectRenderPipeline( renderer );
|
|
14
|
+
* renderPipeline.render( scene, camera );
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* Note: This module can only be used with `WebGPURenderer`.
|
|
18
|
+
*
|
|
19
|
+
* @augments RenderPipeline
|
|
20
|
+
*/
|
|
21
|
+
class DirectRenderPipeline extends RenderPipeline {
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Constructs a direct render pipeline.
|
|
25
|
+
*
|
|
26
|
+
* @param {Renderer} renderer - A reference to the renderer.
|
|
27
|
+
* @param {Node<vec4>} outputNode - An optional output node.
|
|
28
|
+
*/
|
|
29
|
+
constructor( renderer, outputNode = output ) {
|
|
30
|
+
|
|
31
|
+
super( renderer, outputNode );
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* This flag can be used for type testing.
|
|
35
|
+
*
|
|
36
|
+
* @type {boolean}
|
|
37
|
+
* @readonly
|
|
38
|
+
* @default true
|
|
39
|
+
*/
|
|
40
|
+
this.isDirectRenderPipeline = true;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* The context node used to apply output processing in material shaders.
|
|
44
|
+
*
|
|
45
|
+
* @private
|
|
46
|
+
* @type {?ContextNode}
|
|
47
|
+
* @default null
|
|
48
|
+
*/
|
|
49
|
+
this._contextNode = null;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The renderer context node wrapped by this pipeline.
|
|
53
|
+
*
|
|
54
|
+
* @private
|
|
55
|
+
* @type {?ContextNode}
|
|
56
|
+
* @default null
|
|
57
|
+
*/
|
|
58
|
+
this._rendererContextNode = null;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Cached node representations of solid scene backgrounds.
|
|
62
|
+
*
|
|
63
|
+
* @private
|
|
64
|
+
* @type {WeakMap<Color, UniformNode>}
|
|
65
|
+
*/
|
|
66
|
+
this._backgroundNodes = new WeakMap();
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Renders the scene with output processing applied directly in material shaders.
|
|
72
|
+
*
|
|
73
|
+
* @param {Object3D} scene - The scene or object to render.
|
|
74
|
+
* @param {Camera} camera - The camera.
|
|
75
|
+
*/
|
|
76
|
+
render( scene, camera ) {
|
|
77
|
+
|
|
78
|
+
const renderer = this.renderer;
|
|
79
|
+
|
|
80
|
+
this._update();
|
|
81
|
+
|
|
82
|
+
const backgroundNode = this._getBackgroundNode( scene );
|
|
83
|
+
const currentBackgroundNode = backgroundNode !== null ? scene.backgroundNode : null;
|
|
84
|
+
const currentContextNode = renderer.contextNode;
|
|
85
|
+
const outputRenderTarget = renderer.getOutputRenderTarget();
|
|
86
|
+
const useDirectXRRenderTarget = outputRenderTarget !== null && renderer.xr.isPresenting === true &&
|
|
87
|
+
renderer.backend.isWebGPUBackend === true && renderer.isOutputTarget === true;
|
|
88
|
+
|
|
89
|
+
let samples;
|
|
90
|
+
let depthBuffer;
|
|
91
|
+
let toneMapping;
|
|
92
|
+
let outputColorSpace;
|
|
93
|
+
|
|
94
|
+
if ( backgroundNode !== null ) scene.backgroundNode = backgroundNode;
|
|
95
|
+
|
|
96
|
+
renderer.contextNode = this._contextNode;
|
|
97
|
+
|
|
98
|
+
if ( useDirectXRRenderTarget ) {
|
|
99
|
+
|
|
100
|
+
samples = outputRenderTarget.samples;
|
|
101
|
+
depthBuffer = outputRenderTarget.depthBuffer;
|
|
102
|
+
|
|
103
|
+
outputRenderTarget.samples = renderer.samples;
|
|
104
|
+
outputRenderTarget.depthBuffer = true;
|
|
105
|
+
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
try {
|
|
109
|
+
|
|
110
|
+
for ( const callback of this._contextData.onBeforePipelineCallbacks ) callback();
|
|
111
|
+
|
|
112
|
+
toneMapping = renderer.toneMapping;
|
|
113
|
+
outputColorSpace = renderer.outputColorSpace;
|
|
114
|
+
|
|
115
|
+
renderer.toneMapping = NoToneMapping;
|
|
116
|
+
renderer.outputColorSpace = ColorManagement.workingColorSpace;
|
|
117
|
+
|
|
118
|
+
if ( renderer.xr.enabled ) {
|
|
119
|
+
|
|
120
|
+
renderer.xr.renderLayers();
|
|
121
|
+
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
renderer.render( scene, camera );
|
|
125
|
+
|
|
126
|
+
} finally {
|
|
127
|
+
|
|
128
|
+
if ( toneMapping !== undefined ) renderer.toneMapping = toneMapping;
|
|
129
|
+
if ( outputColorSpace !== undefined ) renderer.outputColorSpace = outputColorSpace;
|
|
130
|
+
|
|
131
|
+
if ( backgroundNode !== null && scene.backgroundNode === backgroundNode ) scene.backgroundNode = currentBackgroundNode;
|
|
132
|
+
|
|
133
|
+
if ( renderer.contextNode === this._contextNode ) renderer.contextNode = currentContextNode;
|
|
134
|
+
|
|
135
|
+
if ( useDirectXRRenderTarget ) {
|
|
136
|
+
|
|
137
|
+
outputRenderTarget.samples = samples;
|
|
138
|
+
outputRenderTarget.depthBuffer = depthBuffer;
|
|
139
|
+
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
for ( const callback of this._contextData.onAfterPipelineCallbacks ) callback();
|
|
143
|
+
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Returns a node representation of a solid scene background so it receives
|
|
150
|
+
* the same inline output processing as material fragments.
|
|
151
|
+
*
|
|
152
|
+
* @private
|
|
153
|
+
* @param {Object3D} scene - The scene or object to render.
|
|
154
|
+
* @return {?UniformNode} The background node.
|
|
155
|
+
*/
|
|
156
|
+
_getBackgroundNode( scene ) {
|
|
157
|
+
|
|
158
|
+
if ( scene.isScene !== true || scene.backgroundNode != null || scene.background?.isColor !== true ) return null;
|
|
159
|
+
|
|
160
|
+
const environmentBlendMode = this.renderer.xr.getEnvironmentBlendMode();
|
|
161
|
+
|
|
162
|
+
if ( environmentBlendMode === 'additive' || environmentBlendMode === 'alpha-blend' ) return null;
|
|
163
|
+
|
|
164
|
+
let backgroundNode = this._backgroundNodes.get( scene.background );
|
|
165
|
+
|
|
166
|
+
if ( backgroundNode === undefined ) {
|
|
167
|
+
|
|
168
|
+
backgroundNode = uniform( scene.background );
|
|
169
|
+
this._backgroundNodes.set( scene.background, backgroundNode );
|
|
170
|
+
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
return backgroundNode;
|
|
174
|
+
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Updates the state of the module.
|
|
179
|
+
*
|
|
180
|
+
* @private
|
|
181
|
+
*/
|
|
182
|
+
_update() {
|
|
183
|
+
|
|
184
|
+
if ( this._rendererContextNode !== this.renderer.contextNode ) {
|
|
185
|
+
|
|
186
|
+
this._rendererContextNode = this.renderer.contextNode;
|
|
187
|
+
this.needsUpdate = true;
|
|
188
|
+
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
super._update();
|
|
192
|
+
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Updates the context used to process material output directly.
|
|
197
|
+
*
|
|
198
|
+
* @private
|
|
199
|
+
*/
|
|
200
|
+
_updateContext() {
|
|
201
|
+
|
|
202
|
+
super._updateContext();
|
|
203
|
+
|
|
204
|
+
const pipelineOutputNode = this.outputNode;
|
|
205
|
+
const toneMapping = this._toneMapping;
|
|
206
|
+
const outputColorSpace = this._outputColorSpace;
|
|
207
|
+
const outputColorTransform = this.outputColorTransform;
|
|
208
|
+
|
|
209
|
+
this._contextNode = this._rendererContextNode.context( {
|
|
210
|
+
|
|
211
|
+
...this._contextData,
|
|
212
|
+
|
|
213
|
+
getOutput: ( materialOutputNode, builder ) => {
|
|
214
|
+
|
|
215
|
+
const renderer = builder.renderer;
|
|
216
|
+
const renderTarget = renderer.getRenderTarget();
|
|
217
|
+
|
|
218
|
+
if ( renderer.isOutputTarget === false && renderTarget?._hasExternalTextures !== true ) return materialOutputNode;
|
|
219
|
+
|
|
220
|
+
output.assign( materialOutputNode );
|
|
221
|
+
|
|
222
|
+
return outputColorTransform === true ?
|
|
223
|
+
renderOutput( pipelineOutputNode, toneMapping, outputColorSpace ) :
|
|
224
|
+
pipelineOutputNode;
|
|
225
|
+
|
|
226
|
+
}
|
|
227
|
+
} );
|
|
228
|
+
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
export default DirectRenderPipeline;
|
|
@@ -186,8 +186,9 @@ class Geometries extends DataMap {
|
|
|
186
186
|
|
|
187
187
|
this.info.memory.geometries --;
|
|
188
188
|
|
|
189
|
+
// index
|
|
190
|
+
|
|
189
191
|
const index = geometry.index;
|
|
190
|
-
const geometryAttributes = renderObject.getAttributes();
|
|
191
192
|
|
|
192
193
|
if ( index !== null ) {
|
|
193
194
|
|
|
@@ -195,12 +196,16 @@ class Geometries extends DataMap {
|
|
|
195
196
|
|
|
196
197
|
}
|
|
197
198
|
|
|
198
|
-
|
|
199
|
+
// geometry attributes
|
|
200
|
+
|
|
201
|
+
for ( const attribute of Object.values( geometry.attributes ) ) {
|
|
199
202
|
|
|
200
|
-
this.attributes.delete(
|
|
203
|
+
this.attributes.delete( attribute );
|
|
201
204
|
|
|
202
205
|
}
|
|
203
206
|
|
|
207
|
+
// wireframe attributes
|
|
208
|
+
|
|
204
209
|
const wireframeAttribute = this.wireframes.get( geometry );
|
|
205
210
|
|
|
206
211
|
if ( wireframeAttribute !== undefined ) {
|
|
@@ -209,6 +214,22 @@ class Geometries extends DataMap {
|
|
|
209
214
|
|
|
210
215
|
}
|
|
211
216
|
|
|
217
|
+
// node attributes (TODO: Remove this bit once we support BufferAttribute.dispose())
|
|
218
|
+
|
|
219
|
+
const currentAttributes = new Set( Object.values( renderObject.geometry.attributes ) );
|
|
220
|
+
|
|
221
|
+
for ( const attribute of renderObject.getAttributes() ) {
|
|
222
|
+
|
|
223
|
+
if ( currentAttributes.has( attribute ) === false ) {
|
|
224
|
+
|
|
225
|
+
this.attributes.delete( attribute );
|
|
226
|
+
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
//
|
|
232
|
+
|
|
212
233
|
geometry.removeEventListener( 'dispose', onDispose );
|
|
213
234
|
|
|
214
235
|
this._geometryDisposeListeners.delete( geometry );
|
|
@@ -139,10 +139,10 @@ class Info {
|
|
|
139
139
|
/**
|
|
140
140
|
* Map for storing calculated byte sizes of tracked objects.
|
|
141
141
|
*
|
|
142
|
-
* @type {
|
|
142
|
+
* @type {WeakMap<Object, number>}
|
|
143
143
|
* @private
|
|
144
144
|
*/
|
|
145
|
-
this.memoryMap = new
|
|
145
|
+
this.memoryMap = new WeakMap();
|
|
146
146
|
|
|
147
147
|
}
|
|
148
148
|
|
|
@@ -218,7 +218,7 @@ class Info {
|
|
|
218
218
|
|
|
219
219
|
}
|
|
220
220
|
|
|
221
|
-
this.memoryMap
|
|
221
|
+
this.memoryMap = new WeakMap();
|
|
222
222
|
|
|
223
223
|
}
|
|
224
224
|
|
|
@@ -3,7 +3,6 @@ import { EventDispatcher } from '../../core/EventDispatcher.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* InspectorBase is the base class for all inspectors.
|
|
5
5
|
*
|
|
6
|
-
* @class InspectorBase
|
|
7
6
|
* @augments EventDispatcher
|
|
8
7
|
*/
|
|
9
8
|
class InspectorBase extends EventDispatcher {
|
|
@@ -30,6 +29,22 @@ class InspectorBase extends EventDispatcher {
|
|
|
30
29
|
*/
|
|
31
30
|
this.currentFrame = null;
|
|
32
31
|
|
|
32
|
+
/**
|
|
33
|
+
* Indicates whether the inspector is running.
|
|
34
|
+
*
|
|
35
|
+
* @type {boolean}
|
|
36
|
+
* @default false
|
|
37
|
+
*/
|
|
38
|
+
this.isRunning = false;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Indicates whether the inspector is enabled.
|
|
42
|
+
*
|
|
43
|
+
* @type {boolean}
|
|
44
|
+
* @default true
|
|
45
|
+
*/
|
|
46
|
+
this.enabled = true;
|
|
47
|
+
|
|
33
48
|
}
|
|
34
49
|
|
|
35
50
|
/**
|
|
@@ -68,20 +83,23 @@ class InspectorBase extends EventDispatcher {
|
|
|
68
83
|
|
|
69
84
|
}
|
|
70
85
|
|
|
71
|
-
/**
|
|
72
|
-
* Initializes the inspector.
|
|
73
|
-
*/
|
|
74
|
-
init() { }
|
|
75
|
-
|
|
76
86
|
/**
|
|
77
87
|
* Called when a frame begins.
|
|
78
88
|
*/
|
|
79
|
-
begin() {
|
|
89
|
+
begin() {
|
|
90
|
+
|
|
91
|
+
this.isRunning = true;
|
|
92
|
+
|
|
93
|
+
}
|
|
80
94
|
|
|
81
95
|
/**
|
|
82
96
|
* Called when a frame ends.
|
|
83
97
|
*/
|
|
84
|
-
finish() {
|
|
98
|
+
finish() {
|
|
99
|
+
|
|
100
|
+
this.isRunning = false;
|
|
101
|
+
|
|
102
|
+
}
|
|
85
103
|
|
|
86
104
|
/**
|
|
87
105
|
* Inspects a node.
|
|
@@ -146,6 +164,17 @@ class InspectorBase extends EventDispatcher {
|
|
|
146
164
|
*/
|
|
147
165
|
copyFramebufferToTexture( /*framebufferTexture*/ ) { }
|
|
148
166
|
|
|
167
|
+
/**
|
|
168
|
+
* Frees all internal resources of the inspector.
|
|
169
|
+
*/
|
|
170
|
+
dispose() {
|
|
171
|
+
|
|
172
|
+
if ( this.isRunning === true ) this.finish();
|
|
173
|
+
|
|
174
|
+
this.dispatchEvent( { type: 'dispose' } );
|
|
175
|
+
|
|
176
|
+
}
|
|
177
|
+
|
|
149
178
|
}
|
|
150
179
|
|
|
151
180
|
export default InspectorBase;
|
|
@@ -6,11 +6,10 @@ import {
|
|
|
6
6
|
} from '../../nodes/Nodes.js';
|
|
7
7
|
|
|
8
8
|
const _defaultLights = /*@__PURE__*/ new LightsNode();
|
|
9
|
-
const _weakMap = /*@__PURE__*/ new WeakMap();
|
|
10
9
|
|
|
11
10
|
/**
|
|
12
11
|
* This renderer module manages the lights nodes which are unique
|
|
13
|
-
* per scene
|
|
12
|
+
* per scene + camera + lighting combination.
|
|
14
13
|
*
|
|
15
14
|
* The lights node itself is later configured in the render list
|
|
16
15
|
* with the actual lights from the scene.
|
|
@@ -40,6 +39,14 @@ class Lighting {
|
|
|
40
39
|
*/
|
|
41
40
|
this._cache = [];
|
|
42
41
|
|
|
42
|
+
/**
|
|
43
|
+
* A map of lights nodes per scene.
|
|
44
|
+
*
|
|
45
|
+
* @private
|
|
46
|
+
* @type {WeakMap<Scene, LightsNode>}
|
|
47
|
+
*/
|
|
48
|
+
this._lightsNodeMap = new WeakMap();
|
|
49
|
+
|
|
43
50
|
}
|
|
44
51
|
|
|
45
52
|
/**
|
|
@@ -81,12 +88,12 @@ class Lighting {
|
|
|
81
88
|
// Ignore renderable objects, e.g: Mesh, Sprite, etc.
|
|
82
89
|
if ( scene.isScene !== true && scene.isGroup !== true ) return _defaultLights;
|
|
83
90
|
|
|
84
|
-
let node =
|
|
91
|
+
let node = this._lightsNodeMap.get( scene );
|
|
85
92
|
|
|
86
93
|
if ( node === undefined ) {
|
|
87
94
|
|
|
88
95
|
node = this.createNode();
|
|
89
|
-
|
|
96
|
+
this._lightsNodeMap.set( scene, node );
|
|
90
97
|
|
|
91
98
|
}
|
|
92
99
|
|
|
@@ -81,9 +81,10 @@ class Pipelines extends DataMap {
|
|
|
81
81
|
*
|
|
82
82
|
* @param {Node} computeNode - The compute node.
|
|
83
83
|
* @param {Array<BindGroup>} bindings - The bindings.
|
|
84
|
+
* @param {?Array<Promise>} [promises=null] - An array of compilation promises which is only relevant in context of `Renderer.compileComputeAsync()`.
|
|
84
85
|
* @return {ComputePipeline} The compute pipeline.
|
|
85
86
|
*/
|
|
86
|
-
getForCompute( computeNode, bindings ) {
|
|
87
|
+
getForCompute( computeNode, bindings, promises = null ) {
|
|
87
88
|
|
|
88
89
|
const { backend } = this;
|
|
89
90
|
|
|
@@ -130,7 +131,7 @@ class Pipelines extends DataMap {
|
|
|
130
131
|
|
|
131
132
|
if ( previousPipeline && previousPipeline.usedTimes === 0 ) this._releasePipeline( previousPipeline );
|
|
132
133
|
|
|
133
|
-
pipeline = this._getComputePipeline( computeNode, stageCompute, cacheKey, bindings );
|
|
134
|
+
pipeline = this._getComputePipeline( computeNode, stageCompute, cacheKey, bindings, promises );
|
|
134
135
|
|
|
135
136
|
}
|
|
136
137
|
|
|
@@ -342,9 +343,10 @@ class Pipelines extends DataMap {
|
|
|
342
343
|
* @param {ProgrammableStage} stageCompute - The programmable stage representing the compute shader.
|
|
343
344
|
* @param {string} cacheKey - The cache key.
|
|
344
345
|
* @param {Array<BindGroup>} bindings - The bindings.
|
|
346
|
+
* @param {?Array<Promise>} promises - An array of compilation promises which is only relevant in context of `Renderer.compileComputeAsync()`.
|
|
345
347
|
* @return {ComputePipeline} The compute pipeline.
|
|
346
348
|
*/
|
|
347
|
-
_getComputePipeline( computeNode, stageCompute, cacheKey, bindings ) {
|
|
349
|
+
_getComputePipeline( computeNode, stageCompute, cacheKey, bindings, promises ) {
|
|
348
350
|
|
|
349
351
|
// check for existing pipeline
|
|
350
352
|
|
|
@@ -358,7 +360,7 @@ class Pipelines extends DataMap {
|
|
|
358
360
|
|
|
359
361
|
this.caches.set( cacheKey, pipeline );
|
|
360
362
|
|
|
361
|
-
this.backend.createComputePipeline( pipeline, bindings );
|
|
363
|
+
this.backend.createComputePipeline( pipeline, bindings, promises );
|
|
362
364
|
|
|
363
365
|
}
|
|
364
366
|
|
|
@@ -2,6 +2,8 @@ import { BufferGeometry } from '../../core/BufferGeometry.js';
|
|
|
2
2
|
import { Float32BufferAttribute } from '../../core/BufferAttribute.js';
|
|
3
3
|
import { Mesh } from '../../objects/Mesh.js';
|
|
4
4
|
import { OrthographicCamera } from '../../cameras/OrthographicCamera.js';
|
|
5
|
+
import { vec4, array } from '../../nodes/tsl/TSLBase.js';
|
|
6
|
+
import { vertexIndex } from '../../nodes/core/IndexNode.js';
|
|
5
7
|
import { warnOnce } from '../../utils.js';
|
|
6
8
|
|
|
7
9
|
const _camera = /*@__PURE__*/ new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
|
|
@@ -36,6 +38,12 @@ class QuadGeometry extends BufferGeometry {
|
|
|
36
38
|
|
|
37
39
|
const _geometry = /*@__PURE__*/ new QuadGeometry();
|
|
38
40
|
|
|
41
|
+
const _vertexNode = /*@__PURE__*/ vec4(
|
|
42
|
+
array( [ - 1.0, - 1.0, 3.0 ] ).element( vertexIndex ),
|
|
43
|
+
array( [ 3.0, - 1.0, - 1.0 ] ).element( vertexIndex ),
|
|
44
|
+
0.0,
|
|
45
|
+
1.0
|
|
46
|
+
);
|
|
39
47
|
|
|
40
48
|
/**
|
|
41
49
|
* This module is a helper for passes which need to render a full
|
|
@@ -53,9 +61,9 @@ class QuadMesh extends Mesh {
|
|
|
53
61
|
/**
|
|
54
62
|
* Constructs a new quad mesh.
|
|
55
63
|
*
|
|
56
|
-
* @param {
|
|
64
|
+
* @param {NodeMaterial} material - The material to render the quad mesh with.
|
|
57
65
|
*/
|
|
58
|
-
constructor( material
|
|
66
|
+
constructor( material ) {
|
|
59
67
|
|
|
60
68
|
super( _geometry, material );
|
|
61
69
|
|
|
@@ -103,8 +111,14 @@ class QuadMesh extends Mesh {
|
|
|
103
111
|
*/
|
|
104
112
|
render( renderer ) {
|
|
105
113
|
|
|
114
|
+
const previousVertexNode = this.material.vertexNode;
|
|
115
|
+
|
|
116
|
+
this.material.vertexNode = _vertexNode;
|
|
117
|
+
|
|
106
118
|
renderer.render( this, _camera );
|
|
107
119
|
|
|
120
|
+
this.material.vertexNode = previousVertexNode;
|
|
121
|
+
|
|
108
122
|
}
|
|
109
123
|
|
|
110
124
|
}
|
|
@@ -240,6 +240,14 @@ class RenderContext {
|
|
|
240
240
|
this.gpuProfilerLabel = null;
|
|
241
241
|
// !WITH_GENESYS
|
|
242
242
|
|
|
243
|
+
/**
|
|
244
|
+
* Whether a fullscreen pass is rendered or not.
|
|
245
|
+
*
|
|
246
|
+
* @type {boolean}
|
|
247
|
+
* @default false
|
|
248
|
+
*/
|
|
249
|
+
this.fullscreenPass = false;
|
|
250
|
+
|
|
243
251
|
/**
|
|
244
252
|
* This flag can be used for type testing.
|
|
245
253
|
*
|
|
@@ -201,6 +201,14 @@ class RenderList {
|
|
|
201
201
|
*/
|
|
202
202
|
this.occlusionQueryCount = 0;
|
|
203
203
|
|
|
204
|
+
/**
|
|
205
|
+
* The ID of the frame the render list was last used in.
|
|
206
|
+
*
|
|
207
|
+
* @type {number}
|
|
208
|
+
* @default -1
|
|
209
|
+
*/
|
|
210
|
+
this.frameId = - 1;
|
|
211
|
+
|
|
204
212
|
/**
|
|
205
213
|
* The last object that was counted for occlusion query testing. Used to
|
|
206
214
|
* avoid counting an object more than once when it produces multiple render
|
|
@@ -312,6 +320,10 @@ class RenderList {
|
|
|
312
320
|
*/
|
|
313
321
|
push( object, geometry, material, groupOrder, z, group, clippingContext ) {
|
|
314
322
|
|
|
323
|
+
// with a reversed depth buffer the projected z is inverted
|
|
324
|
+
|
|
325
|
+
if ( this.camera.reversedDepth === true ) z = - z;
|
|
326
|
+
|
|
315
327
|
const renderItem = this.getNextRenderItem( object, geometry, material, groupOrder, z, group, clippingContext );
|
|
316
328
|
|
|
317
329
|
if ( object.occlusionTest === true && this._lastOcclusionObject !== object ) {
|
|
@@ -409,22 +421,13 @@ class RenderList {
|
|
|
409
421
|
*
|
|
410
422
|
* @param {?function(any, any): number} customOpaqueSort - A custom sort function for opaque objects.
|
|
411
423
|
* @param {?function(any, any): number} customTransparentSort - A custom sort function for transparent objects.
|
|
412
|
-
* @param {boolean} reversedDepth - Whether a reversed depth buffer is used or not.
|
|
413
424
|
*/
|
|
414
|
-
sort( customOpaqueSort, customTransparentSort
|
|
425
|
+
sort( customOpaqueSort, customTransparentSort ) {
|
|
415
426
|
|
|
416
427
|
if ( this.opaque.length > 1 ) this.opaque.sort( customOpaqueSort || painterSortStable );
|
|
417
428
|
if ( this.transparentDoublePass.length > 1 ) this.transparentDoublePass.sort( customTransparentSort || reversePainterSortStable );
|
|
418
429
|
if ( this.transparent.length > 1 ) this.transparent.sort( customTransparentSort || reversePainterSortStable );
|
|
419
430
|
|
|
420
|
-
if ( reversedDepth ) {
|
|
421
|
-
|
|
422
|
-
this.opaque.reverse();
|
|
423
|
-
this.transparentDoublePass.reverse();
|
|
424
|
-
this.transparent.reverse();
|
|
425
|
-
|
|
426
|
-
}
|
|
427
|
-
|
|
428
431
|
}
|
|
429
432
|
|
|
430
433
|
/**
|
|
@@ -449,15 +452,7 @@ class RenderList {
|
|
|
449
452
|
|
|
450
453
|
if ( renderItem.id === null ) break;
|
|
451
454
|
|
|
452
|
-
renderItem
|
|
453
|
-
renderItem.object = null;
|
|
454
|
-
renderItem.geometry = null;
|
|
455
|
-
renderItem.material = null;
|
|
456
|
-
renderItem.groupOrder = null;
|
|
457
|
-
renderItem.renderOrder = null;
|
|
458
|
-
renderItem.z = null;
|
|
459
|
-
renderItem.group = null;
|
|
460
|
-
renderItem.clippingContext = null;
|
|
455
|
+
resetRenderItem( renderItem );
|
|
461
456
|
|
|
462
457
|
}
|
|
463
458
|
|
|
@@ -465,6 +460,45 @@ class RenderList {
|
|
|
465
460
|
|
|
466
461
|
}
|
|
467
462
|
|
|
463
|
+
/**
|
|
464
|
+
* This method is called when the render list has become inactive.
|
|
465
|
+
*/
|
|
466
|
+
clear() {
|
|
467
|
+
|
|
468
|
+
// Clear all references from the render items so scene objects
|
|
469
|
+
// are not retained when the render list is not used anymore.
|
|
470
|
+
|
|
471
|
+
for ( let i = 0, il = this.renderItems.length; i < il; i ++ ) {
|
|
472
|
+
|
|
473
|
+
const renderItem = this.renderItems[ i ];
|
|
474
|
+
|
|
475
|
+
if ( renderItem.id === null ) break;
|
|
476
|
+
|
|
477
|
+
resetRenderItem( renderItem );
|
|
478
|
+
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
this.opaque.length = 0;
|
|
482
|
+
this.transparentDoublePass.length = 0;
|
|
483
|
+
this.transparent.length = 0;
|
|
484
|
+
this.bundles.length = 0;
|
|
485
|
+
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
function resetRenderItem( renderItem ) {
|
|
491
|
+
|
|
492
|
+
renderItem.id = null;
|
|
493
|
+
renderItem.object = null;
|
|
494
|
+
renderItem.geometry = null;
|
|
495
|
+
renderItem.material = null;
|
|
496
|
+
renderItem.groupOrder = null;
|
|
497
|
+
renderItem.renderOrder = null;
|
|
498
|
+
renderItem.z = null;
|
|
499
|
+
renderItem.group = null;
|
|
500
|
+
renderItem.clippingContext = null;
|
|
501
|
+
|
|
468
502
|
}
|
|
469
503
|
|
|
470
504
|
export default RenderList;
|