super-three 0.181.0 → 0.184.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +3 -4
- package/build/three.cjs +13152 -11354
- package/build/three.core.js +12319 -11539
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +1808 -781
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +27 -13
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +10523 -6263
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +10484 -6262
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +11 -3
- package/examples/jsm/animation/CCDIKSolver.js +7 -3
- package/examples/jsm/controls/ArcballControls.js +7 -4
- package/examples/jsm/controls/DragControls.js +2 -2
- package/examples/jsm/controls/FirstPersonControls.js +58 -54
- package/examples/jsm/controls/FlyControls.js +4 -0
- package/examples/jsm/controls/MapControls.js +55 -1
- package/examples/jsm/controls/OrbitControls.js +111 -8
- package/examples/jsm/controls/TrackballControls.js +8 -8
- package/examples/jsm/controls/TransformControls.js +34 -2
- package/examples/jsm/csm/CSM.js +2 -1
- package/examples/jsm/csm/CSMShadowNode.js +6 -2
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +3 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +152 -9
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/geometries/DecalGeometry.js +1 -1
- package/examples/jsm/geometries/TextGeometry.js +18 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeGridHelper.js +221 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +1 -1
- package/examples/jsm/helpers/TextureHelperGPU.js +1 -1
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Extension.js +13 -0
- package/examples/jsm/inspector/Inspector.js +203 -88
- package/examples/jsm/inspector/RendererInspector.js +14 -4
- package/examples/jsm/inspector/extensions/extensions.json +6 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.js +916 -0
- package/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.js +281 -0
- package/examples/jsm/inspector/tabs/Console.js +41 -7
- package/examples/jsm/inspector/tabs/Memory.js +128 -0
- package/examples/jsm/inspector/tabs/Parameters.js +51 -3
- package/examples/jsm/inspector/tabs/Performance.js +4 -4
- package/examples/jsm/inspector/tabs/Settings.js +264 -0
- package/examples/jsm/inspector/tabs/Timeline.js +1611 -0
- package/examples/jsm/inspector/tabs/Viewer.js +107 -5
- package/examples/jsm/inspector/ui/Graph.js +2 -2
- package/examples/jsm/inspector/ui/List.js +1 -1
- package/examples/jsm/inspector/ui/Profiler.js +1936 -34
- package/examples/jsm/inspector/ui/Style.js +1044 -31
- package/examples/jsm/inspector/ui/Tab.js +222 -3
- package/examples/jsm/inspector/ui/Values.js +55 -2
- package/examples/jsm/inspector/ui/utils.js +13 -0
- package/examples/jsm/interaction/InteractionManager.js +226 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +9 -8
- package/examples/jsm/lighting/DynamicLighting.js +82 -0
- package/examples/jsm/lighting/LightProbeGrid.js +651 -0
- package/examples/jsm/lines/LineMaterial.js +7 -1
- package/examples/jsm/loaders/3DMLoader.js +5 -4
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/DRACOLoader.js +5 -5
- package/examples/jsm/loaders/EXRLoader.js +687 -48
- package/examples/jsm/loaders/FBXLoader.js +235 -37
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +146 -178
- package/examples/jsm/loaders/HDRLoader.js +1 -2
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +27 -5
- package/examples/jsm/loaders/LDrawLoader.js +41 -50
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +4 -2
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +0 -2
- package/examples/jsm/loaders/TGALoader.js +0 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +285 -160
- package/examples/jsm/loaders/VOXLoader.js +660 -117
- package/examples/jsm/loaders/VRMLLoader.js +79 -2
- package/examples/jsm/loaders/VTKLoader.js +42 -25
- package/examples/jsm/loaders/collada/ColladaComposer.js +3044 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1977 -0
- package/examples/jsm/loaders/usd/USDAParser.js +450 -363
- package/examples/jsm/loaders/usd/USDCParser.js +1867 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4594 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/materials/WoodNodeMaterial.js +11 -11
- package/examples/jsm/math/Octree.js +131 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +2 -0
- package/examples/jsm/misc/RollerCoaster.js +42 -4
- package/examples/jsm/misc/Volume.js +0 -1
- package/examples/jsm/misc/VolumeSlice.js +0 -1
- package/examples/jsm/modifiers/TessellateModifier.js +1 -1
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Reflector.js +73 -25
- package/examples/jsm/objects/Sky.js +90 -6
- package/examples/jsm/objects/SkyMesh.js +150 -16
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/AmmoPhysics.js +12 -7
- package/examples/jsm/physics/JoltPhysics.js +10 -6
- package/examples/jsm/physics/RapierPhysics.js +9 -5
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/OutputPass.js +9 -0
- package/examples/jsm/postprocessing/RenderPass.js +10 -0
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +48 -18
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/Projector.js +246 -28
- package/examples/jsm/renderers/SVGRenderer.js +174 -60
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -4
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/AST.js +44 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +63 -6
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -0
- package/examples/jsm/transpiler/TSLEncoder.js +46 -3
- package/examples/jsm/transpiler/TranspilerUtils.js +3 -3
- package/examples/jsm/transpiler/WGSLEncoder.js +27 -0
- package/examples/jsm/tsl/WebGLNodesHandler.js +605 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +11 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +458 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +12 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +374 -0
- package/examples/jsm/tsl/display/BloomNode.js +16 -6
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +3 -36
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FSR1Node.js +477 -0
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +6 -4
- package/examples/jsm/tsl/display/GaussianBlurNode.js +21 -2
- package/examples/jsm/tsl/display/GodraysNode.js +615 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +69 -19
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +7 -6
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +8 -24
- package/examples/jsm/tsl/display/SSRNode.js +8 -8
- package/examples/jsm/tsl/display/SSSNode.js +6 -4
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SharpenNode.js +283 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +8 -1
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TAAUNode.js +835 -0
- package/examples/jsm/tsl/display/TRAANode.js +315 -126
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/DynamicLightsNode.js +300 -0
- package/examples/jsm/tsl/lighting/data/AmbientLightDataNode.js +61 -0
- package/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.js +111 -0
- package/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.js +99 -0
- package/examples/jsm/tsl/lighting/data/PointLightDataNode.js +134 -0
- package/examples/jsm/tsl/lighting/data/SpotLightDataNode.js +161 -0
- package/examples/jsm/tsl/math/Bayer.js +53 -3
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -3
- package/examples/jsm/utils/ColorUtils.js +76 -0
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/examples/jsm/utils/ShadowMapViewer.js +24 -10
- package/examples/jsm/utils/ShadowMapViewerGPU.js +1 -1
- package/examples/jsm/utils/SkeletonUtils.js +14 -8
- package/examples/jsm/utils/WebGPUTextureUtils.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +36 -10
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -1
- package/package.json +24 -30
- package/src/Three.Core.js +3 -1
- package/src/Three.TSL.js +25 -11
- package/src/Three.WebGPU.Nodes.js +5 -0
- package/src/Three.WebGPU.js +9 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +12 -2
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/AnimationUtils.js +1 -12
- package/src/animation/KeyframeTrack.js +47 -8
- package/src/animation/PropertyMixer.js +4 -4
- package/src/animation/tracks/BooleanKeyframeTrack.js +1 -1
- package/src/animation/tracks/ColorKeyframeTrack.js +1 -1
- package/src/animation/tracks/NumberKeyframeTrack.js +1 -1
- package/src/animation/tracks/QuaternionKeyframeTrack.js +1 -1
- package/src/animation/tracks/StringKeyframeTrack.js +1 -1
- package/src/animation/tracks/VectorKeyframeTrack.js +1 -1
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioContext.js +2 -2
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +90 -5
- package/src/core/BufferAttribute.js +13 -1
- package/src/core/BufferGeometry.js +14 -2
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +52 -4
- package/src/core/Raycaster.js +2 -2
- package/src/core/RenderTarget.js +4 -4
- package/src/extras/PMREMGenerator.js +7 -18
- package/src/extras/TextureUtils.js +5 -1
- package/src/extras/curves/CatmullRomCurve3.js +3 -2
- package/src/geometries/ExtrudeGeometry.js +2 -2
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +1 -25
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/DirectionalLight.js +13 -0
- package/src/lights/HemisphereLight.js +10 -0
- package/src/lights/Light.js +1 -11
- package/src/lights/LightProbe.js +0 -15
- package/src/lights/LightShadow.js +15 -6
- package/src/lights/PointLight.js +15 -0
- package/src/lights/PointLightShadow.js +0 -86
- package/src/lights/SpotLight.js +22 -1
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/AudioLoader.js +11 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/DataTextureLoader.js +6 -4
- package/src/loaders/FileLoader.js +2 -3
- package/src/loaders/ImageBitmapLoader.js +12 -9
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +46 -6
- package/src/loaders/nodes/NodeLoader.js +2 -2
- package/src/loaders/nodes/NodeObjectLoader.js +18 -0
- package/src/materials/Material.js +2 -0
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/MeshToonMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +20 -1
- package/src/materials/nodes/Line2NodeMaterial.js +34 -7
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +5 -2
- package/src/materials/nodes/MeshStandardNodeMaterial.js +5 -4
- package/src/materials/nodes/NodeMaterial.js +45 -25
- package/src/materials/nodes/manager/NodeMaterialObserver.js +191 -86
- package/src/math/Line3.js +6 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix2.js +13 -9
- package/src/math/Matrix3.js +13 -9
- package/src/math/Matrix4.js +87 -74
- package/src/math/Plane.js +4 -3
- package/src/math/Quaternion.js +3 -29
- package/src/math/Sphere.js +1 -1
- package/src/math/Triangle.js +1 -1
- package/src/math/Vector2.js +11 -7
- package/src/math/Vector3.js +15 -13
- package/src/math/Vector4.js +13 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +86 -68
- package/src/nodes/TSL.js +7 -7
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/BatchNode.js +10 -10
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +107 -15
- package/src/nodes/accessors/BufferNode.js +29 -2
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +27 -2
- package/src/nodes/accessors/InstanceNode.js +148 -43
- package/src/nodes/accessors/MaterialNode.js +9 -1
- package/src/nodes/accessors/MaterialProperties.js +2 -5
- package/src/nodes/accessors/MaterialReferenceNode.js +1 -2
- package/src/nodes/accessors/ModelNode.js +1 -1
- package/src/nodes/accessors/Normal.js +11 -11
- package/src/nodes/accessors/Object3DNode.js +1 -1
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/ReferenceBaseNode.js +6 -6
- package/src/nodes/accessors/ReferenceNode.js +8 -8
- package/src/nodes/accessors/RendererReferenceNode.js +1 -2
- package/src/nodes/accessors/SceneProperties.js +47 -0
- package/src/nodes/accessors/SkinningNode.js +27 -26
- package/src/nodes/accessors/StorageBufferNode.js +14 -25
- package/src/nodes/accessors/StorageTextureNode.js +40 -9
- package/src/nodes/accessors/Tangent.js +4 -14
- package/src/nodes/accessors/Texture3DNode.js +32 -35
- package/src/nodes/accessors/TextureNode.js +67 -23
- package/src/nodes/accessors/UniformArrayNode.js +6 -4
- package/src/nodes/accessors/UserDataNode.js +1 -2
- package/src/nodes/accessors/VertexColorNode.js +1 -2
- package/src/nodes/code/FunctionCallNode.js +1 -1
- package/src/nodes/code/FunctionNode.js +2 -3
- package/src/nodes/core/ArrayNode.js +21 -2
- package/src/nodes/core/AssignNode.js +3 -3
- package/src/nodes/core/AttributeNode.js +3 -3
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/ContextNode.js +104 -5
- package/src/nodes/core/IndexNode.js +2 -1
- package/src/nodes/core/InputNode.js +1 -1
- package/src/nodes/core/InspectorNode.js +1 -1
- package/src/nodes/core/IsolateNode.js +1 -1
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +112 -15
- package/src/nodes/core/NodeBuilder.js +284 -66
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +12 -4
- package/src/nodes/core/NodeUtils.js +11 -9
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +4 -4
- package/src/nodes/core/PropertyNode.js +19 -3
- package/src/nodes/core/StackNode.js +66 -17
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +17 -3
- package/src/nodes/core/StructTypeNode.js +12 -18
- package/src/nodes/core/SubBuildNode.js +2 -2
- package/src/nodes/core/UniformGroupNode.js +36 -6
- package/src/nodes/core/UniformNode.js +21 -5
- package/src/nodes/core/VarNode.js +48 -23
- package/src/nodes/core/VaryingNode.js +2 -19
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +39 -4
- package/src/nodes/display/PassNode.js +125 -16
- package/src/nodes/display/RenderOutputNode.js +7 -7
- package/src/nodes/display/ScreenNode.js +4 -2
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportDepthTextureNode.js +11 -15
- package/src/nodes/display/ViewportTextureNode.js +39 -11
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +3 -3
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/PhysicalLightingModel.js +126 -45
- package/src/nodes/geometry/RangeNode.js +5 -3
- package/src/nodes/gpgpu/AtomicFunctionNode.js +1 -1
- package/src/nodes/gpgpu/BarrierNode.js +9 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -3
- package/src/nodes/gpgpu/ComputeNode.js +74 -48
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +2 -2
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +4 -4
- package/src/nodes/lighting/AnalyticLightNode.js +53 -0
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/LightsNode.js +7 -28
- package/src/nodes/lighting/PointShadowNode.js +162 -149
- package/src/nodes/lighting/ShadowFilterNode.js +53 -65
- package/src/nodes/lighting/ShadowNode.js +120 -42
- package/src/nodes/math/BitcastNode.js +1 -1
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +3 -3
- package/src/nodes/math/MathNode.js +76 -41
- package/src/nodes/math/OperatorNode.js +3 -2
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/pmrem/PMREMNode.js +1 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLBase.js +1 -1
- package/src/nodes/tsl/TSLCore.js +38 -17
- package/src/nodes/utils/ArrayElementNode.js +14 -1
- package/src/nodes/utils/ConvertNode.js +1 -1
- package/src/nodes/utils/DebugNode.js +12 -12
- package/src/nodes/utils/EventNode.js +31 -2
- package/src/nodes/utils/FlipNode.js +1 -1
- package/src/nodes/utils/FunctionOverloadingNode.js +1 -1
- package/src/nodes/utils/JoinNode.js +3 -3
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Packing.js +13 -1
- package/src/nodes/utils/PostProcessingUtils.js +33 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +3 -4
- package/src/nodes/utils/Remap.js +48 -0
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SampleNode.js +1 -1
- package/src/nodes/utils/SetNode.js +1 -1
- package/src/nodes/utils/SplitNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +28 -0
- package/src/objects/BatchedMesh.js +44 -16
- package/src/objects/InstancedMesh.js +30 -3
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Skeleton.js +9 -0
- package/src/objects/SkinnedMesh.js +26 -9
- package/src/renderers/WebGLRenderer.js +329 -145
- package/src/renderers/common/Animation.js +3 -3
- package/src/renderers/common/Attributes.js +15 -1
- package/src/renderers/common/Backend.js +29 -8
- package/src/renderers/common/Background.js +26 -13
- package/src/renderers/common/BindGroup.js +1 -16
- package/src/renderers/common/Binding.js +11 -0
- package/src/renderers/common/Bindings.js +29 -14
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +40 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/ChainMap.js +30 -6
- package/src/renderers/common/ComputePipeline.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +51 -7
- package/src/renderers/common/Geometries.js +29 -3
- package/src/renderers/common/Info.js +333 -4
- package/src/renderers/common/InspectorBase.js +6 -1
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +40 -7
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/ReadbackBuffer.js +78 -0
- package/src/renderers/common/RenderBundle.js +3 -1
- package/src/renderers/common/RenderBundles.js +7 -3
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -49
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +17 -5
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +21 -5
- package/src/renderers/common/RenderPipeline.js +232 -17
- package/src/renderers/common/Renderer.js +481 -117
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +89 -4
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +62 -1
- package/src/renderers/common/XRManager.js +37 -29
- package/src/renderers/common/extras/PMREMGenerator.js +25 -23
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +242 -99
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +52 -0
- package/src/renderers/shaders/DFGLUTData.js +19 -34
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +8 -12
- package/src/renderers/shaders/ShaderChunk/lightprobes_pars_fragment.glsl.js +80 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +13 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +2 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +112 -53
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +225 -186
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +12 -2
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +5 -3
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -0
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -6
- package/src/renderers/shaders/UniformsLib.js +7 -5
- package/src/renderers/shaders/UniformsUtils.js +27 -5
- package/src/renderers/webgl/WebGLAnimation.js +2 -1
- package/src/renderers/webgl/WebGLBackground.js +15 -15
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLCapabilities.js +9 -4
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +0 -32
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -13
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +270 -0
- package/src/renderers/webgl/WebGLProgram.js +49 -109
- package/src/renderers/webgl/WebGLPrograms.js +63 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLRenderStates.js +13 -2
- package/src/renderers/webgl/WebGLShadowMap.js +188 -24
- package/src/renderers/webgl/WebGLState.js +75 -37
- package/src/renderers/webgl/WebGLTextures.js +215 -54
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +19 -0
- package/src/renderers/webgl/WebGLUtils.js +6 -2
- package/src/renderers/webgl-fallback/WebGLBackend.js +253 -82
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +0 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +173 -74
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +53 -19
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +25 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +223 -6
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +68 -53
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +10 -10
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +6 -2
- package/src/renderers/webgpu/WebGPUBackend.js +260 -140
- package/src/renderers/webgpu/WebGPURenderer.js +2 -1
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +366 -90
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +107 -34
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +357 -200
- package/src/renderers/webgpu/utils/WebGPUCapabilities.js +48 -0
- package/src/renderers/webgpu/utils/WebGPUConstants.js +10 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +61 -23
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +156 -59
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +7 -7
- package/src/renderers/webgpu/utils/WebGPUUtils.js +33 -11
- package/src/renderers/webxr/WebXRController.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +4 -2
- package/src/textures/CubeDepthTexture.js +76 -0
- package/src/textures/HTMLTexture.js +74 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +16 -5
- package/src/utils.js +280 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -434
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -71
- package/src/nodes/utils/RemapNode.js +0 -125
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -14,7 +14,9 @@ import {
|
|
|
14
14
|
RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_ASTC_10x5_Format,
|
|
15
15
|
RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, UnsignedIntType, UnsignedShortType, UnsignedInt248Type, UnsignedInt5999Type,
|
|
16
16
|
NeverCompare, AlwaysCompare, LessCompare, LessEqualCompare, EqualCompare, GreaterEqualCompare, GreaterCompare, NotEqualCompare, IntType, RedIntegerFormat, RGIntegerFormat, RGBAIntegerFormat,
|
|
17
|
-
UnsignedInt101111Type, RGBA_BPTC_Format, RGB_ETC1_Format, RGB_S3TC_DXT1_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format
|
|
17
|
+
UnsignedInt101111Type, RGBA_BPTC_Format, RGB_ETC1_Format, RGB_S3TC_DXT1_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format,
|
|
18
|
+
R11_EAC_Format, SIGNED_R11_EAC_Format, RG11_EAC_Format, SIGNED_RG11_EAC_Format,
|
|
19
|
+
Compatibility
|
|
18
20
|
} from '../../../constants.js';
|
|
19
21
|
import { CubeTexture } from '../../../textures/CubeTexture.js';
|
|
20
22
|
import { Texture } from '../../../textures/Texture.js';
|
|
@@ -123,6 +125,15 @@ class WebGPUTextureUtils {
|
|
|
123
125
|
maxAnisotropy: 1
|
|
124
126
|
};
|
|
125
127
|
|
|
128
|
+
// Depth textures without compare function must use non-filtering (nearest) sampling
|
|
129
|
+
if ( texture.isDepthTexture && texture.compareFunction === null ) {
|
|
130
|
+
|
|
131
|
+
samplerDescriptorGPU.magFilter = GPUFilterMode.Nearest;
|
|
132
|
+
samplerDescriptorGPU.minFilter = GPUFilterMode.Nearest;
|
|
133
|
+
samplerDescriptorGPU.mipmapFilter = GPUFilterMode.Nearest;
|
|
134
|
+
|
|
135
|
+
}
|
|
136
|
+
|
|
126
137
|
// anisotropy can only be used when all filter modes are set to linear.
|
|
127
138
|
|
|
128
139
|
if ( samplerDescriptorGPU.magFilter === GPUFilterMode.Linear && samplerDescriptorGPU.minFilter === GPUFilterMode.Linear && samplerDescriptorGPU.mipmapFilter === GPUFilterMode.Linear ) {
|
|
@@ -131,7 +142,7 @@ class WebGPUTextureUtils {
|
|
|
131
142
|
|
|
132
143
|
}
|
|
133
144
|
|
|
134
|
-
if ( texture.isDepthTexture && texture.compareFunction !== null ) {
|
|
145
|
+
if ( texture.isDepthTexture && texture.compareFunction !== null && backend.hasCompatibility( Compatibility.TEXTURE_COMPARE ) ) {
|
|
135
146
|
|
|
136
147
|
samplerDescriptorGPU.compare = _compareToWebGPU[ texture.compareFunction ];
|
|
137
148
|
|
|
@@ -187,7 +198,7 @@ class WebGPUTextureUtils {
|
|
|
187
198
|
|
|
188
199
|
let textureGPU;
|
|
189
200
|
|
|
190
|
-
const format = getFormat( texture );
|
|
201
|
+
const format = getFormat( texture, this.backend.device );
|
|
191
202
|
|
|
192
203
|
if ( texture.isCubeTexture ) {
|
|
193
204
|
|
|
@@ -301,7 +312,17 @@ class WebGPUTextureUtils {
|
|
|
301
312
|
|
|
302
313
|
}
|
|
303
314
|
|
|
304
|
-
|
|
315
|
+
try {
|
|
316
|
+
|
|
317
|
+
textureData.texture = backend.device.createTexture( textureDescriptorGPU );
|
|
318
|
+
|
|
319
|
+
} catch ( e ) {
|
|
320
|
+
|
|
321
|
+
warn( 'WebGPURenderer: Failed to create texture with descriptor:', textureDescriptorGPU );
|
|
322
|
+
this.createDefaultTexture( texture );
|
|
323
|
+
return;
|
|
324
|
+
|
|
325
|
+
}
|
|
305
326
|
|
|
306
327
|
if ( isMSAA ) {
|
|
307
328
|
|
|
@@ -350,25 +371,7 @@ class WebGPUTextureUtils {
|
|
|
350
371
|
|
|
351
372
|
const textureData = this.backend.get( texture );
|
|
352
373
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
for ( let i = 0; i < 6; i ++ ) {
|
|
356
|
-
|
|
357
|
-
this._generateMipmaps( textureData.texture, textureData.textureDescriptorGPU, i, encoder );
|
|
358
|
-
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
} else {
|
|
362
|
-
|
|
363
|
-
const depth = texture.image.depth || 1;
|
|
364
|
-
|
|
365
|
-
for ( let i = 0; i < depth; i ++ ) {
|
|
366
|
-
|
|
367
|
-
this._generateMipmaps( textureData.texture, textureData.textureDescriptorGPU, i, encoder );
|
|
368
|
-
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
}
|
|
374
|
+
this._generateMipmaps( textureData.texture, encoder );
|
|
372
375
|
|
|
373
376
|
}
|
|
374
377
|
|
|
@@ -460,12 +463,12 @@ class WebGPUTextureUtils {
|
|
|
460
463
|
if ( stencil ) {
|
|
461
464
|
|
|
462
465
|
format = DepthStencilFormat;
|
|
463
|
-
type = UnsignedInt248Type;
|
|
466
|
+
type = backend.renderer.reversedDepthBuffer === true ? FloatType : UnsignedInt248Type;
|
|
464
467
|
|
|
465
468
|
} else if ( depth ) {
|
|
466
469
|
|
|
467
470
|
format = DepthFormat;
|
|
468
|
-
type = UnsignedIntType;
|
|
471
|
+
type = backend.renderer.reversedDepthBuffer === true ? FloatType : UnsignedIntType;
|
|
469
472
|
|
|
470
473
|
}
|
|
471
474
|
|
|
@@ -535,9 +538,23 @@ class WebGPUTextureUtils {
|
|
|
535
538
|
|
|
536
539
|
} else if ( texture.isArrayTexture || texture.isDataArrayTexture || texture.isData3DTexture ) {
|
|
537
540
|
|
|
538
|
-
|
|
541
|
+
if ( texture.layerUpdates && texture.layerUpdates.size > 0 ) {
|
|
542
|
+
|
|
543
|
+
for ( const layerIndex of texture.layerUpdates ) {
|
|
544
|
+
|
|
545
|
+
this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, layerIndex, texture.flipY, layerIndex );
|
|
546
|
+
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
texture.clearLayerUpdates();
|
|
539
550
|
|
|
540
|
-
|
|
551
|
+
} else {
|
|
552
|
+
|
|
553
|
+
for ( let i = 0; i < options.image.depth; i ++ ) {
|
|
554
|
+
|
|
555
|
+
this._copyBufferToTexture( options.image, textureData.texture, textureDescriptorGPU, i, texture.flipY, i );
|
|
556
|
+
|
|
557
|
+
}
|
|
541
558
|
|
|
542
559
|
}
|
|
543
560
|
|
|
@@ -549,6 +566,37 @@ class WebGPUTextureUtils {
|
|
|
549
566
|
|
|
550
567
|
this._copyCubeMapToTexture( texture, textureData.texture, textureDescriptorGPU );
|
|
551
568
|
|
|
569
|
+
} else if ( texture.isHTMLTexture ) {
|
|
570
|
+
|
|
571
|
+
const device = this.backend.device;
|
|
572
|
+
const canvas = this.backend.renderer.domElement;
|
|
573
|
+
const image = texture.image;
|
|
574
|
+
|
|
575
|
+
if ( typeof device.queue.copyElementImageToTexture !== 'function' ) return;
|
|
576
|
+
|
|
577
|
+
// Skip the first frame — the element needs a paint record first.
|
|
578
|
+
if ( ! textureData.hasPaintCallback ) {
|
|
579
|
+
|
|
580
|
+
textureData.hasPaintCallback = true;
|
|
581
|
+
canvas.requestPaint();
|
|
582
|
+
return;
|
|
583
|
+
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
const width = textureDescriptorGPU.size.width;
|
|
587
|
+
const height = textureDescriptorGPU.size.height;
|
|
588
|
+
|
|
589
|
+
device.queue.copyElementImageToTexture(
|
|
590
|
+
image, width, height,
|
|
591
|
+
{ texture: textureData.texture }
|
|
592
|
+
);
|
|
593
|
+
|
|
594
|
+
if ( texture.flipY ) {
|
|
595
|
+
|
|
596
|
+
this._flipY( textureData.texture, textureDescriptorGPU );
|
|
597
|
+
|
|
598
|
+
}
|
|
599
|
+
|
|
552
600
|
} else {
|
|
553
601
|
|
|
554
602
|
if ( mipmaps.length > 0 ) {
|
|
@@ -631,7 +679,9 @@ class WebGPUTextureUtils {
|
|
|
631
679
|
|
|
632
680
|
await readBuffer.mapAsync( GPUMapMode.READ );
|
|
633
681
|
|
|
634
|
-
const buffer = readBuffer.getMappedRange();
|
|
682
|
+
const buffer = readBuffer.getMappedRange().slice();
|
|
683
|
+
|
|
684
|
+
readBuffer.destroy();
|
|
635
685
|
|
|
636
686
|
return new typedArrayType( buffer );
|
|
637
687
|
|
|
@@ -682,7 +732,7 @@ class WebGPUTextureUtils {
|
|
|
682
732
|
*/
|
|
683
733
|
_getDefaultCubeTextureGPU( format ) {
|
|
684
734
|
|
|
685
|
-
let defaultCubeTexture = this.
|
|
735
|
+
let defaultCubeTexture = this.defaultCubeTexture[ format ];
|
|
686
736
|
|
|
687
737
|
if ( defaultCubeTexture === undefined ) {
|
|
688
738
|
|
|
@@ -770,21 +820,27 @@ class WebGPUTextureUtils {
|
|
|
770
820
|
const width = ( mipLevel > 0 ) ? image.width : textureDescriptorGPU.size.width;
|
|
771
821
|
const height = ( mipLevel > 0 ) ? image.height : textureDescriptorGPU.size.height;
|
|
772
822
|
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
823
|
+
try {
|
|
824
|
+
|
|
825
|
+
device.queue.copyExternalImageToTexture(
|
|
826
|
+
{
|
|
827
|
+
source: image,
|
|
828
|
+
flipY: flipY
|
|
829
|
+
}, {
|
|
830
|
+
texture: textureGPU,
|
|
831
|
+
mipLevel: mipLevel,
|
|
832
|
+
origin: { x: 0, y: 0, z: originDepth },
|
|
833
|
+
premultipliedAlpha: premultiplyAlpha
|
|
834
|
+
}, {
|
|
835
|
+
width: width,
|
|
836
|
+
height: height,
|
|
837
|
+
depthOrArrayLayers: 1
|
|
838
|
+
}
|
|
839
|
+
);
|
|
840
|
+
|
|
841
|
+
// try/catch has been added to fix bad video frame data on certain devices, see #32391
|
|
842
|
+
|
|
843
|
+
} catch ( _ ) {}
|
|
788
844
|
|
|
789
845
|
}
|
|
790
846
|
|
|
@@ -813,13 +869,11 @@ class WebGPUTextureUtils {
|
|
|
813
869
|
*
|
|
814
870
|
* @private
|
|
815
871
|
* @param {GPUTexture} textureGPU - The GPU texture object.
|
|
816
|
-
* @param {Object} textureDescriptorGPU - The texture descriptor.
|
|
817
|
-
* @param {number} [baseArrayLayer=0] - The index of the first array layer accessible to the texture view.
|
|
818
872
|
* @param {?GPUCommandEncoder} [encoder=null] - An optional command encoder used to generate mipmaps.
|
|
819
873
|
*/
|
|
820
|
-
_generateMipmaps( textureGPU,
|
|
874
|
+
_generateMipmaps( textureGPU, encoder = null ) {
|
|
821
875
|
|
|
822
|
-
this._getPassUtils().generateMipmaps( textureGPU,
|
|
876
|
+
this._getPassUtils().generateMipmaps( textureGPU, encoder );
|
|
823
877
|
|
|
824
878
|
}
|
|
825
879
|
|
|
@@ -1052,7 +1106,9 @@ class WebGPUTextureUtils {
|
|
|
1052
1106
|
format === GPUTextureFormat.RG8Unorm ||
|
|
1053
1107
|
format === GPUTextureFormat.RG8Snorm ||
|
|
1054
1108
|
format === GPUTextureFormat.RG8Uint ||
|
|
1055
|
-
format === GPUTextureFormat.RG8Sint
|
|
1109
|
+
format === GPUTextureFormat.RG8Sint ||
|
|
1110
|
+
format === GPUTextureFormat.R16Unorm ||
|
|
1111
|
+
format === GPUTextureFormat.R16Snorm ) return 2;
|
|
1056
1112
|
|
|
1057
1113
|
// 32-bit formats
|
|
1058
1114
|
if ( format === GPUTextureFormat.R32Uint ||
|
|
@@ -1068,6 +1124,8 @@ class WebGPUTextureUtils {
|
|
|
1068
1124
|
format === GPUTextureFormat.RGBA8Sint ||
|
|
1069
1125
|
format === GPUTextureFormat.BGRA8Unorm ||
|
|
1070
1126
|
format === GPUTextureFormat.BGRA8UnormSRGB ||
|
|
1127
|
+
format === GPUTextureFormat.RG16Unorm ||
|
|
1128
|
+
format === GPUTextureFormat.RG16Snorm ||
|
|
1071
1129
|
// Packed 32-bit formats
|
|
1072
1130
|
format === GPUTextureFormat.RGB9E5UFloat ||
|
|
1073
1131
|
format === GPUTextureFormat.RGB10A2Unorm ||
|
|
@@ -1083,7 +1141,9 @@ class WebGPUTextureUtils {
|
|
|
1083
1141
|
format === GPUTextureFormat.RG32Float ||
|
|
1084
1142
|
format === GPUTextureFormat.RGBA16Uint ||
|
|
1085
1143
|
format === GPUTextureFormat.RGBA16Sint ||
|
|
1086
|
-
format === GPUTextureFormat.RGBA16Float
|
|
1144
|
+
format === GPUTextureFormat.RGBA16Float ||
|
|
1145
|
+
format === GPUTextureFormat.RGBA16Unorm ||
|
|
1146
|
+
format === GPUTextureFormat.RGBA16Snorm ) return 8;
|
|
1087
1147
|
|
|
1088
1148
|
// 128-bit formats
|
|
1089
1149
|
if ( format === GPUTextureFormat.RGBA32Uint ||
|
|
@@ -1126,6 +1186,12 @@ class WebGPUTextureUtils {
|
|
|
1126
1186
|
if ( format === GPUTextureFormat.RG16Float ) return Uint16Array;
|
|
1127
1187
|
if ( format === GPUTextureFormat.RGBA16Float ) return Uint16Array;
|
|
1128
1188
|
|
|
1189
|
+
if ( format === GPUTextureFormat.R16Unorm ) return Uint16Array;
|
|
1190
|
+
if ( format === GPUTextureFormat.R16Snorm ) return Int16Array;
|
|
1191
|
+
if ( format === GPUTextureFormat.RG16Unorm ) return Uint16Array;
|
|
1192
|
+
if ( format === GPUTextureFormat.RG16Snorm ) return Int16Array;
|
|
1193
|
+
if ( format === GPUTextureFormat.RGBA16Unorm ) return Uint16Array;
|
|
1194
|
+
if ( format === GPUTextureFormat.RGBA16Snorm ) return Int16Array;
|
|
1129
1195
|
|
|
1130
1196
|
if ( format === GPUTextureFormat.R32Uint ) return Uint32Array;
|
|
1131
1197
|
if ( format === GPUTextureFormat.R32Sint ) return Int32Array;
|
|
@@ -1180,19 +1246,33 @@ class WebGPUTextureUtils {
|
|
|
1180
1246
|
* Returns the GPU format for the given texture.
|
|
1181
1247
|
*
|
|
1182
1248
|
* @param {Texture} texture - The texture.
|
|
1183
|
-
* @param {
|
|
1184
|
-
* It is not necessary to apply the device for most formats.
|
|
1249
|
+
* @param {GPUDevice} [device] - The GPU device which is used for feature detection.
|
|
1185
1250
|
* @return {string} The GPU format.
|
|
1186
1251
|
*/
|
|
1187
|
-
export function getFormat( texture, device
|
|
1252
|
+
export function getFormat( texture, device ) {
|
|
1188
1253
|
|
|
1189
1254
|
const format = texture.format;
|
|
1190
1255
|
const type = texture.type;
|
|
1256
|
+
const normalized = texture.normalized;
|
|
1191
1257
|
const colorSpace = texture.colorSpace;
|
|
1192
1258
|
const transfer = ColorManagement.getTransfer( colorSpace );
|
|
1193
1259
|
|
|
1194
1260
|
let formatGPU;
|
|
1195
1261
|
|
|
1262
|
+
let textureFormatsTier1 = false;
|
|
1263
|
+
|
|
1264
|
+
if ( normalized ) {
|
|
1265
|
+
|
|
1266
|
+
textureFormatsTier1 = device.features.has( GPUFeatureName.TextureFormatsTier1 );
|
|
1267
|
+
|
|
1268
|
+
if ( textureFormatsTier1 === false ) {
|
|
1269
|
+
|
|
1270
|
+
warn( 'WebGPURenderer: Unable to use normalized textures without texture-formats-tier1 feature.' );
|
|
1271
|
+
|
|
1272
|
+
}
|
|
1273
|
+
|
|
1274
|
+
}
|
|
1275
|
+
|
|
1196
1276
|
if ( texture.isCompressedTexture === true || texture.isCompressedArrayTexture === true ) {
|
|
1197
1277
|
|
|
1198
1278
|
switch ( format ) {
|
|
@@ -1239,6 +1319,22 @@ export function getFormat( texture, device = null ) {
|
|
|
1239
1319
|
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ETC2RGBA8UnormSRGB : GPUTextureFormat.ETC2RGBA8Unorm;
|
|
1240
1320
|
break;
|
|
1241
1321
|
|
|
1322
|
+
case R11_EAC_Format:
|
|
1323
|
+
formatGPU = GPUTextureFormat.EACR11Unorm;
|
|
1324
|
+
break;
|
|
1325
|
+
|
|
1326
|
+
case SIGNED_R11_EAC_Format:
|
|
1327
|
+
formatGPU = GPUTextureFormat.EACR11Snorm;
|
|
1328
|
+
break;
|
|
1329
|
+
|
|
1330
|
+
case RG11_EAC_Format:
|
|
1331
|
+
formatGPU = GPUTextureFormat.EACRG11Unorm;
|
|
1332
|
+
break;
|
|
1333
|
+
|
|
1334
|
+
case SIGNED_RG11_EAC_Format:
|
|
1335
|
+
formatGPU = GPUTextureFormat.EACRG11Snorm;
|
|
1336
|
+
break;
|
|
1337
|
+
|
|
1242
1338
|
case RGBA_ASTC_4x4_Format:
|
|
1243
1339
|
formatGPU = ( transfer === SRGBTransfer ) ? GPUTextureFormat.ASTC4x4UnormSRGB : GPUTextureFormat.ASTC4x4Unorm;
|
|
1244
1340
|
break;
|
|
@@ -1317,12 +1413,13 @@ export function getFormat( texture, device = null ) {
|
|
|
1317
1413
|
break;
|
|
1318
1414
|
|
|
1319
1415
|
case ShortType:
|
|
1320
|
-
formatGPU = GPUTextureFormat.RGBA16Sint;
|
|
1416
|
+
formatGPU = textureFormatsTier1 ? GPUTextureFormat.RGBA16Snorm : GPUTextureFormat.RGBA16Sint;
|
|
1321
1417
|
break;
|
|
1322
1418
|
|
|
1323
1419
|
case UnsignedShortType:
|
|
1324
|
-
formatGPU = GPUTextureFormat.RGBA16Uint;
|
|
1420
|
+
formatGPU = textureFormatsTier1 ? GPUTextureFormat.RGBA16Unorm : GPUTextureFormat.RGBA16Uint;
|
|
1325
1421
|
break;
|
|
1422
|
+
|
|
1326
1423
|
case UnsignedIntType:
|
|
1327
1424
|
formatGPU = GPUTextureFormat.RGBA32Uint;
|
|
1328
1425
|
break;
|
|
@@ -1378,11 +1475,11 @@ export function getFormat( texture, device = null ) {
|
|
|
1378
1475
|
break;
|
|
1379
1476
|
|
|
1380
1477
|
case ShortType:
|
|
1381
|
-
formatGPU = GPUTextureFormat.R16Sint;
|
|
1478
|
+
formatGPU = textureFormatsTier1 ? GPUTextureFormat.R16Snorm : GPUTextureFormat.R16Sint;
|
|
1382
1479
|
break;
|
|
1383
1480
|
|
|
1384
1481
|
case UnsignedShortType:
|
|
1385
|
-
formatGPU = GPUTextureFormat.R16Uint;
|
|
1482
|
+
formatGPU = textureFormatsTier1 ? GPUTextureFormat.R16Unorm : GPUTextureFormat.R16Uint;
|
|
1386
1483
|
break;
|
|
1387
1484
|
|
|
1388
1485
|
case UnsignedIntType:
|
|
@@ -1421,11 +1518,11 @@ export function getFormat( texture, device = null ) {
|
|
|
1421
1518
|
break;
|
|
1422
1519
|
|
|
1423
1520
|
case ShortType:
|
|
1424
|
-
formatGPU = GPUTextureFormat.RG16Sint;
|
|
1521
|
+
formatGPU = textureFormatsTier1 ? GPUTextureFormat.RG16Snorm : GPUTextureFormat.RG16Sint;
|
|
1425
1522
|
break;
|
|
1426
1523
|
|
|
1427
1524
|
case UnsignedShortType:
|
|
1428
|
-
formatGPU = GPUTextureFormat.RG16Uint;
|
|
1525
|
+
formatGPU = textureFormatsTier1 ? GPUTextureFormat.RG16Unorm : GPUTextureFormat.RG16Uint;
|
|
1429
1526
|
break;
|
|
1430
1527
|
|
|
1431
1528
|
case UnsignedIntType:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { warnOnce } from '../../../utils.js';
|
|
1
|
+
import { error, warnOnce } from '../../../utils.js';
|
|
2
2
|
import TimestampQueryPool from '../../common/TimestampQueryPool.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -217,9 +217,9 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
|
|
|
217
217
|
|
|
218
218
|
return totalDuration;
|
|
219
219
|
|
|
220
|
-
} catch (
|
|
220
|
+
} catch ( e ) {
|
|
221
221
|
|
|
222
|
-
error( 'Error resolving queries:',
|
|
222
|
+
error( 'Error resolving queries:', e );
|
|
223
223
|
if ( this.resultBuffer.mapState === 'mapped' ) {
|
|
224
224
|
|
|
225
225
|
this.resultBuffer.unmap();
|
|
@@ -255,9 +255,9 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
|
|
|
255
255
|
|
|
256
256
|
await this.pendingResolve;
|
|
257
257
|
|
|
258
|
-
} catch (
|
|
258
|
+
} catch ( e ) {
|
|
259
259
|
|
|
260
|
-
error( 'Error waiting for pending resolve:',
|
|
260
|
+
error( 'Error waiting for pending resolve:', e );
|
|
261
261
|
|
|
262
262
|
}
|
|
263
263
|
|
|
@@ -270,9 +270,9 @@ class WebGPUTimestampQueryPool extends TimestampQueryPool {
|
|
|
270
270
|
|
|
271
271
|
this.resultBuffer.unmap();
|
|
272
272
|
|
|
273
|
-
} catch (
|
|
273
|
+
} catch ( e ) {
|
|
274
274
|
|
|
275
|
-
error( 'Error unmapping buffer:',
|
|
275
|
+
error( 'Error unmapping buffer:', e );
|
|
276
276
|
|
|
277
277
|
}
|
|
278
278
|
|
|
@@ -34,17 +34,37 @@ class WebGPUUtils {
|
|
|
34
34
|
|
|
35
35
|
let format;
|
|
36
36
|
|
|
37
|
-
if ( renderContext.
|
|
37
|
+
if ( renderContext.depth ) {
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
if ( renderContext.depthTexture !== null ) {
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
format = this.getTextureFormatGPU( renderContext.depthTexture );
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
} else if ( renderContext.stencil ) {
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
if ( this.backend.renderer.reversedDepthBuffer === true ) {
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
format = GPUTextureFormat.Depth32FloatStencil8;
|
|
48
|
+
|
|
49
|
+
} else {
|
|
50
|
+
|
|
51
|
+
format = GPUTextureFormat.Depth24PlusStencil8;
|
|
52
|
+
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
} else {
|
|
56
|
+
|
|
57
|
+
if ( this.backend.renderer.reversedDepthBuffer === true ) {
|
|
58
|
+
|
|
59
|
+
format = GPUTextureFormat.Depth32Float;
|
|
60
|
+
|
|
61
|
+
} else {
|
|
62
|
+
|
|
63
|
+
format = GPUTextureFormat.Depth24Plus;
|
|
64
|
+
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
}
|
|
48
68
|
|
|
49
69
|
}
|
|
50
70
|
|
|
@@ -220,23 +240,25 @@ class WebGPUUtils {
|
|
|
220
240
|
*/
|
|
221
241
|
getPreferredCanvasFormat() {
|
|
222
242
|
|
|
223
|
-
const
|
|
243
|
+
const parameters = this.backend.parameters;
|
|
244
|
+
|
|
245
|
+
const bufferType = parameters.outputType;
|
|
224
246
|
|
|
225
|
-
if (
|
|
247
|
+
if ( bufferType === undefined ) {
|
|
226
248
|
|
|
227
249
|
return navigator.gpu.getPreferredCanvasFormat();
|
|
228
250
|
|
|
229
|
-
} else if (
|
|
251
|
+
} else if ( bufferType === UnsignedByteType ) {
|
|
230
252
|
|
|
231
253
|
return GPUTextureFormat.BGRA8Unorm;
|
|
232
254
|
|
|
233
|
-
} else if (
|
|
255
|
+
} else if ( bufferType === HalfFloatType ) {
|
|
234
256
|
|
|
235
257
|
return GPUTextureFormat.RGBA16Float;
|
|
236
258
|
|
|
237
259
|
} else {
|
|
238
260
|
|
|
239
|
-
throw new Error( 'Unsupported
|
|
261
|
+
throw new Error( 'Unsupported output buffer type.' );
|
|
240
262
|
|
|
241
263
|
}
|
|
242
264
|
|
|
@@ -109,6 +109,7 @@ class WebXRController {
|
|
|
109
109
|
this._grip.linearVelocity = new Vector3();
|
|
110
110
|
this._grip.hasAngularVelocity = false;
|
|
111
111
|
this._grip.angularVelocity = new Vector3();
|
|
112
|
+
this._grip.eventsEnabled = false;
|
|
112
113
|
|
|
113
114
|
}
|
|
114
115
|
|
|
@@ -321,6 +322,17 @@ class WebXRController {
|
|
|
321
322
|
|
|
322
323
|
}
|
|
323
324
|
|
|
325
|
+
// grip update event if enabled
|
|
326
|
+
if ( grip.eventsEnabled ) {
|
|
327
|
+
|
|
328
|
+
grip.dispatchEvent( {
|
|
329
|
+
type: 'gripUpdated',
|
|
330
|
+
data: inputSource,
|
|
331
|
+
target: this
|
|
332
|
+
} );
|
|
333
|
+
|
|
334
|
+
}
|
|
335
|
+
|
|
324
336
|
}
|
|
325
337
|
|
|
326
338
|
}
|
|
@@ -31,6 +31,8 @@ class WebXRManager extends EventDispatcher {
|
|
|
31
31
|
*
|
|
32
32
|
* @param {WebGLRenderer} renderer - The renderer.
|
|
33
33
|
* @param {WebGL2RenderingContext} gl - The rendering context.
|
|
34
|
+
* @param {WebGLExtensions} extensions - The WebGL extensions helper.
|
|
35
|
+
* @param {boolean} useMultiview - Whether to enable OCULUS_multiview when available.
|
|
34
36
|
*/
|
|
35
37
|
constructor( renderer, gl, extensions, useMultiview ) {
|
|
36
38
|
|
|
@@ -815,8 +817,8 @@ class WebXRManager extends EventDispatcher {
|
|
|
815
817
|
|
|
816
818
|
// inherit camera layers and enable eye layers (1 = left, 2 = right)
|
|
817
819
|
cameraXR.layers.mask = camera.layers.mask | 0b110;
|
|
818
|
-
cameraL.layers.mask = cameraXR.layers.mask &
|
|
819
|
-
cameraR.layers.mask = cameraXR.layers.mask &
|
|
820
|
+
cameraL.layers.mask = cameraXR.layers.mask & ~ 0b100;
|
|
821
|
+
cameraR.layers.mask = cameraXR.layers.mask & ~ 0b010;
|
|
820
822
|
|
|
821
823
|
const cameras = cameraXR.cameras;
|
|
822
824
|
var object = poseTarget || camera;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { DepthTexture } from './DepthTexture.js';
|
|
2
|
+
import { CubeReflectionMapping, NearestFilter, UnsignedIntType, DepthFormat } from '../constants.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* This class can be used to automatically save the depth information of a
|
|
6
|
+
* cube rendering into a cube texture with depth format. Used for PointLight shadows.
|
|
7
|
+
*
|
|
8
|
+
* @augments DepthTexture
|
|
9
|
+
*/
|
|
10
|
+
class CubeDepthTexture extends DepthTexture {
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Constructs a new cube depth texture.
|
|
14
|
+
*
|
|
15
|
+
* @param {number} size - The size (width and height) of each cube face.
|
|
16
|
+
* @param {number} [type=UnsignedIntType] - The texture type.
|
|
17
|
+
* @param {number} [mapping=CubeReflectionMapping] - The texture mapping.
|
|
18
|
+
* @param {number} [wrapS=ClampToEdgeWrapping] - The wrapS value.
|
|
19
|
+
* @param {number} [wrapT=ClampToEdgeWrapping] - The wrapT value.
|
|
20
|
+
* @param {number} [magFilter=NearestFilter] - The mag filter value.
|
|
21
|
+
* @param {number} [minFilter=NearestFilter] - The min filter value.
|
|
22
|
+
* @param {number} [anisotropy=Texture.DEFAULT_ANISOTROPY] - The anisotropy value.
|
|
23
|
+
* @param {number} [format=DepthFormat] - The texture format.
|
|
24
|
+
*/
|
|
25
|
+
constructor( size, type = UnsignedIntType, mapping = CubeReflectionMapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, format = DepthFormat ) {
|
|
26
|
+
|
|
27
|
+
// Create 6 identical image descriptors for the cube faces
|
|
28
|
+
const image = { width: size, height: size, depth: 1 };
|
|
29
|
+
const images = [ image, image, image, image, image, image ];
|
|
30
|
+
|
|
31
|
+
// Call DepthTexture constructor with width, height
|
|
32
|
+
super( size, size, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format );
|
|
33
|
+
|
|
34
|
+
// Replace the single image with the array of 6 images
|
|
35
|
+
this.image = images;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* This flag can be used for type testing.
|
|
39
|
+
*
|
|
40
|
+
* @type {boolean}
|
|
41
|
+
* @readonly
|
|
42
|
+
* @default true
|
|
43
|
+
*/
|
|
44
|
+
this.isCubeDepthTexture = true;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Set to true for cube texture handling in WebGLTextures.
|
|
48
|
+
*
|
|
49
|
+
* @type {boolean}
|
|
50
|
+
* @readonly
|
|
51
|
+
* @default true
|
|
52
|
+
*/
|
|
53
|
+
this.isCubeTexture = true;
|
|
54
|
+
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Alias for {@link CubeDepthTexture#image}.
|
|
59
|
+
*
|
|
60
|
+
* @type {Array<Image>}
|
|
61
|
+
*/
|
|
62
|
+
get images() {
|
|
63
|
+
|
|
64
|
+
return this.image;
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
set images( value ) {
|
|
69
|
+
|
|
70
|
+
this.image = value;
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export { CubeDepthTexture };
|