super-three 0.177.0 → 0.181.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/README.md +1 -1
- package/build/three.cjs +1994 -749
- package/build/three.core.js +1358 -506
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +631 -247
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +113 -33
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +9571 -3424
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +9397 -3426
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +2 -3
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +0 -27
- package/examples/jsm/capabilities/WebGPU.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +9 -9
- package/examples/jsm/controls/DragControls.js +7 -57
- package/examples/jsm/controls/FirstPersonControls.js +3 -3
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -10
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +62 -15
- package/examples/jsm/csm/CSMShadowNode.js +4 -4
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/environments/RoomEnvironment.js +8 -3
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +33 -25
- package/examples/jsm/exporters/KTX2Exporter.js +4 -2
- package/examples/jsm/exporters/PLYExporter.js +1 -1
- package/examples/jsm/exporters/USDZExporter.js +683 -299
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/RoundedBoxGeometry.js +47 -8
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +11 -13
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +75 -58
- package/examples/jsm/lights/LightProbeGenerator.js +14 -3
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/lines/Line2.js +3 -3
- package/examples/jsm/lines/LineGeometry.js +1 -1
- package/examples/jsm/lines/LineSegments2.js +2 -2
- package/examples/jsm/lines/Wireframe.js +2 -2
- package/examples/jsm/lines/WireframeGeometry2.js +1 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +1 -1
- package/examples/jsm/lines/webgpu/Wireframe.js +1 -1
- package/examples/jsm/loaders/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +4 -4
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/EXRLoader.js +210 -22
- package/examples/jsm/loaders/FBXLoader.js +4 -4
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +14 -8
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +5 -5
- package/examples/jsm/loaders/HDRLoader.js +486 -0
- package/examples/jsm/loaders/KTX2Loader.js +136 -49
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +233 -34
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +7 -473
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TTFLoader.js +13 -1
- package/examples/jsm/loaders/USDLoader.js +219 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -892
- package/examples/jsm/loaders/UltraHDRLoader.js +2 -2
- package/examples/jsm/loaders/lwo/IFFParser.js +1 -1
- package/examples/jsm/loaders/usd/USDAParser.js +741 -0
- package/examples/jsm/loaders/usd/USDCParser.js +17 -0
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/ColorSpaces.js +19 -1
- package/examples/jsm/math/ConvexHull.js +3 -3
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/Lut.js +2 -2
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/MD2CharacterComplex.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/misc/Volume.js +1 -1
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +3 -3
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +3 -3
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/physics/RapierPhysics.js +95 -16
- package/examples/jsm/postprocessing/GTAOPass.js +10 -9
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/OutlinePass.js +17 -17
- package/examples/jsm/postprocessing/SSAOPass.js +10 -9
- package/examples/jsm/postprocessing/SSRPass.js +37 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +11 -2
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +381 -30
- package/examples/jsm/transpiler/GLSLDecoder.js +247 -104
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/TSLEncoder.js +196 -92
- package/examples/jsm/transpiler/Transpiler.js +17 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +812 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +28 -4
- package/examples/jsm/tsl/display/BloomNode.js +11 -6
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +446 -90
- package/examples/jsm/tsl/display/GTAONode.js +53 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +55 -43
- package/examples/jsm/tsl/display/OutlineNode.js +13 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +182 -65
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +578 -0
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/hashBlur.js +18 -20
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +22 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewerGPU.js +12 -5
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +5 -2
- package/src/Three.TSL.js +112 -32
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +4 -0
- package/src/animation/AnimationClip.js +20 -4
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +8 -7
- package/src/animation/PropertyBinding.js +12 -11
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/Camera.js +14 -0
- package/src/cameras/OrthographicCamera.js +2 -2
- package/src/cameras/PerspectiveCamera.js +2 -2
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +13 -5
- package/src/core/BufferAttribute.js +3 -3
- package/src/core/BufferGeometry.js +10 -10
- package/src/core/Clock.js +2 -8
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/GLBufferAttribute.js +13 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +4 -3
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- package/{examples/jsm/misc → src/core}/Timer.js +4 -42
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +279 -55
- package/src/extras/TextureUtils.js +2 -1
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/Path.js +22 -22
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/lib/earcut.js +8 -8
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +8 -6
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +42 -12
- package/src/helpers/SkeletonHelper.js +35 -6
- package/src/lights/LightShadow.js +21 -8
- package/src/lights/PointLightShadow.js +1 -1
- package/src/lights/webgpu/ProjectorLight.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +29 -5
- package/src/loaders/ImageBitmapLoader.js +32 -8
- package/src/loaders/ImageLoader.js +56 -9
- package/src/loaders/Loader.js +17 -3
- package/src/loaders/LoadingManager.js +45 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +16 -3
- package/src/materials/MeshBasicMaterial.js +2 -1
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshDistanceMaterial.js +1 -1
- package/src/materials/MeshLambertMaterial.js +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -10
- package/src/materials/nodes/MeshBasicNodeMaterial.js +4 -3
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -1
- package/src/materials/nodes/MeshSSSNodeMaterial.js +3 -3
- package/src/materials/nodes/NodeMaterial.js +90 -27
- package/src/materials/nodes/PointsNodeMaterial.js +86 -28
- package/src/materials/nodes/SpriteNodeMaterial.js +3 -15
- package/src/materials/nodes/manager/NodeMaterialObserver.js +89 -3
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +9 -3
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/Frustum.js +25 -9
- package/src/math/FrustumArray.js +10 -5
- package/src/math/Line3.js +129 -2
- package/src/math/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +55 -34
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +69 -67
- package/src/math/Spherical.js +3 -3
- package/src/nodes/Nodes.js +6 -4
- package/src/nodes/TSL.js +9 -4
- package/src/nodes/accessors/AccessorsUtils.js +7 -8
- package/src/nodes/accessors/Bitangent.js +31 -25
- package/src/nodes/accessors/BufferNode.js +1 -1
- package/src/nodes/accessors/Camera.js +142 -16
- package/src/nodes/accessors/ClippingNode.js +6 -5
- package/src/nodes/accessors/CubeTextureNode.js +5 -4
- package/src/nodes/accessors/InstanceNode.js +25 -5
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +97 -30
- package/src/nodes/accessors/Object3DNode.js +2 -2
- package/src/nodes/accessors/Position.js +25 -9
- package/src/nodes/accessors/ReferenceBaseNode.js +1 -1
- package/src/nodes/accessors/ReferenceNode.js +20 -4
- package/src/nodes/accessors/ReflectVector.js +3 -3
- package/src/nodes/accessors/SceneNode.js +3 -2
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +23 -1
- package/src/nodes/accessors/Tangent.js +25 -17
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/Texture3DNode.js +14 -1
- package/src/nodes/accessors/TextureBicubic.js +21 -3
- package/src/nodes/accessors/TextureNode.js +142 -44
- package/src/nodes/accessors/UniformArrayNode.js +0 -16
- package/src/nodes/code/FunctionCallNode.js +24 -4
- package/src/nodes/code/FunctionNode.js +23 -0
- package/src/nodes/core/ArrayNode.js +13 -0
- package/src/nodes/core/AssignNode.js +6 -2
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +48 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +36 -17
- package/src/nodes/core/Node.js +167 -34
- package/src/nodes/core/NodeBuilder.js +404 -120
- package/src/nodes/core/NodeFrame.js +21 -21
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUniform.js +1 -1
- package/src/nodes/core/NodeUtils.js +17 -88
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +77 -30
- package/src/nodes/core/StructNode.js +5 -5
- package/src/nodes/core/StructTypeNode.js +1 -0
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/UniformNode.js +80 -14
- package/src/nodes/core/VarNode.js +142 -16
- package/src/nodes/core/VaryingNode.js +9 -6
- package/src/nodes/display/BlendModes.js +7 -6
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/FrontFacingNode.js +35 -7
- package/src/nodes/display/NormalMapNode.js +20 -50
- package/src/nodes/display/PassNode.js +206 -17
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +44 -40
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/display/ViewportDepthTextureNode.js +16 -4
- package/src/nodes/display/ViewportSharedTextureNode.js +12 -0
- package/src/nodes/display/ViewportTextureNode.js +94 -4
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhongLightingModel.js +3 -3
- package/src/nodes/functions/PhysicalLightingModel.js +19 -18
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +81 -25
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +29 -3
- package/src/nodes/lighting/EnvironmentNode.js +11 -11
- package/src/nodes/lighting/LightsNode.js +7 -8
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ProjectorLightNode.js +19 -6
- package/src/nodes/lighting/ShadowFilterNode.js +3 -1
- package/src/nodes/lighting/ShadowNode.js +77 -10
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +165 -1
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/ConditionalNode.js +25 -27
- package/src/nodes/math/MathNode.js +106 -65
- package/src/nodes/math/OperatorNode.js +28 -43
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +6 -2
- package/src/nodes/tsl/TSLCore.js +546 -186
- package/src/nodes/utils/DebugNode.js +3 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +119 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +20 -41
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/MemberNode.js +59 -7
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +33 -6
- package/src/nodes/utils/ReflectorNode.js +68 -10
- package/src/nodes/utils/SampleNode.js +91 -0
- package/src/nodes/utils/SplitNode.js +11 -0
- package/src/nodes/utils/Timer.js +0 -47
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/objects/BatchedMesh.js +6 -4
- package/src/objects/LOD.js +1 -1
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +4 -3
- package/src/renderers/WebGLRenderer.js +77 -66
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Attributes.js +1 -1
- package/src/renderers/common/Backend.js +108 -27
- package/src/renderers/common/Background.js +4 -3
- package/src/renderers/common/Bindings.js +76 -19
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +1 -1
- package/src/renderers/common/Color4.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +1 -1
- package/src/renderers/common/DataMap.js +1 -1
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Pipelines.js +1 -1
- package/src/renderers/common/PostProcessing.js +61 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderContext.js +2 -2
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +84 -5
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +486 -255
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +8 -68
- package/src/renderers/common/Sampler.js +117 -0
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageTexture.js +27 -0
- package/src/renderers/common/Textures.js +138 -46
- package/src/renderers/common/TimestampQueryPool.js +65 -3
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +63 -24
- package/src/renderers/common/XRRenderTarget.js +21 -4
- package/src/renderers/common/extras/PMREMGenerator.js +161 -66
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/NodeLibrary.js +9 -7
- package/src/renderers/common/nodes/NodeSampledTexture.js +0 -12
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +21 -11
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +11 -2
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLCapabilities.js +4 -3
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +25 -18
- package/src/renderers/webgl/WebGLPrograms.js +9 -6
- package/src/renderers/webgl/WebGLShadowMap.js +13 -2
- package/src/renderers/webgl/WebGLState.js +17 -16
- package/src/renderers/webgl/WebGLTextures.js +38 -21
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +3 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +245 -182
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +184 -30
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +4 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +9 -8
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +171 -19
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +51 -22
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -2
- package/src/renderers/webgpu/WebGPUBackend.js +205 -128
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +198 -121
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +8 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +49 -33
- package/src/renderers/webgpu/utils/WebGPUConstants.js +14 -3
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -37
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +266 -158
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +32 -9
- package/src/renderers/webgpu/utils/WebGPUUtils.js +24 -19
- package/src/renderers/webxr/WebXRDepthSensing.js +6 -10
- package/src/renderers/webxr/WebXRManager.js +89 -13
- package/src/textures/ExternalTexture.js +56 -0
- package/src/textures/FramebufferTexture.js +2 -2
- package/src/textures/Source.js +14 -3
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +29 -2
- package/src/utils.js +67 -3
- package/examples/jsm/loaders/RGBMLoader.js +0 -1148
- package/examples/jsm/tsl/display/TRAAPassNode.js +0 -452
- package/src/nodes/utils/EquirectUVNode.js +0 -65
- package/src/nodes/utils/MatcapUVNode.js +0 -49
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -148
|
@@ -53,8 +53,9 @@ import { WebGLUtils } from './webgl/WebGLUtils.js';
|
|
|
53
53
|
import { WebXRManager } from './webxr/WebXRManager.js';
|
|
54
54
|
import { WebGLMaterials } from './webgl/WebGLMaterials.js';
|
|
55
55
|
import { WebGLUniformsGroups } from './webgl/WebGLUniformsGroups.js';
|
|
56
|
-
import { createCanvasElement, probeAsync,
|
|
56
|
+
import { createCanvasElement, probeAsync, warnOnce, error, warn, log } from '../utils.js';
|
|
57
57
|
import { ColorManagement } from '../math/ColorManagement.js';
|
|
58
|
+
import { getDFGLUT } from './shaders/DFGLUTData.js';
|
|
58
59
|
|
|
59
60
|
/**
|
|
60
61
|
* This renderer uses WebGL 2 to display scenes.
|
|
@@ -81,7 +82,7 @@ class WebGLRenderer {
|
|
|
81
82
|
preserveDrawingBuffer = false,
|
|
82
83
|
powerPreference = 'default',
|
|
83
84
|
failIfMajorPerformanceCaveat = false,
|
|
84
|
-
|
|
85
|
+
reversedDepthBuffer = false,
|
|
85
86
|
multiviewStereo = false,
|
|
86
87
|
} = parameters;
|
|
87
88
|
|
|
@@ -112,6 +113,21 @@ class WebGLRenderer {
|
|
|
112
113
|
|
|
113
114
|
}
|
|
114
115
|
|
|
116
|
+
const INTEGER_FORMATS = new Set( [
|
|
117
|
+
RGBAIntegerFormat,
|
|
118
|
+
RGIntegerFormat,
|
|
119
|
+
RedIntegerFormat
|
|
120
|
+
] );
|
|
121
|
+
|
|
122
|
+
const UNSIGNED_TYPES = new Set( [
|
|
123
|
+
UnsignedByteType,
|
|
124
|
+
UnsignedIntType,
|
|
125
|
+
UnsignedShortType,
|
|
126
|
+
UnsignedInt248Type,
|
|
127
|
+
UnsignedShort4444Type,
|
|
128
|
+
UnsignedShort5551Type
|
|
129
|
+
] );
|
|
130
|
+
|
|
115
131
|
const uintClearColor = new Uint32Array( 4 );
|
|
116
132
|
const intClearColor = new Int32Array( 4 );
|
|
117
133
|
|
|
@@ -133,7 +149,7 @@ class WebGLRenderer {
|
|
|
133
149
|
* document.body.appendChild( renderer.domElement );
|
|
134
150
|
* ```
|
|
135
151
|
*
|
|
136
|
-
* @type {
|
|
152
|
+
* @type {HTMLCanvasElement|OffscreenCanvas}
|
|
137
153
|
*/
|
|
138
154
|
this.domElement = canvas;
|
|
139
155
|
|
|
@@ -315,7 +331,6 @@ class WebGLRenderer {
|
|
|
315
331
|
|
|
316
332
|
// camera matrices cache
|
|
317
333
|
|
|
318
|
-
const _currentProjectionMatrix = new Matrix4();
|
|
319
334
|
const _projScreenMatrix = new Matrix4();
|
|
320
335
|
|
|
321
336
|
const _vector3 = new Vector3();
|
|
@@ -387,7 +402,7 @@ class WebGLRenderer {
|
|
|
387
402
|
|
|
388
403
|
} catch ( error ) {
|
|
389
404
|
|
|
390
|
-
|
|
405
|
+
error( 'WebGLRenderer: ' + error.message );
|
|
391
406
|
throw error;
|
|
392
407
|
|
|
393
408
|
}
|
|
@@ -412,7 +427,7 @@ class WebGLRenderer {
|
|
|
412
427
|
|
|
413
428
|
state = new WebGLState( _gl, extensions );
|
|
414
429
|
|
|
415
|
-
if ( capabilities.
|
|
430
|
+
if ( capabilities.reversedDepthBuffer && reversedDepthBuffer ) {
|
|
416
431
|
|
|
417
432
|
state.buffers.depth.setReversed( true );
|
|
418
433
|
|
|
@@ -524,7 +539,7 @@ class WebGLRenderer {
|
|
|
524
539
|
|
|
525
540
|
// xr
|
|
526
541
|
|
|
527
|
-
const xr = new WebXRManager( _this, _gl );
|
|
542
|
+
const xr = new WebXRManager( _this, _gl, extensions, multiviewStereo );
|
|
528
543
|
|
|
529
544
|
/**
|
|
530
545
|
* A reference to the XR manager.
|
|
@@ -626,7 +641,7 @@ class WebGLRenderer {
|
|
|
626
641
|
|
|
627
642
|
if ( xr.isPresenting ) {
|
|
628
643
|
|
|
629
|
-
|
|
644
|
+
warn( 'WebGLRenderer: Can\'t change size while VR device is presenting.' );
|
|
630
645
|
return;
|
|
631
646
|
|
|
632
647
|
}
|
|
@@ -888,9 +903,7 @@ class WebGLRenderer {
|
|
|
888
903
|
if ( _currentRenderTarget !== null ) {
|
|
889
904
|
|
|
890
905
|
const targetFormat = _currentRenderTarget.texture.format;
|
|
891
|
-
isIntegerFormat = targetFormat
|
|
892
|
-
targetFormat === RGIntegerFormat ||
|
|
893
|
-
targetFormat === RedIntegerFormat;
|
|
906
|
+
isIntegerFormat = INTEGER_FORMATS.has( targetFormat );
|
|
894
907
|
|
|
895
908
|
}
|
|
896
909
|
|
|
@@ -899,12 +912,7 @@ class WebGLRenderer {
|
|
|
899
912
|
if ( isIntegerFormat ) {
|
|
900
913
|
|
|
901
914
|
const targetType = _currentRenderTarget.texture.type;
|
|
902
|
-
const isUnsignedType = targetType
|
|
903
|
-
targetType === UnsignedIntType ||
|
|
904
|
-
targetType === UnsignedShortType ||
|
|
905
|
-
targetType === UnsignedInt248Type ||
|
|
906
|
-
targetType === UnsignedShort4444Type ||
|
|
907
|
-
targetType === UnsignedShort5551Type;
|
|
915
|
+
const isUnsignedType = UNSIGNED_TYPES.has( targetType );
|
|
908
916
|
|
|
909
917
|
const clearColor = background.getClearColor();
|
|
910
918
|
const a = background.getClearAlpha();
|
|
@@ -1018,7 +1026,7 @@ class WebGLRenderer {
|
|
|
1018
1026
|
|
|
1019
1027
|
event.preventDefault();
|
|
1020
1028
|
|
|
1021
|
-
|
|
1029
|
+
log( 'WebGLRenderer: Context Lost.' );
|
|
1022
1030
|
|
|
1023
1031
|
_isContextLost = true;
|
|
1024
1032
|
|
|
@@ -1026,7 +1034,7 @@ class WebGLRenderer {
|
|
|
1026
1034
|
|
|
1027
1035
|
function onContextRestore( /* event */ ) {
|
|
1028
1036
|
|
|
1029
|
-
|
|
1037
|
+
log( 'WebGLRenderer: Context Restored.' );
|
|
1030
1038
|
|
|
1031
1039
|
_isContextLost = false;
|
|
1032
1040
|
|
|
@@ -1048,7 +1056,7 @@ class WebGLRenderer {
|
|
|
1048
1056
|
|
|
1049
1057
|
function onContextCreationError( event ) {
|
|
1050
1058
|
|
|
1051
|
-
|
|
1059
|
+
error( 'WebGLRenderer: A WebGL context could not be created. Reason: ', event.statusMessage );
|
|
1052
1060
|
|
|
1053
1061
|
}
|
|
1054
1062
|
|
|
@@ -1221,7 +1229,7 @@ class WebGLRenderer {
|
|
|
1221
1229
|
if ( object._multiDrawInstances !== null ) {
|
|
1222
1230
|
|
|
1223
1231
|
// @deprecated, r174
|
|
1224
|
-
warnOnce( '
|
|
1232
|
+
warnOnce( 'WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.' );
|
|
1225
1233
|
renderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );
|
|
1226
1234
|
|
|
1227
1235
|
} else {
|
|
@@ -1497,6 +1505,13 @@ class WebGLRenderer {
|
|
|
1497
1505
|
|
|
1498
1506
|
if ( typeof self !== 'undefined' ) animation.setContext( self );
|
|
1499
1507
|
|
|
1508
|
+
/**
|
|
1509
|
+
* Applications are advised to always define the animation loop
|
|
1510
|
+
* with this method and not manually with `requestAnimationFrame()`
|
|
1511
|
+
* for best compatibility.
|
|
1512
|
+
*
|
|
1513
|
+
* @param {?onAnimationCallback} callback - The application's animation loop.
|
|
1514
|
+
*/
|
|
1500
1515
|
this.setAnimationLoop = function ( callback ) {
|
|
1501
1516
|
|
|
1502
1517
|
onAnimationFrameCallback = callback;
|
|
@@ -1529,7 +1544,7 @@ class WebGLRenderer {
|
|
|
1529
1544
|
|
|
1530
1545
|
if ( camera !== undefined && camera.isCamera !== true ) {
|
|
1531
1546
|
|
|
1532
|
-
|
|
1547
|
+
error( 'WebGLRenderer.render: camera is not an instance of THREE.Camera.' );
|
|
1533
1548
|
return;
|
|
1534
1549
|
|
|
1535
1550
|
}
|
|
@@ -1561,7 +1576,7 @@ class WebGLRenderer {
|
|
|
1561
1576
|
renderStateStack.push( currentRenderState );
|
|
1562
1577
|
|
|
1563
1578
|
_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
|
|
1564
|
-
_frustum.setFromProjectionMatrix( _projScreenMatrix );
|
|
1579
|
+
_frustum.setFromProjectionMatrix( _projScreenMatrix, WebGLCoordinateSystem, camera.reversedDepth );
|
|
1565
1580
|
|
|
1566
1581
|
_localClippingEnabled = this.localClippingEnabled;
|
|
1567
1582
|
_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled );
|
|
@@ -1687,6 +1702,8 @@ class WebGLRenderer {
|
|
|
1687
1702
|
|
|
1688
1703
|
if ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );
|
|
1689
1704
|
|
|
1705
|
+
textures.runDeferredUploads();
|
|
1706
|
+
|
|
1690
1707
|
// _gl.finish();
|
|
1691
1708
|
|
|
1692
1709
|
bindingStates.resetDefaultState();
|
|
@@ -1837,9 +1854,7 @@ class WebGLRenderer {
|
|
|
1837
1854
|
|
|
1838
1855
|
function renderScene( currentRenderList, scene, camera, viewport ) {
|
|
1839
1856
|
|
|
1840
|
-
const opaqueObjects = currentRenderList
|
|
1841
|
-
const transmissiveObjects = currentRenderList.transmissive;
|
|
1842
|
-
const transparentObjects = currentRenderList.transparent;
|
|
1857
|
+
const { opaque: opaqueObjects, transmissive: transmissiveObjects, transparent: transparentObjects } = currentRenderList;
|
|
1843
1858
|
|
|
1844
1859
|
currentRenderState.setupLightsView( camera );
|
|
1845
1860
|
|
|
@@ -1904,6 +1919,9 @@ class WebGLRenderer {
|
|
|
1904
1919
|
//
|
|
1905
1920
|
|
|
1906
1921
|
const currentRenderTarget = _this.getRenderTarget();
|
|
1922
|
+
const currentActiveCubeFace = _this.getActiveCubeFace();
|
|
1923
|
+
const currentActiveMipmapLevel = _this.getActiveMipmapLevel();
|
|
1924
|
+
|
|
1907
1925
|
_this.setRenderTarget( transmissionRenderTarget );
|
|
1908
1926
|
|
|
1909
1927
|
_this.getClearColor( _currentClearColor );
|
|
@@ -1941,10 +1959,7 @@ class WebGLRenderer {
|
|
|
1941
1959
|
|
|
1942
1960
|
const renderItem = transmissiveObjects[ i ];
|
|
1943
1961
|
|
|
1944
|
-
const object = renderItem
|
|
1945
|
-
const geometry = renderItem.geometry;
|
|
1946
|
-
const material = renderItem.material;
|
|
1947
|
-
const group = renderItem.group;
|
|
1962
|
+
const { object, geometry, material, group } = renderItem;
|
|
1948
1963
|
|
|
1949
1964
|
if ( material.side === DoubleSide && object.layers.test( camera.layers ) ) {
|
|
1950
1965
|
|
|
@@ -1973,7 +1988,7 @@ class WebGLRenderer {
|
|
|
1973
1988
|
|
|
1974
1989
|
}
|
|
1975
1990
|
|
|
1976
|
-
_this.setRenderTarget( currentRenderTarget );
|
|
1991
|
+
_this.setRenderTarget( currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel );
|
|
1977
1992
|
|
|
1978
1993
|
_this.setClearColor( _currentClearColor, _currentClearAlpha );
|
|
1979
1994
|
|
|
@@ -1991,9 +2006,7 @@ class WebGLRenderer {
|
|
|
1991
2006
|
|
|
1992
2007
|
const renderItem = renderList[ i ];
|
|
1993
2008
|
|
|
1994
|
-
const object = renderItem
|
|
1995
|
-
const geometry = renderItem.geometry;
|
|
1996
|
-
const group = renderItem.group;
|
|
2009
|
+
const { object, geometry, group } = renderItem;
|
|
1997
2010
|
let material = renderItem.material;
|
|
1998
2011
|
|
|
1999
2012
|
if ( material.allowOverride === true && overrideMaterial !== null ) {
|
|
@@ -2405,23 +2418,17 @@ class WebGLRenderer {
|
|
|
2405
2418
|
|
|
2406
2419
|
} else {
|
|
2407
2420
|
|
|
2408
|
-
const
|
|
2421
|
+
const reversedDepthBuffer = state.buffers.depth.getReversed();
|
|
2409
2422
|
|
|
2410
|
-
if (
|
|
2423
|
+
if ( reversedDepthBuffer && camera.reversedDepth !== true ) {
|
|
2411
2424
|
|
|
2412
|
-
|
|
2413
|
-
|
|
2414
|
-
toNormalizedProjectionMatrix( _currentProjectionMatrix );
|
|
2415
|
-
toReversedProjectionMatrix( _currentProjectionMatrix );
|
|
2416
|
-
|
|
2417
|
-
p_uniforms.setValue( _gl, 'projectionMatrix', _currentProjectionMatrix );
|
|
2418
|
-
|
|
2419
|
-
} else {
|
|
2420
|
-
|
|
2421
|
-
p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );
|
|
2425
|
+
camera._reversedDepth = true;
|
|
2426
|
+
camera.updateProjectionMatrix();
|
|
2422
2427
|
|
|
2423
2428
|
}
|
|
2424
2429
|
|
|
2430
|
+
p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );
|
|
2431
|
+
|
|
2425
2432
|
p_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );
|
|
2426
2433
|
|
|
2427
2434
|
}
|
|
@@ -2538,6 +2545,13 @@ class WebGLRenderer {
|
|
|
2538
2545
|
|
|
2539
2546
|
}
|
|
2540
2547
|
|
|
2548
|
+
// Set DFG LUT for physically-based materials
|
|
2549
|
+
if ( m_uniforms.dfgLUT !== undefined ) {
|
|
2550
|
+
|
|
2551
|
+
m_uniforms.dfgLUT.value = getDFGLUT();
|
|
2552
|
+
|
|
2553
|
+
}
|
|
2554
|
+
|
|
2541
2555
|
if ( refreshMaterial ) {
|
|
2542
2556
|
|
|
2543
2557
|
p_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );
|
|
@@ -2711,7 +2725,7 @@ class WebGLRenderer {
|
|
|
2711
2725
|
const renderTargetProperties = properties.get( renderTarget );
|
|
2712
2726
|
|
|
2713
2727
|
renderTargetProperties.__autoAllocateDepthBuffer = renderTarget.resolveDepthBuffer === false;
|
|
2714
|
-
if ( ! renderTargetProperties.__autoAllocateDepthBuffer
|
|
2728
|
+
if ( ! renderTargetProperties.__autoAllocateDepthBuffer ) {
|
|
2715
2729
|
|
|
2716
2730
|
// The multisample_render_to_texture extension doesn't work properly if there
|
|
2717
2731
|
// are midframe flushes and an external depth buffer. Disable use of the extension.
|
|
@@ -2887,9 +2901,15 @@ class WebGLRenderer {
|
|
|
2887
2901
|
|
|
2888
2902
|
} else if ( isRenderTarget3D ) {
|
|
2889
2903
|
|
|
2890
|
-
const textureProperties = properties.get( renderTarget.texture );
|
|
2891
2904
|
const layer = activeCubeFace;
|
|
2892
|
-
|
|
2905
|
+
|
|
2906
|
+
for ( let i = 0; i < renderTarget.textures.length; i ++ ) {
|
|
2907
|
+
|
|
2908
|
+
const textureProperties = properties.get( renderTarget.textures[ i ] );
|
|
2909
|
+
|
|
2910
|
+
_gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, textureProperties.__webglTexture, activeMipmapLevel, layer );
|
|
2911
|
+
|
|
2912
|
+
}
|
|
2893
2913
|
|
|
2894
2914
|
} else if ( renderTarget !== null && activeMipmapLevel !== 0 ) {
|
|
2895
2915
|
|
|
@@ -2920,7 +2940,7 @@ class WebGLRenderer {
|
|
|
2920
2940
|
|
|
2921
2941
|
if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {
|
|
2922
2942
|
|
|
2923
|
-
|
|
2943
|
+
error( 'WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );
|
|
2924
2944
|
return;
|
|
2925
2945
|
|
|
2926
2946
|
}
|
|
@@ -2945,14 +2965,14 @@ class WebGLRenderer {
|
|
|
2945
2965
|
|
|
2946
2966
|
if ( ! capabilities.textureFormatReadable( textureFormat ) ) {
|
|
2947
2967
|
|
|
2948
|
-
|
|
2968
|
+
error( 'WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );
|
|
2949
2969
|
return;
|
|
2950
2970
|
|
|
2951
2971
|
}
|
|
2952
2972
|
|
|
2953
2973
|
if ( ! capabilities.textureTypeReadable( textureType ) ) {
|
|
2954
2974
|
|
|
2955
|
-
|
|
2975
|
+
error( 'WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );
|
|
2956
2976
|
return;
|
|
2957
2977
|
|
|
2958
2978
|
}
|
|
@@ -2961,7 +2981,7 @@ class WebGLRenderer {
|
|
|
2961
2981
|
|
|
2962
2982
|
if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {
|
|
2963
2983
|
|
|
2964
|
-
// when using MRT, select the
|
|
2984
|
+
// when using MRT, select the correct color buffer for the subsequent read command
|
|
2965
2985
|
|
|
2966
2986
|
if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
|
|
2967
2987
|
|
|
@@ -3041,7 +3061,7 @@ class WebGLRenderer {
|
|
|
3041
3061
|
_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );
|
|
3042
3062
|
_gl.bufferData( _gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ );
|
|
3043
3063
|
|
|
3044
|
-
// when using MRT, select the
|
|
3064
|
+
// when using MRT, select the correct color buffer for the subsequent read command
|
|
3045
3065
|
|
|
3046
3066
|
if ( renderTarget.textures.length > 1 ) _gl.readBuffer( _gl.COLOR_ATTACHMENT0 + textureIndex );
|
|
3047
3067
|
|
|
@@ -3368,15 +3388,6 @@ class WebGLRenderer {
|
|
|
3368
3388
|
|
|
3369
3389
|
};
|
|
3370
3390
|
|
|
3371
|
-
this.copyTextureToTexture3D = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {
|
|
3372
|
-
|
|
3373
|
-
// @deprecated, r170
|
|
3374
|
-
warnOnce( 'WebGLRenderer: copyTextureToTexture3D function has been deprecated. Use "copyTextureToTexture" instead.' );
|
|
3375
|
-
|
|
3376
|
-
return this.copyTextureToTexture( srcTexture, dstTexture, srcRegion, dstPosition, level );
|
|
3377
|
-
|
|
3378
|
-
};
|
|
3379
|
-
|
|
3380
3391
|
/**
|
|
3381
3392
|
* Initializes the given WebGLRenderTarget memory. Useful for initializing a render target so data
|
|
3382
3393
|
* can be copied into it using {@link WebGLRenderer#copyTextureToTexture} before it has been
|
|
@@ -3493,7 +3504,7 @@ class WebGLRenderer {
|
|
|
3493
3504
|
* WebGLRenderer options.
|
|
3494
3505
|
*
|
|
3495
3506
|
* @typedef {Object} WebGLRenderer~Options
|
|
3496
|
-
* @property {
|
|
3507
|
+
* @property {HTMLCanvasElement|OffscreenCanvas} [canvas=null] - A canvas element where the renderer draws its output. If not passed in here, a new canvas element will be created by the renderer.
|
|
3497
3508
|
* @property {WebGL2RenderingContext} [context=null] - Can be used to attach an existing rendering context to this renderer.
|
|
3498
3509
|
* @property {('highp'|'mediump'|'lowp')} [precision='highp'] - The default shader precision. Uses `highp` if supported by the device.
|
|
3499
3510
|
* @property {boolean} [alpha=false] - Controls the default clear alpha value. When set to`true`, the value is `0`. Otherwise it's `1`.
|
|
@@ -3506,7 +3517,7 @@ class WebGLRenderer {
|
|
|
3506
3517
|
* @property {boolean} [depth=true] Whether the drawing buffer has a depth buffer of at least 16 bits.
|
|
3507
3518
|
* @property {boolean} [logarithmicDepthBuffer=false] Whether to use a logarithmic depth buffer. It may be necessary to use this if dealing with huge differences in scale in a single scene.
|
|
3508
3519
|
* Note that this setting uses `gl_FragDepth` if available which disables the Early Fragment Test optimization and can cause a decrease in performance.
|
|
3509
|
-
* @property {boolean} [
|
|
3520
|
+
* @property {boolean} [reversedDepthBuffer=false] Whether to use a reverse depth buffer. Requires the `EXT_clip_control` extension.
|
|
3510
3521
|
* This is a more faster and accurate version than logarithmic depth buffer.
|
|
3511
3522
|
**/
|
|
3512
3523
|
|
|
@@ -3527,7 +3538,7 @@ class WebGLRenderer {
|
|
|
3527
3538
|
* @property {number} maxVertexTextures - The number of textures that can be used in a vertex shader.
|
|
3528
3539
|
* @property {number} maxVertexUniforms - The maximum number of uniforms that can be used in a vertex shader.
|
|
3529
3540
|
* @property {string} precision - The shader precision currently being used by the renderer.
|
|
3530
|
-
* @property {boolean}
|
|
3541
|
+
* @property {boolean} reversedDepthBuffer - `true` if `reversedDepthBuffer` was set to `true` in the constructor
|
|
3531
3542
|
* and the rendering context supports `EXT_clip_control`.
|
|
3532
3543
|
* @property {boolean} vertexTextures - `true` if vertex textures can be used.
|
|
3533
3544
|
**/
|
|
@@ -9,10 +9,18 @@ class Animation {
|
|
|
9
9
|
/**
|
|
10
10
|
* Constructs a new animation loop management component.
|
|
11
11
|
*
|
|
12
|
+
* @param {Renderer} renderer - A reference to the main renderer.
|
|
12
13
|
* @param {Nodes} nodes - Renderer component for managing nodes related logic.
|
|
13
14
|
* @param {Info} info - Renderer component for managing metrics and monitoring data.
|
|
14
15
|
*/
|
|
15
|
-
constructor( nodes, info ) {
|
|
16
|
+
constructor( renderer, nodes, info ) {
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* A reference to the main renderer.
|
|
20
|
+
*
|
|
21
|
+
* @type {Renderer}
|
|
22
|
+
*/
|
|
23
|
+
this.renderer = renderer;
|
|
16
24
|
|
|
17
25
|
/**
|
|
18
26
|
* Renderer component for managing nodes related logic.
|
|
@@ -70,8 +78,12 @@ class Animation {
|
|
|
70
78
|
|
|
71
79
|
this.info.frame = this.nodes.nodeFrame.frameId;
|
|
72
80
|
|
|
81
|
+
this.renderer._inspector.begin();
|
|
82
|
+
|
|
73
83
|
if ( this._animationLoop !== null ) this._animationLoop( time, xrFrame );
|
|
74
84
|
|
|
85
|
+
this.renderer._inspector.finish();
|
|
86
|
+
|
|
75
87
|
};
|
|
76
88
|
|
|
77
89
|
update();
|
|
@@ -33,7 +33,7 @@ class Attributes extends DataMap {
|
|
|
33
33
|
* Deletes the data for the given attribute.
|
|
34
34
|
*
|
|
35
35
|
* @param {BufferAttribute} attribute - The attribute.
|
|
36
|
-
* @return {Object
|
|
36
|
+
* @return {?Object} The deleted attribute data.
|
|
37
37
|
*/
|
|
38
38
|
delete( attribute ) {
|
|
39
39
|
|
|
@@ -4,7 +4,7 @@ let _color4 = null;
|
|
|
4
4
|
import Color4 from './Color4.js';
|
|
5
5
|
import { Vector2 } from '../../math/Vector2.js';
|
|
6
6
|
import { createCanvasElement, warnOnce } from '../../utils.js';
|
|
7
|
-
import { REVISION } from '../../constants.js';
|
|
7
|
+
import { REVISION, TimestampQuery } from '../../constants.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Most of the rendering related logic is implemented in the
|
|
@@ -38,7 +38,7 @@ class Backend {
|
|
|
38
38
|
* This weak map holds backend-specific data of objects
|
|
39
39
|
* like textures, attributes or render targets.
|
|
40
40
|
*
|
|
41
|
-
* @type {WeakMap}
|
|
41
|
+
* @type {WeakMap<Object, Object>}
|
|
42
42
|
*/
|
|
43
43
|
this.data = new WeakMap();
|
|
44
44
|
|
|
@@ -64,8 +64,8 @@ class Backend {
|
|
|
64
64
|
* @type {{render: ?TimestampQueryPool, compute: ?TimestampQueryPool}}
|
|
65
65
|
*/
|
|
66
66
|
this.timestampQueryPool = {
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
[ TimestampQuery.RENDER ]: null,
|
|
68
|
+
[ TimestampQuery.COMPUTE ]: null
|
|
69
69
|
};
|
|
70
70
|
|
|
71
71
|
/**
|
|
@@ -273,20 +273,13 @@ class Backend {
|
|
|
273
273
|
// textures
|
|
274
274
|
|
|
275
275
|
/**
|
|
276
|
-
*
|
|
276
|
+
* Updates a GPU sampler for the given texture.
|
|
277
277
|
*
|
|
278
278
|
* @abstract
|
|
279
|
-
* @param {Texture} texture - The texture to
|
|
279
|
+
* @param {Texture} texture - The texture to update the sampler for.
|
|
280
|
+
* @return {string} The current sampler key.
|
|
280
281
|
*/
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
/**
|
|
284
|
-
* Destroys the GPU sampler for the given texture.
|
|
285
|
-
*
|
|
286
|
-
* @abstract
|
|
287
|
-
* @param {Texture} texture - The texture to destroy the sampler for.
|
|
288
|
-
*/
|
|
289
|
-
destroySampler( /*texture*/ ) {}
|
|
282
|
+
updateSampler( /*texture*/ ) { }
|
|
290
283
|
|
|
291
284
|
/**
|
|
292
285
|
* Creates a default texture for the given texture that can be used
|
|
@@ -328,8 +321,9 @@ class Backend {
|
|
|
328
321
|
*
|
|
329
322
|
* @abstract
|
|
330
323
|
* @param {Texture} texture - The texture.
|
|
324
|
+
* @param {boolean} [isDefaultTexture=false] - Whether the texture uses a default GPU texture or not.
|
|
331
325
|
*/
|
|
332
|
-
destroyTexture( /*texture*/ ) { }
|
|
326
|
+
destroyTexture( /*texture, isDefaultTexture*/ ) { }
|
|
333
327
|
|
|
334
328
|
/**
|
|
335
329
|
* Returns texture data as a typed array.
|
|
@@ -439,6 +433,103 @@ class Backend {
|
|
|
439
433
|
|
|
440
434
|
// utils
|
|
441
435
|
|
|
436
|
+
/**
|
|
437
|
+
* Updates a unique identifier for the given render context that can be used
|
|
438
|
+
* to allocate resources like occlusion queries or timestamp queries.
|
|
439
|
+
*
|
|
440
|
+
* @param {RenderContext|ComputeNode} abstractRenderContext - The render context.
|
|
441
|
+
*/
|
|
442
|
+
updateTimeStampUID( abstractRenderContext ) {
|
|
443
|
+
|
|
444
|
+
const contextData = this.get( abstractRenderContext );
|
|
445
|
+
const frame = this.renderer.info.frame;
|
|
446
|
+
|
|
447
|
+
let prefix;
|
|
448
|
+
|
|
449
|
+
if ( abstractRenderContext.isComputeNode === true ) {
|
|
450
|
+
|
|
451
|
+
prefix = 'c:' + this.renderer.info.compute.frameCalls;
|
|
452
|
+
|
|
453
|
+
} else {
|
|
454
|
+
|
|
455
|
+
prefix = 'r:' + this.renderer.info.render.frameCalls;
|
|
456
|
+
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
contextData.timestampUID = prefix + ':' + abstractRenderContext.id + ':f' + frame;
|
|
460
|
+
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
/**
|
|
464
|
+
* Returns a unique identifier for the given render context that can be used
|
|
465
|
+
* to allocate resources like occlusion queries or timestamp queries.
|
|
466
|
+
*
|
|
467
|
+
* @param {RenderContext|ComputeNode} abstractRenderContext - The render context.
|
|
468
|
+
* @return {string} The unique identifier.
|
|
469
|
+
*/
|
|
470
|
+
getTimestampUID( abstractRenderContext ) {
|
|
471
|
+
|
|
472
|
+
return this.get( abstractRenderContext ).timestampUID;
|
|
473
|
+
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* Returns all timestamp frames for the given type.
|
|
478
|
+
*
|
|
479
|
+
* @param {string} type - The type of the time stamp.
|
|
480
|
+
* @return {Array<number>} The timestamp frames.
|
|
481
|
+
*/
|
|
482
|
+
getTimestampFrames( type ) {
|
|
483
|
+
|
|
484
|
+
const queryPool = this.timestampQueryPool[ type ];
|
|
485
|
+
|
|
486
|
+
return queryPool ? queryPool.getTimestampFrames() : [];
|
|
487
|
+
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
/**
|
|
491
|
+
* Returns the query pool for the given uid.
|
|
492
|
+
*
|
|
493
|
+
* @param {string} uid - The unique identifier.
|
|
494
|
+
* @return {TimestampQueryPool} The query pool.
|
|
495
|
+
*/
|
|
496
|
+
_getQueryPool( uid ) {
|
|
497
|
+
|
|
498
|
+
const type = uid.startsWith( 'c:' ) ? TimestampQuery.COMPUTE : TimestampQuery.RENDER;
|
|
499
|
+
const queryPool = this.timestampQueryPool[ type ];
|
|
500
|
+
|
|
501
|
+
return queryPool;
|
|
502
|
+
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
/**
|
|
506
|
+
* Returns the timestamp for the given uid.
|
|
507
|
+
*
|
|
508
|
+
* @param {string} uid - The unique identifier.
|
|
509
|
+
* @return {number} The timestamp.
|
|
510
|
+
*/
|
|
511
|
+
getTimestamp( uid ) {
|
|
512
|
+
|
|
513
|
+
const queryPool = this._getQueryPool( uid );
|
|
514
|
+
|
|
515
|
+
return queryPool.getTimestamp( uid );
|
|
516
|
+
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
/**
|
|
520
|
+
* Returns `true` if a timestamp for the given uid is available.
|
|
521
|
+
*
|
|
522
|
+
* @param {string} uid - The unique identifier.
|
|
523
|
+
* @return {boolean} Whether the timestamp is available or not.
|
|
524
|
+
*/
|
|
525
|
+
hasTimestamp( uid ) {
|
|
526
|
+
|
|
527
|
+
const queryPool = this._getQueryPool( uid );
|
|
528
|
+
|
|
529
|
+
return queryPool.hasTimestamp( uid );
|
|
530
|
+
|
|
531
|
+
}
|
|
532
|
+
|
|
442
533
|
/**
|
|
443
534
|
* Returns `true` if the given 3D object is fully occluded by other
|
|
444
535
|
* 3D objects in the scene. Backends must implement this method by using
|
|
@@ -469,9 +560,9 @@ class Backend {
|
|
|
469
560
|
}
|
|
470
561
|
|
|
471
562
|
const queryPool = this.timestampQueryPool[ type ];
|
|
563
|
+
|
|
472
564
|
if ( ! queryPool ) {
|
|
473
565
|
|
|
474
|
-
warnOnce( `WebGPURenderer: No timestamp query pool for type '${type}' found.` );
|
|
475
566
|
return;
|
|
476
567
|
|
|
477
568
|
}
|
|
@@ -484,16 +575,6 @@ class Backend {
|
|
|
484
575
|
|
|
485
576
|
}
|
|
486
577
|
|
|
487
|
-
/**
|
|
488
|
-
* Can be used to synchronize CPU operations with GPU tasks. So when this method is called,
|
|
489
|
-
* the CPU waits for the GPU to complete its operation (e.g. a compute task).
|
|
490
|
-
*
|
|
491
|
-
* @async
|
|
492
|
-
* @abstract
|
|
493
|
-
* @return {Promise} A Promise that resolves when synchronization has been finished.
|
|
494
|
-
*/
|
|
495
|
-
async waitForGPU() {}
|
|
496
|
-
|
|
497
578
|
/**
|
|
498
579
|
* This method performs a readback operation by moving buffer data from
|
|
499
580
|
* a storage buffer attribute from the GPU to the CPU.
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import DataMap from './DataMap.js';
|
|
2
2
|
import Color4 from './Color4.js';
|
|
3
|
-
import { vec4, context,
|
|
3
|
+
import { vec4, context, normalWorldGeometry, backgroundBlurriness, backgroundIntensity, backgroundRotation, modelViewProjection } from '../../nodes/TSL.js';
|
|
4
4
|
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
5
5
|
|
|
6
6
|
import { Mesh } from '../../objects/Mesh.js';
|
|
7
7
|
import { SphereGeometry } from '../../geometries/SphereGeometry.js';
|
|
8
8
|
import { BackSide } from '../../constants.js';
|
|
9
|
+
import { error } from '../../utils.js';
|
|
9
10
|
|
|
10
11
|
const _clearColor = /*@__PURE__*/ new Color4();
|
|
11
12
|
|
|
@@ -89,7 +90,7 @@ class Background extends DataMap {
|
|
|
89
90
|
|
|
90
91
|
const backgroundMeshNode = context( vec4( backgroundNode ).mul( backgroundIntensity ), {
|
|
91
92
|
// @TODO: Add Texture2D support using node context
|
|
92
|
-
getUV: () => backgroundRotation.mul(
|
|
93
|
+
getUV: () => backgroundRotation.mul( normalWorldGeometry ),
|
|
93
94
|
getTextureLevel: () => backgroundBlurriness
|
|
94
95
|
} );
|
|
95
96
|
|
|
@@ -148,7 +149,7 @@ class Background extends DataMap {
|
|
|
148
149
|
|
|
149
150
|
} else {
|
|
150
151
|
|
|
151
|
-
|
|
152
|
+
error( 'Renderer: Unsupported background configuration.', background );
|
|
152
153
|
|
|
153
154
|
}
|
|
154
155
|
|