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
|
@@ -14,24 +14,24 @@ import Color4 from './Color4.js';
|
|
|
14
14
|
import ClippingContext from './ClippingContext.js';
|
|
15
15
|
import QuadMesh from './QuadMesh.js';
|
|
16
16
|
import RenderBundles from './RenderBundles.js';
|
|
17
|
+
import NodeLibrary from './nodes/NodeLibrary.js';
|
|
17
18
|
|
|
18
|
-
import
|
|
19
|
+
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
19
20
|
|
|
20
21
|
import { Scene } from '../../scenes/Scene.js';
|
|
21
22
|
import { Frustum } from '../../math/Frustum.js';
|
|
22
23
|
import { Matrix4 } from '../../math/Matrix4.js';
|
|
23
24
|
import { Vector2 } from '../../math/Vector2.js';
|
|
24
|
-
import { Vector3 } from '../../math/Vector3.js';
|
|
25
25
|
import { Vector4 } from '../../math/Vector4.js';
|
|
26
26
|
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
27
|
-
import { DoubleSide, BackSide, FrontSide, SRGBColorSpace,
|
|
27
|
+
import { DoubleSide, BackSide, FrontSide, SRGBColorSpace, NoToneMapping, LinearFilter, LinearSRGBColorSpace, HalfFloatType, RGBAFormat, PCFShadowMap } from '../../constants.js';
|
|
28
28
|
|
|
29
29
|
const _scene = /*@__PURE__*/ new Scene();
|
|
30
30
|
const _drawingBufferSize = /*@__PURE__*/ new Vector2();
|
|
31
31
|
const _screen = /*@__PURE__*/ new Vector4();
|
|
32
32
|
const _frustum = /*@__PURE__*/ new Frustum();
|
|
33
33
|
const _projScreenMatrix = /*@__PURE__*/ new Matrix4();
|
|
34
|
-
const
|
|
34
|
+
const _vector4 = /*@__PURE__*/ new Vector4();
|
|
35
35
|
|
|
36
36
|
class Renderer {
|
|
37
37
|
|
|
@@ -44,8 +44,11 @@ class Renderer {
|
|
|
44
44
|
const {
|
|
45
45
|
logarithmicDepthBuffer = false,
|
|
46
46
|
alpha = true,
|
|
47
|
+
depth = true,
|
|
48
|
+
stencil = false,
|
|
47
49
|
antialias = false,
|
|
48
|
-
samples = 0
|
|
50
|
+
samples = 0,
|
|
51
|
+
getFallback = null
|
|
49
52
|
} = parameters;
|
|
50
53
|
|
|
51
54
|
// public
|
|
@@ -71,15 +74,23 @@ class Renderer {
|
|
|
71
74
|
|
|
72
75
|
this.sortObjects = true;
|
|
73
76
|
|
|
74
|
-
this.depth =
|
|
75
|
-
this.stencil =
|
|
77
|
+
this.depth = depth;
|
|
78
|
+
this.stencil = stencil;
|
|
76
79
|
|
|
77
80
|
this.clippingPlanes = [];
|
|
78
81
|
|
|
79
82
|
this.info = new Info();
|
|
80
83
|
|
|
84
|
+
this.nodes = {
|
|
85
|
+
library: new NodeLibrary(),
|
|
86
|
+
modelViewMatrix: null,
|
|
87
|
+
modelNormalViewMatrix: null
|
|
88
|
+
};
|
|
89
|
+
|
|
81
90
|
// internals
|
|
82
91
|
|
|
92
|
+
this._getFallback = getFallback;
|
|
93
|
+
|
|
83
94
|
this._pixelRatio = 1;
|
|
84
95
|
this._width = this.domElement.width;
|
|
85
96
|
this._height = this.domElement.height;
|
|
@@ -102,6 +113,7 @@ class Renderer {
|
|
|
102
113
|
this._background = null;
|
|
103
114
|
|
|
104
115
|
this._quad = new QuadMesh( new NodeMaterial() );
|
|
116
|
+
this._quad.material.type = 'Renderer_output';
|
|
105
117
|
|
|
106
118
|
this._currentRenderContext = null;
|
|
107
119
|
|
|
@@ -147,7 +159,23 @@ class Renderer {
|
|
|
147
159
|
|
|
148
160
|
this.debug = {
|
|
149
161
|
checkShaderErrors: true,
|
|
150
|
-
onShaderError: null
|
|
162
|
+
onShaderError: null,
|
|
163
|
+
getShaderAsync: async ( scene, camera, object ) => {
|
|
164
|
+
|
|
165
|
+
await this.compileAsync( scene, camera );
|
|
166
|
+
|
|
167
|
+
const renderList = this._renderLists.get( scene, camera );
|
|
168
|
+
const renderContext = this._renderContexts.get( scene, camera, this._renderTarget );
|
|
169
|
+
|
|
170
|
+
const material = scene.overrideMaterial || object.material;
|
|
171
|
+
|
|
172
|
+
const renderObject = this._objects.get( object, material, scene, camera, renderList.lightsNode, renderContext );
|
|
173
|
+
|
|
174
|
+
const { fragmentShader, vertexShader } = renderObject.getNodeBuilderState();
|
|
175
|
+
|
|
176
|
+
return { fragmentShader, vertexShader };
|
|
177
|
+
|
|
178
|
+
}
|
|
151
179
|
};
|
|
152
180
|
|
|
153
181
|
}
|
|
@@ -168,7 +196,7 @@ class Renderer {
|
|
|
168
196
|
|
|
169
197
|
this._initPromise = new Promise( async ( resolve, reject ) => {
|
|
170
198
|
|
|
171
|
-
|
|
199
|
+
let backend = this.backend;
|
|
172
200
|
|
|
173
201
|
try {
|
|
174
202
|
|
|
@@ -176,8 +204,28 @@ class Renderer {
|
|
|
176
204
|
|
|
177
205
|
} catch ( error ) {
|
|
178
206
|
|
|
179
|
-
|
|
180
|
-
|
|
207
|
+
if ( this._getFallback !== null ) {
|
|
208
|
+
|
|
209
|
+
// try the fallback
|
|
210
|
+
|
|
211
|
+
try {
|
|
212
|
+
|
|
213
|
+
this.backend = backend = this._getFallback( error );
|
|
214
|
+
await backend.init( this );
|
|
215
|
+
|
|
216
|
+
} catch ( error ) {
|
|
217
|
+
|
|
218
|
+
reject( error );
|
|
219
|
+
return;
|
|
220
|
+
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
} else {
|
|
224
|
+
|
|
225
|
+
reject( error );
|
|
226
|
+
return;
|
|
227
|
+
|
|
228
|
+
}
|
|
181
229
|
|
|
182
230
|
}
|
|
183
231
|
|
|
@@ -363,37 +411,31 @@ class Renderer {
|
|
|
363
411
|
|
|
364
412
|
_renderBundle( bundle, sceneRef, lightsNode ) {
|
|
365
413
|
|
|
366
|
-
const {
|
|
414
|
+
const { bundleGroup, camera, renderList } = bundle;
|
|
367
415
|
|
|
368
416
|
const renderContext = this._currentRenderContext;
|
|
369
|
-
const renderContextData = this.backend.get( renderContext );
|
|
370
417
|
|
|
371
418
|
//
|
|
372
419
|
|
|
373
|
-
const renderBundle = this._bundles.get(
|
|
374
|
-
|
|
420
|
+
const renderBundle = this._bundles.get( bundleGroup, camera );
|
|
375
421
|
const renderBundleData = this.backend.get( renderBundle );
|
|
422
|
+
|
|
376
423
|
if ( renderBundleData.renderContexts === undefined ) renderBundleData.renderContexts = new Set();
|
|
377
424
|
|
|
378
425
|
//
|
|
379
426
|
|
|
380
|
-
const
|
|
427
|
+
const needsUpdate = bundleGroup.version !== renderBundleData.version;
|
|
428
|
+
const renderBundleNeedsUpdate = renderBundleData.renderContexts.has( renderContext ) === false || needsUpdate;
|
|
381
429
|
|
|
382
430
|
renderBundleData.renderContexts.add( renderContext );
|
|
383
431
|
|
|
384
432
|
if ( renderBundleNeedsUpdate ) {
|
|
385
433
|
|
|
386
|
-
|
|
434
|
+
this.backend.beginBundle( renderContext );
|
|
387
435
|
|
|
388
|
-
|
|
436
|
+
if ( renderBundleData.renderObjects === undefined || needsUpdate ) {
|
|
389
437
|
|
|
390
|
-
|
|
391
|
-
renderContextData.renderBundles = [];
|
|
392
|
-
renderContextData.scene = sceneRef;
|
|
393
|
-
renderContextData.camera = camera;
|
|
394
|
-
renderContextData.renderId = nodeFrame.renderId;
|
|
395
|
-
|
|
396
|
-
renderContextData.registerBundlesPhase = true;
|
|
438
|
+
renderBundleData.renderObjects = [];
|
|
397
439
|
|
|
398
440
|
}
|
|
399
441
|
|
|
@@ -407,35 +449,35 @@ class Renderer {
|
|
|
407
449
|
|
|
408
450
|
//
|
|
409
451
|
|
|
410
|
-
|
|
452
|
+
this.backend.finishBundle( renderContext, renderBundle );
|
|
411
453
|
|
|
412
|
-
|
|
454
|
+
renderBundleData.version = bundleGroup.version;
|
|
413
455
|
|
|
414
|
-
|
|
415
|
-
const renderContextData = this.backend.get( renderContext );
|
|
456
|
+
} else {
|
|
416
457
|
|
|
417
|
-
|
|
458
|
+
const { renderObjects } = renderBundleData;
|
|
418
459
|
|
|
419
|
-
|
|
460
|
+
for ( let i = 0, l = renderObjects.length; i < l; i ++ ) {
|
|
420
461
|
|
|
421
|
-
|
|
462
|
+
const renderObject = renderObjects[ i ];
|
|
422
463
|
|
|
423
|
-
|
|
464
|
+
if ( this._nodes.needsRefresh( renderObject ) ) {
|
|
424
465
|
|
|
425
|
-
|
|
426
|
-
renderObject.object.normalMatrix.getNormalMatrix( renderObject.object.modelViewMatrix );
|
|
466
|
+
this._nodes.updateBefore( renderObject );
|
|
427
467
|
|
|
428
|
-
|
|
429
|
-
|
|
468
|
+
this._nodes.updateForRender( renderObject );
|
|
469
|
+
this._bindings.updateForRender( renderObject );
|
|
430
470
|
|
|
431
|
-
|
|
471
|
+
this._nodes.updateAfter( renderObject );
|
|
432
472
|
|
|
433
|
-
|
|
473
|
+
}
|
|
434
474
|
|
|
435
475
|
}
|
|
436
476
|
|
|
437
477
|
}
|
|
438
478
|
|
|
479
|
+
this.backend.addBundle( renderContext, renderBundle );
|
|
480
|
+
|
|
439
481
|
}
|
|
440
482
|
|
|
441
483
|
render( scene, camera ) {
|
|
@@ -454,10 +496,10 @@ class Renderer {
|
|
|
454
496
|
|
|
455
497
|
_getFrameBufferTarget() {
|
|
456
498
|
|
|
457
|
-
const { currentColorSpace } = this;
|
|
499
|
+
const { currentToneMapping, currentColorSpace } = this;
|
|
458
500
|
|
|
459
|
-
const useToneMapping =
|
|
460
|
-
const useColorSpace =
|
|
501
|
+
const useToneMapping = currentToneMapping !== NoToneMapping;
|
|
502
|
+
const useColorSpace = currentColorSpace !== LinearSRGBColorSpace;
|
|
461
503
|
|
|
462
504
|
if ( useToneMapping === false && useColorSpace === false ) return null;
|
|
463
505
|
|
|
@@ -674,10 +716,12 @@ class Renderer {
|
|
|
674
716
|
|
|
675
717
|
// process render lists
|
|
676
718
|
|
|
677
|
-
const
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
719
|
+
const {
|
|
720
|
+
bundles,
|
|
721
|
+
lightsNode,
|
|
722
|
+
transparent: transparentObjects,
|
|
723
|
+
opaque: opaqueObjects
|
|
724
|
+
} = renderList;
|
|
681
725
|
|
|
682
726
|
if ( bundles.length > 0 ) this._renderBundles( bundles, sceneRef, lightsNode );
|
|
683
727
|
if ( this.opaque === true && opaqueObjects.length > 0 ) this._renderObjects( opaqueObjects, camera, sceneRef, lightsNode );
|
|
@@ -1049,19 +1093,15 @@ class Renderer {
|
|
|
1049
1093
|
|
|
1050
1094
|
}
|
|
1051
1095
|
|
|
1052
|
-
get
|
|
1053
|
-
|
|
1054
|
-
const renderTarget = this._renderTarget;
|
|
1055
|
-
|
|
1056
|
-
if ( renderTarget !== null ) {
|
|
1096
|
+
get currentToneMapping() {
|
|
1057
1097
|
|
|
1058
|
-
|
|
1098
|
+
return this._renderTarget !== null ? NoToneMapping : this.toneMapping;
|
|
1059
1099
|
|
|
1060
|
-
|
|
1100
|
+
}
|
|
1061
1101
|
|
|
1062
|
-
|
|
1102
|
+
get currentColorSpace() {
|
|
1063
1103
|
|
|
1064
|
-
return this.outputColorSpace;
|
|
1104
|
+
return this._renderTarget !== null ? LinearSRGBColorSpace : this.outputColorSpace;
|
|
1065
1105
|
|
|
1066
1106
|
}
|
|
1067
1107
|
|
|
@@ -1208,13 +1248,15 @@ class Renderer {
|
|
|
1208
1248
|
|
|
1209
1249
|
}
|
|
1210
1250
|
|
|
1211
|
-
copyFramebufferToTexture( framebufferTexture ) {
|
|
1251
|
+
copyFramebufferToTexture( framebufferTexture, rectangle = null ) {
|
|
1212
1252
|
|
|
1213
1253
|
const renderContext = this._currentRenderContext;
|
|
1214
1254
|
|
|
1215
1255
|
this._textures.updateTexture( framebufferTexture );
|
|
1216
1256
|
|
|
1217
|
-
|
|
1257
|
+
rectangle = rectangle === null ? _vector4.set( 0, 0, framebufferTexture.image.width, framebufferTexture.image.height ) : rectangle;
|
|
1258
|
+
|
|
1259
|
+
this.backend.copyFramebufferToTexture( framebufferTexture, renderContext, rectangle );
|
|
1218
1260
|
|
|
1219
1261
|
}
|
|
1220
1262
|
|
|
@@ -1228,9 +1270,9 @@ class Renderer {
|
|
|
1228
1270
|
}
|
|
1229
1271
|
|
|
1230
1272
|
|
|
1231
|
-
readRenderTargetPixelsAsync( renderTarget, x, y, width, height, index = 0 ) {
|
|
1273
|
+
readRenderTargetPixelsAsync( renderTarget, x, y, width, height, index = 0, faceIndex = 0 ) {
|
|
1232
1274
|
|
|
1233
|
-
return this.backend.copyTextureToBuffer( renderTarget.textures[ index ], x, y, width, height );
|
|
1275
|
+
return this.backend.copyTextureToBuffer( renderTarget.textures[ index ], x, y, width, height, faceIndex );
|
|
1234
1276
|
|
|
1235
1277
|
}
|
|
1236
1278
|
|
|
@@ -1260,16 +1302,15 @@ class Renderer {
|
|
|
1260
1302
|
|
|
1261
1303
|
if ( this.sortObjects === true ) {
|
|
1262
1304
|
|
|
1263
|
-
|
|
1305
|
+
_vector4.setFromMatrixPosition( object.matrixWorld ).applyMatrix4( _projScreenMatrix );
|
|
1264
1306
|
|
|
1265
1307
|
}
|
|
1266
1308
|
|
|
1267
|
-
const geometry = object
|
|
1268
|
-
const material = object.material;
|
|
1309
|
+
const { geometry, material } = object;
|
|
1269
1310
|
|
|
1270
1311
|
if ( material.visible ) {
|
|
1271
1312
|
|
|
1272
|
-
renderList.push( object, geometry, material, groupOrder,
|
|
1313
|
+
renderList.push( object, geometry, material, groupOrder, _vector4.z, null );
|
|
1273
1314
|
|
|
1274
1315
|
}
|
|
1275
1316
|
|
|
@@ -1283,14 +1324,13 @@ class Renderer {
|
|
|
1283
1324
|
|
|
1284
1325
|
if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {
|
|
1285
1326
|
|
|
1286
|
-
const geometry = object
|
|
1287
|
-
const material = object.material;
|
|
1327
|
+
const { geometry, material } = object;
|
|
1288
1328
|
|
|
1289
1329
|
if ( this.sortObjects === true ) {
|
|
1290
1330
|
|
|
1291
1331
|
if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();
|
|
1292
1332
|
|
|
1293
|
-
|
|
1333
|
+
_vector4
|
|
1294
1334
|
.copy( geometry.boundingSphere.center )
|
|
1295
1335
|
.applyMatrix4( object.matrixWorld )
|
|
1296
1336
|
.applyMatrix4( _projScreenMatrix );
|
|
@@ -1308,7 +1348,7 @@ class Renderer {
|
|
|
1308
1348
|
|
|
1309
1349
|
if ( groupMaterial && groupMaterial.visible ) {
|
|
1310
1350
|
|
|
1311
|
-
renderList.push( object, geometry, groupMaterial, groupOrder,
|
|
1351
|
+
renderList.push( object, geometry, groupMaterial, groupOrder, _vector4.z, group );
|
|
1312
1352
|
|
|
1313
1353
|
}
|
|
1314
1354
|
|
|
@@ -1316,7 +1356,7 @@ class Renderer {
|
|
|
1316
1356
|
|
|
1317
1357
|
} else if ( material.visible ) {
|
|
1318
1358
|
|
|
1319
|
-
renderList.push( object, geometry, material, groupOrder,
|
|
1359
|
+
renderList.push( object, geometry, material, groupOrder, _vector4.z, null );
|
|
1320
1360
|
|
|
1321
1361
|
}
|
|
1322
1362
|
|
|
@@ -1326,7 +1366,7 @@ class Renderer {
|
|
|
1326
1366
|
|
|
1327
1367
|
}
|
|
1328
1368
|
|
|
1329
|
-
if ( object.
|
|
1369
|
+
if ( object.isBundleGroup === true && this.backend.beginBundle !== undefined ) {
|
|
1330
1370
|
|
|
1331
1371
|
const baseRenderList = renderList;
|
|
1332
1372
|
|
|
@@ -1336,7 +1376,7 @@ class Renderer {
|
|
|
1336
1376
|
renderList.begin();
|
|
1337
1377
|
|
|
1338
1378
|
baseRenderList.pushBundle( {
|
|
1339
|
-
object,
|
|
1379
|
+
bundleGroup: object,
|
|
1340
1380
|
camera,
|
|
1341
1381
|
renderList,
|
|
1342
1382
|
} );
|
|
@@ -1536,46 +1576,41 @@ class Renderer {
|
|
|
1536
1576
|
_renderObjectDirect( object, material, scene, camera, lightsNode, group, passId ) {
|
|
1537
1577
|
|
|
1538
1578
|
const renderObject = this._objects.get( object, material, scene, camera, lightsNode, this._currentRenderContext, passId );
|
|
1539
|
-
renderObject.drawRange =
|
|
1579
|
+
renderObject.drawRange = object.geometry.drawRange;
|
|
1580
|
+
renderObject.group = group;
|
|
1540
1581
|
|
|
1541
1582
|
//
|
|
1542
1583
|
|
|
1543
|
-
this._nodes.
|
|
1584
|
+
const needsRefresh = this._nodes.needsRefresh( renderObject );
|
|
1544
1585
|
|
|
1545
|
-
|
|
1586
|
+
if ( needsRefresh ) {
|
|
1546
1587
|
|
|
1547
|
-
|
|
1548
|
-
object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
|
|
1588
|
+
this._nodes.updateBefore( renderObject );
|
|
1549
1589
|
|
|
1550
|
-
|
|
1590
|
+
this._geometries.updateForRender( renderObject );
|
|
1591
|
+
|
|
1592
|
+
this._nodes.updateForRender( renderObject );
|
|
1593
|
+
this._bindings.updateForRender( renderObject );
|
|
1594
|
+
|
|
1595
|
+
}
|
|
1551
1596
|
|
|
1552
|
-
this._nodes.updateForRender( renderObject );
|
|
1553
|
-
this._geometries.updateForRender( renderObject );
|
|
1554
|
-
this._bindings.updateForRender( renderObject );
|
|
1555
1597
|
this._pipelines.updateForRender( renderObject );
|
|
1556
1598
|
|
|
1557
1599
|
//
|
|
1558
1600
|
|
|
1559
|
-
if ( this._currentRenderBundle !== null
|
|
1601
|
+
if ( this._currentRenderBundle !== null ) {
|
|
1602
|
+
|
|
1603
|
+
const renderBundleData = this.backend.get( this._currentRenderBundle );
|
|
1560
1604
|
|
|
1561
|
-
|
|
1605
|
+
renderBundleData.renderObjects.push( renderObject );
|
|
1562
1606
|
|
|
1563
|
-
|
|
1564
|
-
renderObjectData.lastPipelineGPU = undefined;
|
|
1607
|
+
renderObject.bundle = this._currentRenderBundle.scene;
|
|
1565
1608
|
|
|
1566
1609
|
}
|
|
1567
1610
|
|
|
1568
1611
|
this.backend.draw( renderObject, this.info );
|
|
1569
1612
|
|
|
1570
|
-
if ( this.
|
|
1571
|
-
|
|
1572
|
-
const renderContextData = this.backend.get( this._currentRenderContext );
|
|
1573
|
-
|
|
1574
|
-
renderContextData.renderObjects.push( renderObject );
|
|
1575
|
-
|
|
1576
|
-
}
|
|
1577
|
-
|
|
1578
|
-
this._nodes.updateAfter( renderObject );
|
|
1613
|
+
if ( needsRefresh ) this._nodes.updateAfter( renderObject );
|
|
1579
1614
|
|
|
1580
1615
|
}
|
|
1581
1616
|
|
|
@@ -1587,10 +1622,9 @@ class Renderer {
|
|
|
1587
1622
|
|
|
1588
1623
|
this._nodes.updateBefore( renderObject );
|
|
1589
1624
|
|
|
1590
|
-
|
|
1625
|
+
this._geometries.updateForRender( renderObject );
|
|
1591
1626
|
|
|
1592
1627
|
this._nodes.updateForRender( renderObject );
|
|
1593
|
-
this._geometries.updateForRender( renderObject );
|
|
1594
1628
|
this._bindings.updateForRender( renderObject );
|
|
1595
1629
|
|
|
1596
1630
|
this._pipelines.getForRender( renderObject, this._compilationPromises );
|
|
@@ -13,16 +13,25 @@ class SampledTexture extends Binding {
|
|
|
13
13
|
this.texture = texture;
|
|
14
14
|
this.version = texture ? texture.version : 0;
|
|
15
15
|
this.store = false;
|
|
16
|
+
this.generation = null;
|
|
16
17
|
|
|
17
18
|
this.isSampledTexture = true;
|
|
18
19
|
|
|
19
20
|
}
|
|
20
21
|
|
|
21
|
-
|
|
22
|
+
needsBindingsUpdate( generation ) {
|
|
22
23
|
|
|
23
|
-
const { texture
|
|
24
|
+
const { texture } = this;
|
|
25
|
+
|
|
26
|
+
if ( generation !== this.generation ) {
|
|
27
|
+
|
|
28
|
+
this.generation = generation;
|
|
29
|
+
|
|
30
|
+
return true;
|
|
31
|
+
|
|
32
|
+
}
|
|
24
33
|
|
|
25
|
-
return texture.isVideoTexture
|
|
34
|
+
return texture.isVideoTexture;
|
|
26
35
|
|
|
27
36
|
}
|
|
28
37
|
|
|
@@ -25,10 +25,9 @@ class Textures extends DataMap {
|
|
|
25
25
|
const sampleCount = renderTarget.samples === 0 ? 1 : renderTarget.samples;
|
|
26
26
|
const depthTextureMips = renderTargetData.depthTextureMips || ( renderTargetData.depthTextureMips = {} );
|
|
27
27
|
|
|
28
|
-
const texture = renderTarget.texture;
|
|
29
28
|
const textures = renderTarget.textures;
|
|
30
29
|
|
|
31
|
-
const size = this.getSize(
|
|
30
|
+
const size = this.getSize( textures[ 0 ] );
|
|
32
31
|
|
|
33
32
|
const mipWidth = size.width >> activeMipmapLevel;
|
|
34
33
|
const mipHeight = size.height >> activeMipmapLevel;
|
|
@@ -103,17 +102,9 @@ class Textures extends DataMap {
|
|
|
103
102
|
|
|
104
103
|
renderTarget.removeEventListener( 'dispose', onDispose );
|
|
105
104
|
|
|
106
|
-
|
|
105
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
107
106
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
this._destroyTexture( textures[ i ] );
|
|
111
|
-
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
} else {
|
|
115
|
-
|
|
116
|
-
this._destroyTexture( texture );
|
|
107
|
+
this._destroyTexture( textures[ i ] );
|
|
117
108
|
|
|
118
109
|
}
|
|
119
110
|
|
|
@@ -182,6 +173,8 @@ class Textures extends DataMap {
|
|
|
182
173
|
backend.createSampler( texture );
|
|
183
174
|
backend.createTexture( texture, options );
|
|
184
175
|
|
|
176
|
+
textureData.generation = texture.version;
|
|
177
|
+
|
|
185
178
|
} else {
|
|
186
179
|
|
|
187
180
|
const needsCreate = textureData.initialized !== true;
|
|
@@ -225,6 +218,7 @@ class Textures extends DataMap {
|
|
|
225
218
|
backend.createTexture( texture, options );
|
|
226
219
|
|
|
227
220
|
textureData.isDefaultTexture = false;
|
|
221
|
+
textureData.generation = texture.version;
|
|
228
222
|
|
|
229
223
|
}
|
|
230
224
|
|
|
@@ -241,6 +235,7 @@ class Textures extends DataMap {
|
|
|
241
235
|
backend.createDefaultTexture( texture );
|
|
242
236
|
|
|
243
237
|
textureData.isDefaultTexture = true;
|
|
238
|
+
textureData.generation = texture.version;
|
|
244
239
|
|
|
245
240
|
}
|
|
246
241
|
|
|
@@ -251,6 +246,7 @@ class Textures extends DataMap {
|
|
|
251
246
|
if ( textureData.initialized !== true ) {
|
|
252
247
|
|
|
253
248
|
textureData.initialized = true;
|
|
249
|
+
textureData.generation = texture.version;
|
|
254
250
|
|
|
255
251
|
//
|
|
256
252
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import NodeMaterial from '../../../nodes/
|
|
1
|
+
import NodeMaterial from '../../../materials/nodes/NodeMaterial.js';
|
|
2
2
|
import { getDirection, blur } from '../../../nodes/pmrem/PMREMUtils.js';
|
|
3
3
|
import { equirectUV } from '../../../nodes/utils/EquirectUVNode.js';
|
|
4
4
|
import { uniform } from '../../../nodes/core/UniformNode.js';
|
|
5
|
-
import {
|
|
5
|
+
import { uniformArray } from '../../../nodes/accessors/UniformArrayNode.js';
|
|
6
6
|
import { texture } from '../../../nodes/accessors/TextureNode.js';
|
|
7
7
|
import { cubeTexture } from '../../../nodes/accessors/CubeTextureNode.js';
|
|
8
|
-
import { float, vec3 } from '../../../nodes/
|
|
9
|
-
import { uv } from '../../../nodes/accessors/
|
|
8
|
+
import { float, vec3 } from '../../../nodes/tsl/TSLBase.js';
|
|
9
|
+
import { uv } from '../../../nodes/accessors/UV.js';
|
|
10
10
|
import { attribute } from '../../../nodes/core/AttributeNode.js';
|
|
11
11
|
|
|
12
12
|
import { OrthographicCamera } from '../../../cameras/OrthographicCamera.js';
|
|
@@ -176,12 +176,12 @@ class PMREMGenerator {
|
|
|
176
176
|
* Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during
|
|
177
177
|
* your texture's network fetch for increased concurrency.
|
|
178
178
|
*/
|
|
179
|
-
compileCubemapShader() {
|
|
179
|
+
async compileCubemapShader() {
|
|
180
180
|
|
|
181
181
|
if ( this._cubemapMaterial === null ) {
|
|
182
182
|
|
|
183
183
|
this._cubemapMaterial = _getCubemapMaterial();
|
|
184
|
-
this._compileMaterial( this._cubemapMaterial );
|
|
184
|
+
await this._compileMaterial( this._cubemapMaterial );
|
|
185
185
|
|
|
186
186
|
}
|
|
187
187
|
|
|
@@ -191,12 +191,12 @@ class PMREMGenerator {
|
|
|
191
191
|
* Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during
|
|
192
192
|
* your texture's network fetch for increased concurrency.
|
|
193
193
|
*/
|
|
194
|
-
compileEquirectangularShader() {
|
|
194
|
+
async compileEquirectangularShader() {
|
|
195
195
|
|
|
196
196
|
if ( this._equirectMaterial === null ) {
|
|
197
197
|
|
|
198
198
|
this._equirectMaterial = _getEquirectMaterial();
|
|
199
|
-
this._compileMaterial( this._equirectMaterial );
|
|
199
|
+
await this._compileMaterial( this._equirectMaterial );
|
|
200
200
|
|
|
201
201
|
}
|
|
202
202
|
|
|
@@ -316,12 +316,10 @@ class PMREMGenerator {
|
|
|
316
316
|
|
|
317
317
|
}
|
|
318
318
|
|
|
319
|
-
_compileMaterial( material ) {
|
|
319
|
+
async _compileMaterial( material ) {
|
|
320
320
|
|
|
321
|
-
const tmpMesh = this.
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
this._renderer.compile( tmpMesh, _flatCamera );
|
|
321
|
+
const tmpMesh = new Mesh( this._lodPlanes[ 0 ], material );
|
|
322
|
+
await this._renderer.compile( tmpMesh, _flatCamera );
|
|
325
323
|
|
|
326
324
|
}
|
|
327
325
|
|
|
@@ -698,19 +696,18 @@ function _createRenderTarget( width, height, params ) {
|
|
|
698
696
|
|
|
699
697
|
function _setViewport( target, x, y, width, height ) {
|
|
700
698
|
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
target.viewport.set( x, viewY, width, height );
|
|
704
|
-
target.scissor.set( x, viewY, width, height );
|
|
699
|
+
target.viewport.set( x, y, width, height );
|
|
700
|
+
target.scissor.set( x, y, width, height );
|
|
705
701
|
|
|
706
702
|
}
|
|
707
703
|
|
|
708
|
-
function _getMaterial() {
|
|
704
|
+
function _getMaterial( type ) {
|
|
709
705
|
|
|
710
706
|
const material = new NodeMaterial();
|
|
711
707
|
material.depthTest = false;
|
|
712
708
|
material.depthWrite = false;
|
|
713
709
|
material.blending = NoBlending;
|
|
710
|
+
material.name = `PMREM_${ type }`;
|
|
714
711
|
|
|
715
712
|
return material;
|
|
716
713
|
|
|
@@ -718,7 +715,7 @@ function _getMaterial() {
|
|
|
718
715
|
|
|
719
716
|
function _getBlurShader( lodMax, width, height ) {
|
|
720
717
|
|
|
721
|
-
const weights =
|
|
718
|
+
const weights = uniformArray( new Array( MAX_SAMPLES ).fill( 0 ) );
|
|
722
719
|
const poleAxis = uniform( new Vector3( 0, 1, 0 ) );
|
|
723
720
|
const dTheta = uniform( 0 );
|
|
724
721
|
const n = float( MAX_SAMPLES );
|
|
@@ -745,7 +742,7 @@ function _getBlurShader( lodMax, width, height ) {
|
|
|
745
742
|
CUBEUV_MAX_MIP
|
|
746
743
|
};
|
|
747
744
|
|
|
748
|
-
const material = _getMaterial();
|
|
745
|
+
const material = _getMaterial( 'blur' );
|
|
749
746
|
material.uniforms = materialUniforms; // TODO: Move to outside of the material
|
|
750
747
|
material.fragmentNode = blur( { ...materialUniforms, latitudinal: latitudinal.equal( 1 ) } );
|
|
751
748
|
|
|
@@ -755,7 +752,7 @@ function _getBlurShader( lodMax, width, height ) {
|
|
|
755
752
|
|
|
756
753
|
function _getCubemapMaterial( envTexture ) {
|
|
757
754
|
|
|
758
|
-
const material = _getMaterial();
|
|
755
|
+
const material = _getMaterial( 'cubemap' );
|
|
759
756
|
material.fragmentNode = cubeTexture( envTexture, outputDirection );
|
|
760
757
|
|
|
761
758
|
return material;
|
|
@@ -764,7 +761,7 @@ function _getCubemapMaterial( envTexture ) {
|
|
|
764
761
|
|
|
765
762
|
function _getEquirectMaterial( envTexture ) {
|
|
766
763
|
|
|
767
|
-
const material = _getMaterial();
|
|
764
|
+
const material = _getMaterial( 'equirect' );
|
|
768
765
|
material.fragmentNode = texture( envTexture, equirectUV( outputDirection ), 0 );
|
|
769
766
|
|
|
770
767
|
return material;
|