super-three 0.162.0 → 0.163.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +407 -1014
- package/build/three.module.js +406 -1013
- package/build/three.module.min.js +1 -1
- package/examples/jsm/controls/TransformControls.js +3 -3
- package/examples/jsm/exporters/GLTFExporter.js +21 -4
- package/examples/jsm/exporters/USDZExporter.js +15 -0
- package/examples/jsm/geometries/TextGeometry.js +10 -2
- package/examples/jsm/interactive/HTMLMesh.js +7 -9
- package/examples/jsm/libs/fflate.module.js +694 -496
- package/examples/jsm/lines/LineMaterial.js +0 -2
- package/examples/jsm/loaders/3MFLoader.js +2 -0
- package/examples/jsm/loaders/EXRLoader.js +89 -19
- package/examples/jsm/loaders/FBXLoader.js +1 -1
- package/examples/jsm/loaders/GLTFLoader.js +6 -0
- package/examples/jsm/loaders/KTX2Loader.js +2 -6
- package/examples/jsm/loaders/LUT3dlLoader.js +0 -15
- package/examples/jsm/loaders/LUTCubeLoader.js +0 -14
- package/examples/jsm/loaders/LUTImageLoader.js +0 -14
- package/examples/jsm/loaders/RGBMLoader.js +16 -0
- package/examples/jsm/misc/GPUComputationRenderer.js +0 -6
- package/examples/jsm/nodes/Nodes.js +6 -1
- package/examples/jsm/nodes/accessors/BatchNode.js +78 -0
- package/examples/jsm/nodes/accessors/InstanceNode.js +25 -2
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/MorphNode.js +13 -3
- package/examples/jsm/nodes/accessors/NormalNode.js +12 -2
- package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/RendererReferenceNode.js +29 -0
- package/examples/jsm/nodes/accessors/TextureNode.js +30 -7
- package/examples/jsm/nodes/core/Node.js +55 -4
- package/examples/jsm/nodes/core/NodeBuilder.js +21 -16
- package/examples/jsm/nodes/core/NodeFrame.js +10 -10
- package/examples/jsm/nodes/core/NodeUtils.js +2 -2
- package/examples/jsm/nodes/core/UniformNode.js +20 -0
- package/examples/jsm/nodes/display/PassNode.js +17 -1
- package/examples/jsm/nodes/display/ToneMappingNode.js +8 -4
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +6 -0
- package/examples/jsm/nodes/fog/FogExp2Node.js +4 -5
- package/examples/jsm/nodes/fog/FogNode.js +13 -3
- package/examples/jsm/nodes/fog/FogRangeNode.js +4 -3
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +12 -69
- package/examples/jsm/nodes/materials/NodeMaterial.js +33 -11
- package/examples/jsm/nodes/pmrem/PMREMNode.js +193 -0
- package/examples/jsm/nodes/pmrem/PMREMUtils.js +288 -0
- package/examples/jsm/nodes/shadernode/ShaderNode.js +1 -1
- package/examples/jsm/nodes/utils/EquirectUVNode.js +1 -1
- package/examples/jsm/objects/QuadMesh.js +7 -23
- package/examples/jsm/physics/RapierPhysics.js +4 -4
- package/examples/jsm/postprocessing/GlitchPass.js +0 -3
- package/examples/jsm/postprocessing/LUTPass.js +5 -71
- package/examples/jsm/postprocessing/SAOPass.js +0 -1
- package/examples/jsm/postprocessing/SSAOPass.js +0 -3
- package/examples/jsm/renderers/common/Animation.js +3 -0
- package/examples/jsm/renderers/common/Background.js +5 -5
- package/examples/jsm/renderers/common/Info.js +11 -19
- package/examples/jsm/renderers/common/PostProcessing.js +12 -4
- package/examples/jsm/renderers/common/RenderContext.js +1 -1
- package/examples/jsm/renderers/common/RenderObject.js +4 -4
- package/examples/jsm/renderers/common/RenderObjects.js +1 -1
- package/examples/jsm/renderers/common/Renderer.js +25 -8
- package/examples/jsm/renderers/common/extras/PMREMGenerator.js +777 -0
- package/examples/jsm/renderers/common/nodes/Nodes.js +5 -18
- package/examples/jsm/renderers/webgl/WebGLBackend.js +148 -24
- package/examples/jsm/renderers/webgl/WebGLBufferRenderer.js +141 -0
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +3 -3
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +1 -1
- package/examples/jsm/renderers/webgl/utils/WebGLConstants.js +1 -0
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +43 -0
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +3 -2
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +0 -2
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +0 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +54 -25
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +5 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +25 -0
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +18 -4
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +92 -18
- package/examples/jsm/utils/GPUStatsPanel.js +10 -45
- package/examples/jsm/utils/TextureUtils.js +1 -1
- package/package.json +1 -1
- package/src/Three.js +0 -1
- package/src/animation/AnimationClip.js +1 -1
- package/src/constants.js +3 -3
- package/src/core/Object3D.js +10 -7
- package/src/extras/PMREMGenerator.js +9 -0
- package/src/loaders/ObjectLoader.js +2 -0
- package/src/materials/ShaderMaterial.js +0 -4
- package/src/math/Spherical.js +4 -5
- package/src/objects/BatchedMesh.js +4 -3
- package/src/objects/InstancedMesh.js +10 -0
- package/src/renderers/WebGLRenderer.js +55 -114
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +2 -10
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +2 -16
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +32 -22
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib.js +1 -1
- package/src/renderers/shaders/UniformsUtils.js +10 -1
- package/src/renderers/webgl/WebGLAttributes.js +6 -33
- package/src/renderers/webgl/WebGLBindingStates.js +14 -51
- package/src/renderers/webgl/WebGLBufferRenderer.js +3 -25
- package/src/renderers/webgl/WebGLCapabilities.js +2 -12
- package/src/renderers/webgl/WebGLCubeUVMaps.js +10 -6
- package/src/renderers/webgl/WebGLExtensions.js +4 -19
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +3 -25
- package/src/renderers/webgl/WebGLLights.js +6 -32
- package/src/renderers/webgl/WebGLMaterials.js +2 -3
- package/src/renderers/webgl/WebGLMorphtargets.js +79 -217
- package/src/renderers/webgl/WebGLProgram.js +18 -47
- package/src/renderers/webgl/WebGLPrograms.js +20 -32
- package/src/renderers/webgl/WebGLRenderStates.js +8 -6
- package/src/renderers/webgl/WebGLState.js +15 -59
- package/src/renderers/webgl/WebGLTextures.js +75 -237
- package/src/renderers/webgl/WebGLUniformsGroups.js +1 -1
- package/src/renderers/webgl/WebGLUtils.js +6 -57
- package/src/renderers/webxr/WebXRDepthSensing.js +2 -3
- package/src/renderers/webxr/WebXRManager.js +2 -2
- package/src/scenes/Scene.js +7 -1
- package/src/textures/Texture.js +11 -1
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +0 -37
- package/src/renderers/WebGL1Renderer.js +0 -7
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { 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_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT5_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT1_Format, RGB_S3TC_DXT1_Format, DepthFormat, DepthStencilFormat, LuminanceAlphaFormat, LuminanceFormat, RedFormat, RGBAFormat, AlphaFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBAIntegerFormat, HalfFloatType, FloatType, UnsignedIntType, IntType, UnsignedShortType, ShortType, ByteType, UnsignedInt248Type, UnsignedShort5551Type, UnsignedShort4444Type, UnsignedByteType, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format,
|
|
1
|
+
import { 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_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_10x10_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT5_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT1_Format, RGB_S3TC_DXT1_Format, DepthFormat, DepthStencilFormat, LuminanceAlphaFormat, LuminanceFormat, RedFormat, RGBAFormat, AlphaFormat, RedIntegerFormat, RGFormat, RGIntegerFormat, RGBAIntegerFormat, HalfFloatType, FloatType, UnsignedIntType, IntType, UnsignedShortType, ShortType, ByteType, UnsignedInt248Type, UnsignedShort5551Type, UnsignedShort4444Type, UnsignedByteType, RGBA_BPTC_Format, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RED_RGTC1_Format, SIGNED_RED_RGTC1_Format, RED_GREEN_RGTC2_Format, SIGNED_RED_GREEN_RGTC2_Format, NoColorSpace, SRGBTransfer, UnsignedInt5999Type, RGBFormat } from '../../constants.js';
|
|
2
2
|
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
3
3
|
|
|
4
|
-
function WebGLUtils( gl, extensions
|
|
5
|
-
|
|
6
|
-
const isWebGL2 = capabilities.isWebGL2;
|
|
4
|
+
function WebGLUtils( gl, extensions ) {
|
|
7
5
|
|
|
8
6
|
function convert( p, colorSpace = NoColorSpace ) {
|
|
9
7
|
|
|
@@ -14,6 +12,7 @@ function WebGLUtils( gl, extensions, capabilities ) {
|
|
|
14
12
|
if ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE;
|
|
15
13
|
if ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4;
|
|
16
14
|
if ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1;
|
|
15
|
+
if ( p === UnsignedInt5999Type ) return gl.UNSIGNED_INT_5_9_9_9_REV;
|
|
17
16
|
|
|
18
17
|
if ( p === ByteType ) return gl.BYTE;
|
|
19
18
|
if ( p === ShortType ) return gl.SHORT;
|
|
@@ -21,50 +20,16 @@ function WebGLUtils( gl, extensions, capabilities ) {
|
|
|
21
20
|
if ( p === IntType ) return gl.INT;
|
|
22
21
|
if ( p === UnsignedIntType ) return gl.UNSIGNED_INT;
|
|
23
22
|
if ( p === FloatType ) return gl.FLOAT;
|
|
24
|
-
|
|
25
|
-
if ( p === HalfFloatType ) {
|
|
26
|
-
|
|
27
|
-
if ( isWebGL2 ) return gl.HALF_FLOAT;
|
|
28
|
-
|
|
29
|
-
extension = extensions.get( 'OES_texture_half_float' );
|
|
30
|
-
|
|
31
|
-
if ( extension !== null ) {
|
|
32
|
-
|
|
33
|
-
return extension.HALF_FLOAT_OES;
|
|
34
|
-
|
|
35
|
-
} else {
|
|
36
|
-
|
|
37
|
-
return null;
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
}
|
|
23
|
+
if ( p === HalfFloatType ) return gl.HALF_FLOAT;
|
|
42
24
|
|
|
43
25
|
if ( p === AlphaFormat ) return gl.ALPHA;
|
|
26
|
+
if ( p === RGBFormat ) return gl.RGB;
|
|
44
27
|
if ( p === RGBAFormat ) return gl.RGBA;
|
|
45
28
|
if ( p === LuminanceFormat ) return gl.LUMINANCE;
|
|
46
29
|
if ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA;
|
|
47
30
|
if ( p === DepthFormat ) return gl.DEPTH_COMPONENT;
|
|
48
31
|
if ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;
|
|
49
32
|
|
|
50
|
-
// WebGL 1 sRGB fallback
|
|
51
|
-
|
|
52
|
-
if ( p === _SRGBAFormat ) {
|
|
53
|
-
|
|
54
|
-
extension = extensions.get( 'EXT_sRGB' );
|
|
55
|
-
|
|
56
|
-
if ( extension !== null ) {
|
|
57
|
-
|
|
58
|
-
return extension.SRGB_ALPHA_EXT;
|
|
59
|
-
|
|
60
|
-
} else {
|
|
61
|
-
|
|
62
|
-
return null;
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
|
|
68
33
|
// WebGL2 formats.
|
|
69
34
|
|
|
70
35
|
if ( p === RedFormat ) return gl.RED;
|
|
@@ -251,23 +216,7 @@ function WebGLUtils( gl, extensions, capabilities ) {
|
|
|
251
216
|
|
|
252
217
|
//
|
|
253
218
|
|
|
254
|
-
if ( p === UnsignedInt248Type )
|
|
255
|
-
|
|
256
|
-
if ( isWebGL2 ) return gl.UNSIGNED_INT_24_8;
|
|
257
|
-
|
|
258
|
-
extension = extensions.get( 'WEBGL_depth_texture' );
|
|
259
|
-
|
|
260
|
-
if ( extension !== null ) {
|
|
261
|
-
|
|
262
|
-
return extension.UNSIGNED_INT_24_8_WEBGL;
|
|
263
|
-
|
|
264
|
-
} else {
|
|
265
|
-
|
|
266
|
-
return null;
|
|
267
|
-
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
}
|
|
219
|
+
if ( p === UnsignedInt248Type ) return gl.UNSIGNED_INT_24_8;
|
|
271
220
|
|
|
272
221
|
// if "p" can't be resolved, assume the user defines a WebGL constant as a string (fallback/workaround for packed RGB formats)
|
|
273
222
|
|
|
@@ -21,11 +21,11 @@ void main() {
|
|
|
21
21
|
|
|
22
22
|
if ( coord.x >= 1.0 ) {
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
gl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r;
|
|
25
25
|
|
|
26
26
|
} else {
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
gl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r;
|
|
29
29
|
|
|
30
30
|
}
|
|
31
31
|
|
|
@@ -73,7 +73,6 @@ class WebXRDepthSensing {
|
|
|
73
73
|
|
|
74
74
|
const viewport = cameraXR.cameras[ 0 ].viewport;
|
|
75
75
|
const material = new ShaderMaterial( {
|
|
76
|
-
extensions: { fragDepth: true },
|
|
77
76
|
vertexShader: _occlusion_vertex,
|
|
78
77
|
fragmentShader: _occlusion_fragment,
|
|
79
78
|
uniforms: {
|
|
@@ -290,10 +290,10 @@ class WebXRManager extends EventDispatcher {
|
|
|
290
290
|
currentPixelRatio = renderer.getPixelRatio();
|
|
291
291
|
renderer.getSize( currentSize );
|
|
292
292
|
|
|
293
|
-
if (
|
|
293
|
+
if ( session.renderState.layers === undefined ) {
|
|
294
294
|
|
|
295
295
|
const layerInit = {
|
|
296
|
-
antialias:
|
|
296
|
+
antialias: attributes.antialias,
|
|
297
297
|
alpha: true,
|
|
298
298
|
depth: attributes.depth,
|
|
299
299
|
stencil: attributes.stencil,
|
package/src/scenes/Scene.js
CHANGED
|
@@ -18,6 +18,8 @@ class Scene extends Object3D {
|
|
|
18
18
|
this.backgroundBlurriness = 0;
|
|
19
19
|
this.backgroundIntensity = 1;
|
|
20
20
|
this.backgroundRotation = new Euler();
|
|
21
|
+
|
|
22
|
+
this.environmentIntensity = 1;
|
|
21
23
|
this.environmentRotation = new Euler();
|
|
22
24
|
|
|
23
25
|
this.overrideMaterial = null;
|
|
@@ -41,6 +43,8 @@ class Scene extends Object3D {
|
|
|
41
43
|
this.backgroundBlurriness = source.backgroundBlurriness;
|
|
42
44
|
this.backgroundIntensity = source.backgroundIntensity;
|
|
43
45
|
this.backgroundRotation.copy( source.backgroundRotation );
|
|
46
|
+
|
|
47
|
+
this.environmentIntensity = source.environmentIntensity;
|
|
44
48
|
this.environmentRotation.copy( source.environmentRotation );
|
|
45
49
|
|
|
46
50
|
if ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();
|
|
@@ -56,10 +60,12 @@ class Scene extends Object3D {
|
|
|
56
60
|
const data = super.toJSON( meta );
|
|
57
61
|
|
|
58
62
|
if ( this.fog !== null ) data.object.fog = this.fog.toJSON();
|
|
63
|
+
|
|
59
64
|
if ( this.backgroundBlurriness > 0 ) data.object.backgroundBlurriness = this.backgroundBlurriness;
|
|
60
65
|
if ( this.backgroundIntensity !== 1 ) data.object.backgroundIntensity = this.backgroundIntensity;
|
|
61
|
-
|
|
62
66
|
data.object.backgroundRotation = this.backgroundRotation.toArray();
|
|
67
|
+
|
|
68
|
+
if ( this.environmentIntensity !== 1 ) data.object.environmentIntensity = this.environmentIntensity;
|
|
63
69
|
data.object.environmentRotation = this.environmentRotation.toArray();
|
|
64
70
|
|
|
65
71
|
return data;
|
package/src/textures/Texture.js
CHANGED
|
@@ -70,7 +70,7 @@ class Texture extends EventDispatcher {
|
|
|
70
70
|
this.onUpdate = null;
|
|
71
71
|
|
|
72
72
|
this.isRenderTargetTexture = false; // indicates whether a texture belongs to a render target or not
|
|
73
|
-
this.
|
|
73
|
+
this.pmremVersion = 0; // indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target textures)
|
|
74
74
|
|
|
75
75
|
}
|
|
76
76
|
|
|
@@ -301,6 +301,16 @@ class Texture extends EventDispatcher {
|
|
|
301
301
|
|
|
302
302
|
}
|
|
303
303
|
|
|
304
|
+
set needsPMREMUpdate( value ) {
|
|
305
|
+
|
|
306
|
+
if ( value === true ) {
|
|
307
|
+
|
|
308
|
+
this.pmremVersion ++;
|
|
309
|
+
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
}
|
|
313
|
+
|
|
304
314
|
}
|
|
305
315
|
|
|
306
316
|
Texture.DEFAULT_IMAGE = null;
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import Node, { addNodeClass } from '../core/Node.js';
|
|
2
|
-
import { maxMipLevel } from './MaxMipLevelNode.js';
|
|
3
|
-
import { nodeProxy } from '../shadernode/ShaderNode.js';
|
|
4
|
-
|
|
5
|
-
class SpecularMIPLevelNode extends Node {
|
|
6
|
-
|
|
7
|
-
constructor( textureNode, roughnessNode = null ) {
|
|
8
|
-
|
|
9
|
-
super( 'float' );
|
|
10
|
-
|
|
11
|
-
this.textureNode = textureNode;
|
|
12
|
-
this.roughnessNode = roughnessNode;
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
setup() {
|
|
17
|
-
|
|
18
|
-
const { textureNode, roughnessNode } = this;
|
|
19
|
-
|
|
20
|
-
// taken from here: http://casual-effects.blogspot.ca/2011/08/plausible-environment-lighting-in-two.html
|
|
21
|
-
|
|
22
|
-
const maxMIPLevelScalar = maxMipLevel( textureNode );
|
|
23
|
-
|
|
24
|
-
const sigma = roughnessNode.mul( roughnessNode ).mul( Math.PI ).div( roughnessNode.add( 1.0 ) );
|
|
25
|
-
const desiredMIPLevel = maxMIPLevelScalar.add( sigma.log2() );
|
|
26
|
-
|
|
27
|
-
return desiredMIPLevel.clamp( 0.0, maxMIPLevelScalar );
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export default SpecularMIPLevelNode;
|
|
34
|
-
|
|
35
|
-
export const specularMIPLevel = nodeProxy( SpecularMIPLevelNode );
|
|
36
|
-
|
|
37
|
-
addNodeClass( 'SpecularMIPLevelNode', SpecularMIPLevelNode );
|