super-three 0.160.1 → 0.162.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 +867 -499
- package/build/three.module.js +867 -496
- package/build/three.module.min.js +1 -1
- package/examples/jsm/Addons.js +5 -1
- package/examples/jsm/capabilities/WebGPU.js +13 -9
- package/examples/jsm/controls/DragControls.js +91 -30
- package/examples/jsm/controls/OrbitControls.js +130 -15
- package/examples/jsm/controls/TransformControls.js +6 -6
- package/examples/jsm/curves/NURBSUtils.js +59 -4
- package/examples/jsm/curves/NURBSVolume.js +62 -0
- package/examples/jsm/exporters/GLTFExporter.js +11 -1
- package/examples/jsm/exporters/USDZExporter.js +8 -7
- package/examples/jsm/helpers/TextureHelper.js +3 -3
- package/examples/jsm/interactive/InteractiveGroup.js +15 -25
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +1 -8723
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +1 -8734
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/libs/tween.module.js +32 -14
- package/examples/jsm/loaders/3DMLoader.js +57 -64
- package/examples/jsm/loaders/DDSLoader.js +1 -0
- package/examples/jsm/loaders/KTX2Loader.js +20 -5
- package/examples/jsm/loaders/LUT3dlLoader.js +78 -46
- package/examples/jsm/loaders/LUTCubeLoader.js +81 -67
- package/examples/jsm/loaders/LUTImageLoader.js +3 -2
- package/examples/jsm/loaders/MaterialXLoader.js +115 -16
- package/examples/jsm/loaders/SVGLoader.js +4 -3
- package/examples/jsm/loaders/VOXLoader.js +9 -2
- package/examples/jsm/loaders/VRMLLoader.js +7 -3
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +144 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +1 -0
- package/examples/jsm/misc/Timer.js +13 -4
- package/examples/jsm/nodes/Nodes.js +24 -11
- package/examples/jsm/nodes/accessors/AccessorsUtils.js +10 -0
- package/examples/jsm/nodes/accessors/BufferAttributeNode.js +5 -3
- package/examples/jsm/nodes/accessors/CameraNode.js +9 -4
- package/examples/jsm/nodes/accessors/ClippingNode.js +144 -0
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +12 -1
- package/examples/jsm/nodes/accessors/MaterialNode.js +2 -2
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +2 -12
- package/examples/jsm/nodes/accessors/MorphNode.js +8 -8
- package/examples/jsm/nodes/accessors/ReferenceNode.js +87 -29
- package/examples/jsm/nodes/accessors/SkinningNode.js +31 -10
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +45 -0
- package/examples/jsm/nodes/accessors/TangentNode.js +8 -2
- package/examples/jsm/nodes/accessors/TextureNode.js +1 -1
- package/examples/jsm/nodes/accessors/TextureStoreNode.js +56 -3
- package/examples/jsm/nodes/accessors/UniformsNode.js +140 -0
- package/examples/jsm/nodes/accessors/VertexColorNode.js +70 -0
- package/examples/jsm/nodes/code/CodeNode.js +6 -0
- package/examples/jsm/nodes/core/AssignNode.js +68 -12
- package/examples/jsm/nodes/core/AttributeNode.js +1 -1
- package/examples/jsm/nodes/core/Node.js +14 -4
- package/examples/jsm/nodes/core/NodeBuilder.js +26 -27
- package/examples/jsm/nodes/core/NodeFrame.js +18 -10
- package/examples/jsm/nodes/core/TempNode.js +1 -1
- package/examples/jsm/nodes/core/constants.js +1 -0
- package/examples/jsm/nodes/display/AfterImageNode.js +148 -0
- package/examples/jsm/nodes/display/AnamorphicNode.js +148 -0
- package/examples/jsm/nodes/display/BlendModeNode.js +30 -1
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +3 -0
- package/examples/jsm/nodes/display/GaussianBlurNode.js +33 -13
- package/examples/jsm/nodes/display/NormalMapNode.js +3 -5
- package/examples/jsm/nodes/display/PassNode.js +3 -2
- package/examples/jsm/nodes/display/ToneMappingNode.js +46 -3
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +1 -4
- package/examples/jsm/nodes/display/ViewportNode.js +0 -2
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +4 -4
- package/examples/jsm/nodes/fog/FogNode.js +2 -1
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +13 -5
- package/examples/jsm/nodes/lighting/LightingContextNode.js +1 -1
- package/examples/jsm/nodes/lighting/LightsNode.js +1 -1
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +18 -30
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- package/examples/jsm/nodes/materials/MeshSSSNodeMaterial.js +84 -0
- package/examples/jsm/nodes/materials/NodeMaterial.js +43 -10
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +1 -7
- package/examples/jsm/nodes/math/CondNode.js +42 -7
- package/examples/jsm/nodes/math/MathNode.js +32 -2
- package/examples/jsm/nodes/math/MathUtils.js +15 -0
- package/examples/jsm/nodes/math/OperatorNode.js +13 -5
- package/examples/jsm/nodes/math/TriNoise3D.js +71 -0
- package/examples/jsm/nodes/shadernode/ShaderNode.js +10 -1
- package/examples/jsm/nodes/utils/JoinNode.js +2 -2
- package/examples/jsm/nodes/utils/LoopNode.js +5 -3
- package/examples/jsm/nodes/utils/ReflectorNode.js +227 -0
- package/examples/jsm/nodes/utils/RotateNode.js +68 -0
- package/examples/jsm/nodes/utils/RotateUVNode.js +1 -9
- package/examples/jsm/nodes/utils/SplitNode.js +4 -4
- package/examples/jsm/nodes/utils/StorageArrayElementNode.js +91 -0
- package/examples/jsm/objects/GroundedSkybox.js +50 -0
- package/examples/jsm/objects/QuadMesh.js +8 -2
- package/examples/jsm/objects/Water2.js +8 -8
- package/examples/jsm/postprocessing/GTAOPass.js +11 -1
- package/examples/jsm/postprocessing/OutputPass.js +2 -0
- package/examples/jsm/renderers/common/Backend.js +14 -0
- package/examples/jsm/renderers/common/Background.js +2 -2
- package/examples/jsm/renderers/common/Bindings.js +1 -1
- package/examples/jsm/renderers/common/ClippingContext.js +165 -0
- package/examples/jsm/renderers/common/DataMap.js +1 -1
- package/examples/jsm/renderers/common/Info.js +25 -1
- package/examples/jsm/renderers/common/Pipelines.js +8 -8
- package/examples/jsm/renderers/common/PostProcessing.js +2 -2
- package/examples/jsm/renderers/common/ProgrammableStage.js +3 -1
- package/examples/jsm/renderers/common/RenderContext.js +2 -0
- package/examples/jsm/renderers/common/RenderContexts.js +2 -13
- package/examples/jsm/renderers/common/RenderObject.js +46 -1
- package/examples/jsm/renderers/common/RenderObjects.js +3 -1
- package/examples/jsm/renderers/common/Renderer.js +290 -17
- package/examples/jsm/renderers/common/StorageBufferAttribute.js +17 -0
- package/examples/jsm/renderers/common/StorageInstancedBufferAttribute.js +17 -0
- package/examples/jsm/renderers/common/Textures.js +28 -18
- package/examples/jsm/renderers/common/UniformsGroup.js +6 -4
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +2 -1
- package/examples/jsm/renderers/common/nodes/NodeStorageBuffer.js +23 -0
- package/examples/jsm/renderers/common/nodes/NodeUniformBuffer.js +23 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +5 -2
- package/examples/jsm/renderers/webgl/WebGLBackend.js +653 -272
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +171 -39
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +95 -8
- package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +11 -0
- package/examples/jsm/renderers/webgl/utils/WebGLState.js +197 -0
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +424 -11
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +3 -2
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +1 -21
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +300 -112
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +7 -2
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +71 -79
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +15 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +38 -4
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +87 -14
- package/examples/jsm/shaders/OutputShader.js +4 -0
- package/examples/jsm/transpiler/AST.js +1 -1
- package/examples/jsm/transpiler/GLSLDecoder.js +1 -1
- package/examples/jsm/transpiler/ShaderToyDecoder.js +1 -1
- package/examples/jsm/transpiler/TSLEncoder.js +1 -1
- package/examples/jsm/utils/BufferGeometryUtils.js +23 -27
- package/examples/jsm/utils/SkeletonUtils.js +14 -3
- package/examples/jsm/utils/SortUtils.js +2 -0
- package/examples/jsm/webxr/ARButton.js +12 -2
- package/examples/jsm/webxr/VRButton.js +25 -7
- package/examples/jsm/webxr/XRButton.js +12 -3
- package/examples/jsm/webxr/XRControllerModelFactory.js +14 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +3 -1
- package/package.json +5 -4
- package/src/Three.Legacy.js +20 -0
- package/src/Three.js +0 -1
- package/src/audio/Audio.js +1 -3
- package/src/cameras/PerspectiveCamera.js +35 -0
- package/src/constants.js +2 -6
- package/src/core/BufferAttribute.js +2 -12
- package/src/core/BufferGeometry.js +23 -29
- package/src/core/InterleavedBuffer.js +2 -1
- package/src/core/InterleavedBufferAttribute.js +20 -0
- package/src/core/Object3D.js +11 -0
- package/src/core/Raycaster.js +18 -4
- package/src/core/RenderTarget.js +44 -21
- package/src/extras/PMREMGenerator.js +2 -0
- package/src/extras/curves/EllipseCurve.js +2 -2
- package/src/helpers/SpotLightHelper.js +18 -1
- package/src/loaders/DataTextureLoader.js +0 -4
- package/src/loaders/MaterialLoader.js +1 -0
- package/src/loaders/ObjectLoader.js +2 -1
- package/src/materials/Material.js +2 -1
- package/src/materials/MeshBasicMaterial.js +3 -0
- package/src/materials/MeshLambertMaterial.js +3 -0
- package/src/materials/MeshPhongMaterial.js +3 -0
- package/src/materials/MeshStandardMaterial.js +3 -0
- package/src/materials/ShaderMaterial.js +2 -1
- package/src/math/Quaternion.js +13 -12
- package/src/math/Triangle.js +0 -30
- package/src/math/Vector3.js +7 -7
- package/src/objects/BatchedMesh.js +6 -7
- package/src/objects/InstancedMesh.js +53 -0
- package/src/objects/Mesh.js +0 -1
- package/src/objects/SkinnedMesh.js +0 -8
- package/src/renderers/WebGLCubeRenderTarget.js +1 -10
- package/src/renderers/WebGLRenderer.js +20 -23
- package/src/renderers/shaders/ShaderChunk/alphatest_fragment.glsl.js +9 -0
- package/src/renderers/shaders/ShaderChunk/clipping_planes_fragment.glsl.js +56 -11
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -0
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js +14 -0
- package/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js +11 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +38 -7
- package/src/renderers/shaders/ShaderChunk.js +2 -0
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +3 -2
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +3 -2
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +3 -2
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +2 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +2 -2
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +4 -1
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/points.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -0
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib.js +2 -1
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/webgl/WebGLAttributes.js +2 -2
- package/src/renderers/webgl/WebGLBackground.js +18 -0
- package/src/renderers/webgl/WebGLCubeMaps.js +1 -1
- package/src/renderers/webgl/WebGLMaterials.js +24 -1
- package/src/renderers/webgl/WebGLMorphtargets.js +15 -8
- package/src/renderers/webgl/WebGLProgram.js +42 -4
- package/src/renderers/webgl/WebGLPrograms.js +38 -27
- package/src/renderers/webgl/WebGLState.js +11 -21
- package/src/renderers/webgl/WebGLTextures.js +170 -66
- package/src/renderers/webxr/WebXRDepthSensing.js +105 -0
- package/src/renderers/webxr/WebXRManager.js +46 -0
- package/src/scenes/Scene.js +8 -0
- package/src/textures/Source.js +1 -0
- package/src/textures/Texture.js +1 -29
- package/build/three.js +0 -54519
- package/build/three.min.js +0 -7
- package/examples/jsm/nodes/core/ArrayUniformNode.js +0 -26
- package/examples/jsm/objects/GroundProjectedSkybox.js +0 -172
- package/src/renderers/WebGLMultipleRenderTargets.js +0 -82
|
@@ -86,7 +86,7 @@ function WebGLAttributes( gl, capabilities ) {
|
|
|
86
86
|
function updateBuffer( buffer, attribute, bufferType ) {
|
|
87
87
|
|
|
88
88
|
const array = attribute.array;
|
|
89
|
-
const updateRange = attribute._updateRange; // deprecated
|
|
89
|
+
const updateRange = attribute._updateRange; // @deprecated, r159
|
|
90
90
|
const updateRanges = attribute.updateRanges;
|
|
91
91
|
|
|
92
92
|
gl.bindBuffer( bufferType, buffer );
|
|
@@ -121,7 +121,7 @@ function WebGLAttributes( gl, capabilities ) {
|
|
|
121
121
|
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
-
// deprecated
|
|
124
|
+
// @deprecated, r159
|
|
125
125
|
if ( updateRange.count !== - 1 ) {
|
|
126
126
|
|
|
127
127
|
if ( isWebGL2 ) {
|
|
@@ -4,11 +4,15 @@ import { PlaneGeometry } from '../../geometries/PlaneGeometry.js';
|
|
|
4
4
|
import { ShaderMaterial } from '../../materials/ShaderMaterial.js';
|
|
5
5
|
import { Color } from '../../math/Color.js';
|
|
6
6
|
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
7
|
+
import { Euler } from '../../math/Euler.js';
|
|
8
|
+
import { Matrix4 } from '../../math/Matrix4.js';
|
|
7
9
|
import { Mesh } from '../../objects/Mesh.js';
|
|
8
10
|
import { ShaderLib } from '../shaders/ShaderLib.js';
|
|
9
11
|
import { cloneUniforms, getUnlitUniformColorSpace } from '../shaders/UniformsUtils.js';
|
|
10
12
|
|
|
11
13
|
const _rgb = { r: 0, b: 0, g: 0 };
|
|
14
|
+
const _e1 = /*@__PURE__*/ new Euler();
|
|
15
|
+
const _m1 = /*@__PURE__*/ new Matrix4();
|
|
12
16
|
|
|
13
17
|
function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha, premultipliedAlpha ) {
|
|
14
18
|
|
|
@@ -105,10 +109,24 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
|
|
|
105
109
|
|
|
106
110
|
}
|
|
107
111
|
|
|
112
|
+
_e1.copy( scene.backgroundRotation );
|
|
113
|
+
|
|
114
|
+
// accommodate left-handed frame
|
|
115
|
+
_e1.x *= - 1; _e1.y *= - 1; _e1.z *= - 1;
|
|
116
|
+
|
|
117
|
+
if ( background.isCubeTexture && background.isRenderTargetTexture === false ) {
|
|
118
|
+
|
|
119
|
+
// environment maps which are not cube render targets or PMREMs follow a different convention
|
|
120
|
+
_e1.y *= - 1;
|
|
121
|
+
_e1.z *= - 1;
|
|
122
|
+
|
|
123
|
+
}
|
|
124
|
+
|
|
108
125
|
boxMesh.material.uniforms.envMap.value = background;
|
|
109
126
|
boxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background.isRenderTargetTexture === false ) ? - 1 : 1;
|
|
110
127
|
boxMesh.material.uniforms.backgroundBlurriness.value = scene.backgroundBlurriness;
|
|
111
128
|
boxMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;
|
|
129
|
+
boxMesh.material.uniforms.backgroundRotation.value.setFromMatrix4( _m1.makeRotationFromEuler( _e1 ) );
|
|
112
130
|
boxMesh.material.toneMapped = ColorManagement.getTransfer( background.colorSpace ) !== SRGBTransfer;
|
|
113
131
|
|
|
114
132
|
if ( currentBackground !== background ||
|
|
@@ -40,7 +40,7 @@ function WebGLCubeMaps( renderer ) {
|
|
|
40
40
|
|
|
41
41
|
if ( image && image.height > 0 ) {
|
|
42
42
|
|
|
43
|
-
const renderTarget = new WebGLCubeRenderTarget( image.height
|
|
43
|
+
const renderTarget = new WebGLCubeRenderTarget( image.height );
|
|
44
44
|
renderTarget.fromEquirectangularTexture( renderer, texture );
|
|
45
45
|
cubemaps.set( texture, renderTarget );
|
|
46
46
|
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { BackSide } from '../../constants.js';
|
|
2
2
|
import { getUnlitUniformColorSpace } from '../shaders/UniformsUtils.js';
|
|
3
|
+
import { Euler } from '../../math/Euler.js';
|
|
4
|
+
import { Matrix4 } from '../../math/Matrix4.js';
|
|
5
|
+
|
|
6
|
+
const _e1 = /*@__PURE__*/ new Euler();
|
|
7
|
+
const _m1 = /*@__PURE__*/ new Matrix4();
|
|
3
8
|
|
|
4
9
|
function WebGLMaterials( renderer, properties ) {
|
|
5
10
|
|
|
@@ -209,12 +214,30 @@ function WebGLMaterials( renderer, properties ) {
|
|
|
209
214
|
|
|
210
215
|
}
|
|
211
216
|
|
|
212
|
-
const
|
|
217
|
+
const materialProperties = properties.get( material );
|
|
218
|
+
|
|
219
|
+
const envMap = materialProperties.envMap;
|
|
220
|
+
const envMapRotation = materialProperties.envMapRotation;
|
|
213
221
|
|
|
214
222
|
if ( envMap ) {
|
|
215
223
|
|
|
216
224
|
uniforms.envMap.value = envMap;
|
|
217
225
|
|
|
226
|
+
_e1.copy( envMapRotation );
|
|
227
|
+
|
|
228
|
+
// accommodate left-handed frame
|
|
229
|
+
_e1.x *= - 1; _e1.y *= - 1; _e1.z *= - 1;
|
|
230
|
+
|
|
231
|
+
if ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) {
|
|
232
|
+
|
|
233
|
+
// environment maps which are not cube render targets or PMREMs follow a different convention
|
|
234
|
+
_e1.y *= - 1;
|
|
235
|
+
_e1.z *= - 1;
|
|
236
|
+
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
uniforms.envMapRotation.value.setFromMatrix4( _m1.makeRotationFromEuler( _e1 ) );
|
|
240
|
+
|
|
218
241
|
uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;
|
|
219
242
|
|
|
220
243
|
uniforms.reflectivity.value = material.reflectivity;
|
|
@@ -154,24 +154,31 @@ function WebGLMorphtargets( gl, capabilities, textures ) {
|
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
//
|
|
157
|
+
if ( object.isInstancedMesh === true && object.morphTexture !== null ) {
|
|
157
158
|
|
|
158
|
-
|
|
159
|
+
program.getUniforms().setValue( gl, 'morphTexture', object.morphTexture, textures );
|
|
159
160
|
|
|
160
|
-
|
|
161
|
+
} else {
|
|
161
162
|
|
|
162
|
-
morphInfluencesSum
|
|
163
|
+
let morphInfluencesSum = 0;
|
|
163
164
|
|
|
164
|
-
|
|
165
|
+
for ( let i = 0; i < objectInfluences.length; i ++ ) {
|
|
165
166
|
|
|
166
|
-
|
|
167
|
+
morphInfluencesSum += objectInfluences[ i ];
|
|
167
168
|
|
|
168
|
-
|
|
169
|
-
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
program.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );
|
|
175
|
+
program.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences );
|
|
176
|
+
|
|
177
|
+
}
|
|
170
178
|
|
|
171
179
|
program.getUniforms().setValue( gl, 'morphTargetsTexture', entry.texture, textures );
|
|
172
180
|
program.getUniforms().setValue( gl, 'morphTargetsTextureSize', entry.size );
|
|
173
181
|
|
|
174
|
-
|
|
175
182
|
} else {
|
|
176
183
|
|
|
177
184
|
// When object doesn't have morph target influences defined, we treat it as a 0-length array
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { WebGLUniforms } from './WebGLUniforms.js';
|
|
2
2
|
import { WebGLShader } from './WebGLShader.js';
|
|
3
3
|
import { ShaderChunk } from '../shaders/ShaderChunk.js';
|
|
4
|
-
import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, VSMShadowMap, AgXToneMapping, ACESFilmicToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GLSL3, LinearSRGBColorSpace, SRGBColorSpace, LinearDisplayP3ColorSpace, DisplayP3ColorSpace, P3Primaries, Rec709Primaries } from '../../constants.js';
|
|
4
|
+
import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, VSMShadowMap, AgXToneMapping, ACESFilmicToneMapping, NeutralToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GLSL3, LinearSRGBColorSpace, SRGBColorSpace, LinearDisplayP3ColorSpace, DisplayP3ColorSpace, P3Primaries, Rec709Primaries } from '../../constants.js';
|
|
5
5
|
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
6
6
|
|
|
7
7
|
// From https://www.khronos.org/registry/webgl/extensions/KHR_parallel_shader_compile/
|
|
@@ -124,6 +124,10 @@ function getToneMappingFunction( functionName, toneMapping ) {
|
|
|
124
124
|
toneMappingName = 'AgX';
|
|
125
125
|
break;
|
|
126
126
|
|
|
127
|
+
case NeutralToneMapping:
|
|
128
|
+
toneMappingName = 'Neutral';
|
|
129
|
+
break;
|
|
130
|
+
|
|
127
131
|
case CustomToneMapping:
|
|
128
132
|
toneMappingName = 'Custom';
|
|
129
133
|
break;
|
|
@@ -141,7 +145,7 @@ function getToneMappingFunction( functionName, toneMapping ) {
|
|
|
141
145
|
function generateExtensions( parameters ) {
|
|
142
146
|
|
|
143
147
|
const chunks = [
|
|
144
|
-
( parameters.extensionDerivatives || !! parameters.envMapCubeUVHeight || parameters.bumpMap || parameters.normalMapTangentSpace || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',
|
|
148
|
+
( parameters.extensionDerivatives || !! parameters.envMapCubeUVHeight || parameters.bumpMap || parameters.normalMapTangentSpace || parameters.clearcoatNormalMap || parameters.flatShading || parameters.alphaToCoverage || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',
|
|
145
149
|
( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '',
|
|
146
150
|
( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '',
|
|
147
151
|
( parameters.extensionShaderTextureLOD || parameters.envMap || parameters.transmission ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : ''
|
|
@@ -154,7 +158,8 @@ function generateExtensions( parameters ) {
|
|
|
154
158
|
function generateVertexExtensions( parameters ) {
|
|
155
159
|
|
|
156
160
|
const chunks = [
|
|
157
|
-
parameters.extensionClipCullDistance ? '#extension GL_ANGLE_clip_cull_distance : require' : ''
|
|
161
|
+
parameters.extensionClipCullDistance ? '#extension GL_ANGLE_clip_cull_distance : require' : '',
|
|
162
|
+
parameters.extensionMultiDraw ? '#extension GL_ANGLE_multi_draw : require' : '',
|
|
158
163
|
];
|
|
159
164
|
|
|
160
165
|
return chunks.filter( filterEmptyLine ).join( '\n' );
|
|
@@ -313,7 +318,30 @@ function loopReplacer( match, start, end, snippet ) {
|
|
|
313
318
|
|
|
314
319
|
function generatePrecision( parameters ) {
|
|
315
320
|
|
|
316
|
-
let precisionstring =
|
|
321
|
+
let precisionstring = `precision ${parameters.precision} float;
|
|
322
|
+
precision ${parameters.precision} int;
|
|
323
|
+
precision ${parameters.precision} sampler2D;
|
|
324
|
+
precision ${parameters.precision} samplerCube;
|
|
325
|
+
`;
|
|
326
|
+
|
|
327
|
+
if ( parameters.isWebGL2 ) {
|
|
328
|
+
|
|
329
|
+
precisionstring += `precision ${parameters.precision} sampler3D;
|
|
330
|
+
precision ${parameters.precision} sampler2DArray;
|
|
331
|
+
precision ${parameters.precision} sampler2DShadow;
|
|
332
|
+
precision ${parameters.precision} samplerCubeShadow;
|
|
333
|
+
precision ${parameters.precision} sampler2DArrayShadow;
|
|
334
|
+
precision ${parameters.precision} isampler2D;
|
|
335
|
+
precision ${parameters.precision} isampler3D;
|
|
336
|
+
precision ${parameters.precision} isamplerCube;
|
|
337
|
+
precision ${parameters.precision} isampler2DArray;
|
|
338
|
+
precision ${parameters.precision} usampler2D;
|
|
339
|
+
precision ${parameters.precision} usampler3D;
|
|
340
|
+
precision ${parameters.precision} usamplerCube;
|
|
341
|
+
precision ${parameters.precision} usampler2DArray;
|
|
342
|
+
`;
|
|
343
|
+
|
|
344
|
+
}
|
|
317
345
|
|
|
318
346
|
if ( parameters.precision === 'highp' ) {
|
|
319
347
|
|
|
@@ -525,6 +553,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
525
553
|
parameters.batching ? '#define USE_BATCHING' : '',
|
|
526
554
|
parameters.instancing ? '#define USE_INSTANCING' : '',
|
|
527
555
|
parameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',
|
|
556
|
+
parameters.instancingMorph ? '#define USE_INSTANCING_MORPH' : '',
|
|
528
557
|
|
|
529
558
|
parameters.useFog && parameters.fog ? '#define USE_FOG' : '',
|
|
530
559
|
parameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',
|
|
@@ -656,6 +685,12 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
656
685
|
|
|
657
686
|
'#endif',
|
|
658
687
|
|
|
688
|
+
'#ifdef USE_INSTANCING_MORPH',
|
|
689
|
+
|
|
690
|
+
' uniform sampler2D morphTexture;',
|
|
691
|
+
|
|
692
|
+
'#endif',
|
|
693
|
+
|
|
659
694
|
'attribute vec3 position;',
|
|
660
695
|
'attribute vec3 normal;',
|
|
661
696
|
'attribute vec2 uv;',
|
|
@@ -744,6 +779,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
744
779
|
parameters.useFog && parameters.fog ? '#define USE_FOG' : '',
|
|
745
780
|
parameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',
|
|
746
781
|
|
|
782
|
+
parameters.alphaToCoverage ? '#define ALPHA_TO_COVERAGE' : '',
|
|
747
783
|
parameters.map ? '#define USE_MAP' : '',
|
|
748
784
|
parameters.matcap ? '#define USE_MATCAP' : '',
|
|
749
785
|
parameters.envMap ? '#define USE_ENVMAP' : '',
|
|
@@ -992,6 +1028,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
992
1028
|
console.error(
|
|
993
1029
|
'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +
|
|
994
1030
|
'VALIDATE_STATUS ' + gl.getProgramParameter( program, gl.VALIDATE_STATUS ) + '\n\n' +
|
|
1031
|
+
'Material Name: ' + self.name + '\n' +
|
|
1032
|
+
'Material Type: ' + self.type + '\n\n' +
|
|
995
1033
|
'Program Info Log: ' + programLog + '\n' +
|
|
996
1034
|
vertexErrors + '\n' +
|
|
997
1035
|
fragmentErrors
|
|
@@ -10,6 +10,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
10
10
|
|
|
11
11
|
const _programLayers = new Layers();
|
|
12
12
|
const _customShaders = new WebGLShaderCache();
|
|
13
|
+
const _activeChannels = new Set();
|
|
13
14
|
const programs = [];
|
|
14
15
|
|
|
15
16
|
const IS_WEBGL2 = capabilities.isWebGL2;
|
|
@@ -38,6 +39,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
38
39
|
|
|
39
40
|
function getChannel( value ) {
|
|
40
41
|
|
|
42
|
+
_activeChannels.add( value );
|
|
43
|
+
|
|
41
44
|
if ( value === 0 ) return 'uv';
|
|
42
45
|
|
|
43
46
|
return `uv${ value }`;
|
|
@@ -160,10 +163,6 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
160
163
|
|
|
161
164
|
const HAS_EXTENSIONS = !! material.extensions;
|
|
162
165
|
|
|
163
|
-
const HAS_ATTRIBUTE_UV1 = !! geometry.attributes.uv1;
|
|
164
|
-
const HAS_ATTRIBUTE_UV2 = !! geometry.attributes.uv2;
|
|
165
|
-
const HAS_ATTRIBUTE_UV3 = !! geometry.attributes.uv3;
|
|
166
|
-
|
|
167
166
|
let toneMapping = NoToneMapping;
|
|
168
167
|
|
|
169
168
|
if ( material.toneMapped ) {
|
|
@@ -199,10 +198,12 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
199
198
|
batching: IS_BATCHEDMESH,
|
|
200
199
|
instancing: IS_INSTANCEDMESH,
|
|
201
200
|
instancingColor: IS_INSTANCEDMESH && object.instanceColor !== null,
|
|
201
|
+
instancingMorph: IS_INSTANCEDMESH && object.morphTexture !== null,
|
|
202
202
|
|
|
203
203
|
supportsVertexTextures: SUPPORTS_VERTEX_TEXTURES,
|
|
204
204
|
numMultiviewViews: numMultiviewViews,
|
|
205
205
|
outputColorSpace: ( currentRenderTarget === null ) ? renderer.outputColorSpace : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace ),
|
|
206
|
+
alphaToCoverage: !! material.alphaToCoverage,
|
|
206
207
|
|
|
207
208
|
map: HAS_MAP,
|
|
208
209
|
matcap: HAS_MATCAP,
|
|
@@ -248,7 +249,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
248
249
|
|
|
249
250
|
gradientMap: HAS_GRADIENTMAP,
|
|
250
251
|
|
|
251
|
-
opaque: material.transparent === false && material.blending === NormalBlending,
|
|
252
|
+
opaque: material.transparent === false && material.blending === NormalBlending && material.alphaToCoverage === false,
|
|
252
253
|
|
|
253
254
|
alphaMap: HAS_ALPHAMAP,
|
|
254
255
|
alphaTest: HAS_ALPHATEST,
|
|
@@ -295,15 +296,12 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
295
296
|
vertexTangents: !! geometry.attributes.tangent && ( HAS_NORMALMAP || HAS_ANISOTROPY ),
|
|
296
297
|
vertexColors: material.vertexColors,
|
|
297
298
|
vertexAlphas: material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4,
|
|
298
|
-
vertexUv1s: HAS_ATTRIBUTE_UV1,
|
|
299
|
-
vertexUv2s: HAS_ATTRIBUTE_UV2,
|
|
300
|
-
vertexUv3s: HAS_ATTRIBUTE_UV3,
|
|
301
299
|
|
|
302
300
|
pointsUvs: object.isPoints === true && !! geometry.attributes.uv && ( HAS_MAP || HAS_ALPHAMAP ),
|
|
303
301
|
|
|
304
302
|
fog: !! fog,
|
|
305
303
|
useFog: material.fog === true,
|
|
306
|
-
fogExp2: ( fog && fog.isFogExp2 ),
|
|
304
|
+
fogExp2: ( !! fog && fog.isFogExp2 ),
|
|
307
305
|
|
|
308
306
|
flatShading: material.flatShading === true,
|
|
309
307
|
|
|
@@ -359,7 +357,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
359
357
|
extensionFragDepth: HAS_EXTENSIONS && material.extensions.fragDepth === true,
|
|
360
358
|
extensionDrawBuffers: HAS_EXTENSIONS && material.extensions.drawBuffers === true,
|
|
361
359
|
extensionShaderTextureLOD: HAS_EXTENSIONS && material.extensions.shaderTextureLOD === true,
|
|
362
|
-
extensionClipCullDistance: HAS_EXTENSIONS && material.extensions.clipCullDistance && extensions.has( 'WEBGL_clip_cull_distance' ),
|
|
360
|
+
extensionClipCullDistance: HAS_EXTENSIONS && material.extensions.clipCullDistance === true && extensions.has( 'WEBGL_clip_cull_distance' ),
|
|
361
|
+
extensionMultiDraw: HAS_EXTENSIONS && material.extensions.multiDraw === true && extensions.has( 'WEBGL_multi_draw' ),
|
|
363
362
|
|
|
364
363
|
rendererExtensionFragDepth: IS_WEBGL2 || extensions.has( 'EXT_frag_depth' ),
|
|
365
364
|
rendererExtensionDrawBuffers: IS_WEBGL2 || extensions.has( 'WEBGL_draw_buffers' ),
|
|
@@ -370,6 +369,14 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
370
369
|
|
|
371
370
|
};
|
|
372
371
|
|
|
372
|
+
// the usage of getChannel() determines the active texture channels for this shader
|
|
373
|
+
|
|
374
|
+
parameters.vertexUv1s = _activeChannels.has( 1 );
|
|
375
|
+
parameters.vertexUv2s = _activeChannels.has( 2 );
|
|
376
|
+
parameters.vertexUv3s = _activeChannels.has( 3 );
|
|
377
|
+
|
|
378
|
+
_activeChannels.clear();
|
|
379
|
+
|
|
373
380
|
return parameters;
|
|
374
381
|
|
|
375
382
|
}
|
|
@@ -479,38 +486,40 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
479
486
|
_programLayers.enable( 2 );
|
|
480
487
|
if ( parameters.instancingColor )
|
|
481
488
|
_programLayers.enable( 3 );
|
|
482
|
-
if ( parameters.
|
|
489
|
+
if ( parameters.instancingMorph )
|
|
483
490
|
_programLayers.enable( 4 );
|
|
484
|
-
if ( parameters.
|
|
491
|
+
if ( parameters.matcap )
|
|
485
492
|
_programLayers.enable( 5 );
|
|
486
|
-
if ( parameters.
|
|
493
|
+
if ( parameters.envMap )
|
|
487
494
|
_programLayers.enable( 6 );
|
|
488
|
-
if ( parameters.
|
|
495
|
+
if ( parameters.normalMapObjectSpace )
|
|
489
496
|
_programLayers.enable( 7 );
|
|
490
|
-
if ( parameters.
|
|
497
|
+
if ( parameters.normalMapTangentSpace )
|
|
491
498
|
_programLayers.enable( 8 );
|
|
492
|
-
if ( parameters.
|
|
499
|
+
if ( parameters.clearcoat )
|
|
493
500
|
_programLayers.enable( 9 );
|
|
494
|
-
if ( parameters.
|
|
501
|
+
if ( parameters.iridescence )
|
|
495
502
|
_programLayers.enable( 10 );
|
|
496
|
-
if ( parameters.
|
|
503
|
+
if ( parameters.alphaTest )
|
|
497
504
|
_programLayers.enable( 11 );
|
|
498
|
-
if ( parameters.
|
|
505
|
+
if ( parameters.vertexColors )
|
|
499
506
|
_programLayers.enable( 12 );
|
|
500
|
-
if ( parameters.
|
|
507
|
+
if ( parameters.vertexAlphas )
|
|
501
508
|
_programLayers.enable( 13 );
|
|
502
|
-
if ( parameters.
|
|
509
|
+
if ( parameters.vertexUv1s )
|
|
503
510
|
_programLayers.enable( 14 );
|
|
504
|
-
if ( parameters.
|
|
511
|
+
if ( parameters.vertexUv2s )
|
|
505
512
|
_programLayers.enable( 15 );
|
|
506
|
-
if ( parameters.
|
|
513
|
+
if ( parameters.vertexUv3s )
|
|
507
514
|
_programLayers.enable( 16 );
|
|
508
|
-
if ( parameters.
|
|
515
|
+
if ( parameters.vertexTangents )
|
|
509
516
|
_programLayers.enable( 17 );
|
|
510
|
-
if ( parameters.
|
|
517
|
+
if ( parameters.anisotropy )
|
|
511
518
|
_programLayers.enable( 18 );
|
|
512
|
-
if ( parameters.
|
|
519
|
+
if ( parameters.alphaHash )
|
|
513
520
|
_programLayers.enable( 19 );
|
|
521
|
+
if ( parameters.batching )
|
|
522
|
+
_programLayers.enable( 20 );
|
|
514
523
|
|
|
515
524
|
array.push( _programLayers.mask );
|
|
516
525
|
_programLayers.disableAll();
|
|
@@ -555,8 +564,10 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
555
564
|
_programLayers.enable( 18 );
|
|
556
565
|
if ( parameters.decodeVideoTexture )
|
|
557
566
|
_programLayers.enable( 19 );
|
|
558
|
-
if ( parameters.
|
|
567
|
+
if ( parameters.alphaToCoverage )
|
|
559
568
|
_programLayers.enable( 20 );
|
|
569
|
+
if ( parameters.numMultiviewViews )
|
|
570
|
+
_programLayers.enable( 21 );
|
|
560
571
|
|
|
561
572
|
array.push( _programLayers.mask );
|
|
562
573
|
|
|
@@ -493,33 +493,19 @@ function WebGLState( gl, extensions, capabilities ) {
|
|
|
493
493
|
|
|
494
494
|
}
|
|
495
495
|
|
|
496
|
-
|
|
496
|
+
const textures = renderTarget.textures;
|
|
497
497
|
|
|
498
|
-
|
|
498
|
+
if ( drawBuffers.length !== textures.length || drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) {
|
|
499
499
|
|
|
500
|
-
|
|
500
|
+
for ( let i = 0, il = textures.length; i < il; i ++ ) {
|
|
501
501
|
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
drawBuffers[ i ] = gl.COLOR_ATTACHMENT0 + i;
|
|
505
|
-
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
drawBuffers.length = textures.length;
|
|
509
|
-
|
|
510
|
-
needsUpdate = true;
|
|
502
|
+
drawBuffers[ i ] = gl.COLOR_ATTACHMENT0 + i;
|
|
511
503
|
|
|
512
504
|
}
|
|
513
505
|
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
if ( drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) {
|
|
517
|
-
|
|
518
|
-
drawBuffers[ 0 ] = gl.COLOR_ATTACHMENT0;
|
|
506
|
+
drawBuffers.length = textures.length;
|
|
519
507
|
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
}
|
|
508
|
+
needsUpdate = true;
|
|
523
509
|
|
|
524
510
|
}
|
|
525
511
|
|
|
@@ -541,10 +527,14 @@ function WebGLState( gl, extensions, capabilities ) {
|
|
|
541
527
|
|
|
542
528
|
gl.drawBuffers( drawBuffers );
|
|
543
529
|
|
|
544
|
-
} else {
|
|
530
|
+
} else if ( extensions.has( 'WEBGL_draw_buffers' ) === true ) {
|
|
545
531
|
|
|
546
532
|
extensions.get( 'WEBGL_draw_buffers' ).drawBuffersWEBGL( drawBuffers );
|
|
547
533
|
|
|
534
|
+
} else {
|
|
535
|
+
|
|
536
|
+
throw new Error( 'THREE.WebGLState: Usage of gl.drawBuffers() require WebGL2 or WEBGL_draw_buffers extension' );
|
|
537
|
+
|
|
548
538
|
}
|
|
549
539
|
|
|
550
540
|
}
|