super-three 0.135.0 → 0.136.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.js +527 -332
- package/build/three.min.js +1 -1
- package/build/three.module.js +752 -370
- package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
- package/examples/js/animation/CCDIKSolver.js +0 -1
- package/examples/js/animation/MMDPhysics.js +1 -3
- package/examples/js/controls/ArcballControls.js +38 -52
- package/examples/js/controls/TransformControls.js +24 -1
- package/examples/js/curves/CurveExtras.js +0 -2
- package/examples/js/effects/AsciiEffect.js +2 -9
- package/examples/js/exporters/GLTFExporter.js +1 -1
- package/examples/js/geometries/TeapotGeometry.js +0 -1
- package/examples/js/interactive/SelectionBox.js +2 -0
- package/examples/js/interactive/SelectionHelper.js +22 -7
- package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
- package/examples/js/loaders/AMFLoader.js +0 -2
- package/examples/js/loaders/ColladaLoader.js +1 -2
- package/examples/js/loaders/EXRLoader.js +185 -262
- package/examples/js/loaders/FBXLoader.js +3 -4
- package/examples/js/loaders/GLTFLoader.js +2 -2
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -8
- package/examples/js/loaders/KTX2Loader.js +11 -2
- package/examples/js/loaders/KTXLoader.js +1 -1
- package/examples/js/loaders/LDrawLoader.js +26 -30
- package/examples/js/loaders/LUT3dlLoader.js +2 -0
- package/examples/js/loaders/LUTCubeLoader.js +2 -0
- package/examples/js/loaders/MMDLoader.js +0 -1
- package/examples/js/loaders/NRRDLoader.js +9 -2
- package/examples/js/loaders/OBJLoader.js +0 -2
- package/examples/js/loaders/PLYLoader.js +1 -1
- package/examples/js/loaders/RGBELoader.js +0 -15
- package/examples/js/loaders/RGBMLoader.js +55 -5
- package/examples/js/loaders/SVGLoader.js +2 -2
- package/examples/js/loaders/VOXLoader.js +1 -0
- package/examples/js/loaders/VRMLLoader.js +2 -1
- package/examples/js/math/ImprovedNoise.js +1 -1
- package/examples/js/misc/GPUComputationRenderer.js +3 -1
- package/examples/js/objects/Lensflare.js +2 -10
- package/examples/js/objects/Reflector.js +7 -0
- package/examples/js/objects/Refractor.js +7 -0
- package/examples/js/objects/Sky.js +1 -1
- package/examples/js/objects/Water.js +2 -2
- package/examples/js/objects/Water2.js +4 -7
- package/examples/js/postprocessing/GlitchPass.js +3 -1
- package/examples/js/postprocessing/SSAOPass.js +1 -0
- package/examples/js/shaders/ConvolutionShader.js +0 -1
- package/examples/js/shaders/FXAAShader.js +1 -1
- package/examples/js/shaders/FilmShader.js +1 -1
- package/examples/js/shaders/GammaCorrectionShader.js +1 -1
- package/examples/js/shaders/HorizontalBlurShader.js +1 -2
- package/examples/js/shaders/SSRShader.js +1 -1
- package/examples/js/shaders/SSRrShader.js +1 -1
- package/examples/js/shaders/VerticalBlurShader.js +1 -2
- package/examples/js/utils/GeometryUtils.js +1 -1
- package/examples/js/utils/RoughnessMipmapper.js +18 -29
- package/examples/jsm/animation/CCDIKSolver.js +0 -1
- package/examples/jsm/animation/MMDPhysics.js +0 -2
- package/examples/jsm/controls/ArcballControls.js +27 -56
- package/examples/jsm/controls/TransformControls.js +24 -1
- package/examples/jsm/curves/CurveExtras.js +0 -2
- package/examples/jsm/effects/AsciiEffect.js +2 -9
- package/examples/jsm/exporters/GLTFExporter.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +0 -1
- package/examples/jsm/interactive/SelectionBox.js +1 -0
- package/examples/jsm/interactive/SelectionHelper.js +19 -7
- package/examples/jsm/libs/flow.module.js +256 -136
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
- package/examples/jsm/loaders/AMFLoader.js +0 -2
- package/examples/jsm/loaders/ColladaLoader.js +1 -2
- package/examples/jsm/loaders/EXRLoader.js +184 -293
- package/examples/jsm/loaders/FBXLoader.js +3 -4
- package/examples/jsm/loaders/GLTFLoader.js +2 -2
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -14
- package/examples/jsm/loaders/KTX2Loader.js +13 -4
- package/examples/jsm/loaders/KTXLoader.js +1 -1
- package/examples/jsm/loaders/LDrawLoader.js +23 -24
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -0
- package/examples/jsm/loaders/MMDLoader.js +0 -1
- package/examples/jsm/loaders/NRRDLoader.js +10 -2
- package/examples/jsm/loaders/OBJLoader.js +0 -2
- package/examples/jsm/loaders/PLYLoader.js +1 -1
- package/examples/jsm/loaders/RGBELoader.js +0 -20
- package/examples/jsm/loaders/RGBMLoader.js +61 -7
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/TDSLoader.js +30 -9
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +2 -1
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
- package/examples/jsm/node-editor/NodeEditor.js +23 -22
- package/examples/jsm/node-editor/examples/rim.json +1 -1
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +48 -9
- package/examples/jsm/node-editor/utils/OscillatorEditor.js +1 -1
- package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
- package/examples/jsm/nodes/materials/nodes/StandardNode.js +1 -0
- package/examples/jsm/nodes/math/MathNode.js +12 -0
- package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
- package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
- package/examples/jsm/nodes/utils/ColorSpaceNode.js +1 -116
- package/examples/jsm/objects/Lensflare.js +3 -14
- package/examples/jsm/objects/Reflector.js +7 -0
- package/examples/jsm/objects/Refractor.js +7 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/Water.js +2 -2
- package/examples/jsm/objects/Water2.js +4 -8
- package/examples/jsm/postprocessing/GlitchPass.js +3 -1
- package/examples/jsm/postprocessing/SAOPass.js +1 -1
- package/examples/jsm/postprocessing/SSAOPass.js +1 -0
- package/examples/jsm/renderers/nodes/Nodes.js +1 -0
- package/examples/jsm/renderers/nodes/ShaderNode.js +7 -6
- package/examples/jsm/renderers/nodes/core/InputNode.js +1 -1
- package/examples/jsm/renderers/nodes/core/NodeBuilder.js +1 -1
- package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +26 -31
- package/examples/jsm/renderers/nodes/functions/BSDFs.js +2 -2
- package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
- package/examples/jsm/renderers/nodes/inputs/TextureNode.js +1 -1
- package/examples/jsm/renderers/nodes/math/MathNode.js +5 -3
- package/examples/jsm/renderers/nodes/math/OperatorNode.js +2 -2
- package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +14 -14
- package/examples/jsm/renderers/webgpu/WebGPUBindings.js +7 -6
- package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +1 -1
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +42 -61
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +0 -1
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +30 -4
- package/examples/jsm/shaders/ConvolutionShader.js +0 -1
- package/examples/jsm/shaders/FXAAShader.js +1 -1
- package/examples/jsm/shaders/FilmShader.js +1 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SSRrShader.js +1 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
- package/examples/jsm/utils/GeometryUtils.js +1 -1
- package/examples/jsm/utils/RoughnessMipmapper.js +19 -32
- package/examples/jsm/utils/WorkerPool.js +11 -11
- package/package.json +15 -9
- package/src/Three.Legacy.js +12 -0
- package/src/Three.js +1 -2
- package/src/constants.js +1 -7
- package/src/core/Object3D.js +1 -1
- package/src/extras/PMREMGenerator.js +19 -110
- package/src/extras/core/Interpolations.js +1 -1
- package/src/geometries/LatheGeometry.js +70 -47
- package/src/helpers/CameraHelper.js +1 -1
- package/src/loaders/FileLoader.js +23 -6
- package/src/math/Color.js +0 -38
- package/src/math/Ray.js +2 -2
- package/src/math/Sphere.js +10 -1
- package/src/objects/Skeleton.js +1 -0
- package/src/renderers/WebGLRenderer.js +23 -16
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
- package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -47
- package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +27 -1
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +10 -0
- package/src/renderers/webgl/WebGLCapabilities.js +0 -2
- package/src/renderers/webgl/WebGLMorphtargets.js +1 -0
- package/src/renderers/webgl/WebGLProgram.js +2 -19
- package/src/renderers/webgl/WebGLPrograms.js +191 -35
- package/src/renderers/webgl/WebGLRenderLists.js +4 -14
- package/src/renderers/webgl/WebGLShaderCache.js +120 -0
- package/src/renderers/webgl/WebGLState.js +45 -0
- package/src/renderers/webgl/WebGLTextures.js +195 -26
- package/src/renderers/webxr/WebXRManager.js +10 -3
- package/src/scenes/Scene.js +1 -1
- package/src/textures/DataTexture.js +0 -2
- package/src/textures/DataTexture2DArray.js +0 -2
- package/src/textures/DataTexture3D.js +0 -2
- package/src/textures/FramebufferTexture.js +25 -0
- package/src/utils.js +1 -37
|
@@ -1 +1 @@
|
|
|
1
|
-
{"objects":{"52":{"x":1873,"y":248,"width":"300px","elements":[53,55,56,57,58],"id":52,"type":"StandardMaterialEditor"},"53":{"style":"blue","title":"Standard Material","id":53,"type":"TitleElement"},"55":{"inputLength":3,"links":[103],"label":"Color","id":55,"type":"LabelElement"},"56":{"inputLength":1,"label":"Opacity","id":56,"type":"LabelElement"},"57":{"inputLength":1,"label":"Metalness","id":57,"type":"LabelElement"},"58":{"inputLength":1,"links":[177],"label":"Roughness","id":58,"type":"LabelElement"},"64":{"x":506,"y":328,"width":"200px","elements":[65,67,68],"id":64,"type":"DotEditor"},"65":{"outputLength":1,"title":"Dot Product","id":65,"type":"TitleElement"},"67":{"inputLength":3,"links":[85],"label":"A","id":67,"type":"LabelElement"},"68":{"inputLength":3,"links":[73],"label":"B","id":68,"type":"LabelElement"},"72":{"x":33,"y":453,"width":"300px","elements":[73,78],"id":72,"type":"Vector3Editor"},"73":{"outputLength":3,"title":"Vector 3","icon":"ti ti-box-multiple-3","id":73,"type":"TitleElement"},"75":{"value":0,"id":75,"type":"NumberInput"},"76":{"value":0,"id":76,"type":"NumberInput"},"77":{"value":1.
|
|
1
|
+
{"objects":{"52":{"x":1873,"y":248,"width":"300px","elements":[53,55,56,57,58],"id":52,"type":"StandardMaterialEditor"},"53":{"style":"blue","title":"Standard Material","id":53,"type":"TitleElement"},"55":{"inputLength":3,"links":[103],"label":"Color","id":55,"type":"LabelElement"},"56":{"inputLength":1,"label":"Opacity","id":56,"type":"LabelElement"},"57":{"inputLength":1,"label":"Metalness","id":57,"type":"LabelElement"},"58":{"inputLength":1,"links":[177],"label":"Roughness","id":58,"type":"LabelElement"},"64":{"x":506,"y":328,"width":"200px","elements":[65,67,68],"id":64,"type":"DotEditor"},"65":{"outputLength":1,"title":"Dot Product","id":65,"type":"TitleElement"},"67":{"inputLength":3,"links":[85],"label":"A","id":67,"type":"LabelElement"},"68":{"inputLength":3,"links":[73],"label":"B","id":68,"type":"LabelElement"},"72":{"x":33,"y":453,"width":"300px","elements":[73,78],"id":72,"type":"Vector3Editor"},"73":{"outputLength":3,"title":"Vector 3","icon":"ti ti-box-multiple-3","id":73,"type":"TitleElement"},"75":{"value":0,"id":75,"type":"NumberInput"},"76":{"value":0,"id":76,"type":"NumberInput"},"77":{"value":1.0,"id":77,"type":"NumberInput"},"78":{"inputs":[75,76,77],"label":"Values","id":78,"type":"LabelElement"},"84":{"x":75,"y":278,"width":"250px","elements":[85,88],"id":84,"type":"NormalEditor"},"85":{"outputLength":3,"style":"red","title":"Normal","id":85,"type":"TitleElement"},"87":{"options":[{"name":"Local","value":"local"},{"name":"World","value":"world"},{"name":"View","value":"view"}],"value":"view","id":87,"type":"SelectInput"},"88":{"inputs":[87],"label":"Scope","id":88,"type":"LabelElement"},"92":{"x":846,"y":353,"width":"300px","elements":[93,97,96],"id":92,"type":"InvertEditor"},"93":{"outputLength":1,"title":"Invert / Negate","id":93,"type":"TitleElement"},"95":{"options":[{"name":"Invert ( 1 - Source )","value":"invert"},{"name":"Negate ( - Source )","value":"negate"}],"value":"invert","id":95,"type":"SelectInput"},"96":{"inputLength":1,"links":[65],"label":"Source","id":96,"type":"LabelElement"},"97":{"inputs":[95],"label":"Method","id":97,"type":"LabelElement"},"102":{"x":1459,"y":146,"width":"300px","elements":[103,105,106,107],"id":102,"type":"BlendEditor"},"103":{"outputLength":3,"title":"Blend","id":103,"type":"TitleElement"},"105":{"inputLength":3,"links":[113],"label":"Base","id":105,"type":"LabelElement"},"106":{"inputLength":3,"links":[133],"label":"Blend","id":106,"type":"LabelElement"},"107":{"inputLength":1,"links":[161],"label":"Opacity","id":107,"type":"LabelElement"},"112":{"x":846,"y":17,"width":"300px","elements":[113,120,121,122],"id":112,"type":"ColorEditor"},"113":{"outputLength":1,"title":"Color","icon":"ti ti-palette","id":113,"type":"TitleElement"},"115":{"value":5058,"id":115,"type":"ColorInput"},"116":{"value":"#13C200","id":116,"type":"StringInput"},"117":{"min":0,"max":1,"step":0.01,"value":0,"id":117,"type":"NumberInput"},"118":{"min":0,"max":1,"step":0.01,"value":0.075,"id":118,"type":"NumberInput"},"119":{"min":0,"max":1,"step":0.01,"value":0.761,"id":119,"type":"NumberInput"},"120":{"inputs":[115],"label":"Value","id":120,"type":"LabelElement"},"121":{"inputs":[116],"label":"Hex","id":121,"type":"LabelElement"},"122":{"inputs":[117,118,119],"label":"RGB","id":122,"type":"LabelElement"},"132":{"x":844,"y":189,"width":"300px","elements":[133,140,141,142],"id":132,"type":"ColorEditor"},"133":{"outputLength":1,"title":"Color","icon":"ti ti-palette","id":133,"type":"TitleElement"},"135":{"value":16711680,"id":135,"type":"ColorInput"},"136":{"value":"#FF0000","id":136,"type":"StringInput"},"137":{"min":0,"max":1,"step":0.01,"value":1,"id":137,"type":"NumberInput"},"138":{"min":0,"max":1,"step":0.01,"value":0,"id":138,"type":"NumberInput"},"139":{"min":0,"max":1,"step":0.01,"value":0,"id":139,"type":"NumberInput"},"140":{"inputs":[135],"label":"Value","id":140,"type":"LabelElement"},"141":{"inputs":[136],"label":"Hex","id":141,"type":"LabelElement"},"142":{"inputs":[137,138,139],"label":"RGB","id":142,"type":"LabelElement"},"160":{"x":1241,"y":361,"width":"200px","elements":[161,163,164],"id":160,"type":"PowerEditor"},"161":{"outputLength":1,"title":"Power","id":161,"type":"TitleElement"},"163":{"inputLength":1,"links":[93],"label":"A","id":163,"type":"LabelElement"},"164":{"inputLength":1,"links":[169],"label":"B","id":164,"type":"LabelElement"},"168":{"x":852,"y":503,"width":"250px","elements":[169,172],"id":168,"type":"FloatEditor"},"169":{"outputLength":1,"title":"Float","icon":"ti ti-box-multiple-1","id":169,"type":"TitleElement"},"171":{"value":1.32,"id":171,"type":"NumberInput"},"172":{"inputs":[171],"label":"Value","id":172,"type":"LabelElement"},"176":{"x":1482,"y":449,"width":"300px","elements":[177,187,183,184,185],"id":176,"type":"SliderEditor"},"177":{"outputLength":1,"title":"Slider","icon":"ti ti-adjustments-horizontal","id":177,"type":"TitleElement"},"179":{"min":0,"max":1,"value":1,"id":179,"type":"SliderInput"},"181":{"value":0,"id":181,"type":"NumberInput"},"182":{"value":1,"id":182,"type":"NumberInput"},"183":{"inputs":[181],"label":"Min.","id":183,"type":"LabelElement"},"184":{"inputs":[182],"label":"Max.","id":184,"type":"LabelElement"},"185":{"inputs":[186],"id":185,"type":"Element"},"186":{"value":"More","id":186,"type":"ButtonInput"},"187":{"inputs":[179],"label":"Value","id":187,"type":"LabelElement"}},"nodes":[52,64,72,84,92,102,112,132,160,168,176],"id":0,"type":"Canvas"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import { ObjectNode, LabelElement } from '../../libs/flow.module.js';
|
|
2
|
-
import { MeshStandardNodeMaterial
|
|
1
|
+
import { ObjectNode, ColorInput, SliderInput, LabelElement } from '../../libs/flow.module.js';
|
|
2
|
+
import { MeshStandardNodeMaterial } from '../../renderers/nodes/Nodes.js';
|
|
3
3
|
import * as THREE from 'three';
|
|
4
4
|
|
|
5
|
-
const NULL_COLOR = new ColorNode();
|
|
6
|
-
const NULL_FLOAT = new FloatNode();
|
|
7
|
-
|
|
8
5
|
export class StandardMaterialEditor extends ObjectNode {
|
|
9
6
|
|
|
10
7
|
constructor() {
|
|
@@ -22,6 +19,32 @@ export class StandardMaterialEditor extends ObjectNode {
|
|
|
22
19
|
const metalness = new LabelElement( 'metalness' ).setInput( 1 );
|
|
23
20
|
const roughness = new LabelElement( 'roughness' ).setInput( 1 );
|
|
24
21
|
|
|
22
|
+
color.add( new ColorInput( material.color.getHex() ).onChange( ( input ) => {
|
|
23
|
+
|
|
24
|
+
material.color.setHex( input.getValue() );
|
|
25
|
+
|
|
26
|
+
} ) );
|
|
27
|
+
|
|
28
|
+
opacity.add( new SliderInput( material.opacity, 0, 1 ).onChange( ( input ) => {
|
|
29
|
+
|
|
30
|
+
material.opacity = input.getValue();
|
|
31
|
+
|
|
32
|
+
this.updateTransparent();
|
|
33
|
+
|
|
34
|
+
} ) );
|
|
35
|
+
|
|
36
|
+
metalness.add( new SliderInput( material.metalness, 0, 1 ).onChange( ( input ) => {
|
|
37
|
+
|
|
38
|
+
material.metalness = input.getValue();
|
|
39
|
+
|
|
40
|
+
} ) );
|
|
41
|
+
|
|
42
|
+
roughness.add( new SliderInput( material.roughness, 0, 1 ).onChange( ( input ) => {
|
|
43
|
+
|
|
44
|
+
material.roughness = input.getValue();
|
|
45
|
+
|
|
46
|
+
} ) );
|
|
47
|
+
|
|
25
48
|
color.onConnect( () => this.update(), true );
|
|
26
49
|
opacity.onConnect( () => this.update(), true );
|
|
27
50
|
metalness.onConnect( () => this.update(), true );
|
|
@@ -47,16 +70,22 @@ export class StandardMaterialEditor extends ObjectNode {
|
|
|
47
70
|
|
|
48
71
|
const { material, color, opacity, roughness, metalness } = this;
|
|
49
72
|
|
|
50
|
-
|
|
73
|
+
color.setEnabledInputs( ! color.linkedExtra );
|
|
74
|
+
opacity.setEnabledInputs( ! opacity.linkedExtra );
|
|
75
|
+
roughness.setEnabledInputs( ! roughness.linkedExtra );
|
|
76
|
+
metalness.setEnabledInputs( ! metalness.linkedExtra );
|
|
77
|
+
|
|
78
|
+
material.colorNode = color.linkedExtra;
|
|
51
79
|
|
|
52
80
|
material.opacityNode = opacity.linkedExtra || null;
|
|
53
|
-
material.transparent = opacity.linkedExtra ? true : false;
|
|
54
81
|
|
|
55
|
-
material.metalnessNode = metalness.linkedExtra
|
|
56
|
-
material.roughnessNode = roughness.linkedExtra
|
|
82
|
+
material.metalnessNode = metalness.linkedExtra;
|
|
83
|
+
material.roughnessNode = roughness.linkedExtra;
|
|
57
84
|
|
|
58
85
|
material.dispose();
|
|
59
86
|
|
|
87
|
+
this.updateTransparent();
|
|
88
|
+
|
|
60
89
|
// TODO: Fix on NodeMaterial System
|
|
61
90
|
material.customProgramCacheKey = () => {
|
|
62
91
|
|
|
@@ -66,4 +95,14 @@ export class StandardMaterialEditor extends ObjectNode {
|
|
|
66
95
|
|
|
67
96
|
}
|
|
68
97
|
|
|
98
|
+
updateTransparent() {
|
|
99
|
+
|
|
100
|
+
const { material, opacity } = this;
|
|
101
|
+
|
|
102
|
+
material.transparent = opacity.linkedExtra || material.opacity < 1 ? true : false;
|
|
103
|
+
|
|
104
|
+
opacity.setIcon( material.transparent ? 'ti ti-layers-intersect' : 'ti ti-layers-subtract' );
|
|
105
|
+
|
|
106
|
+
}
|
|
107
|
+
|
|
69
108
|
}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
CubeUVReflectionMapping,
|
|
5
5
|
CubeUVRefractionMapping,
|
|
6
6
|
LinearEncoding,
|
|
7
|
-
|
|
7
|
+
sRGBEncoding
|
|
8
8
|
} from 'three';
|
|
9
9
|
|
|
10
10
|
import { NodeUniform } from './NodeUniform.js';
|
|
@@ -951,7 +951,7 @@ class NodeBuilder {
|
|
|
951
951
|
|
|
952
952
|
if ( encoding === LinearEncoding && this.context.gamma ) {
|
|
953
953
|
|
|
954
|
-
encoding =
|
|
954
|
+
encoding = sRGBEncoding;
|
|
955
955
|
|
|
956
956
|
}
|
|
957
957
|
|
|
@@ -18,6 +18,14 @@ class MathNode extends TempNode {
|
|
|
18
18
|
|
|
19
19
|
switch ( this.method ) {
|
|
20
20
|
|
|
21
|
+
// variable
|
|
22
|
+
|
|
23
|
+
case MathNode.ARCTAN:
|
|
24
|
+
|
|
25
|
+
return this.b ? 2 : 1;
|
|
26
|
+
|
|
27
|
+
// 3
|
|
28
|
+
|
|
21
29
|
case MathNode.MIX:
|
|
22
30
|
case MathNode.CLAMP:
|
|
23
31
|
case MathNode.REFRACT:
|
|
@@ -26,6 +34,8 @@ class MathNode extends TempNode {
|
|
|
26
34
|
|
|
27
35
|
return 3;
|
|
28
36
|
|
|
37
|
+
// 2
|
|
38
|
+
|
|
29
39
|
case MathNode.MIN:
|
|
30
40
|
case MathNode.MAX:
|
|
31
41
|
case MathNode.MOD:
|
|
@@ -38,6 +48,8 @@ class MathNode extends TempNode {
|
|
|
38
48
|
|
|
39
49
|
return 2;
|
|
40
50
|
|
|
51
|
+
// 1
|
|
52
|
+
|
|
41
53
|
default:
|
|
42
54
|
|
|
43
55
|
return 1;
|
|
@@ -90,7 +90,7 @@ class BumpMapNode extends TempNode {
|
|
|
90
90
|
BumpMapNode.Nodes = ( function () {
|
|
91
91
|
|
|
92
92
|
// Bump Mapping Unparametrized Surfaces on the GPU by Morten S. Mikkelsen
|
|
93
|
-
//
|
|
93
|
+
// https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf
|
|
94
94
|
|
|
95
95
|
// Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)
|
|
96
96
|
|
|
@@ -26,19 +26,15 @@ class TextureCubeUVNode extends TempNode {
|
|
|
26
26
|
const bilinearCubeUV = new FunctionCallNode( TextureCubeUVNode.Nodes.bilinearCubeUV, [ texture, uv, mipInt ] );
|
|
27
27
|
|
|
28
28
|
this.colorSpaceTL = this.colorSpaceTL || new ColorSpaceNode( new ExpressionNode( '', 'v4' ) );
|
|
29
|
-
this.colorSpaceTL.fromDecoding( builder.getTextureEncodingFromMap( this.value.value ) );
|
|
30
29
|
this.colorSpaceTL.input.parse( bilinearCubeUV.build( builder ) + '.tl' );
|
|
31
30
|
|
|
32
31
|
this.colorSpaceTR = this.colorSpaceTR || new ColorSpaceNode( new ExpressionNode( '', 'v4' ) );
|
|
33
|
-
this.colorSpaceTR.fromDecoding( builder.getTextureEncodingFromMap( this.value.value ) );
|
|
34
32
|
this.colorSpaceTR.input.parse( bilinearCubeUV.build( builder ) + '.tr' );
|
|
35
33
|
|
|
36
34
|
this.colorSpaceBL = this.colorSpaceBL || new ColorSpaceNode( new ExpressionNode( '', 'v4' ) );
|
|
37
|
-
this.colorSpaceBL.fromDecoding( builder.getTextureEncodingFromMap( this.value.value ) );
|
|
38
35
|
this.colorSpaceBL.input.parse( bilinearCubeUV.build( builder ) + '.bl' );
|
|
39
36
|
|
|
40
37
|
this.colorSpaceBR = this.colorSpaceBR || new ColorSpaceNode( new ExpressionNode( '', 'v4' ) );
|
|
41
|
-
this.colorSpaceBR.fromDecoding( builder.getTextureEncodingFromMap( this.value.value ) );
|
|
42
38
|
this.colorSpaceBR.input.parse( bilinearCubeUV.build( builder ) + '.br' );
|
|
43
39
|
|
|
44
40
|
// add a custom context for fix incompatibility with the core
|
|
@@ -230,6 +226,7 @@ TextureCubeUVNode.Nodes = ( function () {
|
|
|
230
226
|
|
|
231
227
|
return TextureCubeUVData( tl, tr, br, bl, f );
|
|
232
228
|
}`, [ TextureCubeUVData, getFace, getUV, cubeUV_maxMipLevel, cubeUV_minMipLevel, cubeUV_maxTileSize, cubeUV_minTileSize ] );
|
|
229
|
+
|
|
233
230
|
bilinearCubeUV.useKeywords = false;
|
|
234
231
|
|
|
235
232
|
// These defines must match with PMREMGenerator
|
|
@@ -1,17 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
|
-
GammaEncoding,
|
|
3
2
|
LinearEncoding,
|
|
4
|
-
RGBEEncoding,
|
|
5
|
-
RGBM7Encoding,
|
|
6
|
-
RGBM16Encoding,
|
|
7
|
-
RGBDEncoding,
|
|
8
3
|
sRGBEncoding
|
|
9
4
|
} from 'three';
|
|
10
5
|
|
|
11
6
|
import { TempNode } from '../core/TempNode.js';
|
|
12
|
-
import { FloatNode } from '../inputs/FloatNode.js';
|
|
13
7
|
import { FunctionNode } from '../core/FunctionNode.js';
|
|
14
|
-
import { ExpressionNode } from '../core/ExpressionNode.js';
|
|
15
8
|
|
|
16
9
|
class ColorSpaceNode extends TempNode {
|
|
17
10
|
|
|
@@ -105,8 +98,6 @@ class ColorSpaceNode extends TempNode {
|
|
|
105
98
|
|
|
106
99
|
ColorSpaceNode.Nodes = ( function () {
|
|
107
100
|
|
|
108
|
-
// For a discussion of what this is, please read this: http://lousodrome.net/blog/light/2013/05/26/gamma-correct-and-hdr-rendering-in-a-32-bits-buffer/
|
|
109
|
-
|
|
110
101
|
const LinearToLinear = new FunctionNode( /* glsl */`
|
|
111
102
|
vec4 LinearToLinear( in vec4 value ) {
|
|
112
103
|
|
|
@@ -115,22 +106,6 @@ ColorSpaceNode.Nodes = ( function () {
|
|
|
115
106
|
}`
|
|
116
107
|
);
|
|
117
108
|
|
|
118
|
-
const GammaToLinear = new FunctionNode( /* glsl */`
|
|
119
|
-
vec4 GammaToLinear( in vec4 value, in float gammaFactor ) {
|
|
120
|
-
|
|
121
|
-
return vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );
|
|
122
|
-
|
|
123
|
-
}`
|
|
124
|
-
);
|
|
125
|
-
|
|
126
|
-
const LinearToGamma = new FunctionNode( /* glsl */`
|
|
127
|
-
vec4 LinearToGamma( in vec4 value, in float gammaFactor ) {
|
|
128
|
-
|
|
129
|
-
return vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );
|
|
130
|
-
|
|
131
|
-
}`
|
|
132
|
-
);
|
|
133
|
-
|
|
134
109
|
const sRGBToLinear = new FunctionNode( /* glsl */`
|
|
135
110
|
vec4 sRGBToLinear( in vec4 value ) {
|
|
136
111
|
|
|
@@ -147,99 +122,19 @@ ColorSpaceNode.Nodes = ( function () {
|
|
|
147
122
|
}`
|
|
148
123
|
);
|
|
149
124
|
|
|
150
|
-
const RGBEToLinear = new FunctionNode( /* glsl */`
|
|
151
|
-
vec4 RGBEToLinear( in vec4 value ) {
|
|
152
|
-
|
|
153
|
-
return vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );
|
|
154
|
-
|
|
155
|
-
}`
|
|
156
|
-
);
|
|
157
|
-
|
|
158
|
-
const LinearToRGBE = new FunctionNode( /* glsl */`
|
|
159
|
-
vec4 LinearToRGBE( in vec4 value ) {
|
|
160
|
-
|
|
161
|
-
float maxComponent = max( max( value.r, value.g ), value.b );
|
|
162
|
-
float fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );
|
|
163
|
-
return vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );
|
|
164
|
-
|
|
165
|
-
}`
|
|
166
|
-
);
|
|
167
|
-
|
|
168
|
-
// reference: http://iwasbeingirony.blogspot.ca/2010/06/difference-between-rgbm-and-rgbd.html
|
|
169
|
-
|
|
170
|
-
const RGBMToLinear = new FunctionNode( /* glsl */`
|
|
171
|
-
vec3 RGBMToLinear( in vec4 value, in float maxRange ) {
|
|
172
|
-
|
|
173
|
-
return vec4( value.xyz * value.w * maxRange, 1.0 );
|
|
174
|
-
|
|
175
|
-
}`
|
|
176
|
-
);
|
|
177
|
-
|
|
178
|
-
const LinearToRGBM = new FunctionNode( /* glsl */`
|
|
179
|
-
vec3 LinearToRGBM( in vec4 value, in float maxRange ) {
|
|
180
|
-
|
|
181
|
-
float maxRGB = max( value.x, max( value.g, value.b ) );
|
|
182
|
-
float M = clamp( maxRGB / maxRange, 0.0, 1.0 );
|
|
183
|
-
M = ceil( M * 255.0 ) / 255.0;
|
|
184
|
-
return vec4( value.rgb / ( M * maxRange ), M );
|
|
185
|
-
|
|
186
|
-
}`
|
|
187
|
-
);
|
|
188
|
-
|
|
189
|
-
// reference: http://iwasbeingirony.blogspot.ca/2010/06/difference-between-rgbm-and-rgbd.html
|
|
190
|
-
|
|
191
|
-
const RGBDToLinear = new FunctionNode( /* glsl */`
|
|
192
|
-
vec3 RGBDToLinear( in vec4 value, in float maxRange ) {
|
|
193
|
-
|
|
194
|
-
return vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );
|
|
195
|
-
|
|
196
|
-
}`
|
|
197
|
-
);
|
|
198
|
-
|
|
199
|
-
const LinearToRGBD = new FunctionNode( /* glsl */`
|
|
200
|
-
vec3 LinearToRGBD( in vec4 value, in float maxRange ) {
|
|
201
|
-
|
|
202
|
-
float maxRGB = max( value.x, max( value.g, value.b ) );
|
|
203
|
-
float D = max( maxRange / maxRGB, 1.0 );
|
|
204
|
-
D = clamp( floor( D ) / 255.0, 0.0, 1.0 );
|
|
205
|
-
return vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );
|
|
206
|
-
|
|
207
|
-
}`
|
|
208
|
-
);
|
|
209
|
-
|
|
210
125
|
return {
|
|
211
126
|
LinearToLinear: LinearToLinear,
|
|
212
|
-
GammaToLinear: GammaToLinear,
|
|
213
|
-
LinearToGamma: LinearToGamma,
|
|
214
127
|
sRGBToLinear: sRGBToLinear,
|
|
215
|
-
LinearTosRGB: LinearTosRGB
|
|
216
|
-
RGBEToLinear: RGBEToLinear,
|
|
217
|
-
LinearToRGBE: LinearToRGBE,
|
|
218
|
-
RGBMToLinear: RGBMToLinear,
|
|
219
|
-
LinearToRGBM: LinearToRGBM,
|
|
220
|
-
RGBDToLinear: RGBDToLinear,
|
|
221
|
-
LinearToRGBD: LinearToRGBD
|
|
128
|
+
LinearTosRGB: LinearTosRGB
|
|
222
129
|
};
|
|
223
130
|
|
|
224
131
|
} )();
|
|
225
132
|
|
|
226
133
|
ColorSpaceNode.LINEAR_TO_LINEAR = 'LinearToLinear';
|
|
227
134
|
|
|
228
|
-
ColorSpaceNode.GAMMA_TO_LINEAR = 'GammaToLinear';
|
|
229
|
-
ColorSpaceNode.LINEAR_TO_GAMMA = 'LinearToGamma';
|
|
230
|
-
|
|
231
135
|
ColorSpaceNode.SRGB_TO_LINEAR = 'sRGBToLinear';
|
|
232
136
|
ColorSpaceNode.LINEAR_TO_SRGB = 'LinearTosRGB';
|
|
233
137
|
|
|
234
|
-
ColorSpaceNode.RGBE_TO_LINEAR = 'RGBEToLinear';
|
|
235
|
-
ColorSpaceNode.LINEAR_TO_RGBE = 'LinearToRGBE';
|
|
236
|
-
|
|
237
|
-
ColorSpaceNode.RGBM_TO_LINEAR = 'RGBMToLinear';
|
|
238
|
-
ColorSpaceNode.LINEAR_TO_RGBM = 'LinearToRGBM';
|
|
239
|
-
|
|
240
|
-
ColorSpaceNode.RGBD_TO_LINEAR = 'RGBDToLinear';
|
|
241
|
-
ColorSpaceNode.LINEAR_TO_RGBD = 'LinearToRGBD';
|
|
242
|
-
|
|
243
138
|
ColorSpaceNode.getEncodingComponents = function ( encoding ) {
|
|
244
139
|
|
|
245
140
|
switch ( encoding ) {
|
|
@@ -248,16 +143,6 @@ ColorSpaceNode.getEncodingComponents = function ( encoding ) {
|
|
|
248
143
|
return [ 'Linear' ];
|
|
249
144
|
case sRGBEncoding:
|
|
250
145
|
return [ 'sRGB' ];
|
|
251
|
-
case RGBEEncoding:
|
|
252
|
-
return [ 'RGBE' ];
|
|
253
|
-
case RGBM7Encoding:
|
|
254
|
-
return [ 'RGBM', new FloatNode( 7.0 ).setReadonly( true ) ];
|
|
255
|
-
case RGBM16Encoding:
|
|
256
|
-
return [ 'RGBM', new FloatNode( 16.0 ).setReadonly( true ) ];
|
|
257
|
-
case RGBDEncoding:
|
|
258
|
-
return [ 'RGBD', new FloatNode( 256.0 ).setReadonly( true ) ];
|
|
259
|
-
case GammaEncoding:
|
|
260
|
-
return [ 'Gamma', new ExpressionNode( 'float( GAMMA_FACTOR )', 'f' ) ];
|
|
261
146
|
|
|
262
147
|
}
|
|
263
148
|
|
|
@@ -2,14 +2,12 @@ import {
|
|
|
2
2
|
AdditiveBlending,
|
|
3
3
|
Box2,
|
|
4
4
|
BufferGeometry,
|
|
5
|
-
ClampToEdgeWrapping,
|
|
6
5
|
Color,
|
|
7
|
-
|
|
6
|
+
FramebufferTexture,
|
|
8
7
|
InterleavedBuffer,
|
|
9
8
|
InterleavedBufferAttribute,
|
|
10
9
|
Mesh,
|
|
11
10
|
MeshBasicMaterial,
|
|
12
|
-
NearestFilter,
|
|
13
11
|
RGBFormat,
|
|
14
12
|
RawShaderMaterial,
|
|
15
13
|
Vector2,
|
|
@@ -34,17 +32,8 @@ class Lensflare extends Mesh {
|
|
|
34
32
|
|
|
35
33
|
// textures
|
|
36
34
|
|
|
37
|
-
const tempMap = new
|
|
38
|
-
|
|
39
|
-
tempMap.magFilter = NearestFilter;
|
|
40
|
-
tempMap.wrapS = ClampToEdgeWrapping;
|
|
41
|
-
tempMap.wrapT = ClampToEdgeWrapping;
|
|
42
|
-
|
|
43
|
-
const occlusionMap = new DataTexture( new Uint8Array( 16 * 16 * 3 ), 16, 16, RGBFormat );
|
|
44
|
-
occlusionMap.minFilter = NearestFilter;
|
|
45
|
-
occlusionMap.magFilter = NearestFilter;
|
|
46
|
-
occlusionMap.wrapS = ClampToEdgeWrapping;
|
|
47
|
-
occlusionMap.wrapT = ClampToEdgeWrapping;
|
|
35
|
+
const tempMap = new FramebufferTexture( 16, 16, RGBFormat );
|
|
36
|
+
const occlusionMap = new FramebufferTexture( 16, 16, RGBFormat );
|
|
48
37
|
|
|
49
38
|
// material
|
|
50
39
|
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
* https://www.researchgate.net/publication/220720443_A_Practical_Analytic_Model_for_Daylight
|
|
14
14
|
*
|
|
15
15
|
* First implemented by Simon Wallner
|
|
16
|
-
* http://
|
|
16
|
+
* http://simonwallner.at/project/atmospheric-scattering/
|
|
17
17
|
*
|
|
18
18
|
* Improved by Martin Upitis
|
|
19
19
|
* http://blenderartists.org/forum/showthread.php?245954-preethams-sky-impementation-HDR
|
|
@@ -18,8 +18,8 @@ import {
|
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
20
|
* Work based on :
|
|
21
|
-
*
|
|
22
|
-
*
|
|
21
|
+
* https://github.com/Slayvin: Flat mirror for three.js
|
|
22
|
+
* https://home.adelphi.edu/~stemkoski/ : An implementation of water shader based on the flat mirror
|
|
23
23
|
* http://29a.ch/ && http://29a.ch/slides/2012/webglwater/ : Water shader explanations in WebGL
|
|
24
24
|
*/
|
|
25
25
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Clock,
|
|
3
3
|
Color,
|
|
4
|
-
LinearEncoding,
|
|
5
4
|
Matrix4,
|
|
6
5
|
Mesh,
|
|
7
6
|
RepeatWrapping,
|
|
@@ -17,8 +16,8 @@ import { Refractor } from '../objects/Refractor.js';
|
|
|
17
16
|
|
|
18
17
|
/**
|
|
19
18
|
* References:
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* https://alex.vlachos.com/graphics/Vlachos-SIGGRAPH10-WaterFlow.pdf
|
|
20
|
+
* http://graphicsrunner.blogspot.de/2010/08/water-using-flow-maps.html
|
|
22
21
|
*
|
|
23
22
|
*/
|
|
24
23
|
|
|
@@ -41,7 +40,6 @@ class Water extends Mesh {
|
|
|
41
40
|
const reflectivity = options.reflectivity || 0.02;
|
|
42
41
|
const scale = options.scale || 1;
|
|
43
42
|
const shader = options.shader || Water.WaterShader;
|
|
44
|
-
const encoding = options.encoding !== undefined ? options.encoding : LinearEncoding;
|
|
45
43
|
|
|
46
44
|
const textureLoader = new TextureLoader();
|
|
47
45
|
|
|
@@ -73,15 +71,13 @@ class Water extends Mesh {
|
|
|
73
71
|
const reflector = new Reflector( geometry, {
|
|
74
72
|
textureWidth: textureWidth,
|
|
75
73
|
textureHeight: textureHeight,
|
|
76
|
-
clipBias: clipBias
|
|
77
|
-
encoding: encoding
|
|
74
|
+
clipBias: clipBias
|
|
78
75
|
} );
|
|
79
76
|
|
|
80
77
|
const refractor = new Refractor( geometry, {
|
|
81
78
|
textureWidth: textureWidth,
|
|
82
79
|
textureHeight: textureHeight,
|
|
83
|
-
clipBias: clipBias
|
|
84
|
-
encoding: encoding
|
|
80
|
+
clipBias: clipBias
|
|
85
81
|
} );
|
|
86
82
|
|
|
87
83
|
reflector.matrixAutoUpdate = false;
|
|
@@ -106,7 +106,9 @@ class GlitchPass extends Pass {
|
|
|
106
106
|
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
|
|
109
|
+
const texture = new DataTexture( data_arr, dt_size, dt_size, RGBFormat, FloatType );
|
|
110
|
+
texture.needsUpdate = true;
|
|
111
|
+
return texture;
|
|
110
112
|
|
|
111
113
|
}
|
|
112
114
|
|
|
@@ -413,6 +413,7 @@ class SSAOPass extends Pass {
|
|
|
413
413
|
this.noiseTexture = new DataTexture( data, width, height, RGBAFormat, FloatType );
|
|
414
414
|
this.noiseTexture.wrapS = RepeatWrapping;
|
|
415
415
|
this.noiseTexture.wrapT = RepeatWrapping;
|
|
416
|
+
this.noiseTexture.needsUpdate = true;
|
|
416
417
|
|
|
417
418
|
}
|
|
418
419
|
|
|
@@ -209,9 +209,9 @@ export const cond = ( ...params ) => {
|
|
|
209
209
|
|
|
210
210
|
export const vec2 = ( ...params ) => {
|
|
211
211
|
|
|
212
|
-
if ( params[0]?.isNode === true ) {
|
|
212
|
+
if ( params[ 0 ]?.isNode === true ) {
|
|
213
213
|
|
|
214
|
-
return ShaderNodeObject( new ConvertNode( params[0], 'vec2' ) );
|
|
214
|
+
return ShaderNodeObject( new ConvertNode( params[ 0 ], 'vec2' ) );
|
|
215
215
|
|
|
216
216
|
} else {
|
|
217
217
|
|
|
@@ -231,9 +231,9 @@ export const vec2 = ( ...params ) => {
|
|
|
231
231
|
|
|
232
232
|
export const vec3 = ( ...params ) => {
|
|
233
233
|
|
|
234
|
-
if ( params[0]?.isNode === true ) {
|
|
234
|
+
if ( params[ 0 ]?.isNode === true ) {
|
|
235
235
|
|
|
236
|
-
return ShaderNodeObject( new ConvertNode( params[0], 'vec3' ) );
|
|
236
|
+
return ShaderNodeObject( new ConvertNode( params[ 0 ], 'vec3' ) );
|
|
237
237
|
|
|
238
238
|
} else {
|
|
239
239
|
|
|
@@ -253,9 +253,9 @@ export const vec3 = ( ...params ) => {
|
|
|
253
253
|
|
|
254
254
|
export const vec4 = ( ...params ) => {
|
|
255
255
|
|
|
256
|
-
if ( params[0]?.isNode === true ) {
|
|
256
|
+
if ( params[ 0 ]?.isNode === true ) {
|
|
257
257
|
|
|
258
|
-
return ShaderNodeObject( new ConvertNode( params[0], 'vec4' ) );
|
|
258
|
+
return ShaderNodeObject( new ConvertNode( params[ 0 ], 'vec4' ) );
|
|
259
259
|
|
|
260
260
|
} else {
|
|
261
261
|
|
|
@@ -293,6 +293,7 @@ export const and = ShaderNodeProxy( OperatorNode, '&&' );
|
|
|
293
293
|
|
|
294
294
|
export const element = ShaderNodeProxy( ArrayElementNode );
|
|
295
295
|
|
|
296
|
+
export const normalGeometry = new NormalNode( NormalNode.GEOMETRY );
|
|
296
297
|
export const normalLocal = new NormalNode( NormalNode.LOCAL );
|
|
297
298
|
export const normalWorld = new NormalNode( NormalNode.WORLD );
|
|
298
299
|
export const normalView = new NormalNode( NormalNode.VIEW );
|