super-three 0.157.1 → 0.158.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/README.md +6 -4
- package/build/three.cjs +1013 -790
- package/build/three.js +1013 -790
- package/build/three.min.js +1 -1
- package/build/three.module.js +1008 -791
- package/build/three.module.min.js +1 -1
- package/examples/jsm/Addons.js +290 -0
- package/examples/jsm/controls/FlyControls.js +26 -0
- package/examples/jsm/controls/OrbitControls.js +12 -1
- package/examples/jsm/controls/TransformControls.js +27 -11
- package/examples/jsm/csm/CSMShader.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +72 -2
- package/examples/jsm/geometries/InstancedPointsGeometry.js +174 -0
- package/examples/jsm/geometries/SDFGeometryGenerator.js +144 -0
- package/examples/jsm/libs/lottie_canvas.module.js +6 -1
- package/examples/jsm/libs/opentype.module.js +13 -75
- package/examples/jsm/libs/surfaceNet.js +201 -0
- package/examples/jsm/loaders/GLTFLoader.js +12 -3
- package/examples/jsm/loaders/LUTImageLoader.js +162 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +89 -93
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -0
- package/examples/jsm/math/Capsule.js +0 -55
- package/examples/jsm/math/Octree.js +70 -3
- package/examples/jsm/modifiers/SimplifyModifier.js +103 -11
- package/examples/jsm/modifiers/TessellateModifier.js +3 -3
- package/examples/jsm/nodes/Nodes.js +6 -6
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +3 -3
- package/examples/jsm/nodes/accessors/InstanceNode.js +3 -3
- package/examples/jsm/nodes/accessors/InstancedPointsMaterialNode.js +21 -0
- package/examples/jsm/nodes/accessors/MaterialNode.js +68 -31
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -2
- package/examples/jsm/nodes/accessors/MorphNode.js +5 -5
- package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
- package/examples/jsm/nodes/accessors/SkinningNode.js +13 -3
- package/examples/jsm/nodes/accessors/TextureNode.js +3 -3
- package/examples/jsm/nodes/code/FunctionNode.js +1 -1
- package/examples/jsm/nodes/core/AssignNode.js +72 -0
- package/examples/jsm/nodes/core/LightingModel.js +3 -1
- package/examples/jsm/nodes/core/Node.js +7 -12
- package/examples/jsm/nodes/core/NodeBuilder.js +126 -16
- package/examples/jsm/nodes/core/NodeUtils.js +4 -2
- package/examples/jsm/nodes/core/OutputStructNode.js +1 -1
- package/examples/jsm/nodes/core/ParameterNode.js +33 -0
- package/examples/jsm/nodes/core/PropertyNode.js +4 -10
- package/examples/jsm/nodes/core/StackNode.js +7 -17
- package/examples/jsm/nodes/core/TempNode.js +1 -1
- package/examples/jsm/nodes/core/VarNode.js +6 -35
- package/examples/jsm/nodes/core/VaryingNode.js +2 -0
- package/examples/jsm/nodes/display/BumpMapNode.js +35 -13
- package/examples/jsm/nodes/display/NormalMapNode.js +3 -1
- package/examples/jsm/nodes/display/ViewportNode.js +14 -4
- package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +20 -6
- package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +8 -7
- package/examples/jsm/nodes/functions/BSDF/D_GGX.js +8 -3
- package/examples/jsm/nodes/functions/BSDF/Schlick_to_F0.js +8 -0
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +8 -0
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +93 -43
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -2
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +19 -5
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +0 -6
- package/examples/jsm/nodes/lighting/LightingContextNode.js +21 -57
- package/examples/jsm/nodes/lighting/LightsNode.js +62 -4
- package/examples/jsm/nodes/lighting/PointLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/SpotLightNode.js +1 -1
- package/examples/jsm/nodes/materials/InstancedPointsNodeMaterial.js +162 -0
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +70 -71
- package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +5 -5
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- 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 +47 -20
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +6 -6
- package/examples/jsm/nodes/materials/NodeMaterial.js +17 -20
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +5 -5
- package/examples/jsm/nodes/math/OperatorNode.js +5 -21
- package/examples/jsm/nodes/shadernode/ShaderNode.js +128 -9
- package/examples/jsm/nodes/utils/ArrayElementNode.js +2 -0
- package/examples/jsm/nodes/utils/DiscardNode.js +3 -2
- package/examples/jsm/nodes/utils/JoinNode.js +11 -1
- package/examples/jsm/nodes/utils/LoopNode.js +36 -24
- package/examples/jsm/nodes/utils/SplitNode.js +2 -0
- package/examples/jsm/objects/BatchedMesh.js +586 -0
- package/examples/jsm/objects/InstancedPoints.js +21 -0
- package/examples/jsm/objects/Lensflare.js +20 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +3 -0
- package/examples/jsm/objects/Refractor.js +3 -0
- package/examples/jsm/objects/Sky.js +5 -3
- package/examples/jsm/objects/Water.js +5 -2
- package/examples/jsm/objects/Water2.js +3 -0
- package/examples/jsm/physics/AmmoPhysics.js +21 -0
- package/examples/jsm/physics/RapierPhysics.js +21 -0
- package/examples/jsm/postprocessing/BokehPass.js +3 -2
- package/examples/jsm/postprocessing/LUTPass.js +2 -1
- package/examples/jsm/postprocessing/OutputPass.js +1 -0
- package/examples/jsm/postprocessing/Pass.js +14 -3
- package/examples/jsm/postprocessing/SAOPass.js +0 -1
- package/examples/jsm/postprocessing/SMAAPass.js +0 -2
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -2
- package/examples/jsm/renderers/CSS3DRenderer.js +3 -9
- package/examples/jsm/renderers/SVGRenderer.js +9 -6
- package/examples/jsm/renderers/common/Bindings.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +8 -1
- package/examples/jsm/renderers/common/RenderObjects.js +1 -1
- package/examples/jsm/renderers/common/Textures.js +4 -36
- package/examples/jsm/renderers/common/nodes/Nodes.js +53 -18
- package/examples/jsm/renderers/webgl/WebGLBackend.js +291 -50
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +88 -12
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +40 -5
- package/examples/jsm/renderers/webgl/utils/WebGLState.js +14 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +2 -0
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +36 -4
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +2 -0
- package/examples/jsm/shaders/AfterimageShader.js +2 -0
- package/examples/jsm/shaders/BasicShader.js +2 -0
- package/examples/jsm/shaders/BlendShader.js +2 -0
- package/examples/jsm/shaders/BokehShader.js +2 -0
- package/examples/jsm/shaders/BokehShader2.js +4 -0
- package/examples/jsm/shaders/BrightnessContrastShader.js +2 -0
- package/examples/jsm/shaders/ColorCorrectionShader.js +2 -0
- package/examples/jsm/shaders/DOFMipMapShader.js +2 -0
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +5 -0
- package/examples/jsm/shaders/FXAAShader.js +2 -0
- package/examples/jsm/shaders/FilmShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +2 -0
- package/examples/jsm/shaders/FreiChenShader.js +2 -0
- package/examples/jsm/shaders/GodRaysShader.js +8 -0
- package/examples/jsm/shaders/HalftoneShader.js +2 -0
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +2 -0
- package/examples/jsm/shaders/HueSaturationShader.js +2 -0
- package/examples/jsm/shaders/KaleidoShader.js +2 -0
- package/examples/jsm/shaders/LuminosityHighPassShader.js +2 -0
- package/examples/jsm/shaders/LuminosityShader.js +2 -0
- package/examples/jsm/shaders/MMDToonShader.js +2 -0
- package/examples/jsm/shaders/MirrorShader.js +2 -0
- package/examples/jsm/shaders/NormalMapShader.js +2 -0
- package/examples/jsm/shaders/OutputShader.js +4 -5
- package/examples/jsm/shaders/SAOShader.js +5 -0
- package/examples/jsm/shaders/SMAAShader.js +6 -0
- package/examples/jsm/shaders/SSAOShader.js +6 -0
- package/examples/jsm/shaders/SSRShader.js +6 -0
- package/examples/jsm/shaders/SobelOperatorShader.js +2 -0
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +2 -0
- package/examples/jsm/shaders/TechnicolorShader.js +2 -0
- package/examples/jsm/shaders/TriangleBlurShader.js +2 -0
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +2 -0
- package/examples/jsm/shaders/VelocityShader.js +2 -0
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +2 -0
- package/examples/jsm/shaders/WaterRefractionShader.js +2 -0
- package/examples/jsm/transpiler/AST.js +231 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +899 -0
- package/examples/jsm/transpiler/ShaderToyDecoder.js +49 -0
- package/examples/jsm/transpiler/TSLEncoder.js +611 -0
- package/examples/jsm/transpiler/Transpiler.js +18 -0
- package/examples/jsm/webxr/VRButton.js +1 -1
- package/examples/jsm/webxr/XRButton.js +7 -5
- package/examples/jsm/webxr/XREstimatedLight.js +1 -1
- package/package.json +4 -1
- package/src/constants.js +7 -1
- package/src/extras/PMREMGenerator.js +7 -1
- package/src/loaders/MaterialLoader.js +10 -2
- package/src/materials/Material.js +27 -13
- package/src/math/Box3.js +35 -18
- package/src/math/Vector3.js +11 -12
- package/src/objects/SkinnedMesh.js +6 -7
- package/src/renderers/WebGLRenderer.js +142 -25
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +8 -6
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +2 -2
- package/src/renderers/webgl/WebGLProgram.js +80 -50
- package/src/renderers/webgl/WebGLPrograms.js +3 -0
- package/src/renderers/webgl/WebGLState.js +25 -4
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +0 -76
- package/examples/jsm/nodes/accessors/LineMaterialNode.js +0 -29
package/build/three.module.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Copyright 2010-2023 Three.js Authors
|
|
4
4
|
* SPDX-License-Identifier: MIT
|
|
5
5
|
*/
|
|
6
|
-
const REVISION = '
|
|
6
|
+
const REVISION = '158';
|
|
7
7
|
|
|
8
8
|
const MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };
|
|
9
9
|
const TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };
|
|
@@ -41,6 +41,10 @@ const OneMinusDstAlphaFactor = 207;
|
|
|
41
41
|
const DstColorFactor = 208;
|
|
42
42
|
const OneMinusDstColorFactor = 209;
|
|
43
43
|
const SrcAlphaSaturateFactor = 210;
|
|
44
|
+
const ConstantColorFactor = 211;
|
|
45
|
+
const OneMinusConstantColorFactor = 212;
|
|
46
|
+
const ConstantAlphaFactor = 213;
|
|
47
|
+
const OneMinusConstantAlphaFactor = 214;
|
|
44
48
|
const NeverDepth = 0;
|
|
45
49
|
const AlwaysDepth = 1;
|
|
46
50
|
const LessDepth = 2;
|
|
@@ -58,6 +62,8 @@ const ReinhardToneMapping = 2;
|
|
|
58
62
|
const CineonToneMapping = 3;
|
|
59
63
|
const ACESFilmicToneMapping = 4;
|
|
60
64
|
const CustomToneMapping = 5;
|
|
65
|
+
const AttachedBindMode = 'attached';
|
|
66
|
+
const DetachedBindMode = 'detached';
|
|
61
67
|
|
|
62
68
|
const UVMapping = 300;
|
|
63
69
|
const CubeReflectionMapping = 301;
|
|
@@ -4152,21 +4158,20 @@ class Vector3 {
|
|
|
4152
4158
|
|
|
4153
4159
|
applyQuaternion( q ) {
|
|
4154
4160
|
|
|
4155
|
-
|
|
4156
|
-
const qx = q.x, qy = q.y, qz = q.z, qw = q.w;
|
|
4161
|
+
// quaternion q is assumed to have unit length
|
|
4157
4162
|
|
|
4158
|
-
|
|
4159
|
-
|
|
4160
|
-
const ix = qw * x + qy * z - qz * y;
|
|
4161
|
-
const iy = qw * y + qz * x - qx * z;
|
|
4162
|
-
const iz = qw * z + qx * y - qy * x;
|
|
4163
|
-
const iw = - qx * x - qy * y - qz * z;
|
|
4163
|
+
const vx = this.x, vy = this.y, vz = this.z;
|
|
4164
|
+
const qx = q.x, qy = q.y, qz = q.z, qw = q.w;
|
|
4164
4165
|
|
|
4165
|
-
//
|
|
4166
|
+
// t = 2 * cross( q.xyz, v );
|
|
4167
|
+
const tx = 2 * ( qy * vz - qz * vy );
|
|
4168
|
+
const ty = 2 * ( qz * vx - qx * vz );
|
|
4169
|
+
const tz = 2 * ( qx * vy - qy * vx );
|
|
4166
4170
|
|
|
4167
|
-
|
|
4168
|
-
this.
|
|
4169
|
-
this.
|
|
4171
|
+
// v + q.w * t + cross( q.xyz, t );
|
|
4172
|
+
this.x = vx + qw * tx + qy * tz - qz * ty;
|
|
4173
|
+
this.y = vy + qw * ty + qz * tx - qx * tz;
|
|
4174
|
+
this.z = vz + qw * tz + qx * ty - qy * tx;
|
|
4170
4175
|
|
|
4171
4176
|
return this;
|
|
4172
4177
|
|
|
@@ -4782,37 +4787,53 @@ class Box3 {
|
|
|
4782
4787
|
|
|
4783
4788
|
object.updateWorldMatrix( false, false );
|
|
4784
4789
|
|
|
4785
|
-
|
|
4790
|
+
const geometry = object.geometry;
|
|
4786
4791
|
|
|
4787
|
-
|
|
4792
|
+
if ( geometry !== undefined ) {
|
|
4788
4793
|
|
|
4789
|
-
|
|
4794
|
+
const positionAttribute = geometry.getAttribute( 'position' );
|
|
4790
4795
|
|
|
4791
|
-
|
|
4796
|
+
// precise AABB computation based on vertex data requires at least a position attribute.
|
|
4797
|
+
// instancing isn't supported so far and uses the normal (conservative) code path.
|
|
4792
4798
|
|
|
4793
|
-
|
|
4794
|
-
_box$3.applyMatrix4( object.matrixWorld );
|
|
4799
|
+
if ( precise === true && positionAttribute !== undefined && object.isInstancedMesh !== true ) {
|
|
4795
4800
|
|
|
4796
|
-
|
|
4801
|
+
for ( let i = 0, l = positionAttribute.count; i < l; i ++ ) {
|
|
4797
4802
|
|
|
4798
|
-
|
|
4803
|
+
if ( object.isMesh === true ) {
|
|
4799
4804
|
|
|
4800
|
-
|
|
4805
|
+
object.getVertexPosition( i, _vector$a );
|
|
4806
|
+
|
|
4807
|
+
} else {
|
|
4808
|
+
|
|
4809
|
+
_vector$a.fromBufferAttribute( positionAttribute, i );
|
|
4810
|
+
|
|
4811
|
+
}
|
|
4812
|
+
|
|
4813
|
+
_vector$a.applyMatrix4( object.matrixWorld );
|
|
4814
|
+
this.expandByPoint( _vector$a );
|
|
4815
|
+
|
|
4816
|
+
}
|
|
4817
|
+
|
|
4818
|
+
} else {
|
|
4801
4819
|
|
|
4802
|
-
|
|
4820
|
+
if ( object.boundingBox !== undefined ) {
|
|
4803
4821
|
|
|
4804
|
-
|
|
4822
|
+
// object-level bounding box
|
|
4805
4823
|
|
|
4806
|
-
|
|
4807
|
-
for ( let i = 0, l = position.count; i < l; i ++ ) {
|
|
4824
|
+
if ( object.boundingBox === null ) {
|
|
4808
4825
|
|
|
4809
|
-
|
|
4810
|
-
this.expandByPoint( _vector$a );
|
|
4826
|
+
object.computeBoundingBox();
|
|
4811
4827
|
|
|
4812
4828
|
}
|
|
4813
4829
|
|
|
4830
|
+
_box$3.copy( object.boundingBox );
|
|
4831
|
+
|
|
4832
|
+
|
|
4814
4833
|
} else {
|
|
4815
4834
|
|
|
4835
|
+
// geometry-level bounding box
|
|
4836
|
+
|
|
4816
4837
|
if ( geometry.boundingBox === null ) {
|
|
4817
4838
|
|
|
4818
4839
|
geometry.computeBoundingBox();
|
|
@@ -4820,12 +4841,13 @@ class Box3 {
|
|
|
4820
4841
|
}
|
|
4821
4842
|
|
|
4822
4843
|
_box$3.copy( geometry.boundingBox );
|
|
4823
|
-
_box$3.applyMatrix4( object.matrixWorld );
|
|
4824
|
-
|
|
4825
|
-
this.union( _box$3 );
|
|
4826
4844
|
|
|
4827
4845
|
}
|
|
4828
4846
|
|
|
4847
|
+
_box$3.applyMatrix4( object.matrixWorld );
|
|
4848
|
+
|
|
4849
|
+
this.union( _box$3 );
|
|
4850
|
+
|
|
4829
4851
|
}
|
|
4830
4852
|
|
|
4831
4853
|
}
|
|
@@ -8421,1127 +8443,1140 @@ class Triangle {
|
|
|
8421
8443
|
|
|
8422
8444
|
}
|
|
8423
8445
|
|
|
8424
|
-
|
|
8446
|
+
const _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,
|
|
8447
|
+
'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,
|
|
8448
|
+
'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,
|
|
8449
|
+
'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,
|
|
8450
|
+
'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,
|
|
8451
|
+
'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,
|
|
8452
|
+
'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,
|
|
8453
|
+
'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,
|
|
8454
|
+
'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,
|
|
8455
|
+
'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,
|
|
8456
|
+
'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,
|
|
8457
|
+
'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,
|
|
8458
|
+
'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,
|
|
8459
|
+
'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,
|
|
8460
|
+
'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,
|
|
8461
|
+
'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,
|
|
8462
|
+
'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,
|
|
8463
|
+
'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,
|
|
8464
|
+
'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,
|
|
8465
|
+
'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,
|
|
8466
|
+
'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,
|
|
8467
|
+
'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,
|
|
8468
|
+
'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,
|
|
8469
|
+
'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };
|
|
8425
8470
|
|
|
8426
|
-
|
|
8471
|
+
const _hslA = { h: 0, s: 0, l: 0 };
|
|
8472
|
+
const _hslB = { h: 0, s: 0, l: 0 };
|
|
8427
8473
|
|
|
8428
|
-
|
|
8474
|
+
function hue2rgb( p, q, t ) {
|
|
8429
8475
|
|
|
8430
|
-
|
|
8476
|
+
if ( t < 0 ) t += 1;
|
|
8477
|
+
if ( t > 1 ) t -= 1;
|
|
8478
|
+
if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;
|
|
8479
|
+
if ( t < 1 / 2 ) return q;
|
|
8480
|
+
if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );
|
|
8481
|
+
return p;
|
|
8431
8482
|
|
|
8432
|
-
|
|
8483
|
+
}
|
|
8433
8484
|
|
|
8434
|
-
|
|
8485
|
+
class Color {
|
|
8435
8486
|
|
|
8436
|
-
|
|
8487
|
+
constructor( r, g, b ) {
|
|
8437
8488
|
|
|
8438
|
-
this.
|
|
8439
|
-
this.type = 'Material';
|
|
8489
|
+
this.isColor = true;
|
|
8440
8490
|
|
|
8441
|
-
this.
|
|
8442
|
-
this.
|
|
8443
|
-
this.
|
|
8491
|
+
this.r = 1;
|
|
8492
|
+
this.g = 1;
|
|
8493
|
+
this.b = 1;
|
|
8444
8494
|
|
|
8445
|
-
this.
|
|
8446
|
-
this.transparent = false;
|
|
8447
|
-
this.alphaHash = false;
|
|
8495
|
+
return this.set( r, g, b );
|
|
8448
8496
|
|
|
8449
|
-
|
|
8450
|
-
this.blendDst = OneMinusSrcAlphaFactor;
|
|
8451
|
-
this.blendEquation = AddEquation;
|
|
8452
|
-
this.blendSrcAlpha = null;
|
|
8453
|
-
this.blendDstAlpha = null;
|
|
8454
|
-
this.blendEquationAlpha = null;
|
|
8497
|
+
}
|
|
8455
8498
|
|
|
8456
|
-
|
|
8457
|
-
this.depthTest = true;
|
|
8458
|
-
this.depthWrite = true;
|
|
8499
|
+
set( r, g, b ) {
|
|
8459
8500
|
|
|
8460
|
-
|
|
8461
|
-
this.stencilFunc = AlwaysStencilFunc;
|
|
8462
|
-
this.stencilRef = 0;
|
|
8463
|
-
this.stencilFuncMask = 0xff;
|
|
8464
|
-
this.stencilFail = KeepStencilOp;
|
|
8465
|
-
this.stencilZFail = KeepStencilOp;
|
|
8466
|
-
this.stencilZPass = KeepStencilOp;
|
|
8467
|
-
this.stencilWrite = false;
|
|
8501
|
+
if ( g === undefined && b === undefined ) {
|
|
8468
8502
|
|
|
8469
|
-
|
|
8470
|
-
this.clipIntersection = false;
|
|
8471
|
-
this.clipShadows = false;
|
|
8503
|
+
// r is THREE.Color, hex or string
|
|
8472
8504
|
|
|
8473
|
-
|
|
8505
|
+
const value = r;
|
|
8474
8506
|
|
|
8475
|
-
|
|
8507
|
+
if ( value && value.isColor ) {
|
|
8476
8508
|
|
|
8477
|
-
|
|
8509
|
+
this.copy( value );
|
|
8478
8510
|
|
|
8479
|
-
|
|
8480
|
-
this.polygonOffsetFactor = 0;
|
|
8481
|
-
this.polygonOffsetUnits = 0;
|
|
8511
|
+
} else if ( typeof value === 'number' ) {
|
|
8482
8512
|
|
|
8483
|
-
|
|
8513
|
+
this.setHex( value );
|
|
8484
8514
|
|
|
8485
|
-
|
|
8486
|
-
this.premultipliedAlpha = false;
|
|
8487
|
-
this.forceSinglePass = false;
|
|
8515
|
+
} else if ( typeof value === 'string' ) {
|
|
8488
8516
|
|
|
8489
|
-
|
|
8517
|
+
this.setStyle( value );
|
|
8490
8518
|
|
|
8491
|
-
|
|
8519
|
+
}
|
|
8492
8520
|
|
|
8493
|
-
|
|
8521
|
+
} else {
|
|
8494
8522
|
|
|
8495
|
-
|
|
8523
|
+
this.setRGB( r, g, b );
|
|
8496
8524
|
|
|
8497
|
-
|
|
8525
|
+
}
|
|
8526
|
+
|
|
8527
|
+
return this;
|
|
8498
8528
|
|
|
8499
8529
|
}
|
|
8500
8530
|
|
|
8501
|
-
|
|
8531
|
+
setScalar( scalar ) {
|
|
8502
8532
|
|
|
8503
|
-
|
|
8533
|
+
this.r = scalar;
|
|
8534
|
+
this.g = scalar;
|
|
8535
|
+
this.b = scalar;
|
|
8536
|
+
|
|
8537
|
+
return this;
|
|
8504
8538
|
|
|
8505
8539
|
}
|
|
8506
8540
|
|
|
8507
|
-
|
|
8541
|
+
setHex( hex, colorSpace = SRGBColorSpace ) {
|
|
8508
8542
|
|
|
8509
|
-
|
|
8543
|
+
hex = Math.floor( hex );
|
|
8510
8544
|
|
|
8511
|
-
|
|
8545
|
+
this.r = ( hex >> 16 & 255 ) / 255;
|
|
8546
|
+
this.g = ( hex >> 8 & 255 ) / 255;
|
|
8547
|
+
this.b = ( hex & 255 ) / 255;
|
|
8512
8548
|
|
|
8513
|
-
|
|
8549
|
+
ColorManagement.toWorkingColorSpace( this, colorSpace );
|
|
8514
8550
|
|
|
8515
|
-
this
|
|
8551
|
+
return this;
|
|
8516
8552
|
|
|
8517
8553
|
}
|
|
8518
8554
|
|
|
8519
|
-
|
|
8520
|
-
|
|
8521
|
-
onBeforeRender( /* renderer, scene, camera, geometry, object, group */ ) {}
|
|
8555
|
+
setRGB( r, g, b, colorSpace = ColorManagement.workingColorSpace ) {
|
|
8522
8556
|
|
|
8523
|
-
|
|
8557
|
+
this.r = r;
|
|
8558
|
+
this.g = g;
|
|
8559
|
+
this.b = b;
|
|
8524
8560
|
|
|
8525
|
-
|
|
8561
|
+
ColorManagement.toWorkingColorSpace( this, colorSpace );
|
|
8526
8562
|
|
|
8527
|
-
return this
|
|
8563
|
+
return this;
|
|
8528
8564
|
|
|
8529
8565
|
}
|
|
8530
8566
|
|
|
8531
|
-
|
|
8532
|
-
|
|
8533
|
-
if ( values === undefined ) return;
|
|
8567
|
+
setHSL( h, s, l, colorSpace = ColorManagement.workingColorSpace ) {
|
|
8534
8568
|
|
|
8535
|
-
|
|
8569
|
+
// h,s,l ranges are in 0.0 - 1.0
|
|
8570
|
+
h = euclideanModulo( h, 1 );
|
|
8571
|
+
s = clamp( s, 0, 1 );
|
|
8572
|
+
l = clamp( l, 0, 1 );
|
|
8536
8573
|
|
|
8537
|
-
|
|
8574
|
+
if ( s === 0 ) {
|
|
8538
8575
|
|
|
8539
|
-
|
|
8576
|
+
this.r = this.g = this.b = l;
|
|
8540
8577
|
|
|
8541
|
-
|
|
8542
|
-
continue;
|
|
8578
|
+
} else {
|
|
8543
8579
|
|
|
8544
|
-
|
|
8580
|
+
const p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );
|
|
8581
|
+
const q = ( 2 * l ) - p;
|
|
8545
8582
|
|
|
8546
|
-
|
|
8583
|
+
this.r = hue2rgb( q, p, h + 1 / 3 );
|
|
8584
|
+
this.g = hue2rgb( q, p, h );
|
|
8585
|
+
this.b = hue2rgb( q, p, h - 1 / 3 );
|
|
8547
8586
|
|
|
8548
|
-
|
|
8587
|
+
}
|
|
8549
8588
|
|
|
8550
|
-
|
|
8551
|
-
continue;
|
|
8589
|
+
ColorManagement.toWorkingColorSpace( this, colorSpace );
|
|
8552
8590
|
|
|
8553
|
-
|
|
8591
|
+
return this;
|
|
8554
8592
|
|
|
8555
|
-
|
|
8593
|
+
}
|
|
8556
8594
|
|
|
8557
|
-
|
|
8595
|
+
setStyle( style, colorSpace = SRGBColorSpace ) {
|
|
8558
8596
|
|
|
8559
|
-
|
|
8597
|
+
function handleAlpha( string ) {
|
|
8560
8598
|
|
|
8561
|
-
|
|
8599
|
+
if ( string === undefined ) return;
|
|
8562
8600
|
|
|
8563
|
-
|
|
8601
|
+
if ( parseFloat( string ) < 1 ) {
|
|
8564
8602
|
|
|
8565
|
-
|
|
8603
|
+
console.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );
|
|
8566
8604
|
|
|
8567
8605
|
}
|
|
8568
8606
|
|
|
8569
8607
|
}
|
|
8570
8608
|
|
|
8571
|
-
}
|
|
8572
8609
|
|
|
8573
|
-
|
|
8610
|
+
let m;
|
|
8574
8611
|
|
|
8575
|
-
|
|
8612
|
+
if ( m = /^(\w+)\(([^\)]*)\)/.exec( style ) ) {
|
|
8576
8613
|
|
|
8577
|
-
|
|
8614
|
+
// rgb / hsl
|
|
8578
8615
|
|
|
8579
|
-
|
|
8580
|
-
|
|
8581
|
-
|
|
8582
|
-
};
|
|
8616
|
+
let color;
|
|
8617
|
+
const name = m[ 1 ];
|
|
8618
|
+
const components = m[ 2 ];
|
|
8583
8619
|
|
|
8584
|
-
|
|
8620
|
+
switch ( name ) {
|
|
8585
8621
|
|
|
8586
|
-
|
|
8587
|
-
|
|
8588
|
-
version: 4.6,
|
|
8589
|
-
type: 'Material',
|
|
8590
|
-
generator: 'Material.toJSON'
|
|
8591
|
-
}
|
|
8592
|
-
};
|
|
8622
|
+
case 'rgb':
|
|
8623
|
+
case 'rgba':
|
|
8593
8624
|
|
|
8594
|
-
|
|
8595
|
-
data.uuid = this.uuid;
|
|
8596
|
-
data.type = this.type;
|
|
8625
|
+
if ( color = /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( components ) ) {
|
|
8597
8626
|
|
|
8598
|
-
|
|
8627
|
+
// rgb(255,0,0) rgba(255,0,0,0.5)
|
|
8599
8628
|
|
|
8600
|
-
|
|
8629
|
+
handleAlpha( color[ 4 ] );
|
|
8601
8630
|
|
|
8602
|
-
|
|
8603
|
-
|
|
8631
|
+
return this.setRGB(
|
|
8632
|
+
Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255,
|
|
8633
|
+
Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255,
|
|
8634
|
+
Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255,
|
|
8635
|
+
colorSpace
|
|
8636
|
+
);
|
|
8604
8637
|
|
|
8605
|
-
|
|
8606
|
-
if ( this.sheenColor && this.sheenColor.isColor ) data.sheenColor = this.sheenColor.getHex();
|
|
8607
|
-
if ( this.sheenRoughness !== undefined ) data.sheenRoughness = this.sheenRoughness;
|
|
8608
|
-
if ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();
|
|
8609
|
-
if ( this.emissiveIntensity && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;
|
|
8638
|
+
}
|
|
8610
8639
|
|
|
8611
|
-
|
|
8612
|
-
if ( this.specularIntensity !== undefined ) data.specularIntensity = this.specularIntensity;
|
|
8613
|
-
if ( this.specularColor && this.specularColor.isColor ) data.specularColor = this.specularColor.getHex();
|
|
8614
|
-
if ( this.shininess !== undefined ) data.shininess = this.shininess;
|
|
8615
|
-
if ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;
|
|
8616
|
-
if ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;
|
|
8640
|
+
if ( color = /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( components ) ) {
|
|
8617
8641
|
|
|
8618
|
-
|
|
8642
|
+
// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)
|
|
8619
8643
|
|
|
8620
|
-
|
|
8644
|
+
handleAlpha( color[ 4 ] );
|
|
8621
8645
|
|
|
8622
|
-
|
|
8646
|
+
return this.setRGB(
|
|
8647
|
+
Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100,
|
|
8648
|
+
Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100,
|
|
8649
|
+
Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100,
|
|
8650
|
+
colorSpace
|
|
8651
|
+
);
|
|
8623
8652
|
|
|
8624
|
-
|
|
8653
|
+
}
|
|
8625
8654
|
|
|
8626
|
-
|
|
8655
|
+
break;
|
|
8627
8656
|
|
|
8628
|
-
|
|
8657
|
+
case 'hsl':
|
|
8658
|
+
case 'hsla':
|
|
8629
8659
|
|
|
8630
|
-
|
|
8660
|
+
if ( color = /^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( components ) ) {
|
|
8631
8661
|
|
|
8632
|
-
|
|
8633
|
-
data.clearcoatNormalScale = this.clearcoatNormalScale.toArray();
|
|
8662
|
+
// hsl(120,50%,50%) hsla(120,50%,50%,0.5)
|
|
8634
8663
|
|
|
8635
|
-
|
|
8664
|
+
handleAlpha( color[ 4 ] );
|
|
8636
8665
|
|
|
8637
|
-
|
|
8638
|
-
|
|
8639
|
-
|
|
8666
|
+
return this.setHSL(
|
|
8667
|
+
parseFloat( color[ 1 ] ) / 360,
|
|
8668
|
+
parseFloat( color[ 2 ] ) / 100,
|
|
8669
|
+
parseFloat( color[ 3 ] ) / 100,
|
|
8670
|
+
colorSpace
|
|
8671
|
+
);
|
|
8640
8672
|
|
|
8641
|
-
|
|
8673
|
+
}
|
|
8642
8674
|
|
|
8643
|
-
|
|
8675
|
+
break;
|
|
8644
8676
|
|
|
8645
|
-
|
|
8677
|
+
default:
|
|
8646
8678
|
|
|
8647
|
-
|
|
8679
|
+
console.warn( 'THREE.Color: Unknown color model ' + style );
|
|
8648
8680
|
|
|
8649
|
-
|
|
8681
|
+
}
|
|
8650
8682
|
|
|
8651
|
-
}
|
|
8683
|
+
} else if ( m = /^\#([A-Fa-f\d]+)$/.exec( style ) ) {
|
|
8652
8684
|
|
|
8653
|
-
|
|
8654
|
-
if ( this.anisotropyRotation !== undefined ) data.anisotropyRotation = this.anisotropyRotation;
|
|
8685
|
+
// hex color
|
|
8655
8686
|
|
|
8656
|
-
|
|
8687
|
+
const hex = m[ 1 ];
|
|
8688
|
+
const size = hex.length;
|
|
8657
8689
|
|
|
8658
|
-
|
|
8690
|
+
if ( size === 3 ) {
|
|
8659
8691
|
|
|
8660
|
-
|
|
8692
|
+
// #ff0
|
|
8693
|
+
return this.setRGB(
|
|
8694
|
+
parseInt( hex.charAt( 0 ), 16 ) / 15,
|
|
8695
|
+
parseInt( hex.charAt( 1 ), 16 ) / 15,
|
|
8696
|
+
parseInt( hex.charAt( 2 ), 16 ) / 15,
|
|
8697
|
+
colorSpace
|
|
8698
|
+
);
|
|
8661
8699
|
|
|
8662
|
-
|
|
8663
|
-
if ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;
|
|
8664
|
-
if ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;
|
|
8700
|
+
} else if ( size === 6 ) {
|
|
8665
8701
|
|
|
8666
|
-
|
|
8702
|
+
// #ff0000
|
|
8703
|
+
return this.setHex( parseInt( hex, 16 ), colorSpace );
|
|
8667
8704
|
|
|
8668
|
-
|
|
8669
|
-
data.lightMapIntensity = this.lightMapIntensity;
|
|
8705
|
+
} else {
|
|
8670
8706
|
|
|
8671
|
-
|
|
8707
|
+
console.warn( 'THREE.Color: Invalid hex color ' + style );
|
|
8672
8708
|
|
|
8673
|
-
|
|
8709
|
+
}
|
|
8674
8710
|
|
|
8675
|
-
|
|
8676
|
-
|
|
8711
|
+
} else if ( style && style.length > 0 ) {
|
|
8712
|
+
|
|
8713
|
+
return this.setColorName( style, colorSpace );
|
|
8677
8714
|
|
|
8678
8715
|
}
|
|
8679
8716
|
|
|
8680
|
-
|
|
8717
|
+
return this;
|
|
8681
8718
|
|
|
8682
|
-
|
|
8683
|
-
data.bumpScale = this.bumpScale;
|
|
8719
|
+
}
|
|
8684
8720
|
|
|
8685
|
-
|
|
8721
|
+
setColorName( style, colorSpace = SRGBColorSpace ) {
|
|
8686
8722
|
|
|
8687
|
-
|
|
8723
|
+
// color keywords
|
|
8724
|
+
const hex = _colorKeywords[ style.toLowerCase() ];
|
|
8688
8725
|
|
|
8689
|
-
|
|
8690
|
-
data.normalMapType = this.normalMapType;
|
|
8691
|
-
data.normalScale = this.normalScale.toArray();
|
|
8726
|
+
if ( hex !== undefined ) {
|
|
8692
8727
|
|
|
8693
|
-
|
|
8728
|
+
// red
|
|
8729
|
+
this.setHex( hex, colorSpace );
|
|
8694
8730
|
|
|
8695
|
-
|
|
8731
|
+
} else {
|
|
8696
8732
|
|
|
8697
|
-
|
|
8698
|
-
|
|
8699
|
-
data.displacementBias = this.displacementBias;
|
|
8733
|
+
// unknown color
|
|
8734
|
+
console.warn( 'THREE.Color: Unknown color ' + style );
|
|
8700
8735
|
|
|
8701
8736
|
}
|
|
8702
8737
|
|
|
8703
|
-
|
|
8704
|
-
if ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;
|
|
8738
|
+
return this;
|
|
8705
8739
|
|
|
8706
|
-
|
|
8707
|
-
if ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;
|
|
8708
|
-
if ( this.specularIntensityMap && this.specularIntensityMap.isTexture ) data.specularIntensityMap = this.specularIntensityMap.toJSON( meta ).uuid;
|
|
8709
|
-
if ( this.specularColorMap && this.specularColorMap.isTexture ) data.specularColorMap = this.specularColorMap.toJSON( meta ).uuid;
|
|
8740
|
+
}
|
|
8710
8741
|
|
|
8711
|
-
|
|
8742
|
+
clone() {
|
|
8712
8743
|
|
|
8713
|
-
|
|
8744
|
+
return new this.constructor( this.r, this.g, this.b );
|
|
8714
8745
|
|
|
8715
|
-
|
|
8746
|
+
}
|
|
8716
8747
|
|
|
8717
|
-
|
|
8748
|
+
copy( color ) {
|
|
8718
8749
|
|
|
8719
|
-
|
|
8720
|
-
|
|
8721
|
-
|
|
8750
|
+
this.r = color.r;
|
|
8751
|
+
this.g = color.g;
|
|
8752
|
+
this.b = color.b;
|
|
8722
8753
|
|
|
8723
|
-
|
|
8754
|
+
return this;
|
|
8724
8755
|
|
|
8725
|
-
|
|
8756
|
+
}
|
|
8726
8757
|
|
|
8727
|
-
|
|
8758
|
+
copySRGBToLinear( color ) {
|
|
8728
8759
|
|
|
8729
|
-
|
|
8730
|
-
|
|
8731
|
-
|
|
8732
|
-
if ( this.thicknessMap && this.thicknessMap.isTexture ) data.thicknessMap = this.thicknessMap.toJSON( meta ).uuid;
|
|
8733
|
-
if ( this.attenuationDistance !== undefined && this.attenuationDistance !== Infinity ) data.attenuationDistance = this.attenuationDistance;
|
|
8734
|
-
if ( this.attenuationColor !== undefined ) data.attenuationColor = this.attenuationColor.getHex();
|
|
8760
|
+
this.r = SRGBToLinear( color.r );
|
|
8761
|
+
this.g = SRGBToLinear( color.g );
|
|
8762
|
+
this.b = SRGBToLinear( color.b );
|
|
8735
8763
|
|
|
8736
|
-
|
|
8737
|
-
if ( this.shadowSide !== null ) data.shadowSide = this.shadowSide;
|
|
8738
|
-
if ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;
|
|
8764
|
+
return this;
|
|
8739
8765
|
|
|
8740
|
-
|
|
8741
|
-
if ( this.side !== FrontSide ) data.side = this.side;
|
|
8742
|
-
if ( this.vertexColors === true ) data.vertexColors = true;
|
|
8766
|
+
}
|
|
8743
8767
|
|
|
8744
|
-
|
|
8745
|
-
if ( this.transparent === true ) data.transparent = true;
|
|
8768
|
+
copyLinearToSRGB( color ) {
|
|
8746
8769
|
|
|
8747
|
-
|
|
8748
|
-
|
|
8749
|
-
|
|
8750
|
-
data.colorWrite = this.colorWrite;
|
|
8770
|
+
this.r = LinearToSRGB( color.r );
|
|
8771
|
+
this.g = LinearToSRGB( color.g );
|
|
8772
|
+
this.b = LinearToSRGB( color.b );
|
|
8751
8773
|
|
|
8752
|
-
|
|
8753
|
-
data.stencilWriteMask = this.stencilWriteMask;
|
|
8754
|
-
data.stencilFunc = this.stencilFunc;
|
|
8755
|
-
data.stencilRef = this.stencilRef;
|
|
8756
|
-
data.stencilFuncMask = this.stencilFuncMask;
|
|
8757
|
-
data.stencilFail = this.stencilFail;
|
|
8758
|
-
data.stencilZFail = this.stencilZFail;
|
|
8759
|
-
data.stencilZPass = this.stencilZPass;
|
|
8774
|
+
return this;
|
|
8760
8775
|
|
|
8761
|
-
|
|
8762
|
-
if ( this.rotation !== undefined && this.rotation !== 0 ) data.rotation = this.rotation;
|
|
8776
|
+
}
|
|
8763
8777
|
|
|
8764
|
-
|
|
8765
|
-
if ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;
|
|
8766
|
-
if ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;
|
|
8778
|
+
convertSRGBToLinear() {
|
|
8767
8779
|
|
|
8768
|
-
|
|
8769
|
-
if ( this.dashSize !== undefined ) data.dashSize = this.dashSize;
|
|
8770
|
-
if ( this.gapSize !== undefined ) data.gapSize = this.gapSize;
|
|
8771
|
-
if ( this.scale !== undefined ) data.scale = this.scale;
|
|
8780
|
+
this.copySRGBToLinear( this );
|
|
8772
8781
|
|
|
8773
|
-
|
|
8782
|
+
return this;
|
|
8774
8783
|
|
|
8775
|
-
|
|
8776
|
-
if ( this.alphaHash === true ) data.alphaHash = true;
|
|
8777
|
-
if ( this.alphaToCoverage === true ) data.alphaToCoverage = true;
|
|
8778
|
-
if ( this.premultipliedAlpha === true ) data.premultipliedAlpha = true;
|
|
8779
|
-
if ( this.forceSinglePass === true ) data.forceSinglePass = true;
|
|
8784
|
+
}
|
|
8780
8785
|
|
|
8781
|
-
|
|
8782
|
-
if ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;
|
|
8783
|
-
if ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;
|
|
8784
|
-
if ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;
|
|
8786
|
+
convertLinearToSRGB() {
|
|
8785
8787
|
|
|
8786
|
-
|
|
8788
|
+
this.copyLinearToSRGB( this );
|
|
8787
8789
|
|
|
8788
|
-
|
|
8790
|
+
return this;
|
|
8789
8791
|
|
|
8790
|
-
|
|
8792
|
+
}
|
|
8791
8793
|
|
|
8792
|
-
|
|
8794
|
+
getHex( colorSpace = SRGBColorSpace ) {
|
|
8793
8795
|
|
|
8794
|
-
|
|
8796
|
+
ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );
|
|
8795
8797
|
|
|
8796
|
-
|
|
8798
|
+
return Math.round( clamp( _color.r * 255, 0, 255 ) ) * 65536 + Math.round( clamp( _color.g * 255, 0, 255 ) ) * 256 + Math.round( clamp( _color.b * 255, 0, 255 ) );
|
|
8797
8799
|
|
|
8798
|
-
|
|
8800
|
+
}
|
|
8799
8801
|
|
|
8800
|
-
|
|
8802
|
+
getHexString( colorSpace = SRGBColorSpace ) {
|
|
8801
8803
|
|
|
8802
|
-
|
|
8804
|
+
return ( '000000' + this.getHex( colorSpace ).toString( 16 ) ).slice( - 6 );
|
|
8803
8805
|
|
|
8804
|
-
|
|
8805
|
-
delete data.metadata;
|
|
8806
|
-
values.push( data );
|
|
8806
|
+
}
|
|
8807
8807
|
|
|
8808
|
-
|
|
8808
|
+
getHSL( target, colorSpace = ColorManagement.workingColorSpace ) {
|
|
8809
8809
|
|
|
8810
|
-
|
|
8810
|
+
// h,s,l ranges are in 0.0 - 1.0
|
|
8811
8811
|
|
|
8812
|
-
|
|
8812
|
+
ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );
|
|
8813
8813
|
|
|
8814
|
-
|
|
8814
|
+
const r = _color.r, g = _color.g, b = _color.b;
|
|
8815
8815
|
|
|
8816
|
-
|
|
8817
|
-
|
|
8816
|
+
const max = Math.max( r, g, b );
|
|
8817
|
+
const min = Math.min( r, g, b );
|
|
8818
8818
|
|
|
8819
|
-
|
|
8820
|
-
|
|
8819
|
+
let hue, saturation;
|
|
8820
|
+
const lightness = ( min + max ) / 2.0;
|
|
8821
8821
|
|
|
8822
|
-
|
|
8822
|
+
if ( min === max ) {
|
|
8823
8823
|
|
|
8824
|
-
|
|
8824
|
+
hue = 0;
|
|
8825
|
+
saturation = 0;
|
|
8825
8826
|
|
|
8826
|
-
|
|
8827
|
+
} else {
|
|
8827
8828
|
|
|
8828
|
-
|
|
8829
|
+
const delta = max - min;
|
|
8829
8830
|
|
|
8830
|
-
|
|
8831
|
+
saturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );
|
|
8831
8832
|
|
|
8832
|
-
|
|
8833
|
+
switch ( max ) {
|
|
8833
8834
|
|
|
8834
|
-
|
|
8835
|
+
case r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;
|
|
8836
|
+
case g: hue = ( b - r ) / delta + 2; break;
|
|
8837
|
+
case b: hue = ( r - g ) / delta + 4; break;
|
|
8835
8838
|
|
|
8836
|
-
|
|
8839
|
+
}
|
|
8837
8840
|
|
|
8838
|
-
|
|
8839
|
-
this.side = source.side;
|
|
8840
|
-
this.vertexColors = source.vertexColors;
|
|
8841
|
+
hue /= 6;
|
|
8841
8842
|
|
|
8842
|
-
|
|
8843
|
-
this.transparent = source.transparent;
|
|
8843
|
+
}
|
|
8844
8844
|
|
|
8845
|
-
|
|
8846
|
-
|
|
8847
|
-
|
|
8848
|
-
this.blendSrcAlpha = source.blendSrcAlpha;
|
|
8849
|
-
this.blendDstAlpha = source.blendDstAlpha;
|
|
8850
|
-
this.blendEquationAlpha = source.blendEquationAlpha;
|
|
8845
|
+
target.h = hue;
|
|
8846
|
+
target.s = saturation;
|
|
8847
|
+
target.l = lightness;
|
|
8851
8848
|
|
|
8852
|
-
|
|
8853
|
-
this.depthTest = source.depthTest;
|
|
8854
|
-
this.depthWrite = source.depthWrite;
|
|
8849
|
+
return target;
|
|
8855
8850
|
|
|
8856
|
-
|
|
8857
|
-
this.stencilFunc = source.stencilFunc;
|
|
8858
|
-
this.stencilRef = source.stencilRef;
|
|
8859
|
-
this.stencilFuncMask = source.stencilFuncMask;
|
|
8860
|
-
this.stencilFail = source.stencilFail;
|
|
8861
|
-
this.stencilZFail = source.stencilZFail;
|
|
8862
|
-
this.stencilZPass = source.stencilZPass;
|
|
8863
|
-
this.stencilWrite = source.stencilWrite;
|
|
8851
|
+
}
|
|
8864
8852
|
|
|
8865
|
-
|
|
8866
|
-
let dstPlanes = null;
|
|
8853
|
+
getRGB( target, colorSpace = ColorManagement.workingColorSpace ) {
|
|
8867
8854
|
|
|
8868
|
-
|
|
8855
|
+
ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );
|
|
8869
8856
|
|
|
8870
|
-
|
|
8871
|
-
|
|
8857
|
+
target.r = _color.r;
|
|
8858
|
+
target.g = _color.g;
|
|
8859
|
+
target.b = _color.b;
|
|
8872
8860
|
|
|
8873
|
-
|
|
8861
|
+
return target;
|
|
8874
8862
|
|
|
8875
|
-
|
|
8863
|
+
}
|
|
8876
8864
|
|
|
8877
|
-
|
|
8865
|
+
getStyle( colorSpace = SRGBColorSpace ) {
|
|
8878
8866
|
|
|
8879
|
-
|
|
8867
|
+
ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );
|
|
8880
8868
|
|
|
8881
|
-
|
|
8882
|
-
this.clipIntersection = source.clipIntersection;
|
|
8883
|
-
this.clipShadows = source.clipShadows;
|
|
8869
|
+
const r = _color.r, g = _color.g, b = _color.b;
|
|
8884
8870
|
|
|
8885
|
-
|
|
8871
|
+
if ( colorSpace !== SRGBColorSpace ) {
|
|
8886
8872
|
|
|
8887
|
-
|
|
8873
|
+
// Requires CSS Color Module Level 4 (https://www.w3.org/TR/css-color-4/).
|
|
8874
|
+
return `color(${ colorSpace } ${ r.toFixed( 3 ) } ${ g.toFixed( 3 ) } ${ b.toFixed( 3 ) })`;
|
|
8888
8875
|
|
|
8889
|
-
|
|
8876
|
+
}
|
|
8890
8877
|
|
|
8891
|
-
|
|
8892
|
-
this.polygonOffsetFactor = source.polygonOffsetFactor;
|
|
8893
|
-
this.polygonOffsetUnits = source.polygonOffsetUnits;
|
|
8878
|
+
return `rgb(${ Math.round( r * 255 ) },${ Math.round( g * 255 ) },${ Math.round( b * 255 ) })`;
|
|
8894
8879
|
|
|
8895
|
-
|
|
8880
|
+
}
|
|
8896
8881
|
|
|
8897
|
-
|
|
8898
|
-
this.alphaHash = source.alphaHash;
|
|
8899
|
-
this.alphaToCoverage = source.alphaToCoverage;
|
|
8900
|
-
this.premultipliedAlpha = source.premultipliedAlpha;
|
|
8901
|
-
this.forceSinglePass = source.forceSinglePass;
|
|
8882
|
+
offsetHSL( h, s, l ) {
|
|
8902
8883
|
|
|
8903
|
-
this.
|
|
8884
|
+
this.getHSL( _hslA );
|
|
8904
8885
|
|
|
8905
|
-
this.
|
|
8886
|
+
return this.setHSL( _hslA.h + h, _hslA.s + s, _hslA.l + l );
|
|
8906
8887
|
|
|
8907
|
-
|
|
8888
|
+
}
|
|
8889
|
+
|
|
8890
|
+
add( color ) {
|
|
8891
|
+
|
|
8892
|
+
this.r += color.r;
|
|
8893
|
+
this.g += color.g;
|
|
8894
|
+
this.b += color.b;
|
|
8908
8895
|
|
|
8909
8896
|
return this;
|
|
8910
8897
|
|
|
8911
8898
|
}
|
|
8912
8899
|
|
|
8913
|
-
|
|
8900
|
+
addColors( color1, color2 ) {
|
|
8914
8901
|
|
|
8915
|
-
this.
|
|
8902
|
+
this.r = color1.r + color2.r;
|
|
8903
|
+
this.g = color1.g + color2.g;
|
|
8904
|
+
this.b = color1.b + color2.b;
|
|
8905
|
+
|
|
8906
|
+
return this;
|
|
8916
8907
|
|
|
8917
8908
|
}
|
|
8918
8909
|
|
|
8919
|
-
|
|
8910
|
+
addScalar( s ) {
|
|
8920
8911
|
|
|
8921
|
-
|
|
8912
|
+
this.r += s;
|
|
8913
|
+
this.g += s;
|
|
8914
|
+
this.b += s;
|
|
8915
|
+
|
|
8916
|
+
return this;
|
|
8922
8917
|
|
|
8923
8918
|
}
|
|
8924
8919
|
|
|
8925
|
-
|
|
8920
|
+
sub( color ) {
|
|
8926
8921
|
|
|
8927
|
-
|
|
8928
|
-
|
|
8929
|
-
|
|
8930
|
-
'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,
|
|
8931
|
-
'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,
|
|
8932
|
-
'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,
|
|
8933
|
-
'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,
|
|
8934
|
-
'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,
|
|
8935
|
-
'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,
|
|
8936
|
-
'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,
|
|
8937
|
-
'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,
|
|
8938
|
-
'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,
|
|
8939
|
-
'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,
|
|
8940
|
-
'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,
|
|
8941
|
-
'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,
|
|
8942
|
-
'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,
|
|
8943
|
-
'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,
|
|
8944
|
-
'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,
|
|
8945
|
-
'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,
|
|
8946
|
-
'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,
|
|
8947
|
-
'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,
|
|
8948
|
-
'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,
|
|
8949
|
-
'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,
|
|
8950
|
-
'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };
|
|
8922
|
+
this.r = Math.max( 0, this.r - color.r );
|
|
8923
|
+
this.g = Math.max( 0, this.g - color.g );
|
|
8924
|
+
this.b = Math.max( 0, this.b - color.b );
|
|
8951
8925
|
|
|
8952
|
-
|
|
8953
|
-
const _hslB = { h: 0, s: 0, l: 0 };
|
|
8926
|
+
return this;
|
|
8954
8927
|
|
|
8955
|
-
|
|
8928
|
+
}
|
|
8956
8929
|
|
|
8957
|
-
|
|
8958
|
-
if ( t > 1 ) t -= 1;
|
|
8959
|
-
if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;
|
|
8960
|
-
if ( t < 1 / 2 ) return q;
|
|
8961
|
-
if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );
|
|
8962
|
-
return p;
|
|
8930
|
+
multiply( color ) {
|
|
8963
8931
|
|
|
8964
|
-
|
|
8932
|
+
this.r *= color.r;
|
|
8933
|
+
this.g *= color.g;
|
|
8934
|
+
this.b *= color.b;
|
|
8965
8935
|
|
|
8966
|
-
|
|
8936
|
+
return this;
|
|
8967
8937
|
|
|
8968
|
-
|
|
8938
|
+
}
|
|
8969
8939
|
|
|
8970
|
-
|
|
8940
|
+
multiplyScalar( s ) {
|
|
8971
8941
|
|
|
8972
|
-
this.r
|
|
8973
|
-
this.g
|
|
8974
|
-
this.b
|
|
8942
|
+
this.r *= s;
|
|
8943
|
+
this.g *= s;
|
|
8944
|
+
this.b *= s;
|
|
8975
8945
|
|
|
8976
|
-
return this
|
|
8946
|
+
return this;
|
|
8977
8947
|
|
|
8978
8948
|
}
|
|
8979
8949
|
|
|
8980
|
-
|
|
8981
|
-
|
|
8982
|
-
if ( g === undefined && b === undefined ) {
|
|
8983
|
-
|
|
8984
|
-
// r is THREE.Color, hex or string
|
|
8950
|
+
lerp( color, alpha ) {
|
|
8985
8951
|
|
|
8986
|
-
|
|
8952
|
+
this.r += ( color.r - this.r ) * alpha;
|
|
8953
|
+
this.g += ( color.g - this.g ) * alpha;
|
|
8954
|
+
this.b += ( color.b - this.b ) * alpha;
|
|
8987
8955
|
|
|
8988
|
-
|
|
8956
|
+
return this;
|
|
8989
8957
|
|
|
8990
|
-
|
|
8958
|
+
}
|
|
8991
8959
|
|
|
8992
|
-
|
|
8960
|
+
lerpColors( color1, color2, alpha ) {
|
|
8993
8961
|
|
|
8994
|
-
|
|
8962
|
+
this.r = color1.r + ( color2.r - color1.r ) * alpha;
|
|
8963
|
+
this.g = color1.g + ( color2.g - color1.g ) * alpha;
|
|
8964
|
+
this.b = color1.b + ( color2.b - color1.b ) * alpha;
|
|
8995
8965
|
|
|
8996
|
-
|
|
8966
|
+
return this;
|
|
8997
8967
|
|
|
8998
|
-
|
|
8968
|
+
}
|
|
8999
8969
|
|
|
9000
|
-
|
|
8970
|
+
lerpHSL( color, alpha ) {
|
|
9001
8971
|
|
|
9002
|
-
|
|
8972
|
+
this.getHSL( _hslA );
|
|
8973
|
+
color.getHSL( _hslB );
|
|
9003
8974
|
|
|
9004
|
-
|
|
8975
|
+
const h = lerp( _hslA.h, _hslB.h, alpha );
|
|
8976
|
+
const s = lerp( _hslA.s, _hslB.s, alpha );
|
|
8977
|
+
const l = lerp( _hslA.l, _hslB.l, alpha );
|
|
9005
8978
|
|
|
9006
|
-
|
|
8979
|
+
this.setHSL( h, s, l );
|
|
9007
8980
|
|
|
9008
8981
|
return this;
|
|
9009
8982
|
|
|
9010
8983
|
}
|
|
9011
8984
|
|
|
9012
|
-
|
|
8985
|
+
setFromVector3( v ) {
|
|
9013
8986
|
|
|
9014
|
-
this.r =
|
|
9015
|
-
this.g =
|
|
9016
|
-
this.b =
|
|
8987
|
+
this.r = v.x;
|
|
8988
|
+
this.g = v.y;
|
|
8989
|
+
this.b = v.z;
|
|
9017
8990
|
|
|
9018
8991
|
return this;
|
|
9019
8992
|
|
|
9020
8993
|
}
|
|
9021
8994
|
|
|
9022
|
-
|
|
9023
|
-
|
|
9024
|
-
hex = Math.floor( hex );
|
|
8995
|
+
applyMatrix3( m ) {
|
|
9025
8996
|
|
|
9026
|
-
|
|
9027
|
-
|
|
9028
|
-
this.b = ( hex & 255 ) / 255;
|
|
8997
|
+
const r = this.r, g = this.g, b = this.b;
|
|
8998
|
+
const e = m.elements;
|
|
9029
8999
|
|
|
9030
|
-
|
|
9000
|
+
this.r = e[ 0 ] * r + e[ 3 ] * g + e[ 6 ] * b;
|
|
9001
|
+
this.g = e[ 1 ] * r + e[ 4 ] * g + e[ 7 ] * b;
|
|
9002
|
+
this.b = e[ 2 ] * r + e[ 5 ] * g + e[ 8 ] * b;
|
|
9031
9003
|
|
|
9032
9004
|
return this;
|
|
9033
9005
|
|
|
9034
9006
|
}
|
|
9035
9007
|
|
|
9036
|
-
|
|
9037
|
-
|
|
9038
|
-
this.r = r;
|
|
9039
|
-
this.g = g;
|
|
9040
|
-
this.b = b;
|
|
9041
|
-
|
|
9042
|
-
ColorManagement.toWorkingColorSpace( this, colorSpace );
|
|
9008
|
+
equals( c ) {
|
|
9043
9009
|
|
|
9044
|
-
return this;
|
|
9010
|
+
return ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );
|
|
9045
9011
|
|
|
9046
9012
|
}
|
|
9047
9013
|
|
|
9048
|
-
|
|
9014
|
+
fromArray( array, offset = 0 ) {
|
|
9049
9015
|
|
|
9050
|
-
|
|
9051
|
-
|
|
9052
|
-
|
|
9053
|
-
l = clamp( l, 0, 1 );
|
|
9016
|
+
this.r = array[ offset ];
|
|
9017
|
+
this.g = array[ offset + 1 ];
|
|
9018
|
+
this.b = array[ offset + 2 ];
|
|
9054
9019
|
|
|
9055
|
-
|
|
9020
|
+
return this;
|
|
9056
9021
|
|
|
9057
|
-
|
|
9022
|
+
}
|
|
9058
9023
|
|
|
9059
|
-
|
|
9024
|
+
toArray( array = [], offset = 0 ) {
|
|
9060
9025
|
|
|
9061
|
-
|
|
9062
|
-
|
|
9026
|
+
array[ offset ] = this.r;
|
|
9027
|
+
array[ offset + 1 ] = this.g;
|
|
9028
|
+
array[ offset + 2 ] = this.b;
|
|
9063
9029
|
|
|
9064
|
-
|
|
9065
|
-
this.g = hue2rgb( q, p, h );
|
|
9066
|
-
this.b = hue2rgb( q, p, h - 1 / 3 );
|
|
9030
|
+
return array;
|
|
9067
9031
|
|
|
9068
|
-
|
|
9032
|
+
}
|
|
9069
9033
|
|
|
9070
|
-
|
|
9034
|
+
fromBufferAttribute( attribute, index ) {
|
|
9035
|
+
|
|
9036
|
+
this.r = attribute.getX( index );
|
|
9037
|
+
this.g = attribute.getY( index );
|
|
9038
|
+
this.b = attribute.getZ( index );
|
|
9071
9039
|
|
|
9072
9040
|
return this;
|
|
9073
9041
|
|
|
9074
9042
|
}
|
|
9075
9043
|
|
|
9076
|
-
|
|
9044
|
+
toJSON() {
|
|
9077
9045
|
|
|
9078
|
-
|
|
9046
|
+
return this.getHex();
|
|
9079
9047
|
|
|
9080
|
-
|
|
9048
|
+
}
|
|
9081
9049
|
|
|
9082
|
-
|
|
9050
|
+
*[ Symbol.iterator ]() {
|
|
9083
9051
|
|
|
9084
|
-
|
|
9052
|
+
yield this.r;
|
|
9053
|
+
yield this.g;
|
|
9054
|
+
yield this.b;
|
|
9085
9055
|
|
|
9086
|
-
|
|
9056
|
+
}
|
|
9087
9057
|
|
|
9088
|
-
|
|
9058
|
+
}
|
|
9089
9059
|
|
|
9060
|
+
const _color = /*@__PURE__*/ new Color();
|
|
9090
9061
|
|
|
9091
|
-
|
|
9062
|
+
Color.NAMES = _colorKeywords;
|
|
9092
9063
|
|
|
9093
|
-
|
|
9064
|
+
let _materialId = 0;
|
|
9094
9065
|
|
|
9095
|
-
|
|
9066
|
+
class Material extends EventDispatcher {
|
|
9096
9067
|
|
|
9097
|
-
|
|
9098
|
-
const name = m[ 1 ];
|
|
9099
|
-
const components = m[ 2 ];
|
|
9068
|
+
constructor() {
|
|
9100
9069
|
|
|
9101
|
-
|
|
9070
|
+
super();
|
|
9102
9071
|
|
|
9103
|
-
|
|
9104
|
-
case 'rgba':
|
|
9072
|
+
this.isMaterial = true;
|
|
9105
9073
|
|
|
9106
|
-
|
|
9074
|
+
Object.defineProperty( this, 'id', { value: _materialId ++ } );
|
|
9107
9075
|
|
|
9108
|
-
|
|
9076
|
+
this.uuid = generateUUID();
|
|
9109
9077
|
|
|
9110
|
-
|
|
9078
|
+
this.name = '';
|
|
9079
|
+
this.type = 'Material';
|
|
9111
9080
|
|
|
9112
|
-
|
|
9113
|
-
|
|
9114
|
-
|
|
9115
|
-
Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255,
|
|
9116
|
-
colorSpace
|
|
9117
|
-
);
|
|
9081
|
+
this.blending = NormalBlending;
|
|
9082
|
+
this.side = FrontSide;
|
|
9083
|
+
this.vertexColors = false;
|
|
9118
9084
|
|
|
9119
|
-
|
|
9085
|
+
this.opacity = 1;
|
|
9086
|
+
this.transparent = false;
|
|
9087
|
+
this.alphaHash = false;
|
|
9120
9088
|
|
|
9121
|
-
|
|
9089
|
+
this.blendSrc = SrcAlphaFactor;
|
|
9090
|
+
this.blendDst = OneMinusSrcAlphaFactor;
|
|
9091
|
+
this.blendEquation = AddEquation;
|
|
9092
|
+
this.blendSrcAlpha = null;
|
|
9093
|
+
this.blendDstAlpha = null;
|
|
9094
|
+
this.blendEquationAlpha = null;
|
|
9095
|
+
this.blendColor = new Color( 0, 0, 0 );
|
|
9096
|
+
this.blendAlpha = 0;
|
|
9122
9097
|
|
|
9123
|
-
|
|
9098
|
+
this.depthFunc = LessEqualDepth;
|
|
9099
|
+
this.depthTest = true;
|
|
9100
|
+
this.depthWrite = true;
|
|
9124
9101
|
|
|
9125
|
-
|
|
9102
|
+
this.stencilWriteMask = 0xff;
|
|
9103
|
+
this.stencilFunc = AlwaysStencilFunc;
|
|
9104
|
+
this.stencilRef = 0;
|
|
9105
|
+
this.stencilFuncMask = 0xff;
|
|
9106
|
+
this.stencilFail = KeepStencilOp;
|
|
9107
|
+
this.stencilZFail = KeepStencilOp;
|
|
9108
|
+
this.stencilZPass = KeepStencilOp;
|
|
9109
|
+
this.stencilWrite = false;
|
|
9126
9110
|
|
|
9127
|
-
|
|
9128
|
-
|
|
9129
|
-
|
|
9130
|
-
Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100,
|
|
9131
|
-
colorSpace
|
|
9132
|
-
);
|
|
9111
|
+
this.clippingPlanes = null;
|
|
9112
|
+
this.clipIntersection = false;
|
|
9113
|
+
this.clipShadows = false;
|
|
9133
9114
|
|
|
9134
|
-
|
|
9115
|
+
this.shadowSide = null;
|
|
9135
9116
|
|
|
9136
|
-
|
|
9117
|
+
this.colorWrite = true;
|
|
9137
9118
|
|
|
9138
|
-
|
|
9139
|
-
case 'hsla':
|
|
9119
|
+
this.precision = null; // override the renderer's default precision for this material
|
|
9140
9120
|
|
|
9141
|
-
|
|
9121
|
+
this.polygonOffset = false;
|
|
9122
|
+
this.polygonOffsetFactor = 0;
|
|
9123
|
+
this.polygonOffsetUnits = 0;
|
|
9142
9124
|
|
|
9143
|
-
|
|
9125
|
+
this.dithering = false;
|
|
9144
9126
|
|
|
9145
|
-
|
|
9127
|
+
this.alphaToCoverage = false;
|
|
9128
|
+
this.premultipliedAlpha = false;
|
|
9129
|
+
this.forceSinglePass = false;
|
|
9146
9130
|
|
|
9147
|
-
|
|
9148
|
-
parseFloat( color[ 1 ] ) / 360,
|
|
9149
|
-
parseFloat( color[ 2 ] ) / 100,
|
|
9150
|
-
parseFloat( color[ 3 ] ) / 100,
|
|
9151
|
-
colorSpace
|
|
9152
|
-
);
|
|
9131
|
+
this.visible = true;
|
|
9153
9132
|
|
|
9154
|
-
|
|
9133
|
+
this.toneMapped = true;
|
|
9155
9134
|
|
|
9156
|
-
|
|
9135
|
+
this.userData = {};
|
|
9157
9136
|
|
|
9158
|
-
|
|
9137
|
+
this.version = 0;
|
|
9159
9138
|
|
|
9160
|
-
|
|
9139
|
+
this._alphaTest = 0;
|
|
9161
9140
|
|
|
9162
|
-
|
|
9141
|
+
}
|
|
9163
9142
|
|
|
9164
|
-
|
|
9143
|
+
get alphaTest() {
|
|
9165
9144
|
|
|
9166
|
-
|
|
9145
|
+
return this._alphaTest;
|
|
9167
9146
|
|
|
9168
|
-
|
|
9169
|
-
const size = hex.length;
|
|
9147
|
+
}
|
|
9170
9148
|
|
|
9171
|
-
|
|
9149
|
+
set alphaTest( value ) {
|
|
9172
9150
|
|
|
9173
|
-
|
|
9174
|
-
return this.setRGB(
|
|
9175
|
-
parseInt( hex.charAt( 0 ), 16 ) / 15,
|
|
9176
|
-
parseInt( hex.charAt( 1 ), 16 ) / 15,
|
|
9177
|
-
parseInt( hex.charAt( 2 ), 16 ) / 15,
|
|
9178
|
-
colorSpace
|
|
9179
|
-
);
|
|
9151
|
+
if ( this._alphaTest > 0 !== value > 0 ) {
|
|
9180
9152
|
|
|
9181
|
-
|
|
9153
|
+
this.version ++;
|
|
9182
9154
|
|
|
9183
|
-
|
|
9184
|
-
return this.setHex( parseInt( hex, 16 ), colorSpace );
|
|
9155
|
+
}
|
|
9185
9156
|
|
|
9186
|
-
|
|
9157
|
+
this._alphaTest = value;
|
|
9187
9158
|
|
|
9188
|
-
|
|
9159
|
+
}
|
|
9189
9160
|
|
|
9190
|
-
|
|
9161
|
+
onBuild( /* shaderobject, renderer */ ) {}
|
|
9191
9162
|
|
|
9192
|
-
|
|
9163
|
+
onBeforeRender( /* renderer, scene, camera, geometry, object, group */ ) {}
|
|
9193
9164
|
|
|
9194
|
-
|
|
9165
|
+
onBeforeCompile( /* shaderobject, renderer */ ) {}
|
|
9195
9166
|
|
|
9196
|
-
|
|
9167
|
+
customProgramCacheKey() {
|
|
9197
9168
|
|
|
9198
|
-
return this;
|
|
9169
|
+
return this.onBeforeCompile.toString();
|
|
9199
9170
|
|
|
9200
9171
|
}
|
|
9201
9172
|
|
|
9202
|
-
|
|
9203
|
-
|
|
9204
|
-
// color keywords
|
|
9205
|
-
const hex = _colorKeywords[ style.toLowerCase() ];
|
|
9173
|
+
setValues( values ) {
|
|
9206
9174
|
|
|
9207
|
-
if (
|
|
9175
|
+
if ( values === undefined ) return;
|
|
9208
9176
|
|
|
9209
|
-
|
|
9210
|
-
this.setHex( hex, colorSpace );
|
|
9177
|
+
for ( const key in values ) {
|
|
9211
9178
|
|
|
9212
|
-
|
|
9179
|
+
const newValue = values[ key ];
|
|
9213
9180
|
|
|
9214
|
-
|
|
9215
|
-
console.warn( 'THREE.Color: Unknown color ' + style );
|
|
9181
|
+
if ( newValue === undefined ) {
|
|
9216
9182
|
|
|
9217
|
-
|
|
9183
|
+
console.warn( `THREE.Material: parameter '${ key }' has value of undefined.` );
|
|
9184
|
+
continue;
|
|
9218
9185
|
|
|
9219
|
-
|
|
9186
|
+
}
|
|
9220
9187
|
|
|
9221
|
-
|
|
9188
|
+
const currentValue = this[ key ];
|
|
9222
9189
|
|
|
9223
|
-
|
|
9190
|
+
if ( currentValue === undefined ) {
|
|
9224
9191
|
|
|
9225
|
-
|
|
9192
|
+
console.warn( `THREE.Material: '${ key }' is not a property of THREE.${ this.type }.` );
|
|
9193
|
+
continue;
|
|
9226
9194
|
|
|
9227
|
-
|
|
9195
|
+
}
|
|
9228
9196
|
|
|
9229
|
-
|
|
9197
|
+
if ( currentValue && currentValue.isColor ) {
|
|
9230
9198
|
|
|
9231
|
-
|
|
9232
|
-
this.g = color.g;
|
|
9233
|
-
this.b = color.b;
|
|
9199
|
+
currentValue.set( newValue );
|
|
9234
9200
|
|
|
9235
|
-
|
|
9201
|
+
} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {
|
|
9236
9202
|
|
|
9237
|
-
|
|
9203
|
+
currentValue.copy( newValue );
|
|
9238
9204
|
|
|
9239
|
-
|
|
9205
|
+
} else {
|
|
9240
9206
|
|
|
9241
|
-
|
|
9242
|
-
this.g = SRGBToLinear( color.g );
|
|
9243
|
-
this.b = SRGBToLinear( color.b );
|
|
9207
|
+
this[ key ] = newValue;
|
|
9244
9208
|
|
|
9245
|
-
|
|
9209
|
+
}
|
|
9210
|
+
|
|
9211
|
+
}
|
|
9246
9212
|
|
|
9247
9213
|
}
|
|
9248
9214
|
|
|
9249
|
-
|
|
9215
|
+
toJSON( meta ) {
|
|
9250
9216
|
|
|
9251
|
-
|
|
9252
|
-
this.g = LinearToSRGB( color.g );
|
|
9253
|
-
this.b = LinearToSRGB( color.b );
|
|
9217
|
+
const isRootObject = ( meta === undefined || typeof meta === 'string' );
|
|
9254
9218
|
|
|
9255
|
-
|
|
9219
|
+
if ( isRootObject ) {
|
|
9256
9220
|
|
|
9257
|
-
|
|
9221
|
+
meta = {
|
|
9222
|
+
textures: {},
|
|
9223
|
+
images: {}
|
|
9224
|
+
};
|
|
9258
9225
|
|
|
9259
|
-
|
|
9226
|
+
}
|
|
9260
9227
|
|
|
9261
|
-
|
|
9228
|
+
const data = {
|
|
9229
|
+
metadata: {
|
|
9230
|
+
version: 4.6,
|
|
9231
|
+
type: 'Material',
|
|
9232
|
+
generator: 'Material.toJSON'
|
|
9233
|
+
}
|
|
9234
|
+
};
|
|
9262
9235
|
|
|
9263
|
-
|
|
9236
|
+
// standard Material serialization
|
|
9237
|
+
data.uuid = this.uuid;
|
|
9238
|
+
data.type = this.type;
|
|
9264
9239
|
|
|
9265
|
-
|
|
9240
|
+
if ( this.name !== '' ) data.name = this.name;
|
|
9266
9241
|
|
|
9267
|
-
|
|
9242
|
+
if ( this.color && this.color.isColor ) data.color = this.color.getHex();
|
|
9268
9243
|
|
|
9269
|
-
|
|
9244
|
+
if ( this.roughness !== undefined ) data.roughness = this.roughness;
|
|
9245
|
+
if ( this.metalness !== undefined ) data.metalness = this.metalness;
|
|
9270
9246
|
|
|
9271
|
-
|
|
9247
|
+
if ( this.sheen !== undefined ) data.sheen = this.sheen;
|
|
9248
|
+
if ( this.sheenColor && this.sheenColor.isColor ) data.sheenColor = this.sheenColor.getHex();
|
|
9249
|
+
if ( this.sheenRoughness !== undefined ) data.sheenRoughness = this.sheenRoughness;
|
|
9250
|
+
if ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();
|
|
9251
|
+
if ( this.emissiveIntensity && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;
|
|
9272
9252
|
|
|
9273
|
-
|
|
9253
|
+
if ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();
|
|
9254
|
+
if ( this.specularIntensity !== undefined ) data.specularIntensity = this.specularIntensity;
|
|
9255
|
+
if ( this.specularColor && this.specularColor.isColor ) data.specularColor = this.specularColor.getHex();
|
|
9256
|
+
if ( this.shininess !== undefined ) data.shininess = this.shininess;
|
|
9257
|
+
if ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;
|
|
9258
|
+
if ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;
|
|
9274
9259
|
|
|
9275
|
-
|
|
9260
|
+
if ( this.clearcoatMap && this.clearcoatMap.isTexture ) {
|
|
9276
9261
|
|
|
9277
|
-
|
|
9262
|
+
data.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;
|
|
9278
9263
|
|
|
9279
|
-
|
|
9264
|
+
}
|
|
9280
9265
|
|
|
9281
|
-
|
|
9266
|
+
if ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {
|
|
9282
9267
|
|
|
9283
|
-
|
|
9268
|
+
data.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;
|
|
9284
9269
|
|
|
9285
|
-
|
|
9270
|
+
}
|
|
9286
9271
|
|
|
9287
|
-
|
|
9272
|
+
if ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {
|
|
9288
9273
|
|
|
9289
|
-
|
|
9274
|
+
data.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;
|
|
9275
|
+
data.clearcoatNormalScale = this.clearcoatNormalScale.toArray();
|
|
9290
9276
|
|
|
9291
|
-
|
|
9277
|
+
}
|
|
9292
9278
|
|
|
9293
|
-
|
|
9279
|
+
if ( this.iridescence !== undefined ) data.iridescence = this.iridescence;
|
|
9280
|
+
if ( this.iridescenceIOR !== undefined ) data.iridescenceIOR = this.iridescenceIOR;
|
|
9281
|
+
if ( this.iridescenceThicknessRange !== undefined ) data.iridescenceThicknessRange = this.iridescenceThicknessRange;
|
|
9294
9282
|
|
|
9295
|
-
|
|
9283
|
+
if ( this.iridescenceMap && this.iridescenceMap.isTexture ) {
|
|
9296
9284
|
|
|
9297
|
-
|
|
9298
|
-
const min = Math.min( r, g, b );
|
|
9285
|
+
data.iridescenceMap = this.iridescenceMap.toJSON( meta ).uuid;
|
|
9299
9286
|
|
|
9300
|
-
|
|
9301
|
-
const lightness = ( min + max ) / 2.0;
|
|
9287
|
+
}
|
|
9302
9288
|
|
|
9303
|
-
if (
|
|
9289
|
+
if ( this.iridescenceThicknessMap && this.iridescenceThicknessMap.isTexture ) {
|
|
9304
9290
|
|
|
9305
|
-
|
|
9306
|
-
saturation = 0;
|
|
9291
|
+
data.iridescenceThicknessMap = this.iridescenceThicknessMap.toJSON( meta ).uuid;
|
|
9307
9292
|
|
|
9308
|
-
}
|
|
9293
|
+
}
|
|
9309
9294
|
|
|
9310
|
-
|
|
9295
|
+
if ( this.anisotropy !== undefined ) data.anisotropy = this.anisotropy;
|
|
9296
|
+
if ( this.anisotropyRotation !== undefined ) data.anisotropyRotation = this.anisotropyRotation;
|
|
9311
9297
|
|
|
9312
|
-
|
|
9298
|
+
if ( this.anisotropyMap && this.anisotropyMap.isTexture ) {
|
|
9313
9299
|
|
|
9314
|
-
|
|
9300
|
+
data.anisotropyMap = this.anisotropyMap.toJSON( meta ).uuid;
|
|
9315
9301
|
|
|
9316
|
-
|
|
9317
|
-
case g: hue = ( b - r ) / delta + 2; break;
|
|
9318
|
-
case b: hue = ( r - g ) / delta + 4; break;
|
|
9302
|
+
}
|
|
9319
9303
|
|
|
9320
|
-
|
|
9304
|
+
if ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;
|
|
9305
|
+
if ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;
|
|
9306
|
+
if ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;
|
|
9321
9307
|
|
|
9322
|
-
|
|
9308
|
+
if ( this.lightMap && this.lightMap.isTexture ) {
|
|
9309
|
+
|
|
9310
|
+
data.lightMap = this.lightMap.toJSON( meta ).uuid;
|
|
9311
|
+
data.lightMapIntensity = this.lightMapIntensity;
|
|
9323
9312
|
|
|
9324
9313
|
}
|
|
9325
9314
|
|
|
9326
|
-
|
|
9327
|
-
target.s = saturation;
|
|
9328
|
-
target.l = lightness;
|
|
9315
|
+
if ( this.aoMap && this.aoMap.isTexture ) {
|
|
9329
9316
|
|
|
9330
|
-
|
|
9317
|
+
data.aoMap = this.aoMap.toJSON( meta ).uuid;
|
|
9318
|
+
data.aoMapIntensity = this.aoMapIntensity;
|
|
9331
9319
|
|
|
9332
|
-
|
|
9320
|
+
}
|
|
9333
9321
|
|
|
9334
|
-
|
|
9322
|
+
if ( this.bumpMap && this.bumpMap.isTexture ) {
|
|
9335
9323
|
|
|
9336
|
-
|
|
9324
|
+
data.bumpMap = this.bumpMap.toJSON( meta ).uuid;
|
|
9325
|
+
data.bumpScale = this.bumpScale;
|
|
9337
9326
|
|
|
9338
|
-
|
|
9339
|
-
target.g = _color.g;
|
|
9340
|
-
target.b = _color.b;
|
|
9327
|
+
}
|
|
9341
9328
|
|
|
9342
|
-
|
|
9329
|
+
if ( this.normalMap && this.normalMap.isTexture ) {
|
|
9343
9330
|
|
|
9344
|
-
|
|
9331
|
+
data.normalMap = this.normalMap.toJSON( meta ).uuid;
|
|
9332
|
+
data.normalMapType = this.normalMapType;
|
|
9333
|
+
data.normalScale = this.normalScale.toArray();
|
|
9345
9334
|
|
|
9346
|
-
|
|
9335
|
+
}
|
|
9347
9336
|
|
|
9348
|
-
|
|
9337
|
+
if ( this.displacementMap && this.displacementMap.isTexture ) {
|
|
9349
9338
|
|
|
9350
|
-
|
|
9339
|
+
data.displacementMap = this.displacementMap.toJSON( meta ).uuid;
|
|
9340
|
+
data.displacementScale = this.displacementScale;
|
|
9341
|
+
data.displacementBias = this.displacementBias;
|
|
9351
9342
|
|
|
9352
|
-
|
|
9343
|
+
}
|
|
9353
9344
|
|
|
9354
|
-
|
|
9355
|
-
|
|
9345
|
+
if ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;
|
|
9346
|
+
if ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;
|
|
9356
9347
|
|
|
9357
|
-
|
|
9348
|
+
if ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;
|
|
9349
|
+
if ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;
|
|
9350
|
+
if ( this.specularIntensityMap && this.specularIntensityMap.isTexture ) data.specularIntensityMap = this.specularIntensityMap.toJSON( meta ).uuid;
|
|
9351
|
+
if ( this.specularColorMap && this.specularColorMap.isTexture ) data.specularColorMap = this.specularColorMap.toJSON( meta ).uuid;
|
|
9358
9352
|
|
|
9359
|
-
|
|
9353
|
+
if ( this.envMap && this.envMap.isTexture ) {
|
|
9360
9354
|
|
|
9361
|
-
|
|
9355
|
+
data.envMap = this.envMap.toJSON( meta ).uuid;
|
|
9362
9356
|
|
|
9363
|
-
|
|
9357
|
+
if ( this.combine !== undefined ) data.combine = this.combine;
|
|
9364
9358
|
|
|
9365
|
-
|
|
9359
|
+
}
|
|
9366
9360
|
|
|
9367
|
-
|
|
9361
|
+
if ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;
|
|
9362
|
+
if ( this.reflectivity !== undefined ) data.reflectivity = this.reflectivity;
|
|
9363
|
+
if ( this.refractionRatio !== undefined ) data.refractionRatio = this.refractionRatio;
|
|
9368
9364
|
|
|
9369
|
-
|
|
9365
|
+
if ( this.gradientMap && this.gradientMap.isTexture ) {
|
|
9370
9366
|
|
|
9371
|
-
|
|
9367
|
+
data.gradientMap = this.gradientMap.toJSON( meta ).uuid;
|
|
9372
9368
|
|
|
9373
|
-
|
|
9374
|
-
this.g += color.g;
|
|
9375
|
-
this.b += color.b;
|
|
9369
|
+
}
|
|
9376
9370
|
|
|
9377
|
-
|
|
9371
|
+
if ( this.transmission !== undefined ) data.transmission = this.transmission;
|
|
9372
|
+
if ( this.transmissionMap && this.transmissionMap.isTexture ) data.transmissionMap = this.transmissionMap.toJSON( meta ).uuid;
|
|
9373
|
+
if ( this.thickness !== undefined ) data.thickness = this.thickness;
|
|
9374
|
+
if ( this.thicknessMap && this.thicknessMap.isTexture ) data.thicknessMap = this.thicknessMap.toJSON( meta ).uuid;
|
|
9375
|
+
if ( this.attenuationDistance !== undefined && this.attenuationDistance !== Infinity ) data.attenuationDistance = this.attenuationDistance;
|
|
9376
|
+
if ( this.attenuationColor !== undefined ) data.attenuationColor = this.attenuationColor.getHex();
|
|
9378
9377
|
|
|
9379
|
-
|
|
9378
|
+
if ( this.size !== undefined ) data.size = this.size;
|
|
9379
|
+
if ( this.shadowSide !== null ) data.shadowSide = this.shadowSide;
|
|
9380
|
+
if ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;
|
|
9380
9381
|
|
|
9381
|
-
|
|
9382
|
+
if ( this.blending !== NormalBlending ) data.blending = this.blending;
|
|
9383
|
+
if ( this.side !== FrontSide ) data.side = this.side;
|
|
9384
|
+
if ( this.vertexColors === true ) data.vertexColors = true;
|
|
9382
9385
|
|
|
9383
|
-
this.
|
|
9384
|
-
this.
|
|
9385
|
-
this.b = color1.b + color2.b;
|
|
9386
|
+
if ( this.opacity < 1 ) data.opacity = this.opacity;
|
|
9387
|
+
if ( this.transparent === true ) data.transparent = true;
|
|
9386
9388
|
|
|
9387
|
-
|
|
9389
|
+
if ( this.blendSrc !== SrcAlphaFactor ) data.blendSrc = this.blendSrc;
|
|
9390
|
+
if ( this.blendDst !== OneMinusSrcAlphaFactor ) data.blendDst = this.blendDst;
|
|
9391
|
+
if ( this.blendEquation !== AddEquation ) data.blendEquation = this.blendEquation;
|
|
9392
|
+
if ( this.blendSrcAlpha !== null ) data.blendSrcAlpha = this.blendSrcAlpha;
|
|
9393
|
+
if ( this.blendDstAlpha !== null ) data.blendDstAlpha = this.blendDstAlpha;
|
|
9394
|
+
if ( this.blendEquationAlpha !== null ) data.blendEquationAlpha = this.blendEquationAlpha;
|
|
9395
|
+
if ( this.blendColor && this.blendColor.isColor ) data.blendColor = this.blendColor.getHex();
|
|
9396
|
+
if ( this.blendAlpha !== 0 ) data.blendAlpha = this.blendAlpha;
|
|
9397
|
+
|
|
9398
|
+
if ( this.depthFunc !== LessEqualDepth ) data.depthFunc = this.depthFunc;
|
|
9399
|
+
if ( this.depthTest === false ) data.depthTest = this.depthTest;
|
|
9400
|
+
if ( this.depthWrite === false ) data.depthWrite = this.depthWrite;
|
|
9401
|
+
if ( this.colorWrite === false ) data.colorWrite = this.colorWrite;
|
|
9402
|
+
|
|
9403
|
+
if ( this.stencilWriteMask !== 0xff ) data.stencilWriteMask = this.stencilWriteMask;
|
|
9404
|
+
if ( this.stencilFunc !== AlwaysStencilFunc ) data.stencilFunc = this.stencilFunc;
|
|
9405
|
+
if ( this.stencilRef !== 0 ) data.stencilRef = this.stencilRef;
|
|
9406
|
+
if ( this.stencilFuncMask !== 0xff ) data.stencilFuncMask = this.stencilFuncMask;
|
|
9407
|
+
if ( this.stencilFail !== KeepStencilOp ) data.stencilFail = this.stencilFail;
|
|
9408
|
+
if ( this.stencilZFail !== KeepStencilOp ) data.stencilZFail = this.stencilZFail;
|
|
9409
|
+
if ( this.stencilZPass !== KeepStencilOp ) data.stencilZPass = this.stencilZPass;
|
|
9410
|
+
if ( this.stencilWrite === true ) data.stencilWrite = this.stencilWrite;
|
|
9388
9411
|
|
|
9389
|
-
|
|
9412
|
+
// rotation (SpriteMaterial)
|
|
9413
|
+
if ( this.rotation !== undefined && this.rotation !== 0 ) data.rotation = this.rotation;
|
|
9390
9414
|
|
|
9391
|
-
|
|
9415
|
+
if ( this.polygonOffset === true ) data.polygonOffset = true;
|
|
9416
|
+
if ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;
|
|
9417
|
+
if ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;
|
|
9392
9418
|
|
|
9393
|
-
this.
|
|
9394
|
-
this.
|
|
9395
|
-
this.
|
|
9419
|
+
if ( this.linewidth !== undefined && this.linewidth !== 1 ) data.linewidth = this.linewidth;
|
|
9420
|
+
if ( this.dashSize !== undefined ) data.dashSize = this.dashSize;
|
|
9421
|
+
if ( this.gapSize !== undefined ) data.gapSize = this.gapSize;
|
|
9422
|
+
if ( this.scale !== undefined ) data.scale = this.scale;
|
|
9396
9423
|
|
|
9397
|
-
|
|
9424
|
+
if ( this.dithering === true ) data.dithering = true;
|
|
9398
9425
|
|
|
9399
|
-
|
|
9426
|
+
if ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;
|
|
9427
|
+
if ( this.alphaHash === true ) data.alphaHash = true;
|
|
9428
|
+
if ( this.alphaToCoverage === true ) data.alphaToCoverage = true;
|
|
9429
|
+
if ( this.premultipliedAlpha === true ) data.premultipliedAlpha = true;
|
|
9430
|
+
if ( this.forceSinglePass === true ) data.forceSinglePass = true;
|
|
9400
9431
|
|
|
9401
|
-
|
|
9432
|
+
if ( this.wireframe === true ) data.wireframe = true;
|
|
9433
|
+
if ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;
|
|
9434
|
+
if ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;
|
|
9435
|
+
if ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;
|
|
9402
9436
|
|
|
9403
|
-
this.
|
|
9404
|
-
this.g = Math.max( 0, this.g - color.g );
|
|
9405
|
-
this.b = Math.max( 0, this.b - color.b );
|
|
9437
|
+
if ( this.flatShading === true ) data.flatShading = true;
|
|
9406
9438
|
|
|
9407
|
-
|
|
9439
|
+
if ( this.visible === false ) data.visible = false;
|
|
9408
9440
|
|
|
9409
|
-
|
|
9441
|
+
if ( this.toneMapped === false ) data.toneMapped = false;
|
|
9410
9442
|
|
|
9411
|
-
|
|
9443
|
+
if ( this.fog === false ) data.fog = false;
|
|
9412
9444
|
|
|
9413
|
-
this.
|
|
9414
|
-
this.g *= color.g;
|
|
9415
|
-
this.b *= color.b;
|
|
9445
|
+
if ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;
|
|
9416
9446
|
|
|
9417
|
-
|
|
9447
|
+
// TODO: Copied from Object3D.toJSON
|
|
9418
9448
|
|
|
9419
|
-
|
|
9449
|
+
function extractFromCache( cache ) {
|
|
9420
9450
|
|
|
9421
|
-
|
|
9451
|
+
const values = [];
|
|
9422
9452
|
|
|
9423
|
-
|
|
9424
|
-
this.g *= s;
|
|
9425
|
-
this.b *= s;
|
|
9453
|
+
for ( const key in cache ) {
|
|
9426
9454
|
|
|
9427
|
-
|
|
9455
|
+
const data = cache[ key ];
|
|
9456
|
+
delete data.metadata;
|
|
9457
|
+
values.push( data );
|
|
9428
9458
|
|
|
9429
|
-
|
|
9459
|
+
}
|
|
9430
9460
|
|
|
9431
|
-
|
|
9461
|
+
return values;
|
|
9432
9462
|
|
|
9433
|
-
|
|
9434
|
-
this.g += ( color.g - this.g ) * alpha;
|
|
9435
|
-
this.b += ( color.b - this.b ) * alpha;
|
|
9463
|
+
}
|
|
9436
9464
|
|
|
9437
|
-
|
|
9465
|
+
if ( isRootObject ) {
|
|
9438
9466
|
|
|
9439
|
-
|
|
9467
|
+
const textures = extractFromCache( meta.textures );
|
|
9468
|
+
const images = extractFromCache( meta.images );
|
|
9440
9469
|
|
|
9441
|
-
|
|
9470
|
+
if ( textures.length > 0 ) data.textures = textures;
|
|
9471
|
+
if ( images.length > 0 ) data.images = images;
|
|
9442
9472
|
|
|
9443
|
-
|
|
9444
|
-
this.g = color1.g + ( color2.g - color1.g ) * alpha;
|
|
9445
|
-
this.b = color1.b + ( color2.b - color1.b ) * alpha;
|
|
9473
|
+
}
|
|
9446
9474
|
|
|
9447
|
-
return
|
|
9475
|
+
return data;
|
|
9448
9476
|
|
|
9449
9477
|
}
|
|
9450
9478
|
|
|
9451
|
-
|
|
9452
|
-
|
|
9453
|
-
this.getHSL( _hslA );
|
|
9454
|
-
color.getHSL( _hslB );
|
|
9479
|
+
clone() {
|
|
9455
9480
|
|
|
9456
|
-
|
|
9457
|
-
const s = lerp( _hslA.s, _hslB.s, alpha );
|
|
9458
|
-
const l = lerp( _hslA.l, _hslB.l, alpha );
|
|
9481
|
+
return new this.constructor().copy( this );
|
|
9459
9482
|
|
|
9460
|
-
|
|
9483
|
+
}
|
|
9461
9484
|
|
|
9462
|
-
|
|
9485
|
+
copy( source ) {
|
|
9463
9486
|
|
|
9464
|
-
|
|
9487
|
+
this.name = source.name;
|
|
9465
9488
|
|
|
9466
|
-
|
|
9489
|
+
this.blending = source.blending;
|
|
9490
|
+
this.side = source.side;
|
|
9491
|
+
this.vertexColors = source.vertexColors;
|
|
9467
9492
|
|
|
9468
|
-
this.
|
|
9469
|
-
this.
|
|
9470
|
-
this.b = v.z;
|
|
9493
|
+
this.opacity = source.opacity;
|
|
9494
|
+
this.transparent = source.transparent;
|
|
9471
9495
|
|
|
9472
|
-
|
|
9496
|
+
this.blendSrc = source.blendSrc;
|
|
9497
|
+
this.blendDst = source.blendDst;
|
|
9498
|
+
this.blendEquation = source.blendEquation;
|
|
9499
|
+
this.blendSrcAlpha = source.blendSrcAlpha;
|
|
9500
|
+
this.blendDstAlpha = source.blendDstAlpha;
|
|
9501
|
+
this.blendEquationAlpha = source.blendEquationAlpha;
|
|
9502
|
+
this.blendColor.copy( source.blendColor );
|
|
9503
|
+
this.blendAlpha = source.blendAlpha;
|
|
9473
9504
|
|
|
9474
|
-
|
|
9505
|
+
this.depthFunc = source.depthFunc;
|
|
9506
|
+
this.depthTest = source.depthTest;
|
|
9507
|
+
this.depthWrite = source.depthWrite;
|
|
9475
9508
|
|
|
9476
|
-
|
|
9509
|
+
this.stencilWriteMask = source.stencilWriteMask;
|
|
9510
|
+
this.stencilFunc = source.stencilFunc;
|
|
9511
|
+
this.stencilRef = source.stencilRef;
|
|
9512
|
+
this.stencilFuncMask = source.stencilFuncMask;
|
|
9513
|
+
this.stencilFail = source.stencilFail;
|
|
9514
|
+
this.stencilZFail = source.stencilZFail;
|
|
9515
|
+
this.stencilZPass = source.stencilZPass;
|
|
9516
|
+
this.stencilWrite = source.stencilWrite;
|
|
9477
9517
|
|
|
9478
|
-
const
|
|
9479
|
-
|
|
9518
|
+
const srcPlanes = source.clippingPlanes;
|
|
9519
|
+
let dstPlanes = null;
|
|
9480
9520
|
|
|
9481
|
-
|
|
9482
|
-
this.g = e[ 1 ] * r + e[ 4 ] * g + e[ 7 ] * b;
|
|
9483
|
-
this.b = e[ 2 ] * r + e[ 5 ] * g + e[ 8 ] * b;
|
|
9521
|
+
if ( srcPlanes !== null ) {
|
|
9484
9522
|
|
|
9485
|
-
|
|
9523
|
+
const n = srcPlanes.length;
|
|
9524
|
+
dstPlanes = new Array( n );
|
|
9486
9525
|
|
|
9487
|
-
|
|
9526
|
+
for ( let i = 0; i !== n; ++ i ) {
|
|
9488
9527
|
|
|
9489
|
-
|
|
9528
|
+
dstPlanes[ i ] = srcPlanes[ i ].clone();
|
|
9490
9529
|
|
|
9491
|
-
|
|
9530
|
+
}
|
|
9492
9531
|
|
|
9493
|
-
|
|
9532
|
+
}
|
|
9494
9533
|
|
|
9495
|
-
|
|
9534
|
+
this.clippingPlanes = dstPlanes;
|
|
9535
|
+
this.clipIntersection = source.clipIntersection;
|
|
9536
|
+
this.clipShadows = source.clipShadows;
|
|
9496
9537
|
|
|
9497
|
-
this.
|
|
9498
|
-
this.g = array[ offset + 1 ];
|
|
9499
|
-
this.b = array[ offset + 2 ];
|
|
9538
|
+
this.shadowSide = source.shadowSide;
|
|
9500
9539
|
|
|
9501
|
-
|
|
9540
|
+
this.colorWrite = source.colorWrite;
|
|
9502
9541
|
|
|
9503
|
-
|
|
9542
|
+
this.precision = source.precision;
|
|
9504
9543
|
|
|
9505
|
-
|
|
9544
|
+
this.polygonOffset = source.polygonOffset;
|
|
9545
|
+
this.polygonOffsetFactor = source.polygonOffsetFactor;
|
|
9546
|
+
this.polygonOffsetUnits = source.polygonOffsetUnits;
|
|
9506
9547
|
|
|
9507
|
-
|
|
9508
|
-
array[ offset + 1 ] = this.g;
|
|
9509
|
-
array[ offset + 2 ] = this.b;
|
|
9548
|
+
this.dithering = source.dithering;
|
|
9510
9549
|
|
|
9511
|
-
|
|
9550
|
+
this.alphaTest = source.alphaTest;
|
|
9551
|
+
this.alphaHash = source.alphaHash;
|
|
9552
|
+
this.alphaToCoverage = source.alphaToCoverage;
|
|
9553
|
+
this.premultipliedAlpha = source.premultipliedAlpha;
|
|
9554
|
+
this.forceSinglePass = source.forceSinglePass;
|
|
9512
9555
|
|
|
9513
|
-
|
|
9556
|
+
this.visible = source.visible;
|
|
9514
9557
|
|
|
9515
|
-
|
|
9558
|
+
this.toneMapped = source.toneMapped;
|
|
9516
9559
|
|
|
9517
|
-
this.
|
|
9518
|
-
this.g = attribute.getY( index );
|
|
9519
|
-
this.b = attribute.getZ( index );
|
|
9560
|
+
this.userData = JSON.parse( JSON.stringify( source.userData ) );
|
|
9520
9561
|
|
|
9521
9562
|
return this;
|
|
9522
9563
|
|
|
9523
9564
|
}
|
|
9524
9565
|
|
|
9525
|
-
|
|
9566
|
+
dispose() {
|
|
9526
9567
|
|
|
9527
|
-
|
|
9568
|
+
this.dispatchEvent( { type: 'dispose' } );
|
|
9528
9569
|
|
|
9529
9570
|
}
|
|
9530
9571
|
|
|
9531
|
-
|
|
9572
|
+
set needsUpdate( value ) {
|
|
9532
9573
|
|
|
9533
|
-
|
|
9534
|
-
yield this.g;
|
|
9535
|
-
yield this.b;
|
|
9574
|
+
if ( value === true ) this.version ++;
|
|
9536
9575
|
|
|
9537
9576
|
}
|
|
9538
9577
|
|
|
9539
9578
|
}
|
|
9540
9579
|
|
|
9541
|
-
const _color = /*@__PURE__*/ new Color();
|
|
9542
|
-
|
|
9543
|
-
Color.NAMES = _colorKeywords;
|
|
9544
|
-
|
|
9545
9580
|
class MeshBasicMaterial extends Material {
|
|
9546
9581
|
|
|
9547
9582
|
constructor( parameters ) {
|
|
@@ -13704,7 +13739,7 @@ var alphatest_fragment = "#ifdef USE_ALPHATEST\n\tif ( diffuseColor.a < alphaTes
|
|
|
13704
13739
|
|
|
13705
13740
|
var alphatest_pars_fragment = "#ifdef USE_ALPHATEST\n\tuniform float alphaTest;\n#endif";
|
|
13706
13741
|
|
|
13707
|
-
var aomap_fragment = "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometryNormal, geometryViewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\n\t#endif\n#endif";
|
|
13742
|
+
var aomap_fragment = "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_CLEARCOAT ) \n\t\tclearcoatSpecularIndirect *= ambientOcclusion;\n\t#endif\n\t#if defined( USE_SHEEN ) \n\t\tsheenSpecularIndirect *= ambientOcclusion;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometryNormal, geometryViewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\n\t#endif\n#endif";
|
|
13708
13743
|
|
|
13709
13744
|
var aomap_pars_fragment = "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif";
|
|
13710
13745
|
|
|
@@ -13716,7 +13751,7 @@ var bsdfs = "float G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnP
|
|
|
13716
13751
|
|
|
13717
13752
|
var iridescence_fragment = "#ifdef USE_IRIDESCENCE\n\tconst mat3 XYZ_TO_REC709 = mat3(\n\t\t 3.2404542, -0.9692660, 0.0556434,\n\t\t-1.5371385, 1.8760108, -0.2040259,\n\t\t-0.4985314, 0.0415560, 1.0572252\n\t);\n\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\n\t\tvec3 sqrtF0 = sqrt( fresnel0 );\n\t\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\n\t}\n\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\n\t}\n\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\n\t}\n\tvec3 evalSensitivity( float OPD, vec3 shift ) {\n\t\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\n\t\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\n\t\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\n\t\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\n\t\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\n\t\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\n\t\txyz /= 1.0685e-7;\n\t\tvec3 rgb = XYZ_TO_REC709 * xyz;\n\t\treturn rgb;\n\t}\n\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\n\t\tvec3 I;\n\t\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\n\t\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\n\t\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\n\t\tif ( cosTheta2Sq < 0.0 ) {\n\t\t\treturn vec3( 1.0 );\n\t\t}\n\t\tfloat cosTheta2 = sqrt( cosTheta2Sq );\n\t\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\n\t\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\n\t\tfloat T121 = 1.0 - R12;\n\t\tfloat phi12 = 0.0;\n\t\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\n\t\tfloat phi21 = PI - phi12;\n\t\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\t\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\n\t\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\n\t\tvec3 phi23 = vec3( 0.0 );\n\t\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\n\t\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\n\t\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\n\t\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\n\t\tvec3 phi = vec3( phi21 ) + phi23;\n\t\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\n\t\tvec3 r123 = sqrt( R123 );\n\t\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\n\t\tvec3 C0 = R12 + Rs;\n\t\tI = C0;\n\t\tvec3 Cm = Rs - T121;\n\t\tfor ( int m = 1; m <= 2; ++ m ) {\n\t\t\tCm *= r123;\n\t\t\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\n\t\t\tI += Cm * Sm;\n\t\t}\n\t\treturn max( I, vec3( 0.0 ) );\n\t}\n#endif";
|
|
13718
13753
|
|
|
13719
|
-
var bumpmap_pars_fragment = "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vBumpMapUv );\n\t\tvec2 dSTdy = dFdy( vBumpMapUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = dFdx( surf_pos.xyz );\n\t\tvec3 vSigmaY = dFdy( surf_pos.xyz );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif";
|
|
13754
|
+
var bumpmap_pars_fragment = "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vBumpMapUv );\n\t\tvec2 dSTdy = dFdy( vBumpMapUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = normalize( dFdx( surf_pos.xyz ) );\n\t\tvec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif";
|
|
13720
13755
|
|
|
13721
13756
|
var clipping_planes_fragment = "#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif";
|
|
13722
13757
|
|
|
@@ -13794,9 +13829,9 @@ var lights_phong_pars_fragment = "varying vec3 vViewPosition;\nstruct BlinnPhong
|
|
|
13794
13829
|
|
|
13795
13830
|
var lights_physical_fragment = "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\tmaterial.ior = ior;\n\t#ifdef USE_SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULAR_COLORMAP\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\n\t\t#endif\n\t\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_IRIDESCENCE\n\tmaterial.iridescence = iridescence;\n\tmaterial.iridescenceIOR = iridescenceIOR;\n\t#ifdef USE_IRIDESCENCEMAP\n\t\tmaterial.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\n\t#endif\n\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\t\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\n\t#else\n\t\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\n\t#endif\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\t#ifdef USE_ANISOTROPYMAP\n\t\tmat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\n\t\tvec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\n\t\tvec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\n\t#else\n\t\tvec2 anisotropyV = anisotropyVector;\n\t#endif\n\tmaterial.anisotropy = length( anisotropyV );\n\tanisotropyV /= material.anisotropy;\n\tmaterial.anisotropy = saturate( material.anisotropy );\n\tmaterial.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\n\tmaterial.anisotropyT = tbn[ 0 ] * anisotropyV.x - tbn[ 1 ] * anisotropyV.y;\n\tmaterial.anisotropyB = tbn[ 1 ] * anisotropyV.x + tbn[ 0 ] * anisotropyV.y;\n#endif";
|
|
13796
13831
|
|
|
13797
|
-
var lights_physical_pars_fragment = "struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\tfloat iridescence;\n\t\tfloat iridescenceIOR;\n\t\tfloat iridescenceThickness;\n\t\tvec3 iridescenceFresnel;\n\t\tvec3 iridescenceF0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n\t#ifdef IOR\n\t\tfloat ior;\n\t#endif\n\t#ifdef USE_TRANSMISSION\n\t\tfloat transmission;\n\t\tfloat transmissionAlpha;\n\t\tfloat thickness;\n\t\tfloat attenuationDistance;\n\t\tvec3 attenuationColor;\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat anisotropy;\n\t\tfloat alphaT;\n\t\tvec3 anisotropyT;\n\t\tvec3 anisotropyB;\n\t#endif\n};\nvec3 clearcoatSpecular = vec3( 0.0 );\nvec3 sheenSpecular = vec3( 0.0 );\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\n float x2 = x * x;\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\n#ifdef USE_ANISOTROPY\n\tfloat V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\n\t\tfloat gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\n\t\tfloat gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\n\t\tfloat v = 0.5 / ( gv + gl );\n\t\treturn saturate(v);\n\t}\n\tfloat D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\n\t\tfloat a2 = alphaT * alphaB;\n\t\thighp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\n\t\thighp float v2 = dot( v, v );\n\t\tfloat w2 = a2 / v2;\n\t\treturn RECIPROCAL_PI * a2 * pow2 ( w2 );\n\t}\n#endif\n#ifdef USE_CLEARCOAT\n\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\n\t\tvec3 f0 = material.clearcoatF0;\n\t\tfloat f90 = material.clearcoatF90;\n\t\tfloat roughness = material.clearcoatRoughness;\n\t\tfloat alpha = pow2( roughness );\n\t\tvec3 halfDir = normalize( lightDir + viewDir );\n\t\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\t\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\t\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\t\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\t\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t\treturn F * ( V * D );\n\t}\n#endif\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n\tvec3 f0 = material.specularColor;\n\tfloat f90 = material.specularF90;\n\tfloat roughness = material.roughness;\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t#ifdef USE_IRIDESCENCE\n\t\tF = mix( F, material.iridescenceFresnel, material.iridescence );\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat dotTL = dot( material.anisotropyT, lightDir );\n\t\tfloat dotTV = dot( material.anisotropyT, viewDir );\n\t\tfloat dotTH = dot( material.anisotropyT, halfDir );\n\t\tfloat dotBL = dot( material.anisotropyB, lightDir );\n\t\tfloat dotBV = dot( material.anisotropyB, viewDir );\n\t\tfloat dotBH = dot( material.anisotropyB, halfDir );\n\t\tfloat V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\n\t\tfloat D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\n\t#else\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t#endif\n\treturn F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\treturn saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\t#ifdef USE_IRIDESCENCE\n\t\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n\t#else\n\t\tvec3 Fr = specularColor;\n\t#endif\n\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometryNormal;\n\t\tvec3 viewDir = geometryViewDir;\n\t\tvec3 position = geometryPosition;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecular += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\t#ifdef USE_IRIDESCENCE\n\t\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n\t#else\n\t\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\t#endif\n\tvec3 totalScattering = singleScattering + multiScattering;\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}";
|
|
13832
|
+
var lights_physical_pars_fragment = "struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\tfloat iridescence;\n\t\tfloat iridescenceIOR;\n\t\tfloat iridescenceThickness;\n\t\tvec3 iridescenceFresnel;\n\t\tvec3 iridescenceF0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n\t#ifdef IOR\n\t\tfloat ior;\n\t#endif\n\t#ifdef USE_TRANSMISSION\n\t\tfloat transmission;\n\t\tfloat transmissionAlpha;\n\t\tfloat thickness;\n\t\tfloat attenuationDistance;\n\t\tvec3 attenuationColor;\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat anisotropy;\n\t\tfloat alphaT;\n\t\tvec3 anisotropyT;\n\t\tvec3 anisotropyB;\n\t#endif\n};\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\nvec3 sheenSpecularDirect = vec3( 0.0 );\nvec3 sheenSpecularIndirect = vec3(0.0 );\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\n float x2 = x * x;\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\n#ifdef USE_ANISOTROPY\n\tfloat V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\n\t\tfloat gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\n\t\tfloat gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\n\t\tfloat v = 0.5 / ( gv + gl );\n\t\treturn saturate(v);\n\t}\n\tfloat D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\n\t\tfloat a2 = alphaT * alphaB;\n\t\thighp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\n\t\thighp float v2 = dot( v, v );\n\t\tfloat w2 = a2 / v2;\n\t\treturn RECIPROCAL_PI * a2 * pow2 ( w2 );\n\t}\n#endif\n#ifdef USE_CLEARCOAT\n\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\n\t\tvec3 f0 = material.clearcoatF0;\n\t\tfloat f90 = material.clearcoatF90;\n\t\tfloat roughness = material.clearcoatRoughness;\n\t\tfloat alpha = pow2( roughness );\n\t\tvec3 halfDir = normalize( lightDir + viewDir );\n\t\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\t\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\t\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\t\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\t\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t\treturn F * ( V * D );\n\t}\n#endif\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n\tvec3 f0 = material.specularColor;\n\tfloat f90 = material.specularF90;\n\tfloat roughness = material.roughness;\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t#ifdef USE_IRIDESCENCE\n\t\tF = mix( F, material.iridescenceFresnel, material.iridescence );\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat dotTL = dot( material.anisotropyT, lightDir );\n\t\tfloat dotTV = dot( material.anisotropyT, viewDir );\n\t\tfloat dotTH = dot( material.anisotropyT, halfDir );\n\t\tfloat dotBL = dot( material.anisotropyB, lightDir );\n\t\tfloat dotBV = dot( material.anisotropyB, viewDir );\n\t\tfloat dotBH = dot( material.anisotropyB, halfDir );\n\t\tfloat V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\n\t\tfloat D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\n\t#else\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t#endif\n\treturn F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\treturn saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\t#ifdef USE_IRIDESCENCE\n\t\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n\t#else\n\t\tvec3 Fr = specularColor;\n\t#endif\n\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometryNormal;\n\t\tvec3 viewDir = geometryViewDir;\n\t\tvec3 position = geometryPosition;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\t#ifdef USE_IRIDESCENCE\n\t\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n\t#else\n\t\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\t#endif\n\tvec3 totalScattering = singleScattering + multiScattering;\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}";
|
|
13798
13833
|
|
|
13799
|
-
var lights_fragment_begin = "\nvec3 geometryPosition = - vViewPosition;\nvec3 geometryNormal = normal;\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\nvec3 geometryClearcoatNormal;\n#ifdef USE_CLEARCOAT\n\tgeometryClearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n\tfloat dotNVi = saturate( dot( normal, geometryViewDir ) );\n\tif ( material.iridescenceThickness == 0.0 ) {\n\t\tmaterial.iridescence = 0.0;\n\t} else {\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\t}\n\tif ( material.iridescence > 0.0 ) {\n\t\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\t}\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometryPosition, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\n\t\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n\t\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n\t\t#else\n\t\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#endif\n\t\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n\t\t\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n\t\t\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n\t\t\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n\t\t\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n\t\t#endif\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if defined( USE_LIGHT_PROBES )\n\t\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif";
|
|
13834
|
+
var lights_fragment_begin = "\nvec3 geometryPosition = - vViewPosition;\nvec3 geometryNormal = normal;\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\nvec3 geometryClearcoatNormal = vec3( 0.0 );\n#ifdef USE_CLEARCOAT\n\tgeometryClearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n\tfloat dotNVi = saturate( dot( normal, geometryViewDir ) );\n\tif ( material.iridescenceThickness == 0.0 ) {\n\t\tmaterial.iridescence = 0.0;\n\t} else {\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\t}\n\tif ( material.iridescence > 0.0 ) {\n\t\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\t}\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometryPosition, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\n\t\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n\t\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n\t\t#else\n\t\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#endif\n\t\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n\t\t\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n\t\t\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n\t\t\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n\t\t\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n\t\t#endif\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if defined( USE_LIGHT_PROBES )\n\t\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif";
|
|
13800
13835
|
|
|
13801
13836
|
var lights_fragment_maps = "#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometryNormal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\t#ifdef USE_ANISOTROPY\n\t\tradiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\n\t#else\n\t\tradiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif";
|
|
13802
13837
|
|
|
@@ -13952,7 +13987,7 @@ const fragment$6 = "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;
|
|
|
13952
13987
|
|
|
13953
13988
|
const vertex$5 = "#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphcolor_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}";
|
|
13954
13989
|
|
|
13955
|
-
const fragment$5 = "#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define USE_SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef USE_SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULAR_COLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\tuniform vec2 anisotropyVector;\n\t#ifdef USE_ANISOTROPYMAP\n\t\tuniform sampler2D anisotropyMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <iridescence_fragment>\n#include <cube_uv_reflection_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_physical_pars_fragment>\n#include <fog_pars_fragment>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_physical_pars_fragment>\n#include <transmission_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <clearcoat_pars_fragment>\n#include <iridescence_pars_fragment>\n#include <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <roughnessmap_fragment>\n\t#include <metalnessmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <clearcoat_normal_fragment_begin>\n\t#include <clearcoat_normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include <transmission_fragment>\n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp +
|
|
13990
|
+
const fragment$5 = "#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define USE_SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef USE_SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULAR_COLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\tuniform vec2 anisotropyVector;\n\t#ifdef USE_ANISOTROPYMAP\n\t\tuniform sampler2D anisotropyMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <alphahash_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <iridescence_fragment>\n#include <cube_uv_reflection_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_physical_pars_fragment>\n#include <fog_pars_fragment>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_physical_pars_fragment>\n#include <transmission_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <clearcoat_pars_fragment>\n#include <iridescence_pars_fragment>\n#include <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <alphahash_fragment>\n\t#include <roughnessmap_fragment>\n\t#include <metalnessmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <clearcoat_normal_fragment_begin>\n\t#include <clearcoat_normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include <transmission_fragment>\n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\n\t#endif\n\t#include <opaque_fragment>\n\t#include <tonemapping_fragment>\n\t#include <colorspace_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}";
|
|
13956
13991
|
|
|
13957
13992
|
const vertex$4 = "#define TOON\nvarying vec3 vViewPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphcolor_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}";
|
|
13958
13993
|
|
|
@@ -16127,6 +16162,8 @@ const MAX_SAMPLES = 20;
|
|
|
16127
16162
|
const _flatCamera = /*@__PURE__*/ new OrthographicCamera();
|
|
16128
16163
|
const _clearColor = /*@__PURE__*/ new Color();
|
|
16129
16164
|
let _oldTarget = null;
|
|
16165
|
+
let _oldActiveCubeFace = 0;
|
|
16166
|
+
let _oldActiveMipmapLevel = 0;
|
|
16130
16167
|
|
|
16131
16168
|
// Golden Ratio
|
|
16132
16169
|
const PHI = ( 1 + Math.sqrt( 5 ) ) / 2;
|
|
@@ -16192,6 +16229,8 @@ class PMREMGenerator {
|
|
|
16192
16229
|
fromScene( scene, sigma = 0, near = 0.1, far = 100 ) {
|
|
16193
16230
|
|
|
16194
16231
|
_oldTarget = this._renderer.getRenderTarget();
|
|
16232
|
+
_oldActiveCubeFace = this._renderer.getActiveCubeFace();
|
|
16233
|
+
_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
|
|
16195
16234
|
|
|
16196
16235
|
this._setSize( 256 );
|
|
16197
16236
|
|
|
@@ -16304,7 +16343,7 @@ class PMREMGenerator {
|
|
|
16304
16343
|
|
|
16305
16344
|
_cleanup( outputTarget ) {
|
|
16306
16345
|
|
|
16307
|
-
this._renderer.setRenderTarget( _oldTarget );
|
|
16346
|
+
this._renderer.setRenderTarget( _oldTarget, _oldActiveCubeFace, _oldActiveMipmapLevel );
|
|
16308
16347
|
outputTarget.scissorTest = false;
|
|
16309
16348
|
_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );
|
|
16310
16349
|
|
|
@@ -16323,6 +16362,8 @@ class PMREMGenerator {
|
|
|
16323
16362
|
}
|
|
16324
16363
|
|
|
16325
16364
|
_oldTarget = this._renderer.getRenderTarget();
|
|
16365
|
+
_oldActiveCubeFace = this._renderer.getActiveCubeFace();
|
|
16366
|
+
_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
|
|
16326
16367
|
|
|
16327
16368
|
const cubeUVRenderTarget = renderTarget || this._allocateTargets();
|
|
16328
16369
|
this._textureToCubeUV( texture, cubeUVRenderTarget );
|
|
@@ -19182,6 +19223,9 @@ function WebGLShader( gl, type, string ) {
|
|
|
19182
19223
|
|
|
19183
19224
|
}
|
|
19184
19225
|
|
|
19226
|
+
// From https://www.khronos.org/registry/webgl/extensions/KHR_parallel_shader_compile/
|
|
19227
|
+
const COMPLETION_STATUS_KHR = 0x91B1;
|
|
19228
|
+
|
|
19185
19229
|
let programIdCount = 0;
|
|
19186
19230
|
|
|
19187
19231
|
function handleSource( string, errorLine ) {
|
|
@@ -20026,6 +20070,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
20026
20070
|
].join( '\n' ) + '\n' + prefixVertex;
|
|
20027
20071
|
|
|
20028
20072
|
prefixFragment = [
|
|
20073
|
+
'precision mediump sampler2DArray;',
|
|
20029
20074
|
'#define varying in',
|
|
20030
20075
|
( parameters.glslVersion === GLSL3 ) ? '' : 'layout(location = 0) out highp vec4 pc_fragColor;',
|
|
20031
20076
|
( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',
|
|
@@ -20117,87 +20162,94 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
20117
20162
|
|
|
20118
20163
|
gl.linkProgram( program );
|
|
20119
20164
|
|
|
20120
|
-
|
|
20121
|
-
if ( renderer.debug.checkShaderErrors ) {
|
|
20165
|
+
function onFirstUse( self ) {
|
|
20122
20166
|
|
|
20123
|
-
|
|
20124
|
-
|
|
20125
|
-
const fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();
|
|
20167
|
+
// check for link errors
|
|
20168
|
+
if ( renderer.debug.checkShaderErrors ) {
|
|
20126
20169
|
|
|
20127
|
-
|
|
20128
|
-
|
|
20170
|
+
const programLog = gl.getProgramInfoLog( program ).trim();
|
|
20171
|
+
const vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();
|
|
20172
|
+
const fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();
|
|
20129
20173
|
|
|
20130
|
-
|
|
20174
|
+
let runnable = true;
|
|
20175
|
+
let haveDiagnostics = true;
|
|
20131
20176
|
|
|
20132
|
-
|
|
20177
|
+
if ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {
|
|
20133
20178
|
|
|
20134
|
-
|
|
20179
|
+
runnable = false;
|
|
20135
20180
|
|
|
20136
|
-
renderer.debug.onShaderError
|
|
20181
|
+
if ( typeof renderer.debug.onShaderError === 'function' ) {
|
|
20137
20182
|
|
|
20138
|
-
|
|
20183
|
+
renderer.debug.onShaderError( gl, program, glVertexShader, glFragmentShader );
|
|
20139
20184
|
|
|
20140
|
-
|
|
20185
|
+
} else {
|
|
20141
20186
|
|
|
20142
|
-
|
|
20143
|
-
const fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );
|
|
20187
|
+
// default error reporting
|
|
20144
20188
|
|
|
20145
|
-
|
|
20146
|
-
|
|
20147
|
-
'VALIDATE_STATUS ' + gl.getProgramParameter( program, gl.VALIDATE_STATUS ) + '\n\n' +
|
|
20148
|
-
'Program Info Log: ' + programLog + '\n' +
|
|
20149
|
-
vertexErrors + '\n' +
|
|
20150
|
-
fragmentErrors
|
|
20151
|
-
);
|
|
20189
|
+
const vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );
|
|
20190
|
+
const fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );
|
|
20152
20191
|
|
|
20153
|
-
|
|
20192
|
+
console.error(
|
|
20193
|
+
'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +
|
|
20194
|
+
'VALIDATE_STATUS ' + gl.getProgramParameter( program, gl.VALIDATE_STATUS ) + '\n\n' +
|
|
20195
|
+
'Program Info Log: ' + programLog + '\n' +
|
|
20196
|
+
vertexErrors + '\n' +
|
|
20197
|
+
fragmentErrors
|
|
20198
|
+
);
|
|
20199
|
+
|
|
20200
|
+
}
|
|
20154
20201
|
|
|
20155
|
-
|
|
20202
|
+
} else if ( programLog !== '' ) {
|
|
20156
20203
|
|
|
20157
|
-
|
|
20204
|
+
console.warn( 'THREE.WebGLProgram: Program Info Log:', programLog );
|
|
20158
20205
|
|
|
20159
|
-
|
|
20206
|
+
} else if ( vertexLog === '' || fragmentLog === '' ) {
|
|
20160
20207
|
|
|
20161
|
-
|
|
20208
|
+
haveDiagnostics = false;
|
|
20162
20209
|
|
|
20163
|
-
|
|
20210
|
+
}
|
|
20164
20211
|
|
|
20165
|
-
|
|
20212
|
+
if ( haveDiagnostics ) {
|
|
20166
20213
|
|
|
20167
|
-
|
|
20214
|
+
self.diagnostics = {
|
|
20168
20215
|
|
|
20169
|
-
|
|
20216
|
+
runnable: runnable,
|
|
20170
20217
|
|
|
20171
|
-
|
|
20218
|
+
programLog: programLog,
|
|
20172
20219
|
|
|
20173
|
-
|
|
20220
|
+
vertexShader: {
|
|
20174
20221
|
|
|
20175
|
-
|
|
20176
|
-
|
|
20222
|
+
log: vertexLog,
|
|
20223
|
+
prefix: prefixVertex
|
|
20177
20224
|
|
|
20178
|
-
|
|
20225
|
+
},
|
|
20179
20226
|
|
|
20180
|
-
|
|
20227
|
+
fragmentShader: {
|
|
20181
20228
|
|
|
20182
|
-
|
|
20183
|
-
|
|
20229
|
+
log: fragmentLog,
|
|
20230
|
+
prefix: prefixFragment
|
|
20184
20231
|
|
|
20185
|
-
|
|
20232
|
+
}
|
|
20186
20233
|
|
|
20187
|
-
|
|
20234
|
+
};
|
|
20235
|
+
|
|
20236
|
+
}
|
|
20188
20237
|
|
|
20189
20238
|
}
|
|
20190
20239
|
|
|
20191
|
-
|
|
20240
|
+
// Clean up
|
|
20241
|
+
|
|
20242
|
+
// Crashes in iOS9 and iOS10. #18402
|
|
20243
|
+
// gl.detachShader( program, glVertexShader );
|
|
20244
|
+
// gl.detachShader( program, glFragmentShader );
|
|
20192
20245
|
|
|
20193
|
-
|
|
20246
|
+
gl.deleteShader( glVertexShader );
|
|
20247
|
+
gl.deleteShader( glFragmentShader );
|
|
20194
20248
|
|
|
20195
|
-
|
|
20196
|
-
|
|
20197
|
-
// gl.detachShader( program, glFragmentShader );
|
|
20249
|
+
cachedUniforms = new WebGLUniforms( gl, program );
|
|
20250
|
+
cachedAttributes = fetchAttributeLocations( gl, program );
|
|
20198
20251
|
|
|
20199
|
-
|
|
20200
|
-
gl.deleteShader( glFragmentShader );
|
|
20252
|
+
}
|
|
20201
20253
|
|
|
20202
20254
|
// set up caching for uniform locations
|
|
20203
20255
|
|
|
@@ -20207,7 +20259,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
20207
20259
|
|
|
20208
20260
|
if ( cachedUniforms === undefined ) {
|
|
20209
20261
|
|
|
20210
|
-
|
|
20262
|
+
// Populates cachedUniforms and cachedAttributes
|
|
20263
|
+
onFirstUse( this );
|
|
20211
20264
|
|
|
20212
20265
|
}
|
|
20213
20266
|
|
|
@@ -20223,7 +20276,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
20223
20276
|
|
|
20224
20277
|
if ( cachedAttributes === undefined ) {
|
|
20225
20278
|
|
|
20226
|
-
|
|
20279
|
+
// Populates cachedAttributes and cachedUniforms
|
|
20280
|
+
onFirstUse( this );
|
|
20227
20281
|
|
|
20228
20282
|
}
|
|
20229
20283
|
|
|
@@ -20231,6 +20285,23 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
20231
20285
|
|
|
20232
20286
|
};
|
|
20233
20287
|
|
|
20288
|
+
// indicate when the program is ready to be used. if the KHR_parallel_shader_compile extension isn't supported,
|
|
20289
|
+
// flag the program as ready immediately. It may cause a stall when it's first used.
|
|
20290
|
+
|
|
20291
|
+
let programReady = ( parameters.rendererExtensionParallelShaderCompile === false );
|
|
20292
|
+
|
|
20293
|
+
this.isReady = function () {
|
|
20294
|
+
|
|
20295
|
+
if ( programReady === false ) {
|
|
20296
|
+
|
|
20297
|
+
programReady = gl.getProgramParameter( program, COMPLETION_STATUS_KHR );
|
|
20298
|
+
|
|
20299
|
+
}
|
|
20300
|
+
|
|
20301
|
+
return programReady;
|
|
20302
|
+
|
|
20303
|
+
};
|
|
20304
|
+
|
|
20234
20305
|
// free resource
|
|
20235
20306
|
|
|
20236
20307
|
this.destroy = function () {
|
|
@@ -20736,6 +20807,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
20736
20807
|
rendererExtensionFragDepth: IS_WEBGL2 || extensions.has( 'EXT_frag_depth' ),
|
|
20737
20808
|
rendererExtensionDrawBuffers: IS_WEBGL2 || extensions.has( 'WEBGL_draw_buffers' ),
|
|
20738
20809
|
rendererExtensionShaderTextureLod: IS_WEBGL2 || extensions.has( 'EXT_shader_texture_lod' ),
|
|
20810
|
+
rendererExtensionParallelShaderCompile: extensions.has( 'KHR_parallel_shader_compile' ),
|
|
20739
20811
|
|
|
20740
20812
|
customProgramCacheKey: material.customProgramCacheKey()
|
|
20741
20813
|
|
|
@@ -20878,6 +20950,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
|
|
|
20878
20950
|
_programLayers.enable( 16 );
|
|
20879
20951
|
if ( parameters.anisotropy )
|
|
20880
20952
|
_programLayers.enable( 17 );
|
|
20953
|
+
if ( parameters.alphaHash )
|
|
20954
|
+
_programLayers.enable( 18 );
|
|
20881
20955
|
|
|
20882
20956
|
array.push( _programLayers.mask );
|
|
20883
20957
|
_programLayers.disableAll();
|
|
@@ -22771,6 +22845,8 @@ function WebGLState( gl, extensions, capabilities ) {
|
|
|
22771
22845
|
let currentBlendEquationAlpha = null;
|
|
22772
22846
|
let currentBlendSrcAlpha = null;
|
|
22773
22847
|
let currentBlendDstAlpha = null;
|
|
22848
|
+
let currentBlendColor = new Color( 0, 0, 0 );
|
|
22849
|
+
let currentBlendAlpha = 0;
|
|
22774
22850
|
let currentPremultipledAlpha = false;
|
|
22775
22851
|
|
|
22776
22852
|
let currentFlipSided = null;
|
|
@@ -23046,10 +23122,14 @@ function WebGLState( gl, extensions, capabilities ) {
|
|
|
23046
23122
|
[ OneMinusSrcColorFactor ]: gl.ONE_MINUS_SRC_COLOR,
|
|
23047
23123
|
[ OneMinusSrcAlphaFactor ]: gl.ONE_MINUS_SRC_ALPHA,
|
|
23048
23124
|
[ OneMinusDstColorFactor ]: gl.ONE_MINUS_DST_COLOR,
|
|
23049
|
-
[ OneMinusDstAlphaFactor ]: gl.ONE_MINUS_DST_ALPHA
|
|
23125
|
+
[ OneMinusDstAlphaFactor ]: gl.ONE_MINUS_DST_ALPHA,
|
|
23126
|
+
[ ConstantColorFactor ]: gl.CONSTANT_COLOR,
|
|
23127
|
+
[ OneMinusConstantColorFactor ]: gl.ONE_MINUS_CONSTANT_COLOR,
|
|
23128
|
+
[ ConstantAlphaFactor ]: gl.CONSTANT_ALPHA,
|
|
23129
|
+
[ OneMinusConstantAlphaFactor ]: gl.ONE_MINUS_CONSTANT_ALPHA
|
|
23050
23130
|
};
|
|
23051
23131
|
|
|
23052
|
-
function setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {
|
|
23132
|
+
function setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, blendColor, blendAlpha, premultipliedAlpha ) {
|
|
23053
23133
|
|
|
23054
23134
|
if ( blending === NoBlending ) {
|
|
23055
23135
|
|
|
@@ -23142,6 +23222,8 @@ function WebGLState( gl, extensions, capabilities ) {
|
|
|
23142
23222
|
currentBlendDst = null;
|
|
23143
23223
|
currentBlendSrcAlpha = null;
|
|
23144
23224
|
currentBlendDstAlpha = null;
|
|
23225
|
+
currentBlendColor.set( 0, 0, 0 );
|
|
23226
|
+
currentBlendAlpha = 0;
|
|
23145
23227
|
|
|
23146
23228
|
currentBlending = blending;
|
|
23147
23229
|
currentPremultipledAlpha = premultipliedAlpha;
|
|
@@ -23178,6 +23260,15 @@ function WebGLState( gl, extensions, capabilities ) {
|
|
|
23178
23260
|
|
|
23179
23261
|
}
|
|
23180
23262
|
|
|
23263
|
+
if ( blendColor.equals( currentBlendColor ) === false || blendAlpha !== currentBlendAlpha ) {
|
|
23264
|
+
|
|
23265
|
+
gl.blendColor( blendColor.r, blendColor.g, blendColor.b, blendAlpha );
|
|
23266
|
+
|
|
23267
|
+
currentBlendColor.copy( blendColor );
|
|
23268
|
+
currentBlendAlpha = blendAlpha;
|
|
23269
|
+
|
|
23270
|
+
}
|
|
23271
|
+
|
|
23181
23272
|
currentBlending = blending;
|
|
23182
23273
|
currentPremultipledAlpha = false;
|
|
23183
23274
|
|
|
@@ -23196,7 +23287,7 @@ function WebGLState( gl, extensions, capabilities ) {
|
|
|
23196
23287
|
|
|
23197
23288
|
( material.blending === NormalBlending && material.transparent === false )
|
|
23198
23289
|
? setBlending( NoBlending )
|
|
23199
|
-
: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );
|
|
23290
|
+
: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.blendColor, material.blendAlpha, material.premultipliedAlpha );
|
|
23200
23291
|
|
|
23201
23292
|
depthBuffer.setFunc( material.depthFunc );
|
|
23202
23293
|
depthBuffer.setTest( material.depthTest );
|
|
@@ -23620,6 +23711,7 @@ function WebGLState( gl, extensions, capabilities ) {
|
|
|
23620
23711
|
gl.blendEquation( gl.FUNC_ADD );
|
|
23621
23712
|
gl.blendFunc( gl.ONE, gl.ZERO );
|
|
23622
23713
|
gl.blendFuncSeparate( gl.ONE, gl.ZERO, gl.ONE, gl.ZERO );
|
|
23714
|
+
gl.blendColor( 0, 0, 0, 0 );
|
|
23623
23715
|
|
|
23624
23716
|
gl.colorMask( true, true, true, true );
|
|
23625
23717
|
gl.clearColor( 0, 0, 0, 0 );
|
|
@@ -23677,6 +23769,8 @@ function WebGLState( gl, extensions, capabilities ) {
|
|
|
23677
23769
|
currentBlendEquationAlpha = null;
|
|
23678
23770
|
currentBlendSrcAlpha = null;
|
|
23679
23771
|
currentBlendDstAlpha = null;
|
|
23772
|
+
currentBlendColor = new Color( 0, 0, 0 );
|
|
23773
|
+
currentBlendAlpha = 0;
|
|
23680
23774
|
currentPremultipledAlpha = false;
|
|
23681
23775
|
|
|
23682
23776
|
currentFlipSided = null;
|
|
@@ -29663,7 +29757,12 @@ class WebGLRenderer {
|
|
|
29663
29757
|
}
|
|
29664
29758
|
|
|
29665
29759
|
if ( depth ) bits |= _gl.DEPTH_BUFFER_BIT;
|
|
29666
|
-
if ( stencil )
|
|
29760
|
+
if ( stencil ) {
|
|
29761
|
+
|
|
29762
|
+
bits |= _gl.STENCIL_BUFFER_BIT;
|
|
29763
|
+
this.state.buffers.stencil.setMask( 0xffffffff );
|
|
29764
|
+
|
|
29765
|
+
}
|
|
29667
29766
|
|
|
29668
29767
|
_gl.clear( bits );
|
|
29669
29768
|
|
|
@@ -29946,36 +30045,40 @@ class WebGLRenderer {
|
|
|
29946
30045
|
|
|
29947
30046
|
// Compile
|
|
29948
30047
|
|
|
29949
|
-
|
|
30048
|
+
function prepareMaterial( material, scene, object ) {
|
|
30049
|
+
|
|
30050
|
+
if ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {
|
|
29950
30051
|
|
|
29951
|
-
|
|
30052
|
+
material.side = BackSide;
|
|
30053
|
+
material.needsUpdate = true;
|
|
30054
|
+
getProgram( material, scene, object );
|
|
29952
30055
|
|
|
29953
|
-
|
|
30056
|
+
material.side = FrontSide;
|
|
30057
|
+
material.needsUpdate = true;
|
|
30058
|
+
getProgram( material, scene, object );
|
|
29954
30059
|
|
|
29955
|
-
|
|
29956
|
-
material.needsUpdate = true;
|
|
29957
|
-
getProgram( material, scene, object );
|
|
30060
|
+
material.side = DoubleSide;
|
|
29958
30061
|
|
|
29959
|
-
|
|
29960
|
-
material.needsUpdate = true;
|
|
29961
|
-
getProgram( material, scene, object );
|
|
30062
|
+
} else {
|
|
29962
30063
|
|
|
29963
|
-
|
|
30064
|
+
getProgram( material, scene, object );
|
|
29964
30065
|
|
|
29965
|
-
|
|
30066
|
+
}
|
|
29966
30067
|
|
|
29967
|
-
|
|
30068
|
+
}
|
|
29968
30069
|
|
|
29969
|
-
|
|
30070
|
+
this.compile = function ( scene, camera, targetScene = null ) {
|
|
29970
30071
|
|
|
29971
|
-
|
|
30072
|
+
if ( targetScene === null ) targetScene = scene;
|
|
29972
30073
|
|
|
29973
|
-
currentRenderState = renderStates.get(
|
|
30074
|
+
currentRenderState = renderStates.get( targetScene );
|
|
29974
30075
|
currentRenderState.init();
|
|
29975
30076
|
|
|
29976
30077
|
renderStateStack.push( currentRenderState );
|
|
29977
30078
|
|
|
29978
|
-
scene
|
|
30079
|
+
// gather lights from both the target scene and the new object that will be added to the scene.
|
|
30080
|
+
|
|
30081
|
+
targetScene.traverseVisible( function ( object ) {
|
|
29979
30082
|
|
|
29980
30083
|
if ( object.isLight && object.layers.test( camera.layers ) ) {
|
|
29981
30084
|
|
|
@@ -29991,8 +30094,32 @@ class WebGLRenderer {
|
|
|
29991
30094
|
|
|
29992
30095
|
} );
|
|
29993
30096
|
|
|
30097
|
+
if ( scene !== targetScene ) {
|
|
30098
|
+
|
|
30099
|
+
scene.traverseVisible( function ( object ) {
|
|
30100
|
+
|
|
30101
|
+
if ( object.isLight && object.layers.test( camera.layers ) ) {
|
|
30102
|
+
|
|
30103
|
+
currentRenderState.pushLight( object );
|
|
30104
|
+
|
|
30105
|
+
if ( object.castShadow ) {
|
|
30106
|
+
|
|
30107
|
+
currentRenderState.pushShadow( object );
|
|
30108
|
+
|
|
30109
|
+
}
|
|
30110
|
+
|
|
30111
|
+
}
|
|
30112
|
+
|
|
30113
|
+
} );
|
|
30114
|
+
|
|
30115
|
+
}
|
|
30116
|
+
|
|
29994
30117
|
currentRenderState.setupLights( _this._useLegacyLights );
|
|
29995
30118
|
|
|
30119
|
+
// Only initialize materials in the new scene, not the targetScene.
|
|
30120
|
+
|
|
30121
|
+
const materials = new Set();
|
|
30122
|
+
|
|
29996
30123
|
scene.traverse( function ( object ) {
|
|
29997
30124
|
|
|
29998
30125
|
const material = object.material;
|
|
@@ -30005,13 +30132,15 @@ class WebGLRenderer {
|
|
|
30005
30132
|
|
|
30006
30133
|
const material2 = material[ i ];
|
|
30007
30134
|
|
|
30008
|
-
|
|
30135
|
+
prepareMaterial( material2, targetScene, object );
|
|
30136
|
+
materials.add( material2 );
|
|
30009
30137
|
|
|
30010
30138
|
}
|
|
30011
30139
|
|
|
30012
30140
|
} else {
|
|
30013
30141
|
|
|
30014
|
-
|
|
30142
|
+
prepareMaterial( material, targetScene, object );
|
|
30143
|
+
materials.add( material );
|
|
30015
30144
|
|
|
30016
30145
|
}
|
|
30017
30146
|
|
|
@@ -30022,6 +30151,70 @@ class WebGLRenderer {
|
|
|
30022
30151
|
renderStateStack.pop();
|
|
30023
30152
|
currentRenderState = null;
|
|
30024
30153
|
|
|
30154
|
+
return materials;
|
|
30155
|
+
|
|
30156
|
+
};
|
|
30157
|
+
|
|
30158
|
+
// compileAsync
|
|
30159
|
+
|
|
30160
|
+
this.compileAsync = function ( scene, camera, targetScene = null ) {
|
|
30161
|
+
|
|
30162
|
+
const materials = this.compile( scene, camera, targetScene );
|
|
30163
|
+
|
|
30164
|
+
// Wait for all the materials in the new object to indicate that they're
|
|
30165
|
+
// ready to be used before resolving the promise.
|
|
30166
|
+
|
|
30167
|
+
return new Promise( ( resolve ) => {
|
|
30168
|
+
|
|
30169
|
+
function checkMaterialsReady() {
|
|
30170
|
+
|
|
30171
|
+
materials.forEach( function ( material ) {
|
|
30172
|
+
|
|
30173
|
+
const materialProperties = properties.get( material );
|
|
30174
|
+
const program = materialProperties.currentProgram;
|
|
30175
|
+
|
|
30176
|
+
if ( program.isReady() ) {
|
|
30177
|
+
|
|
30178
|
+
// remove any programs that report they're ready to use from the list
|
|
30179
|
+
materials.delete( material );
|
|
30180
|
+
|
|
30181
|
+
}
|
|
30182
|
+
|
|
30183
|
+
} );
|
|
30184
|
+
|
|
30185
|
+
// once the list of compiling materials is empty, call the callback
|
|
30186
|
+
|
|
30187
|
+
if ( materials.size === 0 ) {
|
|
30188
|
+
|
|
30189
|
+
resolve( scene );
|
|
30190
|
+
return;
|
|
30191
|
+
|
|
30192
|
+
}
|
|
30193
|
+
|
|
30194
|
+
// if some materials are still not ready, wait a bit and check again
|
|
30195
|
+
|
|
30196
|
+
setTimeout( checkMaterialsReady, 10 );
|
|
30197
|
+
|
|
30198
|
+
}
|
|
30199
|
+
|
|
30200
|
+
if ( extensions.get( 'KHR_parallel_shader_compile' ) !== null ) {
|
|
30201
|
+
|
|
30202
|
+
// If we can check the compilation status of the materials without
|
|
30203
|
+
// blocking then do so right away.
|
|
30204
|
+
|
|
30205
|
+
checkMaterialsReady();
|
|
30206
|
+
|
|
30207
|
+
} else {
|
|
30208
|
+
|
|
30209
|
+
// Otherwise start by waiting a bit to give the materials we just
|
|
30210
|
+
// initialized a chance to finish.
|
|
30211
|
+
|
|
30212
|
+
setTimeout( checkMaterialsReady, 10 );
|
|
30213
|
+
|
|
30214
|
+
}
|
|
30215
|
+
|
|
30216
|
+
} );
|
|
30217
|
+
|
|
30025
30218
|
};
|
|
30026
30219
|
|
|
30027
30220
|
// Animation Loop
|
|
@@ -30375,6 +30568,14 @@ class WebGLRenderer {
|
|
|
30375
30568
|
|
|
30376
30569
|
function renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera ) {
|
|
30377
30570
|
|
|
30571
|
+
const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;
|
|
30572
|
+
|
|
30573
|
+
if ( overrideMaterial !== null ) {
|
|
30574
|
+
|
|
30575
|
+
return;
|
|
30576
|
+
|
|
30577
|
+
}
|
|
30578
|
+
|
|
30378
30579
|
const isWebGL2 = capabilities.isWebGL2;
|
|
30379
30580
|
|
|
30380
30581
|
if ( _transmissionRenderTarget === null ) {
|
|
@@ -30634,16 +30835,26 @@ class WebGLRenderer {
|
|
|
30634
30835
|
|
|
30635
30836
|
}
|
|
30636
30837
|
|
|
30637
|
-
const progUniforms = program.getUniforms();
|
|
30638
|
-
const uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms );
|
|
30639
|
-
|
|
30640
30838
|
materialProperties.currentProgram = program;
|
|
30641
|
-
materialProperties.uniformsList =
|
|
30839
|
+
materialProperties.uniformsList = null;
|
|
30642
30840
|
|
|
30643
30841
|
return program;
|
|
30644
30842
|
|
|
30645
30843
|
}
|
|
30646
30844
|
|
|
30845
|
+
function getUniformList( materialProperties ) {
|
|
30846
|
+
|
|
30847
|
+
if ( materialProperties.uniformsList === null ) {
|
|
30848
|
+
|
|
30849
|
+
const progUniforms = materialProperties.currentProgram.getUniforms();
|
|
30850
|
+
materialProperties.uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, materialProperties.uniforms );
|
|
30851
|
+
|
|
30852
|
+
}
|
|
30853
|
+
|
|
30854
|
+
return materialProperties.uniformsList;
|
|
30855
|
+
|
|
30856
|
+
}
|
|
30857
|
+
|
|
30647
30858
|
function updateCommonMaterialProperties( material, parameters ) {
|
|
30648
30859
|
|
|
30649
30860
|
const materialProperties = properties.get( material );
|
|
@@ -30987,13 +31198,13 @@ class WebGLRenderer {
|
|
|
30987
31198
|
|
|
30988
31199
|
materials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, _transmissionRenderTarget );
|
|
30989
31200
|
|
|
30990
|
-
WebGLUniforms.upload( _gl, materialProperties
|
|
31201
|
+
WebGLUniforms.upload( _gl, getUniformList( materialProperties ), m_uniforms, textures );
|
|
30991
31202
|
|
|
30992
31203
|
}
|
|
30993
31204
|
|
|
30994
31205
|
if ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {
|
|
30995
31206
|
|
|
30996
|
-
WebGLUniforms.upload( _gl, materialProperties
|
|
31207
|
+
WebGLUniforms.upload( _gl, getUniformList( materialProperties ), m_uniforms, textures );
|
|
30997
31208
|
material.uniformsNeedUpdate = false;
|
|
30998
31209
|
|
|
30999
31210
|
}
|
|
@@ -32627,7 +32838,7 @@ class SkinnedMesh extends Mesh {
|
|
|
32627
32838
|
|
|
32628
32839
|
this.type = 'SkinnedMesh';
|
|
32629
32840
|
|
|
32630
|
-
this.bindMode =
|
|
32841
|
+
this.bindMode = AttachedBindMode;
|
|
32631
32842
|
this.bindMatrix = new Matrix4();
|
|
32632
32843
|
this.bindMatrixInverse = new Matrix4();
|
|
32633
32844
|
|
|
@@ -32652,8 +32863,7 @@ class SkinnedMesh extends Mesh {
|
|
|
32652
32863
|
|
|
32653
32864
|
for ( let i = 0; i < positionAttribute.count; i ++ ) {
|
|
32654
32865
|
|
|
32655
|
-
|
|
32656
|
-
this.applyBoneTransform( i, _vertex );
|
|
32866
|
+
this.getVertexPosition( i, _vertex );
|
|
32657
32867
|
this.boundingBox.expandByPoint( _vertex );
|
|
32658
32868
|
|
|
32659
32869
|
}
|
|
@@ -32676,8 +32886,7 @@ class SkinnedMesh extends Mesh {
|
|
|
32676
32886
|
|
|
32677
32887
|
for ( let i = 0; i < positionAttribute.count; i ++ ) {
|
|
32678
32888
|
|
|
32679
|
-
|
|
32680
|
-
this.applyBoneTransform( i, _vertex );
|
|
32889
|
+
this.getVertexPosition( i, _vertex );
|
|
32681
32890
|
this.boundingSphere.expandByPoint( _vertex );
|
|
32682
32891
|
|
|
32683
32892
|
}
|
|
@@ -32803,11 +33012,11 @@ class SkinnedMesh extends Mesh {
|
|
|
32803
33012
|
|
|
32804
33013
|
super.updateMatrixWorld( force );
|
|
32805
33014
|
|
|
32806
|
-
if ( this.bindMode ===
|
|
33015
|
+
if ( this.bindMode === AttachedBindMode ) {
|
|
32807
33016
|
|
|
32808
33017
|
this.bindMatrixInverse.copy( this.matrixWorld ).invert();
|
|
32809
33018
|
|
|
32810
|
-
} else if ( this.bindMode ===
|
|
33019
|
+
} else if ( this.bindMode === DetachedBindMode ) {
|
|
32811
33020
|
|
|
32812
33021
|
this.bindMatrixInverse.copy( this.bindMatrix ).invert();
|
|
32813
33022
|
|
|
@@ -44706,11 +44915,18 @@ class MaterialLoader extends Loader {
|
|
|
44706
44915
|
if ( json.transparent !== undefined ) material.transparent = json.transparent;
|
|
44707
44916
|
if ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;
|
|
44708
44917
|
if ( json.alphaHash !== undefined ) material.alphaHash = json.alphaHash;
|
|
44918
|
+
if ( json.depthFunc !== undefined ) material.depthFunc = json.depthFunc;
|
|
44709
44919
|
if ( json.depthTest !== undefined ) material.depthTest = json.depthTest;
|
|
44710
44920
|
if ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;
|
|
44711
44921
|
if ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;
|
|
44712
|
-
|
|
44713
|
-
if ( json.
|
|
44922
|
+
if ( json.blendSrc !== undefined ) material.blendSrc = json.blendSrc;
|
|
44923
|
+
if ( json.blendDst !== undefined ) material.blendDst = json.blendDst;
|
|
44924
|
+
if ( json.blendEquation !== undefined ) material.blendEquation = json.blendEquation;
|
|
44925
|
+
if ( json.blendSrcAlpha !== undefined ) material.blendSrcAlpha = json.blendSrcAlpha;
|
|
44926
|
+
if ( json.blendDstAlpha !== undefined ) material.blendDstAlpha = json.blendDstAlpha;
|
|
44927
|
+
if ( json.blendEquationAlpha !== undefined ) material.blendEquationAlpha = json.blendEquationAlpha;
|
|
44928
|
+
if ( json.blendColor !== undefined && material.blendColor !== undefined ) material.blendColor.setHex( json.blendColor );
|
|
44929
|
+
if ( json.blendAlpha !== undefined ) material.blendAlpha = json.blendAlpha;
|
|
44714
44930
|
if ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask;
|
|
44715
44931
|
if ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc;
|
|
44716
44932
|
if ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef;
|
|
@@ -44718,6 +44934,7 @@ class MaterialLoader extends Loader {
|
|
|
44718
44934
|
if ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail;
|
|
44719
44935
|
if ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail;
|
|
44720
44936
|
if ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass;
|
|
44937
|
+
if ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite;
|
|
44721
44938
|
|
|
44722
44939
|
if ( json.wireframe !== undefined ) material.wireframe = json.wireframe;
|
|
44723
44940
|
if ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;
|
|
@@ -52537,4 +52754,4 @@ if ( typeof window !== 'undefined' ) {
|
|
|
52537
52754
|
|
|
52538
52755
|
}
|
|
52539
52756
|
|
|
52540
|
-
export { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AlphaFormat, AlwaysCompare, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AnimationAction, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BackSide, BasicDepthPacking, BasicShadowMap, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasTexture, CapsuleGeometry, CatmullRomCurve3, CineonToneMapping, CircleGeometry, ClampToEdgeWrapping, Clock, Color, ColorKeyframeTrack, ColorManagement, CompressedArrayTexture, CompressedCubeTexture, CompressedTexture, CompressedTextureLoader, ConeGeometry, CubeCamera, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderGeometry, Cylindrical, Data3DTexture, DataArrayTexture, DataTexture, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DisplayP3ColorSpace, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, EqualCompare, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExtrudeGeometry, FileLoader, Float16BufferAttribute, Float32BufferAttribute, Float64BufferAttribute, FloatType, Fog, FogExp2, FramebufferTexture, FrontSide, Frustum, GLBufferAttribute, GLSL1, GLSL3, GreaterCompare, GreaterDepth, GreaterEqualCompare, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HalfFloatType, HemisphereLight, HemisphereLightHelper, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InvertStencilOp, KeepStencilOp, KeyframeTrack, LOD, LatheGeometry, Layers, LessCompare, LessDepth, LessEqualCompare, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LineSegments, LinearDisplayP3ColorSpace, LinearEncoding, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, LinearToneMapping, LinearTransfer, Loader, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, LuminanceAlphaFormat, LuminanceFormat, MOUSE, Material, MaterialLoader, MathUtils, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeverCompare, NeverDepth, NeverStencilFunc, NoBlending, NoColorSpace, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NotEqualCompare, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronGeometry, OneFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, P3Primaries, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, Path, PerspectiveCamera, Plane, PlaneGeometry, PlaneHelper, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, RED_GREEN_RGTC2_Format, RED_RGTC1_Format, REVISION, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, Rec709Primaries, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RenderTarget, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RingGeometry, SIGNED_RED_GREEN_RGTC2_Format, SIGNED_RED_RGTC1_Format, SRGBColorSpace, SRGBTransfer, Scene, ShaderChunk, ShaderLib, ShaderMaterial, ShadowMaterial, Shape, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, Source, Sphere, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, TOUCH, TangentSpaceNormalMap, TetrahedronGeometry, Texture, TextureLoader, TorusGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry, TwoPassDoubleSide, UVMapping, Uint16BufferAttribute, Uint32BufferAttribute, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, UniformsLib, UniformsUtils, UnsignedByteType, UnsignedInt248Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, VideoTexture, WebGL1Renderer, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGLCoordinateSystem, WebGLCubeRenderTarget, WebGLMultipleRenderTargets, WebGLRenderTarget, WebGLRenderer, WebGLUtils, WebGPUCoordinateSystem, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, _SRGBAFormat, createCanvasElement, sRGBEncoding };
|
|
52757
|
+
export { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AlphaFormat, AlwaysCompare, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AnimationAction, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, AttachedBindMode, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BackSide, BasicDepthPacking, BasicShadowMap, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasTexture, CapsuleGeometry, CatmullRomCurve3, CineonToneMapping, CircleGeometry, ClampToEdgeWrapping, Clock, Color, ColorKeyframeTrack, ColorManagement, CompressedArrayTexture, CompressedCubeTexture, CompressedTexture, CompressedTextureLoader, ConeGeometry, ConstantAlphaFactor, ConstantColorFactor, CubeCamera, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderGeometry, Cylindrical, Data3DTexture, DataArrayTexture, DataTexture, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DetachedBindMode, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DisplayP3ColorSpace, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, EqualCompare, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExtrudeGeometry, FileLoader, Float16BufferAttribute, Float32BufferAttribute, Float64BufferAttribute, FloatType, Fog, FogExp2, FramebufferTexture, FrontSide, Frustum, GLBufferAttribute, GLSL1, GLSL3, GreaterCompare, GreaterDepth, GreaterEqualCompare, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HalfFloatType, HemisphereLight, HemisphereLightHelper, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InvertStencilOp, KeepStencilOp, KeyframeTrack, LOD, LatheGeometry, Layers, LessCompare, LessDepth, LessEqualCompare, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LineSegments, LinearDisplayP3ColorSpace, LinearEncoding, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, LinearToneMapping, LinearTransfer, Loader, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, LuminanceAlphaFormat, LuminanceFormat, MOUSE, Material, MaterialLoader, MathUtils, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeverCompare, NeverDepth, NeverStencilFunc, NoBlending, NoColorSpace, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NotEqualCompare, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronGeometry, OneFactor, OneMinusConstantAlphaFactor, OneMinusConstantColorFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, P3Primaries, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, Path, PerspectiveCamera, Plane, PlaneGeometry, PlaneHelper, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, RED_GREEN_RGTC2_Format, RED_RGTC1_Format, REVISION, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, Rec709Primaries, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RenderTarget, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RingGeometry, SIGNED_RED_GREEN_RGTC2_Format, SIGNED_RED_RGTC1_Format, SRGBColorSpace, SRGBTransfer, Scene, ShaderChunk, ShaderLib, ShaderMaterial, ShadowMaterial, Shape, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, Source, Sphere, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, TOUCH, TangentSpaceNormalMap, TetrahedronGeometry, Texture, TextureLoader, TorusGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry, TwoPassDoubleSide, UVMapping, Uint16BufferAttribute, Uint32BufferAttribute, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, UniformsLib, UniformsUtils, UnsignedByteType, UnsignedInt248Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, VideoTexture, WebGL1Renderer, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGLCoordinateSystem, WebGLCubeRenderTarget, WebGLMultipleRenderTargets, WebGLRenderTarget, WebGLRenderer, WebGLUtils, WebGPUCoordinateSystem, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, _SRGBAFormat, createCanvasElement, sRGBEncoding };
|