@plastic-software/three 0.182.0 → 0.183.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/build/three.cjs +11520 -10877
- package/build/three.core.js +11732 -11340
- package/build/three.core.min.js +2 -2
- package/build/three.module.js +509 -262
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +7 -11
- package/build/three.tsl.min.js +2 -2
- package/build/three.webgpu.js +3072 -2607
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +3071 -2607
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/jsm/Addons.js +0 -3
- package/examples/jsm/animation/CCDIKSolver.js +2 -2
- package/examples/jsm/controls/ArcballControls.js +3 -3
- package/examples/jsm/controls/OrbitControls.js +103 -0
- package/examples/jsm/effects/AnaglyphEffect.js +102 -7
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/RoomEnvironment.js +1 -0
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +131 -4
- package/examples/jsm/exporters/USDZExporter.js +22 -3
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/ViewHelper.js +67 -8
- package/examples/jsm/inspector/Inspector.js +21 -5
- package/examples/jsm/inspector/tabs/Console.js +39 -5
- package/examples/jsm/inspector/tabs/Parameters.js +16 -0
- package/examples/jsm/inspector/ui/Style.js +25 -1
- package/examples/jsm/libs/meshopt_decoder.module.js +6 -5
- package/examples/jsm/lines/LineMaterial.js +6 -0
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +24 -4026
- package/examples/jsm/loaders/EXRLoader.js +5 -5
- package/examples/jsm/loaders/FBXLoader.js +2 -2
- package/examples/jsm/loaders/GCodeLoader.js +34 -8
- package/examples/jsm/loaders/GLTFLoader.js +122 -171
- package/examples/jsm/loaders/KMZLoader.js +5 -5
- package/examples/jsm/loaders/KTX2Loader.js +5 -5
- package/examples/jsm/loaders/LWOLoader.js +7 -39
- package/examples/jsm/loaders/NRRDLoader.js +2 -2
- package/examples/jsm/loaders/PCDLoader.js +3 -2
- package/examples/jsm/loaders/USDLoader.js +100 -40
- package/examples/jsm/loaders/UltraHDRLoader.js +182 -30
- package/examples/jsm/loaders/VRMLLoader.js +77 -0
- package/examples/jsm/loaders/VTKLoader.js +37 -24
- package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
- package/examples/jsm/loaders/usd/USDAParser.js +447 -366
- package/examples/jsm/loaders/usd/USDCParser.js +1841 -6
- package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +2 -2
- package/examples/jsm/objects/LensflareMesh.js +1 -1
- package/examples/jsm/objects/Sky.js +76 -4
- package/examples/jsm/objects/SkyMesh.js +114 -7
- package/examples/jsm/objects/Water.js +4 -3
- package/examples/jsm/objects/Water2.js +5 -3
- package/examples/jsm/objects/WaterMesh.js +5 -7
- package/examples/jsm/physics/JoltPhysics.js +7 -5
- package/examples/jsm/physics/RapierPhysics.js +6 -4
- package/examples/jsm/postprocessing/EffectComposer.js +7 -5
- package/examples/jsm/postprocessing/RenderTransitionPass.js +1 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +1 -1
- package/examples/jsm/renderers/SVGRenderer.js +2 -2
- package/examples/jsm/shaders/GTAOShader.js +19 -6
- package/examples/jsm/shaders/HalftoneShader.js +12 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +6 -2
- package/examples/jsm/shaders/SAOShader.js +17 -4
- package/examples/jsm/shaders/SSAOShader.js +11 -1
- package/examples/jsm/shaders/SSRShader.js +6 -5
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +456 -16
- package/examples/jsm/tsl/display/AnamorphicNode.js +1 -1
- package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
- package/examples/jsm/tsl/display/BloomNode.js +5 -5
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +1 -1
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +1 -1
- package/examples/jsm/tsl/display/DotScreenNode.js +1 -1
- package/examples/jsm/tsl/display/FXAANode.js +2 -2
- package/examples/jsm/tsl/display/GTAONode.js +2 -2
- package/examples/jsm/tsl/display/GaussianBlurNode.js +11 -2
- package/examples/jsm/tsl/display/GodraysNode.js +624 -0
- package/examples/jsm/tsl/display/LensflareNode.js +1 -1
- package/examples/jsm/tsl/display/Lut3DNode.js +1 -1
- package/examples/jsm/tsl/display/OutlineNode.js +3 -3
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -2
- package/examples/jsm/tsl/display/PixelationPassNode.js +5 -5
- package/examples/jsm/tsl/display/RGBShiftNode.js +2 -2
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +2 -2
- package/examples/jsm/tsl/display/SSAAPassNode.js +2 -2
- package/examples/jsm/tsl/display/SSGINode.js +2 -2
- package/examples/jsm/tsl/display/SSRNode.js +7 -7
- package/examples/jsm/tsl/display/SSSNode.js +2 -2
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -2
- package/examples/jsm/tsl/display/StereoPassNode.js +1 -2
- package/examples/jsm/tsl/display/TRAANode.js +9 -12
- package/examples/jsm/tsl/display/TransitionNode.js +1 -1
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/math/Bayer.js +40 -1
- package/examples/jsm/utils/LDrawUtils.js +1 -1
- package/package.json +11 -19
- package/src/Three.Core.js +1 -1
- package/src/Three.TSL.js +5 -9
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +3 -0
- package/src/Three.js +1 -0
- package/src/animation/AnimationAction.js +1 -1
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +6 -0
- package/src/animation/KeyframeTrack.js +46 -7
- package/src/animation/PropertyMixer.js +4 -4
- package/src/audio/Audio.js +1 -1
- package/src/audio/AudioListener.js +5 -3
- package/src/cameras/Camera.js +32 -2
- package/src/cameras/CubeCamera.js +20 -0
- package/src/constants.js +30 -1
- package/src/core/Clock.js +7 -0
- package/src/core/Object3D.js +56 -4
- package/src/core/RenderTarget.js +3 -4
- package/src/extras/PMREMGenerator.js +4 -8
- package/src/geometries/TorusGeometry.js +8 -3
- package/src/helpers/CameraHelper.js +3 -0
- package/src/helpers/DirectionalLightHelper.js +4 -1
- package/src/helpers/HemisphereLightHelper.js +3 -0
- package/src/helpers/PointLightHelper.js +0 -24
- package/src/helpers/SpotLightHelper.js +3 -0
- package/src/lights/LightShadow.js +15 -3
- package/src/lights/webgpu/IESSpotLight.js +2 -1
- package/src/loaders/Cache.js +28 -0
- package/src/loaders/FileLoader.js +1 -1
- package/src/loaders/ImageBitmapLoader.js +8 -3
- package/src/loaders/Loader.js +6 -0
- package/src/loaders/ObjectLoader.js +18 -1
- package/src/materials/MeshLambertMaterial.js +9 -0
- package/src/materials/MeshPhongMaterial.js +9 -0
- package/src/materials/nodes/Line2NodeMaterial.js +5 -5
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -0
- package/src/materials/nodes/NodeMaterial.js +15 -24
- package/src/materials/nodes/manager/NodeMaterialObserver.js +9 -3
- package/src/math/Line3.js +3 -5
- package/src/math/MathUtils.js +10 -10
- package/src/math/Matrix4.js +35 -26
- package/src/math/Quaternion.js +3 -29
- package/src/math/Vector3.js +3 -3
- package/src/math/interpolants/BezierInterpolant.js +108 -0
- package/src/nodes/Nodes.js +87 -68
- package/src/nodes/TSL.js +2 -5
- package/src/nodes/accessors/Arrays.js +1 -1
- package/src/nodes/accessors/Bitangent.js +5 -5
- package/src/nodes/accessors/BufferAttributeNode.js +1 -1
- package/src/nodes/accessors/Camera.js +149 -28
- package/src/nodes/accessors/InstanceNode.js +105 -40
- package/src/nodes/accessors/Normal.js +9 -9
- package/src/nodes/accessors/Position.js +34 -2
- package/src/nodes/accessors/SceneProperties.js +53 -0
- package/src/nodes/accessors/SkinningNode.js +12 -24
- package/src/nodes/accessors/StorageBufferNode.js +0 -19
- package/src/nodes/accessors/StorageTextureNode.js +37 -1
- package/src/nodes/accessors/Tangent.js +3 -3
- package/src/nodes/accessors/Texture3DNode.js +6 -34
- package/src/nodes/accessors/TextureNode.js +58 -22
- package/src/nodes/accessors/UniformArrayNode.js +2 -0
- package/src/nodes/core/MRTNode.js +48 -2
- package/src/nodes/core/Node.js +29 -3
- package/src/nodes/core/NodeBuilder.js +115 -40
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeUtils.js +5 -3
- package/src/nodes/core/OutputStructNode.js +12 -10
- package/src/nodes/core/ParameterNode.js +2 -1
- package/src/nodes/core/StackNode.js +9 -8
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +15 -0
- package/src/nodes/core/SubBuildNode.js +1 -1
- package/src/nodes/core/UniformNode.js +2 -1
- package/src/nodes/core/VarNode.js +1 -1
- package/src/nodes/core/VaryingNode.js +1 -18
- package/src/nodes/display/BlendModes.js +0 -64
- package/src/nodes/display/ColorAdjustment.js +17 -0
- package/src/nodes/display/ColorSpaceNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +2 -2
- package/src/nodes/display/PassNode.js +21 -2
- package/src/nodes/display/RenderOutputNode.js +3 -3
- package/src/nodes/display/ScreenNode.js +2 -1
- package/src/nodes/display/ToneMappingNode.js +1 -1
- package/src/nodes/display/ToonOutlinePassNode.js +2 -2
- package/src/nodes/display/ViewportDepthNode.js +52 -4
- package/src/nodes/display/ViewportTextureNode.js +21 -4
- package/src/nodes/fog/Fog.js +18 -35
- package/src/nodes/functions/PhysicalLightingModel.js +25 -3
- package/src/nodes/geometry/RangeNode.js +4 -2
- package/src/nodes/gpgpu/ComputeNode.js +5 -4
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
- package/src/nodes/lighting/EnvironmentNode.js +28 -3
- package/src/nodes/lighting/PointShadowNode.js +24 -12
- package/src/nodes/lighting/ShadowFilterNode.js +15 -43
- package/src/nodes/lighting/ShadowNode.js +54 -32
- package/src/nodes/math/ConditionalNode.js +2 -2
- package/src/nodes/math/MathNode.js +3 -40
- package/src/nodes/math/OperatorNode.js +2 -1
- package/src/nodes/pmrem/PMREMUtils.js +9 -15
- package/src/nodes/tsl/TSLCore.js +13 -10
- package/src/nodes/utils/DebugNode.js +11 -11
- package/src/nodes/utils/JoinNode.js +2 -2
- package/src/nodes/utils/LoopNode.js +1 -1
- package/src/nodes/utils/MemberNode.js +1 -1
- package/src/nodes/utils/RTTNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +2 -3
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/UVUtils.js +4 -2
- package/src/objects/BatchedMesh.js +22 -12
- package/src/objects/InstancedMesh.js +11 -0
- package/src/renderers/WebGLRenderer.js +34 -60
- package/src/renderers/common/Backend.js +21 -0
- package/src/renderers/common/Background.js +7 -4
- package/src/renderers/common/BindGroup.js +1 -9
- package/src/renderers/common/Bindings.js +20 -5
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/BundleGroup.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +50 -6
- package/src/renderers/common/Geometries.js +17 -3
- package/src/renderers/common/Lighting.js +5 -21
- package/src/renderers/common/Pipelines.js +4 -4
- package/src/renderers/common/PostProcessing.js +8 -206
- package/src/renderers/common/RenderBundles.js +2 -1
- package/src/renderers/common/RenderContext.js +16 -0
- package/src/renderers/common/RenderContexts.js +33 -56
- package/src/renderers/common/RenderLists.js +2 -1
- package/src/renderers/common/RenderObject.js +2 -3
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +18 -2
- package/src/renderers/common/RenderPipeline.js +203 -17
- package/src/renderers/common/Renderer.js +207 -40
- package/src/renderers/common/Sampler.js +4 -4
- package/src/renderers/common/StorageBuffer.js +13 -1
- package/src/renderers/common/Textures.js +16 -0
- package/src/renderers/common/TimestampQueryPool.js +5 -3
- package/src/renderers/common/Uniform.js +8 -0
- package/src/renderers/common/UniformsGroup.js +60 -0
- package/src/renderers/common/XRManager.js +2 -2
- package/src/renderers/common/nodes/NodeBuilderState.js +1 -1
- package/src/renderers/common/nodes/{Nodes.js → NodeManager.js} +18 -6
- package/src/renderers/common/nodes/NodeStorageBuffer.js +13 -2
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +23 -1
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +55 -24
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib.js +4 -2
- package/src/renderers/shaders/UniformsLib.js +0 -3
- package/src/renderers/webgl/WebGLBackground.js +2 -2
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLGeometries.js +10 -7
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +2 -2
- package/src/renderers/webgl/WebGLPrograms.js +10 -4
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLShadowMap.js +5 -4
- package/src/renderers/webgl/WebGLState.js +12 -17
- package/src/renderers/webgl-fallback/WebGLBackend.js +71 -7
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +98 -29
- package/src/renderers/webgl-fallback/utils/WebGLState.js +168 -7
- package/src/renderers/webgpu/WebGPUBackend.js +58 -9
- package/src/renderers/webgpu/WebGPURenderer.js +1 -0
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +257 -45
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +8 -19
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +56 -31
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +152 -200
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +25 -25
- package/src/renderers/webgpu/utils/WebGPUUtils.js +10 -6
- package/src/renderers/webxr/WebXRManager.js +2 -2
- package/src/textures/Texture.js +2 -2
- package/src/utils.js +246 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -433
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -167
- package/examples/jsm/shaders/GodRaysShader.js +0 -333
- package/src/nodes/accessors/SceneNode.js +0 -145
- package/src/nodes/code/ScriptableNode.js +0 -726
- package/src/nodes/code/ScriptableValueNode.js +0 -253
- package/src/nodes/display/PosterizeNode.js +0 -65
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -90
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -134
|
@@ -139,7 +139,6 @@ const UniformsLib = {
|
|
|
139
139
|
shadowMapSize: {}
|
|
140
140
|
} },
|
|
141
141
|
|
|
142
|
-
directionalShadowMap: { value: [] },
|
|
143
142
|
directionalShadowMatrix: { value: [] },
|
|
144
143
|
|
|
145
144
|
spotLights: { value: [], properties: {
|
|
@@ -161,7 +160,6 @@ const UniformsLib = {
|
|
|
161
160
|
} },
|
|
162
161
|
|
|
163
162
|
spotLightMap: { value: [] },
|
|
164
|
-
spotShadowMap: { value: [] },
|
|
165
163
|
spotLightMatrix: { value: [] },
|
|
166
164
|
|
|
167
165
|
pointLights: { value: [], properties: {
|
|
@@ -181,7 +179,6 @@ const UniformsLib = {
|
|
|
181
179
|
shadowCameraFar: {}
|
|
182
180
|
} },
|
|
183
181
|
|
|
184
|
-
pointShadowMap: { value: [] },
|
|
185
182
|
pointShadowMatrix: { value: [] },
|
|
186
183
|
|
|
187
184
|
hemisphereLights: { value: [], properties: {
|
|
@@ -14,7 +14,7 @@ const _rgb = { r: 0, b: 0, g: 0 };
|
|
|
14
14
|
const _e1 = /*@__PURE__*/ new Euler();
|
|
15
15
|
const _m1 = /*@__PURE__*/ new Matrix4();
|
|
16
16
|
|
|
17
|
-
function WebGLBackground( renderer,
|
|
17
|
+
function WebGLBackground( renderer, environments, state, objects, alpha, premultipliedAlpha ) {
|
|
18
18
|
|
|
19
19
|
const clearColor = new Color( 0x000000 );
|
|
20
20
|
let clearAlpha = alpha === true ? 0 : 1;
|
|
@@ -33,7 +33,7 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
|
|
|
33
33
|
if ( background && background.isTexture ) {
|
|
34
34
|
|
|
35
35
|
const usePMREM = scene.backgroundBlurriness > 0; // use PMREM if the user wants to blur the background
|
|
36
|
-
background =
|
|
36
|
+
background = environments.get( background, usePMREM );
|
|
37
37
|
|
|
38
38
|
}
|
|
39
39
|
|
|
@@ -14,7 +14,7 @@ function WebGLBindingStates( gl, attributes ) {
|
|
|
14
14
|
|
|
15
15
|
let updateBuffers = false;
|
|
16
16
|
|
|
17
|
-
const state = getBindingState( geometry, program, material );
|
|
17
|
+
const state = getBindingState( object, geometry, program, material );
|
|
18
18
|
|
|
19
19
|
if ( currentState !== state ) {
|
|
20
20
|
|
|
@@ -67,16 +67,28 @@ function WebGLBindingStates( gl, attributes ) {
|
|
|
67
67
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
function getBindingState( geometry, program, material ) {
|
|
70
|
+
function getBindingState( object, geometry, program, material ) {
|
|
71
71
|
|
|
72
72
|
const wireframe = ( material.wireframe === true );
|
|
73
73
|
|
|
74
|
-
let
|
|
74
|
+
let objectMap = bindingStates[ geometry.id ];
|
|
75
|
+
|
|
76
|
+
if ( objectMap === undefined ) {
|
|
77
|
+
|
|
78
|
+
objectMap = {};
|
|
79
|
+
bindingStates[ geometry.id ] = objectMap;
|
|
80
|
+
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Each InstancedMesh requires unique binding states because it contains instanced attributes.
|
|
84
|
+
const objectId = ( object.isInstancedMesh === true ) ? object.id : 0;
|
|
85
|
+
|
|
86
|
+
let programMap = objectMap[ objectId ];
|
|
75
87
|
|
|
76
88
|
if ( programMap === undefined ) {
|
|
77
89
|
|
|
78
90
|
programMap = {};
|
|
79
|
-
|
|
91
|
+
objectMap[ objectId ] = programMap;
|
|
80
92
|
|
|
81
93
|
}
|
|
82
94
|
|
|
@@ -477,21 +489,27 @@ function WebGLBindingStates( gl, attributes ) {
|
|
|
477
489
|
|
|
478
490
|
for ( const geometryId in bindingStates ) {
|
|
479
491
|
|
|
480
|
-
const
|
|
492
|
+
const objectMap = bindingStates[ geometryId ];
|
|
481
493
|
|
|
482
|
-
for ( const
|
|
494
|
+
for ( const objectId in objectMap ) {
|
|
483
495
|
|
|
484
|
-
const
|
|
496
|
+
const programMap = objectMap[ objectId ];
|
|
485
497
|
|
|
486
|
-
for ( const
|
|
498
|
+
for ( const programId in programMap ) {
|
|
487
499
|
|
|
488
|
-
|
|
500
|
+
const stateMap = programMap[ programId ];
|
|
489
501
|
|
|
490
|
-
|
|
502
|
+
for ( const wireframe in stateMap ) {
|
|
491
503
|
|
|
492
|
-
|
|
504
|
+
deleteVertexArrayObject( stateMap[ wireframe ].object );
|
|
493
505
|
|
|
494
|
-
|
|
506
|
+
delete stateMap[ wireframe ];
|
|
507
|
+
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
delete programMap[ programId ];
|
|
511
|
+
|
|
512
|
+
}
|
|
495
513
|
|
|
496
514
|
}
|
|
497
515
|
|
|
@@ -505,21 +523,27 @@ function WebGLBindingStates( gl, attributes ) {
|
|
|
505
523
|
|
|
506
524
|
if ( bindingStates[ geometry.id ] === undefined ) return;
|
|
507
525
|
|
|
508
|
-
const
|
|
526
|
+
const objectMap = bindingStates[ geometry.id ];
|
|
509
527
|
|
|
510
|
-
for ( const
|
|
528
|
+
for ( const objectId in objectMap ) {
|
|
511
529
|
|
|
512
|
-
const
|
|
530
|
+
const programMap = objectMap[ objectId ];
|
|
513
531
|
|
|
514
|
-
for ( const
|
|
532
|
+
for ( const programId in programMap ) {
|
|
515
533
|
|
|
516
|
-
|
|
534
|
+
const stateMap = programMap[ programId ];
|
|
517
535
|
|
|
518
|
-
|
|
536
|
+
for ( const wireframe in stateMap ) {
|
|
519
537
|
|
|
520
|
-
|
|
538
|
+
deleteVertexArrayObject( stateMap[ wireframe ].object );
|
|
521
539
|
|
|
522
|
-
|
|
540
|
+
delete stateMap[ wireframe ];
|
|
541
|
+
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
delete programMap[ programId ];
|
|
545
|
+
|
|
546
|
+
}
|
|
523
547
|
|
|
524
548
|
}
|
|
525
549
|
|
|
@@ -531,26 +555,73 @@ function WebGLBindingStates( gl, attributes ) {
|
|
|
531
555
|
|
|
532
556
|
for ( const geometryId in bindingStates ) {
|
|
533
557
|
|
|
534
|
-
const
|
|
558
|
+
const objectMap = bindingStates[ geometryId ];
|
|
559
|
+
|
|
560
|
+
for ( const objectId in objectMap ) {
|
|
561
|
+
|
|
562
|
+
const programMap = objectMap[ objectId ];
|
|
563
|
+
|
|
564
|
+
if ( programMap[ program.id ] === undefined ) continue;
|
|
565
|
+
|
|
566
|
+
const stateMap = programMap[ program.id ];
|
|
567
|
+
|
|
568
|
+
for ( const wireframe in stateMap ) {
|
|
569
|
+
|
|
570
|
+
deleteVertexArrayObject( stateMap[ wireframe ].object );
|
|
571
|
+
|
|
572
|
+
delete stateMap[ wireframe ];
|
|
573
|
+
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
delete programMap[ program.id ];
|
|
577
|
+
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
function releaseStatesOfObject( object ) {
|
|
585
|
+
|
|
586
|
+
for ( const geometryId in bindingStates ) {
|
|
587
|
+
|
|
588
|
+
const objectMap = bindingStates[ geometryId ];
|
|
535
589
|
|
|
536
|
-
|
|
590
|
+
const objectId = ( object.isInstancedMesh === true ) ? object.id : 0;
|
|
537
591
|
|
|
538
|
-
const
|
|
592
|
+
const programMap = objectMap[ objectId ];
|
|
539
593
|
|
|
540
|
-
|
|
594
|
+
if ( programMap === undefined ) continue;
|
|
541
595
|
|
|
542
|
-
|
|
596
|
+
for ( const programId in programMap ) {
|
|
543
597
|
|
|
544
|
-
|
|
598
|
+
const stateMap = programMap[ programId ];
|
|
599
|
+
|
|
600
|
+
for ( const wireframe in stateMap ) {
|
|
601
|
+
|
|
602
|
+
deleteVertexArrayObject( stateMap[ wireframe ].object );
|
|
603
|
+
|
|
604
|
+
delete stateMap[ wireframe ];
|
|
605
|
+
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
delete programMap[ programId ];
|
|
545
609
|
|
|
546
610
|
}
|
|
547
611
|
|
|
548
|
-
delete
|
|
612
|
+
delete objectMap[ objectId ];
|
|
613
|
+
|
|
614
|
+
if ( Object.keys( objectMap ).length === 0 ) {
|
|
615
|
+
|
|
616
|
+
delete bindingStates[ geometryId ];
|
|
617
|
+
|
|
618
|
+
}
|
|
549
619
|
|
|
550
620
|
}
|
|
551
621
|
|
|
552
622
|
}
|
|
553
623
|
|
|
624
|
+
|
|
554
625
|
function reset() {
|
|
555
626
|
|
|
556
627
|
resetDefaultState();
|
|
@@ -580,6 +651,7 @@ function WebGLBindingStates( gl, attributes ) {
|
|
|
580
651
|
resetDefaultState: resetDefaultState,
|
|
581
652
|
dispose: dispose,
|
|
582
653
|
releaseStatesOfGeometry: releaseStatesOfGeometry,
|
|
654
|
+
releaseStatesOfObject: releaseStatesOfObject,
|
|
583
655
|
releaseStatesOfProgram: releaseStatesOfProgram,
|
|
584
656
|
|
|
585
657
|
initAttributes: initAttributes,
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { CubeReflectionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../constants.js';
|
|
2
|
+
import { PMREMGenerator } from '../../extras/PMREMGenerator.js';
|
|
3
|
+
import { WebGLCubeRenderTarget } from '../WebGLCubeRenderTarget.js';
|
|
4
|
+
|
|
5
|
+
function WebGLEnvironments( renderer ) {
|
|
6
|
+
|
|
7
|
+
let cubeMaps = new WeakMap();
|
|
8
|
+
let pmremMaps = new WeakMap();
|
|
9
|
+
|
|
10
|
+
let pmremGenerator = null;
|
|
11
|
+
|
|
12
|
+
function get( texture, usePMREM = false ) {
|
|
13
|
+
|
|
14
|
+
if ( texture === null || texture === undefined ) return null;
|
|
15
|
+
|
|
16
|
+
if ( usePMREM ) {
|
|
17
|
+
|
|
18
|
+
return getPMREM( texture );
|
|
19
|
+
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return getCube( texture );
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function getCube( texture ) {
|
|
27
|
+
|
|
28
|
+
if ( texture && texture.isTexture ) {
|
|
29
|
+
|
|
30
|
+
const mapping = texture.mapping;
|
|
31
|
+
|
|
32
|
+
if ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {
|
|
33
|
+
|
|
34
|
+
if ( cubeMaps.has( texture ) ) {
|
|
35
|
+
|
|
36
|
+
const cubemap = cubeMaps.get( texture ).texture;
|
|
37
|
+
return mapTextureMapping( cubemap, texture.mapping );
|
|
38
|
+
|
|
39
|
+
} else {
|
|
40
|
+
|
|
41
|
+
const image = texture.image;
|
|
42
|
+
|
|
43
|
+
if ( image && image.height > 0 ) {
|
|
44
|
+
|
|
45
|
+
const renderTarget = new WebGLCubeRenderTarget( image.height );
|
|
46
|
+
renderTarget.fromEquirectangularTexture( renderer, texture );
|
|
47
|
+
cubeMaps.set( texture, renderTarget );
|
|
48
|
+
|
|
49
|
+
texture.addEventListener( 'dispose', onCubemapDispose );
|
|
50
|
+
|
|
51
|
+
return mapTextureMapping( renderTarget.texture, texture.mapping );
|
|
52
|
+
|
|
53
|
+
} else {
|
|
54
|
+
|
|
55
|
+
// image not yet ready. try the conversion next frame
|
|
56
|
+
|
|
57
|
+
return null;
|
|
58
|
+
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return texture;
|
|
68
|
+
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function getPMREM( texture ) {
|
|
72
|
+
|
|
73
|
+
if ( texture && texture.isTexture ) {
|
|
74
|
+
|
|
75
|
+
const mapping = texture.mapping;
|
|
76
|
+
|
|
77
|
+
const isEquirectMap = ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping );
|
|
78
|
+
const isCubeMap = ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );
|
|
79
|
+
|
|
80
|
+
// equirect/cube map to cubeUV conversion
|
|
81
|
+
|
|
82
|
+
if ( isEquirectMap || isCubeMap ) {
|
|
83
|
+
|
|
84
|
+
let renderTarget = pmremMaps.get( texture );
|
|
85
|
+
|
|
86
|
+
const currentPMREMVersion = renderTarget !== undefined ? renderTarget.texture.pmremVersion : 0;
|
|
87
|
+
|
|
88
|
+
if ( texture.isRenderTargetTexture && texture.pmremVersion !== currentPMREMVersion ) {
|
|
89
|
+
|
|
90
|
+
if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );
|
|
91
|
+
|
|
92
|
+
renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture, renderTarget ) : pmremGenerator.fromCubemap( texture, renderTarget );
|
|
93
|
+
renderTarget.texture.pmremVersion = texture.pmremVersion;
|
|
94
|
+
|
|
95
|
+
pmremMaps.set( texture, renderTarget );
|
|
96
|
+
|
|
97
|
+
return renderTarget.texture;
|
|
98
|
+
|
|
99
|
+
} else {
|
|
100
|
+
|
|
101
|
+
if ( renderTarget !== undefined ) {
|
|
102
|
+
|
|
103
|
+
return renderTarget.texture;
|
|
104
|
+
|
|
105
|
+
} else {
|
|
106
|
+
|
|
107
|
+
const image = texture.image;
|
|
108
|
+
|
|
109
|
+
if ( ( isEquirectMap && image && image.height > 0 ) || ( isCubeMap && image && isCubeTextureComplete( image ) ) ) {
|
|
110
|
+
|
|
111
|
+
if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );
|
|
112
|
+
|
|
113
|
+
renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );
|
|
114
|
+
renderTarget.texture.pmremVersion = texture.pmremVersion;
|
|
115
|
+
|
|
116
|
+
pmremMaps.set( texture, renderTarget );
|
|
117
|
+
|
|
118
|
+
texture.addEventListener( 'dispose', onPMREMDispose );
|
|
119
|
+
|
|
120
|
+
return renderTarget.texture;
|
|
121
|
+
|
|
122
|
+
} else {
|
|
123
|
+
|
|
124
|
+
// image not yet ready. try the conversion next frame
|
|
125
|
+
|
|
126
|
+
return null;
|
|
127
|
+
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return texture;
|
|
139
|
+
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function mapTextureMapping( texture, mapping ) {
|
|
143
|
+
|
|
144
|
+
if ( mapping === EquirectangularReflectionMapping ) {
|
|
145
|
+
|
|
146
|
+
texture.mapping = CubeReflectionMapping;
|
|
147
|
+
|
|
148
|
+
} else if ( mapping === EquirectangularRefractionMapping ) {
|
|
149
|
+
|
|
150
|
+
texture.mapping = CubeRefractionMapping;
|
|
151
|
+
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return texture;
|
|
155
|
+
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function isCubeTextureComplete( image ) {
|
|
159
|
+
|
|
160
|
+
let count = 0;
|
|
161
|
+
const length = 6;
|
|
162
|
+
|
|
163
|
+
for ( let i = 0; i < length; i ++ ) {
|
|
164
|
+
|
|
165
|
+
if ( image[ i ] !== undefined ) count ++;
|
|
166
|
+
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return count === length;
|
|
170
|
+
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
function onCubemapDispose( event ) {
|
|
174
|
+
|
|
175
|
+
const texture = event.target;
|
|
176
|
+
|
|
177
|
+
texture.removeEventListener( 'dispose', onCubemapDispose );
|
|
178
|
+
|
|
179
|
+
const cubemap = cubeMaps.get( texture );
|
|
180
|
+
|
|
181
|
+
if ( cubemap !== undefined ) {
|
|
182
|
+
|
|
183
|
+
cubeMaps.delete( texture );
|
|
184
|
+
cubemap.dispose();
|
|
185
|
+
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function onPMREMDispose( event ) {
|
|
191
|
+
|
|
192
|
+
const texture = event.target;
|
|
193
|
+
|
|
194
|
+
texture.removeEventListener( 'dispose', onPMREMDispose );
|
|
195
|
+
|
|
196
|
+
const pmrem = pmremMaps.get( texture );
|
|
197
|
+
|
|
198
|
+
if ( pmrem !== undefined ) {
|
|
199
|
+
|
|
200
|
+
pmremMaps.delete( texture );
|
|
201
|
+
pmrem.dispose();
|
|
202
|
+
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
function dispose() {
|
|
208
|
+
|
|
209
|
+
cubeMaps = new WeakMap();
|
|
210
|
+
pmremMaps = new WeakMap();
|
|
211
|
+
|
|
212
|
+
if ( pmremGenerator !== null ) {
|
|
213
|
+
|
|
214
|
+
pmremGenerator.dispose();
|
|
215
|
+
pmremGenerator = null;
|
|
216
|
+
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
return {
|
|
222
|
+
get: get,
|
|
223
|
+
dispose: dispose
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
export { WebGLEnvironments };
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Uint16BufferAttribute, Uint32BufferAttribute } from '../../core/BufferAttribute.js';
|
|
2
|
-
import { arrayNeedsUint32 } from '../../utils.js';
|
|
3
2
|
|
|
4
3
|
function WebGLGeometries( gl, attributes, info, bindingStates ) {
|
|
5
4
|
|
|
@@ -85,6 +84,12 @@ function WebGLGeometries( gl, attributes, info, bindingStates ) {
|
|
|
85
84
|
const geometryPosition = geometry.attributes.position;
|
|
86
85
|
let version = 0;
|
|
87
86
|
|
|
87
|
+
if ( geometryPosition === undefined ) {
|
|
88
|
+
|
|
89
|
+
return;
|
|
90
|
+
|
|
91
|
+
}
|
|
92
|
+
|
|
88
93
|
if ( geometryIndex !== null ) {
|
|
89
94
|
|
|
90
95
|
const array = geometryIndex.array;
|
|
@@ -100,7 +105,7 @@ function WebGLGeometries( gl, attributes, info, bindingStates ) {
|
|
|
100
105
|
|
|
101
106
|
}
|
|
102
107
|
|
|
103
|
-
} else
|
|
108
|
+
} else {
|
|
104
109
|
|
|
105
110
|
const array = geometryPosition.array;
|
|
106
111
|
version = geometryPosition.version;
|
|
@@ -115,13 +120,11 @@ function WebGLGeometries( gl, attributes, info, bindingStates ) {
|
|
|
115
120
|
|
|
116
121
|
}
|
|
117
122
|
|
|
118
|
-
} else {
|
|
119
|
-
|
|
120
|
-
return;
|
|
121
|
-
|
|
122
123
|
}
|
|
123
124
|
|
|
124
|
-
|
|
125
|
+
// check whether a 32 bit or 16 bit buffer is required to store the indices
|
|
126
|
+
// account for PRIMITIVE_RESTART_FIXED_INDEX, #24565
|
|
127
|
+
const attribute = new ( geometryPosition.count >= 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );
|
|
125
128
|
attribute.version = version;
|
|
126
129
|
|
|
127
130
|
// Updating index buffer in VAO now. See WebGLBindingStates
|
|
@@ -47,6 +47,12 @@ function WebGLMaterials( renderer, properties ) {
|
|
|
47
47
|
|
|
48
48
|
refreshUniformsCommon( uniforms, material );
|
|
49
49
|
|
|
50
|
+
if ( material.envMap ) {
|
|
51
|
+
|
|
52
|
+
uniforms.envMapIntensity.value = material.envMapIntensity;
|
|
53
|
+
|
|
54
|
+
}
|
|
55
|
+
|
|
50
56
|
} else if ( material.isMeshToonMaterial ) {
|
|
51
57
|
|
|
52
58
|
refreshUniformsCommon( uniforms, material );
|
|
@@ -57,6 +63,12 @@ function WebGLMaterials( renderer, properties ) {
|
|
|
57
63
|
refreshUniformsCommon( uniforms, material );
|
|
58
64
|
refreshUniformsPhong( uniforms, material );
|
|
59
65
|
|
|
66
|
+
if ( material.envMap ) {
|
|
67
|
+
|
|
68
|
+
uniforms.envMapIntensity.value = material.envMapIntensity;
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
|
|
60
72
|
} else if ( material.isMeshStandardMaterial ) {
|
|
61
73
|
|
|
62
74
|
refreshUniformsCommon( uniforms, material );
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function WebGLObjects( gl, geometries, attributes, info ) {
|
|
1
|
+
function WebGLObjects( gl, geometries, attributes, bindingStates, info ) {
|
|
2
2
|
|
|
3
3
|
let updateMap = new WeakMap();
|
|
4
4
|
|
|
@@ -73,6 +73,8 @@ function WebGLObjects( gl, geometries, attributes, info ) {
|
|
|
73
73
|
|
|
74
74
|
instancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose );
|
|
75
75
|
|
|
76
|
+
bindingStates.releaseStatesOfObject( instancedMesh );
|
|
77
|
+
|
|
76
78
|
attributes.remove( instancedMesh.instanceMatrix );
|
|
77
79
|
|
|
78
80
|
if ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor );
|
|
@@ -751,8 +751,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
751
751
|
parameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',
|
|
752
752
|
|
|
753
753
|
parameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',
|
|
754
|
-
parameters.vertexColors || parameters.instancingColor
|
|
755
|
-
parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',
|
|
754
|
+
parameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '',
|
|
755
|
+
parameters.vertexAlphas || parameters.batchingColor ? '#define USE_COLOR_ALPHA' : '',
|
|
756
756
|
parameters.vertexUv1s ? '#define USE_UV1' : '',
|
|
757
757
|
parameters.vertexUv2s ? '#define USE_UV2' : '',
|
|
758
758
|
parameters.vertexUv3s ? '#define USE_UV3' : '',
|
|
@@ -7,7 +7,7 @@ import { UniformsUtils } from '../shaders/UniformsUtils.js';
|
|
|
7
7
|
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
8
8
|
import { warn } from '../../utils.js';
|
|
9
9
|
|
|
10
|
-
function WebGLPrograms( renderer,
|
|
10
|
+
function WebGLPrograms( renderer, environments, extensions, capabilities, bindingStates, clipping ) {
|
|
11
11
|
|
|
12
12
|
const _programLayers = new Layers();
|
|
13
13
|
const _customShaders = new WebGLShaderCache();
|
|
@@ -51,9 +51,10 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
51
51
|
|
|
52
52
|
const fog = scene.fog;
|
|
53
53
|
const geometry = object.geometry;
|
|
54
|
-
const environment = material.isMeshStandardMaterial ? scene.environment : null;
|
|
54
|
+
const environment = ( material.isMeshStandardMaterial || material.isMeshLambertMaterial || material.isMeshPhongMaterial ) ? scene.environment : null;
|
|
55
55
|
|
|
56
|
-
const
|
|
56
|
+
const usePMREM = material.isMeshStandardMaterial || ( material.isMeshLambertMaterial && ! material.envMap ) || ( material.isMeshPhongMaterial && ! material.envMap );
|
|
57
|
+
const envMap = environments.get( material.envMap || environment, usePMREM );
|
|
57
58
|
const envMapCubeUVHeight = ( !! envMap ) && ( envMap.mapping === CubeUVReflectionMapping ) ? envMap.image.height : null;
|
|
58
59
|
|
|
59
60
|
const shaderID = shaderIDs[ material.type ];
|
|
@@ -310,7 +311,12 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
310
311
|
useFog: material.fog === true,
|
|
311
312
|
fogExp2: ( !! fog && fog.isFogExp2 ),
|
|
312
313
|
|
|
313
|
-
flatShading:
|
|
314
|
+
flatShading: material.wireframe === false && (
|
|
315
|
+
material.flatShading === true ||
|
|
316
|
+
( geometry.attributes.normal === undefined && HAS_NORMALMAP === false &&
|
|
317
|
+
( material.isMeshLambertMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial || material.isMeshPhysicalMaterial )
|
|
318
|
+
)
|
|
319
|
+
),
|
|
314
320
|
|
|
315
321
|
sizeAttenuation: material.sizeAttenuation === true,
|
|
316
322
|
logarithmicDepthBuffer: logarithmicDepthBuffer,
|
|
@@ -12,6 +12,10 @@ function painterSortStable( a, b ) {
|
|
|
12
12
|
|
|
13
13
|
return a.material.id - b.material.id;
|
|
14
14
|
|
|
15
|
+
} else if ( a.materialVariant !== b.materialVariant ) {
|
|
16
|
+
|
|
17
|
+
return a.materialVariant - b.materialVariant;
|
|
18
|
+
|
|
15
19
|
} else if ( a.z !== b.z ) {
|
|
16
20
|
|
|
17
21
|
return a.z - b.z;
|
|
@@ -66,6 +70,15 @@ function WebGLRenderList() {
|
|
|
66
70
|
|
|
67
71
|
}
|
|
68
72
|
|
|
73
|
+
function materialVariant( object ) {
|
|
74
|
+
|
|
75
|
+
let variant = 0;
|
|
76
|
+
if ( object.isInstancedMesh ) variant += 2;
|
|
77
|
+
if ( object.isSkinnedMesh ) variant += 1;
|
|
78
|
+
return variant;
|
|
79
|
+
|
|
80
|
+
}
|
|
81
|
+
|
|
69
82
|
function getNextRenderItem( object, geometry, material, groupOrder, z, group ) {
|
|
70
83
|
|
|
71
84
|
let renderItem = renderItems[ renderItemsIndex ];
|
|
@@ -77,6 +90,7 @@ function WebGLRenderList() {
|
|
|
77
90
|
object: object,
|
|
78
91
|
geometry: geometry,
|
|
79
92
|
material: material,
|
|
93
|
+
materialVariant: materialVariant( object ),
|
|
80
94
|
groupOrder: groupOrder,
|
|
81
95
|
renderOrder: object.renderOrder,
|
|
82
96
|
z: z,
|
|
@@ -91,6 +105,7 @@ function WebGLRenderList() {
|
|
|
91
105
|
renderItem.object = object;
|
|
92
106
|
renderItem.geometry = geometry;
|
|
93
107
|
renderItem.material = material;
|
|
108
|
+
renderItem.materialVariant = materialVariant( object );
|
|
94
109
|
renderItem.groupOrder = groupOrder;
|
|
95
110
|
renderItem.renderOrder = object.renderOrder;
|
|
96
111
|
renderItem.z = z;
|
|
@@ -96,10 +96,10 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
|
|
|
96
96
|
|
|
97
97
|
if ( lights.length === 0 ) return;
|
|
98
98
|
|
|
99
|
-
if (
|
|
99
|
+
if ( this.type === PCFSoftShadowMap ) {
|
|
100
100
|
|
|
101
101
|
warn( 'WebGLShadowMap: PCFSoftShadowMap has been deprecated. Using PCFShadowMap instead.' );
|
|
102
|
-
|
|
102
|
+
this.type = PCFShadowMap;
|
|
103
103
|
|
|
104
104
|
}
|
|
105
105
|
|
|
@@ -197,6 +197,9 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
|
|
|
197
197
|
|
|
198
198
|
}
|
|
199
199
|
|
|
200
|
+
const reversedDepthBuffer = renderer.state.buffers.depth.getReversed();
|
|
201
|
+
shadow.camera._reversedDepth = reversedDepthBuffer;
|
|
202
|
+
|
|
200
203
|
if ( shadow.map === null || typeChanged === true ) {
|
|
201
204
|
|
|
202
205
|
if ( shadow.map !== null ) {
|
|
@@ -255,8 +258,6 @@ function WebGLShadowMap( renderer, objects, capabilities ) {
|
|
|
255
258
|
shadow.map.depthTexture.name = light.name + '.shadowMap';
|
|
256
259
|
shadow.map.depthTexture.format = DepthFormat;
|
|
257
260
|
|
|
258
|
-
const reversedDepthBuffer = renderer.state.buffers.depth.getReversed();
|
|
259
|
-
|
|
260
261
|
if ( this.type === PCFShadowMap ) {
|
|
261
262
|
|
|
262
263
|
shadow.map.depthTexture.compareFunction = reversedDepthBuffer ? GreaterEqualCompare : LessEqualCompare;
|