super-three 0.156.0 → 0.157.1
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 +753 -277
- package/build/three.js +753 -277
- package/build/three.min.js +2 -2
- package/build/three.module.js +750 -276
- package/build/three.module.min.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +17 -0
- package/examples/jsm/controls/DragControls.js +3 -2
- package/examples/jsm/csm/CSMShader.js +25 -21
- package/examples/jsm/exporters/EXRExporter.js +102 -24
- package/examples/jsm/exporters/GLTFExporter.js +1 -1
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +8726 -4
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +8737 -4
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lights/LightProbeGenerator.js +37 -3
- package/examples/jsm/lines/LineMaterial.js +90 -156
- package/examples/jsm/loaders/3DMLoader.js +378 -104
- package/examples/jsm/loaders/GLTFLoader.js +1 -1
- package/examples/jsm/loaders/LDrawLoader.js +22 -16
- package/examples/jsm/loaders/RGBELoader.js +1 -1
- package/examples/jsm/loaders/USDZLoader.js +215 -12
- package/examples/jsm/materials/MeshGouraudMaterial.js +22 -18
- package/examples/jsm/nodes/Nodes.js +5 -1
- package/examples/jsm/nodes/accessors/BitangentNode.js +1 -1
- package/examples/jsm/nodes/accessors/BufferAttributeNode.js +2 -2
- package/examples/jsm/nodes/accessors/BufferNode.js +1 -1
- package/examples/jsm/nodes/accessors/CameraNode.js +1 -1
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +2 -2
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +6 -5
- package/examples/jsm/nodes/accessors/InstanceNode.js +2 -2
- package/examples/jsm/nodes/accessors/LineMaterialNode.js +7 -9
- package/examples/jsm/nodes/accessors/MaterialNode.js +34 -46
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +9 -9
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +5 -4
- package/examples/jsm/nodes/accessors/MorphNode.js +4 -4
- package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
- package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
- package/examples/jsm/nodes/accessors/PointUVNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
- package/examples/jsm/nodes/accessors/ReferenceNode.js +13 -7
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +2 -2
- package/examples/jsm/nodes/accessors/SceneNode.js +2 -2
- package/examples/jsm/nodes/accessors/SkinningNode.js +2 -2
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +1 -1
- package/examples/jsm/nodes/accessors/TangentNode.js +1 -1
- package/examples/jsm/nodes/accessors/TextureBicubicNode.js +2 -2
- package/examples/jsm/nodes/accessors/TextureNode.js +12 -6
- package/examples/jsm/nodes/accessors/TextureSizeNode.js +2 -2
- package/examples/jsm/nodes/accessors/TextureStoreNode.js +1 -1
- package/examples/jsm/nodes/accessors/UVNode.js +1 -1
- package/examples/jsm/nodes/accessors/UserDataNode.js +2 -2
- package/examples/jsm/nodes/code/CodeNode.js +1 -1
- package/examples/jsm/nodes/code/ExpressionNode.js +1 -1
- package/examples/jsm/nodes/code/FunctionCallNode.js +1 -1
- package/examples/jsm/nodes/code/FunctionNode.js +18 -7
- package/examples/jsm/nodes/code/ScriptableNode.js +2 -2
- package/examples/jsm/nodes/code/ScriptableValueNode.js +2 -2
- package/examples/jsm/nodes/core/ArrayUniformNode.js +1 -1
- package/examples/jsm/nodes/core/AttributeNode.js +1 -1
- package/examples/jsm/nodes/core/BypassNode.js +1 -1
- package/examples/jsm/nodes/core/CacheNode.js +1 -1
- package/examples/jsm/nodes/core/ConstNode.js +1 -1
- package/examples/jsm/nodes/core/ContextNode.js +2 -2
- package/examples/jsm/nodes/core/IndexNode.js +1 -1
- package/examples/jsm/nodes/core/InputNode.js +1 -1
- package/examples/jsm/nodes/core/Node.js +28 -13
- package/examples/jsm/nodes/core/NodeBuilder.js +3 -17
- package/examples/jsm/nodes/core/NodeFrame.js +37 -14
- package/examples/jsm/nodes/core/OutputStructNode.js +8 -4
- package/examples/jsm/nodes/core/PropertyNode.js +3 -3
- package/examples/jsm/nodes/core/StackNode.js +1 -1
- package/examples/jsm/nodes/core/StructTypeNode.js +1 -1
- package/examples/jsm/nodes/core/TempNode.js +1 -1
- package/examples/jsm/nodes/core/UniformNode.js +3 -1
- package/examples/jsm/nodes/core/VarNode.js +1 -1
- package/examples/jsm/nodes/core/VaryingNode.js +1 -1
- package/examples/jsm/nodes/core/constants.js +1 -1
- package/examples/jsm/nodes/display/BlendModeNode.js +2 -2
- package/examples/jsm/nodes/display/BumpMapNode.js +2 -2
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -2
- package/examples/jsm/nodes/display/ColorSpaceNode.js +2 -2
- package/examples/jsm/nodes/display/FrontFacingNode.js +1 -1
- package/examples/jsm/nodes/display/NormalMapNode.js +2 -2
- package/examples/jsm/nodes/display/PosterizeNode.js +2 -2
- package/examples/jsm/nodes/display/ToneMappingNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportDepthNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +1 -1
- package/examples/jsm/nodes/display/ViewportNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +1 -1
- package/examples/jsm/nodes/display/ViewportTextureNode.js +1 -1
- package/examples/jsm/nodes/fog/FogExp2Node.js +2 -2
- package/examples/jsm/nodes/fog/FogNode.js +2 -2
- package/examples/jsm/nodes/fog/FogRangeNode.js +2 -2
- package/examples/jsm/nodes/geometry/RangeNode.js +2 -2
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
- package/examples/jsm/nodes/lighting/AONode.js +2 -2
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +3 -3
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +4 -4
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +4 -4
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +2 -2
- package/examples/jsm/nodes/lighting/HemisphereLightNode.js +3 -3
- package/examples/jsm/nodes/lighting/IESSpotLightNode.js +2 -2
- package/examples/jsm/nodes/lighting/LightNode.js +2 -2
- package/examples/jsm/nodes/lighting/LightingContextNode.js +3 -3
- package/examples/jsm/nodes/lighting/LightingNode.js +1 -1
- package/examples/jsm/nodes/lighting/LightsNode.js +4 -4
- package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
- package/examples/jsm/nodes/lighting/SpotLightNode.js +4 -4
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +449 -0
- package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +6 -6
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/NodeMaterial.js +27 -26
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +2 -2
- package/examples/jsm/nodes/math/CondNode.js +1 -1
- package/examples/jsm/nodes/math/HashNode.js +8 -9
- package/examples/jsm/nodes/math/MathNode.js +2 -2
- package/examples/jsm/nodes/math/OperatorNode.js +1 -1
- package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
- package/examples/jsm/nodes/shadernode/ShaderNode.js +81 -28
- package/examples/jsm/nodes/utils/ArrayElementNode.js +1 -1
- package/examples/jsm/nodes/utils/ConvertNode.js +1 -1
- package/examples/jsm/nodes/utils/DiscardNode.js +1 -1
- package/examples/jsm/nodes/utils/EquirectUVNode.js +2 -2
- package/examples/jsm/nodes/utils/JoinNode.js +1 -1
- package/examples/jsm/nodes/utils/LoopNode.js +11 -11
- package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -2
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
- package/examples/jsm/nodes/utils/OscNode.js +2 -2
- package/examples/jsm/nodes/utils/PackingNode.js +2 -2
- package/examples/jsm/nodes/utils/RemapNode.js +2 -2
- package/examples/jsm/nodes/utils/RotateUVNode.js +2 -2
- package/examples/jsm/nodes/utils/SetNode.js +62 -0
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +2 -2
- package/examples/jsm/nodes/utils/SplitNode.js +1 -1
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +2 -2
- package/examples/jsm/nodes/utils/TimerNode.js +2 -2
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +2 -2
- package/examples/jsm/objects/Sky.js +1 -3
- package/examples/jsm/postprocessing/OutputPass.js +3 -2
- package/examples/jsm/renderers/common/Background.js +2 -2
- package/examples/jsm/renderers/common/Bindings.js +3 -5
- package/examples/jsm/renderers/common/Pipelines.js +7 -7
- package/examples/jsm/renderers/common/RenderContext.js +3 -0
- package/examples/jsm/renderers/common/RenderObject.js +40 -16
- package/examples/jsm/renderers/common/RenderObjects.js +8 -14
- package/examples/jsm/renderers/common/Renderer.js +40 -13
- package/examples/jsm/renderers/common/SampledTexture.js +4 -2
- package/examples/jsm/renderers/common/StorageTexture.js +19 -0
- package/examples/jsm/renderers/common/Textures.js +14 -9
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +35 -0
- package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +20 -10
- package/examples/jsm/renderers/common/nodes/NodeSampler.js +0 -6
- package/examples/jsm/renderers/common/nodes/Nodes.js +51 -24
- package/examples/jsm/renderers/webgl/WebGLBackend.js +100 -5
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +92 -6
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +3 -3
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +14 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +5 -5
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +6 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +5 -5
- package/examples/jsm/renderers/webgpu/utils/WebGPUTexturePassUtils.js +285 -0
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +197 -167
- package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
- package/examples/jsm/shaders/MMDToonShader.js +4 -4
- package/examples/jsm/shaders/OutputShader.js +2 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +6 -6
- package/examples/jsm/utils/BufferGeometryUtils.js +6 -4
- package/package.json +1 -1
- package/src/Three.js +0 -2
- package/src/animation/AnimationUtils.js +3 -20
- package/src/animation/KeyframeTrack.js +8 -8
- package/src/cameras/Camera.js +1 -5
- package/src/cameras/CubeCamera.js +14 -8
- package/src/constants.js +7 -1
- package/src/core/RenderTarget.js +16 -7
- package/src/extras/core/CurvePath.js +4 -1
- package/src/loaders/MaterialLoader.js +1 -1
- package/src/loaders/ObjectLoader.js +6 -0
- package/src/materials/Material.js +8 -8
- package/src/math/Color.js +1 -5
- package/src/math/ColorManagement.js +82 -60
- package/src/objects/Sprite.js +2 -2
- package/src/renderers/WebGLMultiviewRenderTarget.js +35 -0
- package/src/renderers/WebGLRenderer.js +78 -22
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +35 -2
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -9
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +19 -15
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +4 -4
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +11 -6
- package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +4 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +16 -16
- package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -1
- package/src/renderers/shaders/UniformsUtils.js +2 -2
- package/src/renderers/webgl/WebGLBackground.js +5 -4
- package/src/renderers/webgl/WebGLLights.js +14 -3
- package/src/renderers/webgl/WebGLMultiview.js +100 -0
- package/src/renderers/webgl/WebGLProgram.js +84 -5
- package/src/renderers/webgl/WebGLPrograms.js +11 -2
- package/src/renderers/webgl/WebGLTextures.js +214 -26
- package/src/renderers/webgl/WebGLUtils.js +21 -23
- package/src/renderers/webxr/WebXRManager.js +36 -12
- package/src/scenes/Fog.js +1 -0
- package/src/scenes/FogExp2.js +1 -0
- package/src/textures/Source.js +2 -2
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureMipmapUtils.js +0 -163
- package/src/lights/AmbientLightProbe.js +0 -21
- package/src/lights/HemisphereLightProbe.js +0 -30
|
@@ -7,15 +7,15 @@ struct ToonMaterial {
|
|
|
7
7
|
|
|
8
8
|
};
|
|
9
9
|
|
|
10
|
-
void RE_Direct_Toon( const in IncidentLight directLight, const in
|
|
10
|
+
void RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {
|
|
11
11
|
|
|
12
|
-
vec3 irradiance = getGradientIrradiance(
|
|
12
|
+
vec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;
|
|
13
13
|
|
|
14
14
|
reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
|
|
15
15
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in
|
|
18
|
+
void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {
|
|
19
19
|
|
|
20
20
|
reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
|
|
21
21
|
|
|
@@ -203,7 +203,7 @@ void main() {
|
|
|
203
203
|
|
|
204
204
|
#ifdef USE_CLEARCOAT
|
|
205
205
|
|
|
206
|
-
float dotNVcc = saturate( dot(
|
|
206
|
+
float dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );
|
|
207
207
|
|
|
208
208
|
vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );
|
|
209
209
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Uniform Utilities
|
|
@@ -93,7 +93,7 @@ export function getUnlitUniformColorSpace( renderer ) {
|
|
|
93
93
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
return
|
|
96
|
+
return ColorManagement.workingColorSpace;
|
|
97
97
|
|
|
98
98
|
}
|
|
99
99
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { BackSide, FrontSide, CubeUVReflectionMapping,
|
|
1
|
+
import { BackSide, FrontSide, CubeUVReflectionMapping, SRGBTransfer } from '../../constants.js';
|
|
2
2
|
import { BoxGeometry } from '../../geometries/BoxGeometry.js';
|
|
3
3
|
import { PlaneGeometry } from '../../geometries/PlaneGeometry.js';
|
|
4
4
|
import { ShaderMaterial } from '../../materials/ShaderMaterial.js';
|
|
5
5
|
import { Color } from '../../math/Color.js';
|
|
6
|
+
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
6
7
|
import { Mesh } from '../../objects/Mesh.js';
|
|
7
8
|
import { ShaderLib } from '../shaders/ShaderLib.js';
|
|
8
9
|
import { cloneUniforms, getUnlitUniformColorSpace } from '../shaders/UniformsUtils.js';
|
|
@@ -67,7 +68,7 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
|
|
|
67
68
|
if ( boxMesh === undefined ) {
|
|
68
69
|
|
|
69
70
|
boxMesh = new Mesh(
|
|
70
|
-
new BoxGeometry(
|
|
71
|
+
new BoxGeometry( 10000, 10000, 10000 ),
|
|
71
72
|
new ShaderMaterial( {
|
|
72
73
|
name: 'BackgroundCubeMaterial',
|
|
73
74
|
uniforms: cloneUniforms( ShaderLib.backgroundCube.uniforms ),
|
|
@@ -108,7 +109,7 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
|
|
|
108
109
|
boxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background.isRenderTargetTexture === false ) ? - 1 : 1;
|
|
109
110
|
boxMesh.material.uniforms.backgroundBlurriness.value = scene.backgroundBlurriness;
|
|
110
111
|
boxMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;
|
|
111
|
-
boxMesh.material.toneMapped = ( background.colorSpace
|
|
112
|
+
boxMesh.material.toneMapped = ColorManagement.getTransfer( background.colorSpace ) !== SRGBTransfer;
|
|
112
113
|
|
|
113
114
|
if ( currentBackground !== background ||
|
|
114
115
|
currentBackgroundVersion !== background.version ||
|
|
@@ -164,7 +165,7 @@ function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha,
|
|
|
164
165
|
|
|
165
166
|
planeMesh.material.uniforms.t2D.value = background;
|
|
166
167
|
planeMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;
|
|
167
|
-
planeMesh.material.toneMapped = ( background.colorSpace
|
|
168
|
+
planeMesh.material.toneMapped = ColorManagement.getTransfer( background.colorSpace ) !== SRGBTransfer;
|
|
168
169
|
|
|
169
170
|
if ( background.matrixAutoUpdate === true ) {
|
|
170
171
|
|
|
@@ -170,7 +170,9 @@ function WebGLLights( extensions, capabilities ) {
|
|
|
170
170
|
numDirectionalShadows: - 1,
|
|
171
171
|
numPointShadows: - 1,
|
|
172
172
|
numSpotShadows: - 1,
|
|
173
|
-
numSpotMaps: - 1
|
|
173
|
+
numSpotMaps: - 1,
|
|
174
|
+
|
|
175
|
+
numLightProbes: - 1
|
|
174
176
|
},
|
|
175
177
|
|
|
176
178
|
ambient: [ 0, 0, 0 ],
|
|
@@ -192,7 +194,8 @@ function WebGLLights( extensions, capabilities ) {
|
|
|
192
194
|
pointShadowMap: [],
|
|
193
195
|
pointShadowMatrix: [],
|
|
194
196
|
hemi: [],
|
|
195
|
-
numSpotLightShadowsWithMaps: 0
|
|
197
|
+
numSpotLightShadowsWithMaps: 0,
|
|
198
|
+
numLightProbes: 0
|
|
196
199
|
|
|
197
200
|
};
|
|
198
201
|
|
|
@@ -220,6 +223,8 @@ function WebGLLights( extensions, capabilities ) {
|
|
|
220
223
|
let numSpotMaps = 0;
|
|
221
224
|
let numSpotShadowsWithMaps = 0;
|
|
222
225
|
|
|
226
|
+
let numLightProbes = 0;
|
|
227
|
+
|
|
223
228
|
// ordering : [shadow casting + map texturing, map texturing, shadow casting, none ]
|
|
224
229
|
lights.sort( shadowCastingAndTexturingLightsFirst );
|
|
225
230
|
|
|
@@ -250,6 +255,8 @@ function WebGLLights( extensions, capabilities ) {
|
|
|
250
255
|
|
|
251
256
|
}
|
|
252
257
|
|
|
258
|
+
numLightProbes ++;
|
|
259
|
+
|
|
253
260
|
} else if ( light.isDirectionalLight ) {
|
|
254
261
|
|
|
255
262
|
const uniforms = cache.get( light );
|
|
@@ -437,7 +444,8 @@ function WebGLLights( extensions, capabilities ) {
|
|
|
437
444
|
hash.numDirectionalShadows !== numDirectionalShadows ||
|
|
438
445
|
hash.numPointShadows !== numPointShadows ||
|
|
439
446
|
hash.numSpotShadows !== numSpotShadows ||
|
|
440
|
-
hash.numSpotMaps !== numSpotMaps
|
|
447
|
+
hash.numSpotMaps !== numSpotMaps ||
|
|
448
|
+
hash.numLightProbes !== numLightProbes ) {
|
|
441
449
|
|
|
442
450
|
state.directional.length = directionalLength;
|
|
443
451
|
state.spot.length = spotLength;
|
|
@@ -456,6 +464,7 @@ function WebGLLights( extensions, capabilities ) {
|
|
|
456
464
|
state.spotLightMatrix.length = numSpotShadows + numSpotMaps - numSpotShadowsWithMaps;
|
|
457
465
|
state.spotLightMap.length = numSpotMaps;
|
|
458
466
|
state.numSpotLightShadowsWithMaps = numSpotShadowsWithMaps;
|
|
467
|
+
state.numLightProbes = numLightProbes;
|
|
459
468
|
|
|
460
469
|
hash.directionalLength = directionalLength;
|
|
461
470
|
hash.pointLength = pointLength;
|
|
@@ -468,6 +477,8 @@ function WebGLLights( extensions, capabilities ) {
|
|
|
468
477
|
hash.numSpotShadows = numSpotShadows;
|
|
469
478
|
hash.numSpotMaps = numSpotMaps;
|
|
470
479
|
|
|
480
|
+
hash.numLightProbes = numLightProbes;
|
|
481
|
+
|
|
471
482
|
state.version = nextVersion ++;
|
|
472
483
|
|
|
473
484
|
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author fernandojsg / http://fernandojsg.com
|
|
3
|
+
* @author Takahiro https://github.com/takahirox
|
|
4
|
+
*/
|
|
5
|
+
import { Matrix3 } from '../../math/Matrix3.js';
|
|
6
|
+
import { Matrix4 } from '../../math/Matrix4.js';
|
|
7
|
+
|
|
8
|
+
class WebGLMultiview {
|
|
9
|
+
|
|
10
|
+
constructor( renderer, extensions, gl ) {
|
|
11
|
+
|
|
12
|
+
this.renderer = renderer;
|
|
13
|
+
|
|
14
|
+
this.DEFAULT_NUMVIEWS = 2;
|
|
15
|
+
this.maxNumViews = 0;
|
|
16
|
+
this.gl = gl;
|
|
17
|
+
|
|
18
|
+
this.extensions = extensions;
|
|
19
|
+
|
|
20
|
+
this.available = this.extensions.has( 'OCULUS_multiview' );
|
|
21
|
+
|
|
22
|
+
if ( this.available ) {
|
|
23
|
+
|
|
24
|
+
const extension = this.extensions.get( 'OCULUS_multiview' );
|
|
25
|
+
|
|
26
|
+
this.maxNumViews = this.gl.getParameter( extension.MAX_VIEWS_OVR );
|
|
27
|
+
|
|
28
|
+
this.mat4 = [];
|
|
29
|
+
this.mat3 = [];
|
|
30
|
+
this.cameraArray = [];
|
|
31
|
+
|
|
32
|
+
for ( var i = 0; i < this.maxNumViews; i ++ ) {
|
|
33
|
+
|
|
34
|
+
this.mat4[ i ] = new Matrix4();
|
|
35
|
+
this.mat3[ i ] = new Matrix3();
|
|
36
|
+
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
//
|
|
44
|
+
getCameraArray( camera ) {
|
|
45
|
+
|
|
46
|
+
if ( camera.isArrayCamera ) return camera.cameras;
|
|
47
|
+
|
|
48
|
+
this.cameraArray[ 0 ] = camera;
|
|
49
|
+
|
|
50
|
+
return this.cameraArray;
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
updateCameraProjectionMatricesUniform( camera, uniforms ) {
|
|
55
|
+
|
|
56
|
+
var cameras = this.getCameraArray( camera );
|
|
57
|
+
|
|
58
|
+
for ( var i = 0; i < cameras.length; i ++ ) {
|
|
59
|
+
|
|
60
|
+
this.mat4[ i ].copy( cameras[ i ].projectionMatrix );
|
|
61
|
+
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
uniforms.setValue( this.gl, 'projectionMatrices', this.mat4 );
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
updateCameraViewMatricesUniform( camera, uniforms ) {
|
|
69
|
+
|
|
70
|
+
var cameras = this.getCameraArray( camera );
|
|
71
|
+
|
|
72
|
+
for ( var i = 0; i < cameras.length; i ++ ) {
|
|
73
|
+
|
|
74
|
+
this.mat4[ i ].copy( cameras[ i ].matrixWorldInverse );
|
|
75
|
+
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
uniforms.setValue( this.gl, 'viewMatrices', this.mat4 );
|
|
79
|
+
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
updateObjectMatricesUniforms( object, camera, uniforms ) {
|
|
83
|
+
|
|
84
|
+
var cameras = this.getCameraArray( camera );
|
|
85
|
+
|
|
86
|
+
for ( var i = 0; i < cameras.length; i ++ ) {
|
|
87
|
+
|
|
88
|
+
this.mat4[ i ].multiplyMatrices( cameras[ i ].matrixWorldInverse, object.matrixWorld );
|
|
89
|
+
this.mat3[ i ].getNormalMatrix( this.mat4[ i ] );
|
|
90
|
+
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
uniforms.setValue( this.gl, 'modelViewMatrices', this.mat4 );
|
|
94
|
+
uniforms.setValue( this.gl, 'normalMatrices', this.mat3 );
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export { WebGLMultiview };
|
|
@@ -1,7 +1,8 @@
|
|
|
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, ACESFilmicToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GLSL3, LinearSRGBColorSpace, SRGBColorSpace } from '../../constants.js';
|
|
4
|
+
import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, CubeRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, VSMShadowMap, ACESFilmicToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GLSL3, LinearSRGBColorSpace, SRGBColorSpace, LinearDisplayP3ColorSpace, DisplayP3ColorSpace, P3Primaries, Rec709Primaries } from '../../constants.js';
|
|
5
|
+
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
5
6
|
|
|
6
7
|
let programIdCount = 0;
|
|
7
8
|
|
|
@@ -26,15 +27,38 @@ function handleSource( string, errorLine ) {
|
|
|
26
27
|
|
|
27
28
|
function getEncodingComponents( colorSpace ) {
|
|
28
29
|
|
|
30
|
+
const workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );
|
|
31
|
+
const encodingPrimaries = ColorManagement.getPrimaries( colorSpace );
|
|
32
|
+
|
|
33
|
+
let gamutMapping;
|
|
34
|
+
|
|
35
|
+
if ( workingPrimaries === encodingPrimaries ) {
|
|
36
|
+
|
|
37
|
+
gamutMapping = '';
|
|
38
|
+
|
|
39
|
+
} else if ( workingPrimaries === P3Primaries && encodingPrimaries === Rec709Primaries ) {
|
|
40
|
+
|
|
41
|
+
gamutMapping = 'LinearDisplayP3ToLinearSRGB';
|
|
42
|
+
|
|
43
|
+
} else if ( workingPrimaries === Rec709Primaries && encodingPrimaries === P3Primaries ) {
|
|
44
|
+
|
|
45
|
+
gamutMapping = 'LinearSRGBToLinearDisplayP3';
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
|
|
29
49
|
switch ( colorSpace ) {
|
|
30
50
|
|
|
31
51
|
case LinearSRGBColorSpace:
|
|
32
|
-
|
|
52
|
+
case LinearDisplayP3ColorSpace:
|
|
53
|
+
return [ gamutMapping, 'LinearTransferOETF' ];
|
|
54
|
+
|
|
33
55
|
case SRGBColorSpace:
|
|
34
|
-
|
|
56
|
+
case DisplayP3ColorSpace:
|
|
57
|
+
return [ gamutMapping, 'sRGBTransferOETF' ];
|
|
58
|
+
|
|
35
59
|
default:
|
|
36
60
|
console.warn( 'THREE.WebGLProgram: Unsupported color space:', colorSpace );
|
|
37
|
-
return [
|
|
61
|
+
return [ gamutMapping, 'LinearTransferOETF' ];
|
|
38
62
|
|
|
39
63
|
}
|
|
40
64
|
|
|
@@ -67,7 +91,7 @@ function getShaderErrors( gl, shader, type ) {
|
|
|
67
91
|
function getTexelEncodingFunction( functionName, colorSpace ) {
|
|
68
92
|
|
|
69
93
|
const components = getEncodingComponents( colorSpace );
|
|
70
|
-
return
|
|
94
|
+
return `vec4 ${functionName}( vec4 value ) { return ${components[ 0 ]}( ${components[ 1 ]}( value ) ); }`;
|
|
71
95
|
|
|
72
96
|
}
|
|
73
97
|
|
|
@@ -431,6 +455,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
431
455
|
let prefixVertex, prefixFragment;
|
|
432
456
|
let versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\n' : '';
|
|
433
457
|
|
|
458
|
+
const numMultiviewViews = parameters.numMultiviewViews;
|
|
459
|
+
|
|
434
460
|
if ( parameters.isRawShaderMaterial ) {
|
|
435
461
|
|
|
436
462
|
prefixVertex = [
|
|
@@ -494,6 +520,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
494
520
|
parameters.displacementMap ? '#define USE_DISPLACEMENTMAP' : '',
|
|
495
521
|
parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',
|
|
496
522
|
|
|
523
|
+
parameters.anisotropy ? '#define USE_ANISOTROPY' : '',
|
|
497
524
|
parameters.anisotropyMap ? '#define USE_ANISOTROPYMAP' : '',
|
|
498
525
|
|
|
499
526
|
parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',
|
|
@@ -581,6 +608,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
581
608
|
|
|
582
609
|
parameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',
|
|
583
610
|
|
|
611
|
+
parameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',
|
|
612
|
+
|
|
584
613
|
parameters.useLegacyLights ? '#define LEGACY_LIGHTS' : '',
|
|
585
614
|
|
|
586
615
|
parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
|
|
@@ -763,6 +792,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
763
792
|
|
|
764
793
|
parameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',
|
|
765
794
|
|
|
795
|
+
parameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',
|
|
796
|
+
|
|
766
797
|
parameters.useLegacyLights ? '#define LEGACY_LIGHTS' : '',
|
|
767
798
|
|
|
768
799
|
parameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',
|
|
@@ -832,6 +863,53 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
832
863
|
'#define textureCubeGradEXT textureGrad'
|
|
833
864
|
].join( '\n' ) + '\n' + prefixFragment;
|
|
834
865
|
|
|
866
|
+
// Multiview
|
|
867
|
+
|
|
868
|
+
if ( numMultiviewViews > 0 ) {
|
|
869
|
+
|
|
870
|
+
// TODO: fix light transforms here?
|
|
871
|
+
|
|
872
|
+
prefixVertex = [
|
|
873
|
+
'#extension GL_OVR_multiview : require',
|
|
874
|
+
'layout(num_views = ' + numMultiviewViews + ') in;',
|
|
875
|
+
'#define VIEW_ID gl_ViewID_OVR'
|
|
876
|
+
].join( '\n' ) + '\n' + prefixVertex;
|
|
877
|
+
|
|
878
|
+
prefixVertex = prefixVertex.replace(
|
|
879
|
+
[
|
|
880
|
+
'uniform mat4 modelViewMatrix;',
|
|
881
|
+
'uniform mat4 projectionMatrix;',
|
|
882
|
+
'uniform mat4 viewMatrix;',
|
|
883
|
+
'uniform mat3 normalMatrix;'
|
|
884
|
+
].join( '\n' ),
|
|
885
|
+
[
|
|
886
|
+
'uniform mat4 modelViewMatrices[' + numMultiviewViews + '];',
|
|
887
|
+
'uniform mat4 projectionMatrices[' + numMultiviewViews + '];',
|
|
888
|
+
'uniform mat4 viewMatrices[' + numMultiviewViews + '];',
|
|
889
|
+
'uniform mat3 normalMatrices[' + numMultiviewViews + '];',
|
|
890
|
+
|
|
891
|
+
'#define modelViewMatrix modelViewMatrices[VIEW_ID]',
|
|
892
|
+
'#define projectionMatrix projectionMatrices[VIEW_ID]',
|
|
893
|
+
'#define viewMatrix viewMatrices[VIEW_ID]',
|
|
894
|
+
'#define normalMatrix normalMatrices[VIEW_ID]'
|
|
895
|
+
].join( '\n' )
|
|
896
|
+
);
|
|
897
|
+
|
|
898
|
+
prefixFragment = [
|
|
899
|
+
'#extension GL_OVR_multiview : require',
|
|
900
|
+
'#define VIEW_ID gl_ViewID_OVR'
|
|
901
|
+
].join( '\n' ) + '\n' + prefixFragment;
|
|
902
|
+
|
|
903
|
+
prefixFragment = prefixFragment.replace(
|
|
904
|
+
'uniform mat4 viewMatrix;',
|
|
905
|
+
[
|
|
906
|
+
'uniform mat4 viewMatrices[' + numMultiviewViews + '];',
|
|
907
|
+
'#define viewMatrix viewMatrices[VIEW_ID]'
|
|
908
|
+
].join( '\n' )
|
|
909
|
+
);
|
|
910
|
+
|
|
911
|
+
}
|
|
912
|
+
|
|
835
913
|
}
|
|
836
914
|
|
|
837
915
|
const vertexGlsl = versionString + prefixVertex + vertexShader;
|
|
@@ -996,6 +1074,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
996
1074
|
this.program = program;
|
|
997
1075
|
this.vertexShader = glVertexShader;
|
|
998
1076
|
this.fragmentShader = glFragmentShader;
|
|
1077
|
+
this.numMultiviewViews = numMultiviewViews;
|
|
999
1078
|
|
|
1000
1079
|
return this;
|
|
1001
1080
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { BackSide, DoubleSide, CubeUVReflectionMapping, ObjectSpaceNormalMap, TangentSpaceNormalMap, NoToneMapping, NormalBlending, LinearSRGBColorSpace,
|
|
1
|
+
import { BackSide, DoubleSide, CubeUVReflectionMapping, ObjectSpaceNormalMap, TangentSpaceNormalMap, NoToneMapping, NormalBlending, LinearSRGBColorSpace, SRGBTransfer } from '../../constants.js';
|
|
2
2
|
import { Layers } from '../../core/Layers.js';
|
|
3
3
|
import { WebGLProgram } from './WebGLProgram.js';
|
|
4
4
|
import { WebGLShaderCache } from './WebGLShaderCache.js';
|
|
5
5
|
import { ShaderLib } from '../shaders/ShaderLib.js';
|
|
6
6
|
import { UniformsUtils } from '../shaders/UniformsUtils.js';
|
|
7
|
+
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
7
8
|
|
|
8
9
|
function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping ) {
|
|
9
10
|
|
|
@@ -106,6 +107,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
106
107
|
|
|
107
108
|
const currentRenderTarget = renderer.getRenderTarget();
|
|
108
109
|
|
|
110
|
+
const numMultiviewViews = currentRenderTarget && currentRenderTarget.isWebGLMultiviewRenderTarget ? currentRenderTarget.numViews : 0;
|
|
111
|
+
|
|
109
112
|
const IS_INSTANCEDMESH = object.isInstancedMesh === true;
|
|
110
113
|
|
|
111
114
|
const HAS_MAP = !! material.map;
|
|
@@ -196,6 +199,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
196
199
|
instancingColor: IS_INSTANCEDMESH && object.instanceColor !== null,
|
|
197
200
|
|
|
198
201
|
supportsVertexTextures: SUPPORTS_VERTEX_TEXTURES,
|
|
202
|
+
numMultiviewViews: numMultiviewViews,
|
|
199
203
|
outputColorSpace: ( currentRenderTarget === null ) ? renderer.outputColorSpace : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace ),
|
|
200
204
|
|
|
201
205
|
map: HAS_MAP,
|
|
@@ -324,6 +328,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
324
328
|
numSpotLightShadows: lights.spotShadowMap.length,
|
|
325
329
|
numSpotLightShadowsWithMaps: lights.numSpotLightShadowsWithMaps,
|
|
326
330
|
|
|
331
|
+
numLightProbes: lights.numLightProbes,
|
|
332
|
+
|
|
327
333
|
numClippingPlanes: clipping.numPlanes,
|
|
328
334
|
numClipIntersection: clipping.numIntersection,
|
|
329
335
|
|
|
@@ -335,7 +341,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
335
341
|
toneMapping: toneMapping,
|
|
336
342
|
useLegacyLights: renderer._useLegacyLights,
|
|
337
343
|
|
|
338
|
-
decodeVideoTexture: HAS_MAP && ( material.map.isVideoTexture === true ) && ( material.map.colorSpace ===
|
|
344
|
+
decodeVideoTexture: HAS_MAP && ( material.map.isVideoTexture === true ) && ( ColorManagement.getTransfer( material.map.colorSpace ) === SRGBTransfer ),
|
|
339
345
|
|
|
340
346
|
premultipliedAlpha: material.premultipliedAlpha,
|
|
341
347
|
|
|
@@ -448,6 +454,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
448
454
|
array.push( parameters.numPointLightShadows );
|
|
449
455
|
array.push( parameters.numSpotLightShadows );
|
|
450
456
|
array.push( parameters.numSpotLightShadowsWithMaps );
|
|
457
|
+
array.push( parameters.numLightProbes );
|
|
451
458
|
array.push( parameters.shadowMapType );
|
|
452
459
|
array.push( parameters.toneMapping );
|
|
453
460
|
array.push( parameters.numClippingPlanes );
|
|
@@ -540,6 +547,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
540
547
|
_programLayers.enable( 18 );
|
|
541
548
|
if ( parameters.decodeVideoTexture )
|
|
542
549
|
_programLayers.enable( 19 );
|
|
550
|
+
if ( parameters.numMultiviewViews )
|
|
551
|
+
_programLayers.enable( 20 );
|
|
543
552
|
|
|
544
553
|
array.push( _programLayers.mask );
|
|
545
554
|
|