super-three 0.167.0 → 0.169.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +532 -173
- package/build/three.module.js +532 -174
- package/build/three.module.min.js +1 -1
- package/build/three.webgpu.js +18173 -14266
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +79941 -0
- package/build/three.webgpu.nodes.min.js +6 -0
- package/examples/jsm/Addons.js +0 -4
- package/examples/jsm/animation/AnimationClipCreator.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +27 -21
- package/examples/jsm/controls/ArcballControls.js +174 -158
- package/examples/jsm/controls/DragControls.js +260 -132
- package/examples/jsm/controls/FirstPersonControls.js +175 -163
- package/examples/jsm/controls/FlyControls.js +194 -188
- package/examples/jsm/controls/OrbitControls.js +777 -786
- package/examples/jsm/controls/PointerLockControls.js +24 -15
- package/examples/jsm/controls/TrackballControls.js +469 -448
- package/examples/jsm/controls/TransformControls.js +97 -62
- package/examples/jsm/effects/AnaglyphEffect.js +6 -13
- package/examples/jsm/effects/ParallaxBarrierEffect.js +17 -11
- package/examples/jsm/effects/StereoEffect.js +6 -1
- package/examples/jsm/environments/RoomEnvironment.js +1 -1
- package/examples/jsm/exporters/DRACOExporter.js +4 -2
- package/examples/jsm/exporters/EXRExporter.js +19 -11
- package/examples/jsm/exporters/GLTFExporter.js +6 -1
- package/examples/jsm/exporters/KTX2Exporter.js +21 -13
- package/examples/jsm/exporters/OBJExporter.js +5 -1
- package/examples/jsm/exporters/PLYExporter.js +9 -7
- package/examples/jsm/exporters/USDZExporter.js +29 -8
- package/examples/jsm/geometries/DecalGeometry.js +4 -1
- package/examples/jsm/geometries/InstancedPointsGeometry.js +1 -1
- package/examples/jsm/helpers/LightProbeHelper.js +43 -44
- package/examples/jsm/helpers/LightProbeHelperGPU.js +65 -0
- package/examples/jsm/libs/basis/basis_transcoder.js +8 -10
- package/examples/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/examples/jsm/libs/ktx-parse.module.js +1 -1
- package/examples/jsm/lights/LightProbeGenerator.js +24 -10
- package/examples/jsm/loaders/ColladaLoader.js +9 -6
- package/examples/jsm/loaders/DRACOLoader.js +3 -1
- package/examples/jsm/loaders/FBXLoader.js +30 -20
- package/examples/jsm/loaders/GLTFLoader.js +5 -10
- package/examples/jsm/loaders/KTX2Loader.js +27 -12
- package/examples/jsm/loaders/MTLLoader.js +4 -3
- package/examples/jsm/loaders/MaterialXLoader.js +40 -14
- package/examples/jsm/loaders/OBJLoader.js +5 -3
- package/examples/jsm/loaders/PCDLoader.js +14 -13
- package/examples/jsm/loaders/PDBLoader.js +3 -2
- package/examples/jsm/loaders/PLYLoader.js +8 -5
- package/examples/jsm/loaders/STLLoader.js +3 -2
- package/examples/jsm/loaders/VRMLLoader.js +10 -10
- package/examples/jsm/loaders/VTKLoader.js +4 -3
- package/examples/jsm/loaders/XYZLoader.js +3 -2
- package/examples/jsm/misc/Timer.js +1 -1
- package/examples/jsm/modifiers/CurveModifierGPU.js +233 -0
- package/examples/jsm/objects/LensflareMesh.js +322 -0
- package/examples/jsm/objects/SkyMesh.js +187 -0
- package/examples/jsm/objects/Water2Mesh.js +158 -0
- package/examples/jsm/objects/WaterMesh.js +101 -0
- package/examples/jsm/physics/JoltPhysics.js +1 -1
- package/examples/jsm/physics/RapierPhysics.js +21 -1
- package/examples/jsm/postprocessing/OutlinePass.js +31 -46
- package/examples/jsm/postprocessing/SSAARenderPass.js +3 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -2
- package/examples/jsm/shaders/OutputShader.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +2 -2
- package/examples/jsm/transpiler/TSLEncoder.js +8 -8
- package/examples/jsm/utils/GeometryCompressionUtils.js +37 -122
- package/examples/jsm/utils/ShadowMapViewer.js +3 -8
- package/examples/jsm/utils/ShadowMapViewerGPU.js +201 -0
- package/examples/jsm/utils/SkeletonUtils.js +84 -66
- package/examples/jsm/utils/TextureUtils.js +2 -1
- package/examples/jsm/utils/TextureUtilsGPU.js +63 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/package.json +3 -2
- package/src/Three.WebGPU.Nodes.js +200 -0
- package/src/Three.WebGPU.js +7 -0
- package/src/Three.js +1 -0
- package/src/audio/Audio.js +2 -2
- package/src/constants.js +1 -1
- package/src/core/BufferAttribute.js +0 -9
- package/src/core/Clock.js +1 -1
- package/src/core/InterleavedBuffer.js +0 -9
- package/src/extras/Controls.js +32 -0
- package/src/geometries/CylinderGeometry.js +11 -4
- package/src/loaders/MaterialLoader.js +7 -1
- package/src/loaders/ObjectLoader.js +3 -3
- package/src/{nodes/loaders → loaders/nodes}/NodeLoader.js +25 -5
- package/src/{nodes/loaders → loaders/nodes}/NodeMaterialLoader.js +21 -18
- package/src/{nodes/loaders → loaders/nodes}/NodeObjectLoader.js +19 -0
- package/src/materials/Material.js +4 -7
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +156 -0
- package/src/{nodes/materials → materials/nodes}/Line2NodeMaterial.js +56 -59
- package/src/{nodes/materials → materials/nodes}/LineBasicNodeMaterial.js +8 -5
- package/src/{nodes/materials → materials/nodes}/LineDashedNodeMaterial.js +12 -10
- package/src/{nodes/materials → materials/nodes}/MeshBasicNodeMaterial.js +16 -12
- package/src/{nodes/materials → materials/nodes}/MeshLambertNodeMaterial.js +10 -6
- package/src/{nodes/materials → materials/nodes}/MeshMatcapNodeMaterial.js +13 -9
- package/src/{nodes/materials → materials/nodes}/MeshNormalNodeMaterial.js +13 -9
- package/src/{nodes/materials → materials/nodes}/MeshPhongNodeMaterial.js +14 -9
- package/src/{nodes/materials → materials/nodes}/MeshPhysicalNodeMaterial.js +22 -18
- package/src/{nodes/materials → materials/nodes}/MeshSSSNodeMaterial.js +10 -7
- package/src/{nodes/materials → materials/nodes}/MeshStandardNodeMaterial.js +22 -12
- package/src/{nodes/materials → materials/nodes}/MeshToonNodeMaterial.js +9 -5
- package/src/{nodes/materials → materials/nodes}/NodeMaterial.js +71 -115
- package/src/{nodes/materials/Materials.js → materials/nodes/NodeMaterials.js} +3 -1
- package/src/{nodes/materials → materials/nodes}/PointsNodeMaterial.js +8 -5
- package/src/{nodes/materials → materials/nodes}/ShadowNodeMaterial.js +9 -5
- package/src/{nodes/materials → materials/nodes}/SpriteNodeMaterial.js +47 -14
- package/src/{nodes/materials → materials/nodes}/VolumeNodeMaterial.js +24 -22
- package/src/materials/nodes/manager/NodeMaterialObserver.js +302 -0
- package/src/math/Triangle.js +24 -0
- package/src/nodes/Nodes.js +103 -159
- package/src/nodes/TSL.js +179 -0
- package/src/nodes/accessors/AccessorsUtils.js +8 -8
- package/src/nodes/accessors/BatchNode.js +53 -21
- package/src/nodes/accessors/{BitangentNode.js → Bitangent.js} +9 -9
- package/src/nodes/accessors/BufferAttributeNode.js +8 -5
- package/src/nodes/accessors/BufferNode.js +7 -4
- package/src/nodes/accessors/Camera.js +13 -0
- package/src/nodes/accessors/ClippingNode.js +19 -13
- package/src/nodes/accessors/CubeTextureNode.js +9 -8
- package/src/nodes/accessors/InstanceNode.js +19 -15
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +8 -5
- package/src/nodes/accessors/Lights.js +51 -0
- package/src/nodes/accessors/MaterialNode.js +56 -55
- package/src/nodes/accessors/MaterialProperties.js +3 -0
- package/src/nodes/accessors/MaterialReferenceNode.js +9 -4
- package/src/nodes/accessors/ModelNode.js +47 -12
- package/src/nodes/accessors/ModelViewProjectionNode.js +12 -9
- package/src/nodes/accessors/MorphNode.js +17 -13
- package/src/nodes/accessors/Normal.js +88 -0
- package/src/nodes/accessors/Object3DNode.js +17 -33
- package/src/nodes/accessors/PointUVNode.js +9 -5
- package/src/nodes/accessors/Position.js +10 -0
- package/src/nodes/accessors/ReferenceBaseNode.js +171 -0
- package/src/nodes/accessors/ReferenceNode.js +50 -7
- package/src/nodes/accessors/ReflectVector.js +10 -0
- package/src/nodes/accessors/RendererReferenceNode.js +12 -6
- package/src/nodes/accessors/SceneNode.js +9 -6
- package/src/nodes/accessors/SkinningNode.js +88 -21
- package/src/nodes/accessors/StorageBufferNode.js +22 -5
- package/src/nodes/accessors/StorageTextureNode.js +9 -6
- package/src/nodes/accessors/Tangent.js +22 -0
- package/src/nodes/accessors/Texture3DNode.js +16 -13
- package/src/nodes/accessors/{TextureBicubicNode.js → TextureBicubic.js} +3 -32
- package/src/nodes/accessors/TextureNode.js +29 -23
- package/src/nodes/accessors/TextureSizeNode.js +10 -9
- package/src/nodes/accessors/{UniformsNode.js → UniformArrayNode.js} +26 -14
- package/src/nodes/accessors/UserDataNode.js +10 -7
- package/src/nodes/accessors/VelocityNode.js +134 -0
- package/src/nodes/accessors/VertexColorNode.js +7 -4
- package/src/nodes/code/CodeNode.js +9 -5
- package/src/nodes/code/ExpressionNode.js +10 -6
- package/src/nodes/code/FunctionCallNode.js +8 -5
- package/src/nodes/code/FunctionNode.js +8 -23
- package/src/nodes/code/ScriptableNode.js +13 -10
- package/src/nodes/code/ScriptableValueNode.js +9 -7
- package/src/nodes/core/AssignNode.js +12 -9
- package/src/nodes/core/AttributeNode.js +12 -21
- package/src/nodes/core/BypassNode.js +11 -7
- package/src/nodes/core/CacheNode.js +10 -6
- package/src/nodes/core/ConstNode.js +6 -3
- package/src/nodes/core/ContextNode.js +21 -11
- package/src/nodes/core/IndexNode.js +35 -8
- package/src/nodes/core/InputNode.js +7 -3
- package/src/nodes/core/MRTNode.js +16 -7
- package/src/nodes/core/Node.js +19 -40
- package/src/nodes/core/NodeBuilder.js +117 -38
- package/src/nodes/core/NodeUtils.js +49 -6
- package/src/nodes/core/OutputStructNode.js +10 -6
- package/src/nodes/core/ParameterNode.js +7 -4
- package/src/nodes/core/PropertyNode.js +36 -32
- package/src/nodes/core/StackNode.js +31 -11
- package/src/nodes/core/StructTypeNode.js +7 -3
- package/src/nodes/core/TempNode.js +8 -4
- package/src/nodes/core/UniformGroupNode.js +14 -11
- package/src/nodes/core/UniformNode.js +7 -4
- package/src/nodes/core/VarNode.js +12 -8
- package/src/nodes/core/VaryingNode.js +10 -6
- package/src/nodes/display/AfterImageNode.js +15 -9
- package/src/nodes/display/AnaglyphPassNode.js +67 -0
- package/src/nodes/display/AnamorphicNode.js +17 -11
- package/src/nodes/display/BleachBypass.js +26 -0
- package/src/nodes/display/BlendMode.js +54 -0
- package/src/nodes/display/BloomNode.js +27 -19
- package/src/nodes/display/BumpMapNode.js +13 -12
- package/src/nodes/display/ColorAdjustment.js +46 -0
- package/src/nodes/display/ColorSpaceFunctions.js +38 -0
- package/src/nodes/display/ColorSpaceNode.js +67 -61
- package/src/nodes/display/DenoiseNode.js +23 -17
- package/src/nodes/display/DepthOfFieldNode.js +12 -7
- package/src/nodes/display/DotScreenNode.js +13 -22
- package/src/nodes/display/FXAANode.js +21 -16
- package/src/nodes/display/FilmNode.js +11 -7
- package/src/nodes/display/FrontFacingNode.js +10 -6
- package/src/nodes/display/GTAONode.js +22 -15
- package/src/nodes/display/GaussianBlurNode.js +14 -8
- package/src/nodes/display/Lut3DNode.js +10 -6
- package/src/nodes/display/MotionBlur.js +25 -0
- package/src/nodes/display/NormalMapNode.js +13 -13
- package/src/nodes/display/ParallaxBarrierPassNode.js +58 -0
- package/src/nodes/display/PassNode.js +95 -8
- package/src/nodes/display/PixelationPassNode.js +20 -8
- package/src/nodes/display/PosterizeNode.js +8 -7
- package/src/nodes/display/RGBShiftNode.js +11 -7
- package/src/nodes/display/RenderOutputNode.js +15 -11
- package/src/nodes/display/SSAAPassNode.js +287 -0
- package/src/nodes/display/ScreenNode.js +181 -0
- package/src/nodes/display/Sepia.js +17 -0
- package/src/nodes/display/SobelOperatorNode.js +13 -8
- package/src/nodes/display/StereoCompositePassNode.js +110 -0
- package/src/nodes/display/StereoPassNode.js +83 -0
- package/src/nodes/display/ToneMappingFunctions.js +190 -0
- package/src/nodes/display/ToneMappingNode.js +15 -175
- package/src/nodes/display/ToonOutlinePassNode.js +111 -0
- package/src/nodes/display/TransitionNode.js +12 -8
- package/src/nodes/display/ViewportDepthNode.js +34 -29
- package/src/nodes/display/ViewportDepthTextureNode.js +10 -9
- package/src/nodes/display/ViewportSharedTextureNode.js +10 -9
- package/src/nodes/display/ViewportTextureNode.js +11 -11
- package/src/nodes/fog/FogExp2Node.js +8 -7
- package/src/nodes/fog/FogNode.js +10 -8
- package/src/nodes/fog/FogRangeNode.js +8 -7
- package/src/nodes/functions/BSDF/BRDF_GGX.js +4 -4
- package/src/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +6 -6
- package/src/nodes/functions/BSDF/DFGApprox.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX.js +2 -2
- package/src/nodes/functions/BSDF/D_GGX_Anisotropic.js +3 -3
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/F_Schlick.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +6 -6
- package/src/nodes/functions/BSDF/Schlick_to_F0.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +2 -2
- package/src/nodes/functions/BasicLightingModel.js +1 -1
- package/src/nodes/functions/PhongLightingModel.js +5 -5
- package/src/nodes/functions/PhysicalLightingModel.js +34 -33
- package/src/nodes/functions/ShadowMaskModel.js +1 -1
- package/src/nodes/functions/ToonLightingModel.js +3 -3
- package/src/nodes/functions/material/getGeometryRoughness.js +4 -4
- package/src/nodes/functions/material/getRoughness.js +2 -2
- package/src/nodes/functions/material/getShIrradianceAt.js +28 -0
- package/src/nodes/geometry/RangeNode.js +9 -5
- package/src/nodes/gpgpu/AtomicFunctionNode.js +99 -0
- package/src/nodes/gpgpu/BarrierNode.js +40 -0
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +98 -0
- package/src/nodes/gpgpu/ComputeNode.js +10 -6
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +100 -0
- package/src/nodes/lighting/AONode.js +6 -3
- package/src/nodes/lighting/AmbientLightNode.js +6 -8
- package/src/nodes/lighting/AnalyticLightNode.js +225 -36
- package/src/nodes/lighting/BasicEnvironmentNode.js +8 -4
- package/src/nodes/lighting/BasicLightMapNode.js +7 -4
- package/src/nodes/lighting/DirectionalLightNode.js +7 -9
- package/src/nodes/lighting/EnvironmentNode.js +23 -19
- package/src/nodes/lighting/HemisphereLightNode.js +11 -11
- package/src/nodes/lighting/IESSpotLightNode.js +7 -9
- package/src/nodes/lighting/IrradianceNode.js +6 -3
- package/src/nodes/lighting/LightProbeNode.js +53 -0
- package/src/nodes/lighting/LightUtils.js +3 -3
- package/src/nodes/lighting/LightingContextNode.js +19 -18
- package/src/nodes/lighting/LightingNode.js +7 -3
- package/src/nodes/lighting/LightsNode.js +112 -75
- package/src/nodes/lighting/PointLightNode.js +12 -13
- package/src/nodes/lighting/RectAreaLightNode.js +11 -11
- package/src/nodes/lighting/SpotLightNode.js +14 -16
- package/src/nodes/materialx/MaterialXNodes.js +2 -2
- package/src/nodes/materialx/lib/mx_hsv.js +36 -31
- package/src/nodes/materialx/lib/mx_noise.js +96 -96
- package/src/nodes/materialx/lib/mx_transform_color.js +2 -2
- package/src/nodes/math/{CondNode.js → ConditionalNode.js} +38 -10
- package/src/nodes/math/Hash.js +13 -0
- package/src/nodes/math/MathNode.js +127 -124
- package/src/nodes/math/MathUtils.js +0 -7
- package/src/nodes/math/OperatorNode.js +97 -52
- package/src/nodes/math/TriNoise3D.js +19 -29
- package/src/nodes/pmrem/PMREMNode.js +61 -15
- package/src/nodes/pmrem/PMREMUtils.js +46 -46
- package/src/nodes/procedural/Checker.js +14 -0
- package/src/nodes/tsl/TSLBase.js +30 -0
- package/src/nodes/{shadernode/ShaderNode.js → tsl/TSLCore.js} +105 -97
- package/src/nodes/utils/ArrayElementNode.js +8 -4
- package/src/nodes/utils/ConvertNode.js +7 -3
- package/src/nodes/utils/CubeMapNode.js +160 -0
- package/src/nodes/utils/Discard.js +8 -0
- package/src/nodes/utils/EquirectUVNode.js +9 -6
- package/src/nodes/utils/FlipNode.js +68 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +9 -5
- package/src/nodes/utils/JoinNode.js +6 -3
- package/src/nodes/utils/LoopNode.js +16 -6
- package/src/nodes/utils/MatcapUVNode.js +10 -7
- package/src/nodes/utils/MaxMipLevelNode.js +8 -5
- package/src/nodes/utils/OscNode.js +12 -8
- package/src/nodes/utils/Packing.js +4 -0
- package/src/nodes/utils/RTTNode.js +11 -8
- package/src/nodes/utils/ReflectorNode.js +12 -4
- package/src/nodes/utils/RemapNode.js +12 -8
- package/src/nodes/utils/RotateNode.js +8 -13
- package/src/nodes/utils/SetNode.js +7 -4
- package/src/nodes/utils/SplitNode.js +7 -3
- package/src/nodes/utils/SpriteSheetUVNode.js +10 -6
- package/src/nodes/utils/SpriteUtils.js +47 -0
- package/src/nodes/utils/StorageArrayElementNode.js +11 -12
- package/src/nodes/utils/TimerNode.js +8 -5
- package/src/nodes/utils/TriplanarTexturesNode.js +11 -9
- package/src/nodes/utils/UVUtils.js +19 -0
- package/src/nodes/utils/ViewportUtils.js +14 -0
- package/src/objects/BatchedMesh.js +78 -13
- package/src/objects/LOD.js +21 -0
- package/src/objects/Line.js +1 -0
- package/src/objects/Mesh.js +7 -23
- package/src/objects/Points.js +2 -0
- package/src/renderers/WebGLRenderer.js +88 -41
- package/src/renderers/common/Backend.js +2 -2
- package/src/renderers/common/Background.js +3 -1
- package/src/renderers/common/BindGroup.js +3 -1
- package/src/renderers/common/Bindings.js +13 -15
- package/src/renderers/common/BundleGroup.js +26 -0
- package/src/renderers/common/ClippingContext.js +15 -5
- package/src/renderers/common/CubeRenderTarget.js +9 -3
- package/src/renderers/common/PostProcessing.js +4 -1
- package/src/renderers/common/QuadMesh.js +2 -0
- package/src/renderers/common/RenderContext.js +23 -0
- package/src/renderers/common/RenderList.js +1 -1
- package/src/renderers/common/RenderObject.js +117 -6
- package/src/renderers/common/RenderObjects.js +8 -1
- package/src/renderers/common/Renderer.js +128 -94
- package/src/renderers/common/SampledTexture.js +12 -3
- package/src/renderers/common/Textures.js +8 -12
- package/src/renderers/common/extras/PMREMGenerator.js +19 -22
- package/src/renderers/common/nodes/NodeBuilderState.js +4 -4
- package/src/renderers/common/nodes/NodeLibrary.js +118 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +2 -2
- package/src/renderers/common/nodes/Nodes.js +65 -19
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +2 -4
- package/src/renderers/webgl/WebGLAttributes.js +45 -14
- package/src/renderers/webgl/WebGLCapabilities.js +9 -0
- package/src/renderers/webgl/WebGLProgram.js +3 -1
- package/src/renderers/webgl/WebGLPrograms.js +21 -17
- package/src/renderers/webgl/WebGLProperties.js +7 -0
- package/src/renderers/webgl/WebGLState.js +21 -0
- package/src/renderers/webgl/WebGLTextures.js +83 -4
- package/src/renderers/webgl-fallback/WebGLBackend.js +135 -110
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +60 -12
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +6 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +20 -2
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +89 -37
- package/src/renderers/webgpu/WebGPUBackend.js +112 -86
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +42 -0
- package/src/renderers/webgpu/WebGPURenderer.js +9 -6
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +59 -0
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +105 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +189 -73
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +6 -16
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +45 -21
- package/src/renderers/webgpu/utils/WebGPUConstants.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +7 -16
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +62 -5
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +43 -26
- package/src/renderers/webgpu/utils/WebGPUUtils.js +19 -2
- package/src/renderers/webxr/WebXRManager.js +32 -25
- package/src/utils.js +33 -1
- package/examples/jsm/geometries/SDFGeometryGenerator.js +0 -144
- package/examples/jsm/loaders/LogLuvLoader.js +0 -606
- package/examples/jsm/loaders/TiltLoader.js +0 -520
- package/examples/jsm/utils/GPUStatsPanel.js +0 -95
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -178
- package/src/nodes/accessors/CameraNode.js +0 -19
- package/src/nodes/accessors/NormalNode.js +0 -14
- package/src/nodes/accessors/PositionNode.js +0 -10
- package/src/nodes/accessors/ReflectVectorNode.js +0 -10
- package/src/nodes/accessors/TangentNode.js +0 -23
- package/src/nodes/core/NodeKeywords.js +0 -80
- package/src/nodes/display/BlendModeNode.js +0 -128
- package/src/nodes/display/ColorAdjustmentNode.js +0 -104
- package/src/nodes/display/ViewportNode.js +0 -137
- package/src/nodes/lighting/LightNode.js +0 -57
- package/src/nodes/materials/InstancedPointsNodeMaterial.js +0 -162
- package/src/nodes/math/HashNode.js +0 -34
- package/src/nodes/procedural/CheckerNode.js +0 -42
- package/src/nodes/utils/DiscardNode.js +0 -28
- package/src/nodes/utils/PackingNode.js +0 -55
- package/src/nodes/utils/RotateUVNode.js +0 -35
- /package/src/nodes/accessors/{UVNode.js → UV.js} +0 -0
|
@@ -2,7 +2,7 @@ import BindGroup from '../BindGroup.js';
|
|
|
2
2
|
|
|
3
3
|
class NodeBuilderState {
|
|
4
4
|
|
|
5
|
-
constructor( vertexShader, fragmentShader, computeShader, nodeAttributes, bindings, updateNodes, updateBeforeNodes, updateAfterNodes,
|
|
5
|
+
constructor( vertexShader, fragmentShader, computeShader, nodeAttributes, bindings, updateNodes, updateBeforeNodes, updateAfterNodes, monitor, transforms = [] ) {
|
|
6
6
|
|
|
7
7
|
this.vertexShader = vertexShader;
|
|
8
8
|
this.fragmentShader = fragmentShader;
|
|
@@ -16,7 +16,7 @@ class NodeBuilderState {
|
|
|
16
16
|
this.updateBeforeNodes = updateBeforeNodes;
|
|
17
17
|
this.updateAfterNodes = updateAfterNodes;
|
|
18
18
|
|
|
19
|
-
this.
|
|
19
|
+
this.monitor = monitor;
|
|
20
20
|
|
|
21
21
|
this.usedTimes = 0;
|
|
22
22
|
|
|
@@ -28,11 +28,11 @@ class NodeBuilderState {
|
|
|
28
28
|
|
|
29
29
|
for ( const instanceGroup of this.bindings ) {
|
|
30
30
|
|
|
31
|
-
const shared =
|
|
31
|
+
const shared = instanceGroup.bindings[ 0 ].groupNode.shared;
|
|
32
32
|
|
|
33
33
|
if ( shared !== true ) {
|
|
34
34
|
|
|
35
|
-
const bindingsGroup = new BindGroup( instanceGroup.name );
|
|
35
|
+
const bindingsGroup = new BindGroup( instanceGroup.name, [], instanceGroup.index, instanceGroup );
|
|
36
36
|
bindings.push( bindingsGroup );
|
|
37
37
|
|
|
38
38
|
for ( const instanceBinding of instanceGroup.bindings ) {
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
class NodeLibrary {
|
|
2
|
+
|
|
3
|
+
constructor() {
|
|
4
|
+
|
|
5
|
+
this.lightNodes = new WeakMap();
|
|
6
|
+
this.materialNodes = new Map();
|
|
7
|
+
this.toneMappingNodes = new Map();
|
|
8
|
+
this.colorSpaceNodes = new Map();
|
|
9
|
+
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
fromMaterial( material ) {
|
|
13
|
+
|
|
14
|
+
if ( material.isNodeMaterial ) return material;
|
|
15
|
+
|
|
16
|
+
let nodeMaterial = null;
|
|
17
|
+
|
|
18
|
+
const nodeMaterialClass = this.getMaterialNodeClass( material.type );
|
|
19
|
+
|
|
20
|
+
if ( nodeMaterialClass !== null ) {
|
|
21
|
+
|
|
22
|
+
nodeMaterial = new nodeMaterialClass();
|
|
23
|
+
|
|
24
|
+
for ( const key in material ) {
|
|
25
|
+
|
|
26
|
+
nodeMaterial[ key ] = material[ key ];
|
|
27
|
+
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return nodeMaterial;
|
|
33
|
+
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
addColorSpace( colorSpaceNode, colorSpace ) {
|
|
37
|
+
|
|
38
|
+
this.addType( colorSpaceNode, colorSpace, this.colorSpaceNodes );
|
|
39
|
+
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
getColorSpaceFunction( colorSpace ) {
|
|
43
|
+
|
|
44
|
+
return this.colorSpaceNodes.get( colorSpace ) || null;
|
|
45
|
+
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
addToneMapping( toneMappingNode, toneMapping ) {
|
|
49
|
+
|
|
50
|
+
this.addType( toneMappingNode, toneMapping, this.toneMappingNodes );
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
getToneMappingFunction( toneMapping ) {
|
|
55
|
+
|
|
56
|
+
return this.toneMappingNodes.get( toneMapping ) || null;
|
|
57
|
+
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
getMaterialNodeClass( materialType ) {
|
|
61
|
+
|
|
62
|
+
return this.materialNodes.get( materialType ) || null;
|
|
63
|
+
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
addMaterial( materialNodeClass, materialClass ) {
|
|
67
|
+
|
|
68
|
+
this.addType( materialNodeClass, materialClass.name, this.materialNodes );
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
getLightNodeClass( light ) {
|
|
73
|
+
|
|
74
|
+
return this.lightNodes.get( light ) || null;
|
|
75
|
+
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
addLight( lightNodeClass, lightClass ) {
|
|
79
|
+
|
|
80
|
+
this.addClass( lightNodeClass, lightClass, this.lightNodes );
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
addType( nodeClass, type, library ) {
|
|
85
|
+
|
|
86
|
+
if ( library.has( type ) ) {
|
|
87
|
+
|
|
88
|
+
console.warn( `Redefinition of node ${ type }` );
|
|
89
|
+
return;
|
|
90
|
+
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if ( typeof nodeClass !== 'function' ) throw new Error( `Node class ${ nodeClass.name } is not a class.` );
|
|
94
|
+
if ( typeof type === 'function' || typeof type === 'object' ) throw new Error( `Base class ${ type } is not a class.` );
|
|
95
|
+
|
|
96
|
+
library.set( type, nodeClass );
|
|
97
|
+
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
addClass( nodeClass, baseClass, library ) {
|
|
101
|
+
|
|
102
|
+
if ( library.has( baseClass ) ) {
|
|
103
|
+
|
|
104
|
+
console.warn( `Redefinition of node ${ baseClass.name }` );
|
|
105
|
+
return;
|
|
106
|
+
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if ( typeof nodeClass !== 'function' ) throw new Error( `Node class ${ nodeClass.name } is not a class.` );
|
|
110
|
+
if ( typeof baseClass !== 'function' ) throw new Error( `Base class ${ baseClass.name } is not a class.` );
|
|
111
|
+
|
|
112
|
+
library.set( baseClass, nodeClass );
|
|
113
|
+
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export default NodeLibrary;
|
|
@@ -13,9 +13,9 @@ class NodeSampledTexture extends SampledTexture {
|
|
|
13
13
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
needsBindingsUpdate( generation ) {
|
|
17
17
|
|
|
18
|
-
return this.textureNode.value !== this.texture || super.needsBindingsUpdate;
|
|
18
|
+
return this.textureNode.value !== this.texture || super.needsBindingsUpdate( generation );
|
|
19
19
|
|
|
20
20
|
}
|
|
21
21
|
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import DataMap from '../DataMap.js';
|
|
2
2
|
import ChainMap from '../ChainMap.js';
|
|
3
3
|
import NodeBuilderState from './NodeBuilderState.js';
|
|
4
|
-
import {
|
|
4
|
+
import { cubeMapNode } from '../../../nodes/utils/CubeMapNode.js';
|
|
5
|
+
import { NodeFrame } from '../../../nodes/Nodes.js';
|
|
6
|
+
import { objectGroup, renderGroup, frameGroup, cubeTexture, texture, rangeFog, densityFog, reference, normalWorld, pmremTexture, screenUV } from '../../../nodes/TSL.js';
|
|
5
7
|
|
|
6
|
-
import { EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../../constants.js';
|
|
8
|
+
import { CubeUVReflectionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../../constants.js';
|
|
9
|
+
import { hashArray } from '../../../nodes/core/NodeUtils.js';
|
|
7
10
|
|
|
8
11
|
const outputNodeMap = new WeakMap();
|
|
9
12
|
|
|
@@ -188,7 +191,7 @@ class Nodes extends DataMap {
|
|
|
188
191
|
nodeBuilder.updateNodes,
|
|
189
192
|
nodeBuilder.updateBeforeNodes,
|
|
190
193
|
nodeBuilder.updateAfterNodes,
|
|
191
|
-
nodeBuilder.
|
|
194
|
+
nodeBuilder.monitor,
|
|
192
195
|
nodeBuilder.transforms
|
|
193
196
|
);
|
|
194
197
|
|
|
@@ -224,15 +227,17 @@ class Nodes extends DataMap {
|
|
|
224
227
|
const environmentNode = this.getEnvironmentNode( scene );
|
|
225
228
|
const fogNode = this.getFogNode( scene );
|
|
226
229
|
|
|
227
|
-
const
|
|
230
|
+
const values = [];
|
|
228
231
|
|
|
229
|
-
if ( lightsNode )
|
|
230
|
-
if ( environmentNode )
|
|
231
|
-
if ( fogNode )
|
|
232
|
+
if ( lightsNode ) values.push( lightsNode.getCacheKey( true ) );
|
|
233
|
+
if ( environmentNode ) values.push( environmentNode.getCacheKey() );
|
|
234
|
+
if ( fogNode ) values.push( fogNode.getCacheKey() );
|
|
235
|
+
|
|
236
|
+
values.push( this.renderer.shadowMap.enabled ? 1 : 0 );
|
|
232
237
|
|
|
233
238
|
cacheKeyData = {
|
|
234
239
|
callId,
|
|
235
|
-
cacheKey:
|
|
240
|
+
cacheKey: hashArray( values )
|
|
236
241
|
};
|
|
237
242
|
|
|
238
243
|
this.callHashCache.set( chain, cacheKeyData );
|
|
@@ -264,17 +269,39 @@ class Nodes extends DataMap {
|
|
|
264
269
|
|
|
265
270
|
if ( background ) {
|
|
266
271
|
|
|
267
|
-
|
|
272
|
+
const forceUpdate = ( scene.backgroundBlurriness === 0 && sceneData.backgroundBlurriness > 0 ) || ( scene.backgroundBlurriness > 0 && sceneData.backgroundBlurriness === 0 );
|
|
273
|
+
|
|
274
|
+
if ( sceneData.background !== background || forceUpdate ) {
|
|
268
275
|
|
|
269
276
|
let backgroundNode = null;
|
|
270
277
|
|
|
271
|
-
if ( background.isCubeTexture === true || ( background.mapping === EquirectangularReflectionMapping || background.mapping === EquirectangularRefractionMapping ) ) {
|
|
278
|
+
if ( background.isCubeTexture === true || ( background.mapping === EquirectangularReflectionMapping || background.mapping === EquirectangularRefractionMapping || background.mapping === CubeUVReflectionMapping ) ) {
|
|
279
|
+
|
|
280
|
+
if ( scene.backgroundBlurriness > 0 || background.mapping === CubeUVReflectionMapping ) {
|
|
281
|
+
|
|
282
|
+
backgroundNode = pmremTexture( background, normalWorld );
|
|
283
|
+
|
|
284
|
+
} else {
|
|
285
|
+
|
|
286
|
+
let envMap;
|
|
287
|
+
|
|
288
|
+
if ( background.isCubeTexture === true ) {
|
|
289
|
+
|
|
290
|
+
envMap = cubeTexture( background );
|
|
291
|
+
|
|
292
|
+
} else {
|
|
293
|
+
|
|
294
|
+
envMap = texture( background );
|
|
295
|
+
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
backgroundNode = cubeMapNode( envMap );
|
|
272
299
|
|
|
273
|
-
|
|
300
|
+
}
|
|
274
301
|
|
|
275
302
|
} else if ( background.isTexture === true ) {
|
|
276
303
|
|
|
277
|
-
backgroundNode = texture( background,
|
|
304
|
+
backgroundNode = texture( background, screenUV.flipY() ).setUpdateMatrix( true );
|
|
278
305
|
|
|
279
306
|
} else if ( background.isColor !== true ) {
|
|
280
307
|
|
|
@@ -284,6 +311,7 @@ class Nodes extends DataMap {
|
|
|
284
311
|
|
|
285
312
|
sceneData.backgroundNode = backgroundNode;
|
|
286
313
|
sceneData.background = background;
|
|
314
|
+
sceneData.backgroundBlurriness = scene.backgroundBlurriness;
|
|
287
315
|
|
|
288
316
|
}
|
|
289
317
|
|
|
@@ -309,11 +337,18 @@ class Nodes extends DataMap {
|
|
|
309
337
|
|
|
310
338
|
if ( fog.isFogExp2 ) {
|
|
311
339
|
|
|
312
|
-
|
|
340
|
+
const color = reference( 'color', 'color', fog ).setGroup( renderGroup );
|
|
341
|
+
const density = reference( 'density', 'float', fog ).setGroup( renderGroup );
|
|
342
|
+
|
|
343
|
+
fogNode = densityFog( color, density );
|
|
313
344
|
|
|
314
345
|
} else if ( fog.isFog ) {
|
|
315
346
|
|
|
316
|
-
|
|
347
|
+
const color = reference( 'color', 'color', fog ).setGroup( renderGroup );
|
|
348
|
+
const near = reference( 'near', 'float', fog ).setGroup( renderGroup );
|
|
349
|
+
const far = reference( 'far', 'float', fog ).setGroup( renderGroup );
|
|
350
|
+
|
|
351
|
+
fogNode = rangeFog( color, near, far );
|
|
317
352
|
|
|
318
353
|
} else {
|
|
319
354
|
|
|
@@ -414,7 +449,7 @@ class Nodes extends DataMap {
|
|
|
414
449
|
const renderer = this.renderer;
|
|
415
450
|
const cacheKey = this.getOutputCacheKey();
|
|
416
451
|
|
|
417
|
-
const output = texture( outputTexture,
|
|
452
|
+
const output = texture( outputTexture, screenUV ).renderOutput( renderer.toneMapping, renderer.currentColorSpace );
|
|
418
453
|
|
|
419
454
|
outputNodeMap.set( outputTexture, cacheKey );
|
|
420
455
|
|
|
@@ -424,12 +459,13 @@ class Nodes extends DataMap {
|
|
|
424
459
|
|
|
425
460
|
updateBefore( renderObject ) {
|
|
426
461
|
|
|
427
|
-
const nodeFrame = this.getNodeFrameForRender( renderObject );
|
|
428
462
|
const nodeBuilder = renderObject.getNodeBuilderState();
|
|
429
463
|
|
|
430
464
|
for ( const node of nodeBuilder.updateBeforeNodes ) {
|
|
431
465
|
|
|
432
|
-
|
|
466
|
+
// update frame state for each node
|
|
467
|
+
|
|
468
|
+
this.getNodeFrameForRender( renderObject ).updateBeforeNode( node );
|
|
433
469
|
|
|
434
470
|
}
|
|
435
471
|
|
|
@@ -437,12 +473,13 @@ class Nodes extends DataMap {
|
|
|
437
473
|
|
|
438
474
|
updateAfter( renderObject ) {
|
|
439
475
|
|
|
440
|
-
const nodeFrame = this.getNodeFrameForRender( renderObject );
|
|
441
476
|
const nodeBuilder = renderObject.getNodeBuilderState();
|
|
442
477
|
|
|
443
478
|
for ( const node of nodeBuilder.updateAfterNodes ) {
|
|
444
479
|
|
|
445
|
-
|
|
480
|
+
// update frame state for each node
|
|
481
|
+
|
|
482
|
+
this.getNodeFrameForRender( renderObject ).updateAfterNode( node );
|
|
446
483
|
|
|
447
484
|
}
|
|
448
485
|
|
|
@@ -474,6 +511,15 @@ class Nodes extends DataMap {
|
|
|
474
511
|
|
|
475
512
|
}
|
|
476
513
|
|
|
514
|
+
needsRefresh( renderObject ) {
|
|
515
|
+
|
|
516
|
+
const nodeFrame = this.getNodeFrameForRender( renderObject );
|
|
517
|
+
const monitor = renderObject.getMonitor();
|
|
518
|
+
|
|
519
|
+
return monitor.needsRefresh( renderObject, nodeFrame );
|
|
520
|
+
|
|
521
|
+
}
|
|
522
|
+
|
|
477
523
|
dispose() {
|
|
478
524
|
|
|
479
525
|
super.dispose();
|
|
@@ -22,9 +22,9 @@ vec3 ReinhardToneMapping( vec3 color ) {
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
// source: http://filmicworlds.com/blog/filmic-tonemapping-operators/
|
|
25
|
-
vec3
|
|
25
|
+
vec3 CineonToneMapping( vec3 color ) {
|
|
26
26
|
|
|
27
|
-
//
|
|
27
|
+
// filmic operator by Jim Hejl and Richard Burgess-Dawson
|
|
28
28
|
color *= toneMappingExposure;
|
|
29
29
|
color = max( vec3( 0.0 ), color - 0.004 );
|
|
30
30
|
return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );
|
|
@@ -12,11 +12,9 @@ void main() {
|
|
|
12
12
|
|
|
13
13
|
#include <uv_vertex>
|
|
14
14
|
|
|
15
|
-
vec4 mvPosition = modelViewMatrix
|
|
15
|
+
vec4 mvPosition = modelViewMatrix[ 3 ];
|
|
16
16
|
|
|
17
|
-
vec2 scale;
|
|
18
|
-
scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );
|
|
19
|
-
scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );
|
|
17
|
+
vec2 scale = vec2( length( modelMatrix[ 0 ].xyz ), length( modelMatrix[ 1 ].xyz ) );
|
|
20
18
|
|
|
21
19
|
#ifndef USE_SIZEATTENUATION
|
|
22
20
|
|
|
@@ -76,40 +76,71 @@ function WebGLAttributes( gl ) {
|
|
|
76
76
|
function updateBuffer( buffer, attribute, bufferType ) {
|
|
77
77
|
|
|
78
78
|
const array = attribute.array;
|
|
79
|
-
const updateRange = attribute._updateRange; // @deprecated, r159
|
|
80
79
|
const updateRanges = attribute.updateRanges;
|
|
81
80
|
|
|
82
81
|
gl.bindBuffer( bufferType, buffer );
|
|
83
82
|
|
|
84
|
-
if (
|
|
83
|
+
if ( updateRanges.length === 0 ) {
|
|
85
84
|
|
|
86
85
|
// Not using update ranges
|
|
87
86
|
gl.bufferSubData( bufferType, 0, array );
|
|
88
87
|
|
|
89
|
-
}
|
|
88
|
+
} else {
|
|
90
89
|
|
|
91
|
-
|
|
90
|
+
// Before applying update ranges, we merge any adjacent / overlapping
|
|
91
|
+
// ranges to reduce load on `gl.bufferSubData`. Empirically, this has led
|
|
92
|
+
// to performance improvements for applications which make heavy use of
|
|
93
|
+
// update ranges. Likely due to GPU command overhead.
|
|
94
|
+
//
|
|
95
|
+
// Note that to reduce garbage collection between frames, we merge the
|
|
96
|
+
// update ranges in-place. This is safe because this method will clear the
|
|
97
|
+
// update ranges once updated.
|
|
92
98
|
|
|
93
|
-
|
|
99
|
+
updateRanges.sort( ( a, b ) => a.start - b.start );
|
|
100
|
+
|
|
101
|
+
// To merge the update ranges in-place, we work from left to right in the
|
|
102
|
+
// existing updateRanges array, merging ranges. This may result in a final
|
|
103
|
+
// array which is smaller than the original. This index tracks the last
|
|
104
|
+
// index representing a merged range, any data after this index can be
|
|
105
|
+
// trimmed once the merge algorithm is completed.
|
|
106
|
+
let mergeIndex = 0;
|
|
107
|
+
|
|
108
|
+
for ( let i = 1; i < updateRanges.length; i ++ ) {
|
|
94
109
|
|
|
110
|
+
const previousRange = updateRanges[ mergeIndex ];
|
|
95
111
|
const range = updateRanges[ i ];
|
|
96
112
|
|
|
97
|
-
|
|
98
|
-
|
|
113
|
+
// We add one here to merge adjacent ranges. This is safe because ranges
|
|
114
|
+
// operate over positive integers.
|
|
115
|
+
if ( range.start <= previousRange.start + previousRange.count + 1 ) {
|
|
116
|
+
|
|
117
|
+
previousRange.count = Math.max(
|
|
118
|
+
previousRange.count,
|
|
119
|
+
range.start + range.count - previousRange.start
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
} else {
|
|
123
|
+
|
|
124
|
+
++ mergeIndex;
|
|
125
|
+
updateRanges[ mergeIndex ] = range;
|
|
126
|
+
|
|
127
|
+
}
|
|
99
128
|
|
|
100
129
|
}
|
|
101
130
|
|
|
102
|
-
|
|
131
|
+
// Trim the array to only contain the merged ranges.
|
|
132
|
+
updateRanges.length = mergeIndex + 1;
|
|
103
133
|
|
|
104
|
-
|
|
134
|
+
for ( let i = 0, l = updateRanges.length; i < l; i ++ ) {
|
|
135
|
+
|
|
136
|
+
const range = updateRanges[ i ];
|
|
105
137
|
|
|
106
|
-
|
|
107
|
-
|
|
138
|
+
gl.bufferSubData( bufferType, range.start * array.BYTES_PER_ELEMENT,
|
|
139
|
+
array, range.start, range.count );
|
|
108
140
|
|
|
109
|
-
|
|
110
|
-
array, updateRange.offset, updateRange.count );
|
|
141
|
+
}
|
|
111
142
|
|
|
112
|
-
|
|
143
|
+
attribute.clearUpdateRanges();
|
|
113
144
|
|
|
114
145
|
}
|
|
115
146
|
|
|
@@ -92,6 +92,14 @@ function WebGLCapabilities( gl, extensions, parameters, utils ) {
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;
|
|
95
|
+
const reverseDepthBuffer = parameters.reverseDepthBuffer === true && extensions.has( 'EXT_clip_control' );
|
|
96
|
+
|
|
97
|
+
if ( reverseDepthBuffer === true ) {
|
|
98
|
+
|
|
99
|
+
const ext = extensions.get( 'EXT_clip_control' );
|
|
100
|
+
ext.clipControlEXT( ext.LOWER_LEFT_EXT, ext.ZERO_TO_ONE_EXT );
|
|
101
|
+
|
|
102
|
+
}
|
|
95
103
|
|
|
96
104
|
const maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );
|
|
97
105
|
const maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );
|
|
@@ -119,6 +127,7 @@ function WebGLCapabilities( gl, extensions, parameters, utils ) {
|
|
|
119
127
|
|
|
120
128
|
precision: precision,
|
|
121
129
|
logarithmicDepthBuffer: logarithmicDepthBuffer,
|
|
130
|
+
reverseDepthBuffer: reverseDepthBuffer,
|
|
122
131
|
|
|
123
132
|
maxTextures: maxTextures,
|
|
124
133
|
maxVertexTextures: maxVertexTextures,
|
|
@@ -114,7 +114,7 @@ function getToneMappingFunction( functionName, toneMapping ) {
|
|
|
114
114
|
break;
|
|
115
115
|
|
|
116
116
|
case CineonToneMapping:
|
|
117
|
-
toneMappingName = '
|
|
117
|
+
toneMappingName = 'Cineon';
|
|
118
118
|
break;
|
|
119
119
|
|
|
120
120
|
case ACESFilmicToneMapping:
|
|
@@ -659,6 +659,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
659
659
|
parameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',
|
|
660
660
|
|
|
661
661
|
parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
|
|
662
|
+
parameters.reverseDepthBuffer ? '#define USE_REVERSEDEPTHBUF' : '',
|
|
662
663
|
|
|
663
664
|
'uniform mat4 modelMatrix;',
|
|
664
665
|
'uniform mat4 modelViewMatrix;',
|
|
@@ -824,6 +825,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
824
825
|
parameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',
|
|
825
826
|
|
|
826
827
|
parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
|
|
828
|
+
parameters.reverseDepthBuffer ? '#define USE_REVERSEDEPTHBUF' : '',
|
|
827
829
|
|
|
828
830
|
'uniform mat4 viewMatrix;',
|
|
829
831
|
'uniform vec3 cameraPosition;',
|
|
@@ -14,6 +14,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
14
14
|
const programs = [];
|
|
15
15
|
|
|
16
16
|
const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;
|
|
17
|
+
const reverseDepthBuffer = capabilities.reverseDepthBuffer;
|
|
17
18
|
const SUPPORTS_VERTEX_TEXTURES = capabilities.vertexTextures;
|
|
18
19
|
|
|
19
20
|
let precision = capabilities.precision;
|
|
@@ -308,6 +309,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
308
309
|
|
|
309
310
|
sizeAttenuation: material.sizeAttenuation === true,
|
|
310
311
|
logarithmicDepthBuffer: logarithmicDepthBuffer,
|
|
312
|
+
reverseDepthBuffer: reverseDepthBuffer,
|
|
311
313
|
|
|
312
314
|
skinning: object.isSkinnedMesh === true,
|
|
313
315
|
|
|
@@ -527,40 +529,42 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
527
529
|
_programLayers.enable( 2 );
|
|
528
530
|
if ( parameters.logarithmicDepthBuffer )
|
|
529
531
|
_programLayers.enable( 3 );
|
|
530
|
-
if ( parameters.
|
|
532
|
+
if ( parameters.reverseDepthBuffer )
|
|
531
533
|
_programLayers.enable( 4 );
|
|
532
|
-
if ( parameters.
|
|
534
|
+
if ( parameters.skinning )
|
|
533
535
|
_programLayers.enable( 5 );
|
|
534
|
-
if ( parameters.
|
|
536
|
+
if ( parameters.morphTargets )
|
|
535
537
|
_programLayers.enable( 6 );
|
|
536
|
-
if ( parameters.
|
|
538
|
+
if ( parameters.morphNormals )
|
|
537
539
|
_programLayers.enable( 7 );
|
|
538
|
-
if ( parameters.
|
|
540
|
+
if ( parameters.morphColors )
|
|
539
541
|
_programLayers.enable( 8 );
|
|
540
|
-
if ( parameters.
|
|
542
|
+
if ( parameters.premultipliedAlpha )
|
|
541
543
|
_programLayers.enable( 9 );
|
|
542
|
-
if ( parameters.
|
|
544
|
+
if ( parameters.shadowMapEnabled )
|
|
543
545
|
_programLayers.enable( 10 );
|
|
544
|
-
if ( parameters.
|
|
546
|
+
if ( parameters.doubleSided )
|
|
545
547
|
_programLayers.enable( 11 );
|
|
546
|
-
if ( parameters.
|
|
548
|
+
if ( parameters.flipSided )
|
|
547
549
|
_programLayers.enable( 12 );
|
|
548
|
-
if ( parameters.
|
|
550
|
+
if ( parameters.useDepthPacking )
|
|
549
551
|
_programLayers.enable( 13 );
|
|
550
|
-
if ( parameters.
|
|
552
|
+
if ( parameters.dithering )
|
|
551
553
|
_programLayers.enable( 14 );
|
|
552
|
-
if ( parameters.
|
|
554
|
+
if ( parameters.transmission )
|
|
553
555
|
_programLayers.enable( 15 );
|
|
554
|
-
if ( parameters.
|
|
556
|
+
if ( parameters.sheen )
|
|
555
557
|
_programLayers.enable( 16 );
|
|
556
|
-
if ( parameters.
|
|
558
|
+
if ( parameters.opaque )
|
|
557
559
|
_programLayers.enable( 17 );
|
|
558
|
-
if ( parameters.
|
|
560
|
+
if ( parameters.pointsUvs )
|
|
559
561
|
_programLayers.enable( 18 );
|
|
560
|
-
if ( parameters.
|
|
562
|
+
if ( parameters.decodeVideoTexture )
|
|
561
563
|
_programLayers.enable( 19 );
|
|
562
|
-
if ( parameters.
|
|
564
|
+
if ( parameters.alphaToCoverage )
|
|
563
565
|
_programLayers.enable( 20 );
|
|
566
|
+
if ( parameters.numMultiviewViews )
|
|
567
|
+
_programLayers.enable( 21 );
|
|
564
568
|
|
|
565
569
|
array.push( _programLayers.mask );
|
|
566
570
|
|
|
@@ -2,6 +2,12 @@ function WebGLProperties() {
|
|
|
2
2
|
|
|
3
3
|
let properties = new WeakMap();
|
|
4
4
|
|
|
5
|
+
function has( object ) {
|
|
6
|
+
|
|
7
|
+
return properties.has( object );
|
|
8
|
+
|
|
9
|
+
}
|
|
10
|
+
|
|
5
11
|
function get( object ) {
|
|
6
12
|
|
|
7
13
|
let map = properties.get( object );
|
|
@@ -36,6 +42,7 @@ function WebGLProperties() {
|
|
|
36
42
|
}
|
|
37
43
|
|
|
38
44
|
return {
|
|
45
|
+
has: has,
|
|
39
46
|
get: get,
|
|
40
47
|
remove: remove,
|
|
41
48
|
update: update,
|
|
@@ -2,6 +2,18 @@ import { NotEqualDepth, GreaterDepth, GreaterEqualDepth, EqualDepth, LessEqualDe
|
|
|
2
2
|
import { Color } from '../../math/Color.js';
|
|
3
3
|
import { Vector4 } from '../../math/Vector4.js';
|
|
4
4
|
|
|
5
|
+
const reversedFuncs = {
|
|
6
|
+
[ NeverDepth ]: AlwaysDepth,
|
|
7
|
+
[ LessDepth ]: GreaterDepth,
|
|
8
|
+
[ EqualDepth ]: NotEqualDepth,
|
|
9
|
+
[ LessEqualDepth ]: GreaterEqualDepth,
|
|
10
|
+
|
|
11
|
+
[ AlwaysDepth ]: NeverDepth,
|
|
12
|
+
[ GreaterDepth ]: LessDepth,
|
|
13
|
+
[ NotEqualDepth ]: EqualDepth,
|
|
14
|
+
[ GreaterEqualDepth ]: LessEqualDepth,
|
|
15
|
+
};
|
|
16
|
+
|
|
5
17
|
function WebGLState( gl ) {
|
|
6
18
|
|
|
7
19
|
function ColorBuffer() {
|
|
@@ -66,6 +78,7 @@ function WebGLState( gl ) {
|
|
|
66
78
|
function DepthBuffer() {
|
|
67
79
|
|
|
68
80
|
let locked = false;
|
|
81
|
+
let reversed = false;
|
|
69
82
|
|
|
70
83
|
let currentDepthMask = null;
|
|
71
84
|
let currentDepthFunc = null;
|
|
@@ -73,6 +86,12 @@ function WebGLState( gl ) {
|
|
|
73
86
|
|
|
74
87
|
return {
|
|
75
88
|
|
|
89
|
+
setReversed: function ( value ) {
|
|
90
|
+
|
|
91
|
+
reversed = value;
|
|
92
|
+
|
|
93
|
+
},
|
|
94
|
+
|
|
76
95
|
setTest: function ( depthTest ) {
|
|
77
96
|
|
|
78
97
|
if ( depthTest ) {
|
|
@@ -100,6 +119,8 @@ function WebGLState( gl ) {
|
|
|
100
119
|
|
|
101
120
|
setFunc: function ( depthFunc ) {
|
|
102
121
|
|
|
122
|
+
if ( reversed ) depthFunc = reversedFuncs[ depthFunc ];
|
|
123
|
+
|
|
103
124
|
if ( currentDepthFunc !== depthFunc ) {
|
|
104
125
|
|
|
105
126
|
switch ( depthFunc ) {
|