super-three 0.157.0 → 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 +1486 -842
- package/build/three.js +1486 -842
- package/build/three.min.js +1 -1
- package/build/three.module.js +1481 -843
- 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/WebGLMultiviewRenderTarget.js +35 -0
- package/src/renderers/WebGLRenderer.js +199 -45
- 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/WebGLBackground.js +1 -1
- package/src/renderers/webgl/WebGLMultiview.js +100 -0
- package/src/renderers/webgl/WebGLProgram.js +130 -50
- package/src/renderers/webgl/WebGLPrograms.js +8 -0
- package/src/renderers/webgl/WebGLState.js +25 -4
- package/src/renderers/webgl/WebGLTextures.js +197 -20
- package/src/renderers/webxr/WebXRManager.js +36 -12
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +0 -76
- package/examples/jsm/nodes/accessors/LineMaterialNode.js +0 -29
|
@@ -4,13 +4,12 @@ import { varying } from '../core/VaryingNode.js';
|
|
|
4
4
|
import { property } from '../core/PropertyNode.js';
|
|
5
5
|
import { attribute } from '../core/AttributeNode.js';
|
|
6
6
|
import { cameraProjectionMatrix } from '../accessors/CameraNode.js';
|
|
7
|
-
import { materialColor } from '../accessors/MaterialNode.js';
|
|
7
|
+
import { materialColor, materialLineScale, materialLineDashSize, materialLineGapSize, materialLineDashOffset, materialLineWidth } from '../accessors/MaterialNode.js';
|
|
8
8
|
import { modelViewMatrix } from '../accessors/ModelNode.js';
|
|
9
9
|
import { positionGeometry } from '../accessors/PositionNode.js';
|
|
10
|
-
import {
|
|
11
|
-
import { tslFn,
|
|
10
|
+
import { mix, smoothstep } from '../math/MathNode.js';
|
|
11
|
+
import { tslFn, float, vec2, vec3, vec4, If } from '../shadernode/ShaderNode.js';
|
|
12
12
|
import { uv } from '../accessors/UVNode.js';
|
|
13
|
-
import { materialLineScale, materialLineDashSize, materialLineGapSize, materialLineDashOffset, materialLineWidth } from '../accessors/LineMaterialNode.js';
|
|
14
13
|
import { viewport } from '../display/ViewportNode.js';
|
|
15
14
|
import { dashSize, gapSize } from '../core/PropertyNode.js';
|
|
16
15
|
|
|
@@ -69,9 +68,9 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
69
68
|
|
|
70
69
|
} );
|
|
71
70
|
|
|
72
|
-
this.vertexNode =
|
|
71
|
+
this.vertexNode = tslFn( () => {
|
|
73
72
|
|
|
74
|
-
|
|
73
|
+
varying( vec2(), 'vUv' ).assign( uv() ); // @TODO: Analyze other way to do this
|
|
75
74
|
|
|
76
75
|
const instanceStart = attribute( 'instanceStart' );
|
|
77
76
|
const instanceEnd = attribute( 'instanceEnd' );
|
|
@@ -81,14 +80,13 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
81
80
|
const start = property( 'vec4', 'start' );
|
|
82
81
|
const end = property( 'vec4', 'end' );
|
|
83
82
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
83
|
+
start.assign( modelViewMatrix.mul( vec4( instanceStart, 1.0 ) ) ); // force assignment into correct place in flow
|
|
84
|
+
end.assign( modelViewMatrix.mul( vec4( instanceEnd, 1.0 ) ) );
|
|
87
85
|
|
|
88
86
|
if ( useWorldUnits ) {
|
|
89
87
|
|
|
90
|
-
|
|
91
|
-
|
|
88
|
+
varying( vec3(), 'worldStart' ).assign( start.xyz );
|
|
89
|
+
varying( vec3(), 'worldEnd' ).assign( end.xyz );
|
|
92
90
|
|
|
93
91
|
}
|
|
94
92
|
|
|
@@ -101,15 +99,15 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
101
99
|
|
|
102
100
|
const perspective = cameraProjectionMatrix.element( 2 ).element( 3 ).equal( -1.0 ); // 4th entry in the 3rd column
|
|
103
101
|
|
|
104
|
-
|
|
102
|
+
If( perspective, () => {
|
|
105
103
|
|
|
106
|
-
|
|
104
|
+
If( start.z.lessThan( 0.0 ).and( end.z.greaterThan( 0.0 ) ), () => {
|
|
107
105
|
|
|
108
|
-
|
|
106
|
+
end.assign( trimSegment( { start: start, end: end } ) );
|
|
109
107
|
|
|
110
|
-
} ).elseif( end.z.lessThan( 0.0 ).and( start.z.greaterThanEqual( 0.0 ) ), (
|
|
108
|
+
} ).elseif( end.z.lessThan( 0.0 ).and( start.z.greaterThanEqual( 0.0 ) ), () => {
|
|
111
109
|
|
|
112
|
-
|
|
110
|
+
start.assign( trimSegment( { start: end, end: start } ) );
|
|
113
111
|
|
|
114
112
|
} );
|
|
115
113
|
|
|
@@ -124,11 +122,11 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
124
122
|
const ndcEnd = clipEnd.xyz.div( clipEnd.w );
|
|
125
123
|
|
|
126
124
|
// direction
|
|
127
|
-
const dir = ndcEnd.xy.sub( ndcStart.xy );
|
|
125
|
+
const dir = ndcEnd.xy.sub( ndcStart.xy ).temp();
|
|
128
126
|
|
|
129
127
|
// account for clip-space aspect ratio
|
|
130
|
-
|
|
131
|
-
|
|
128
|
+
dir.x.assign( dir.x.mul( aspect ) );
|
|
129
|
+
dir.assign( dir.normalize() );
|
|
132
130
|
|
|
133
131
|
const clip = temp( vec4() );
|
|
134
132
|
|
|
@@ -144,7 +142,7 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
144
142
|
);
|
|
145
143
|
|
|
146
144
|
// sign flip
|
|
147
|
-
|
|
145
|
+
offset.assign( positionGeometry.x.lessThan( 0.0 ).cond( offset.negate(), offset ) );
|
|
148
146
|
|
|
149
147
|
const forwardOffset = worldDir.dot( vec3( 0.0, 0.0, 1.0 ) );
|
|
150
148
|
|
|
@@ -153,86 +151,86 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
153
151
|
if ( ! useDash ) {
|
|
154
152
|
|
|
155
153
|
// extend the line bounds to encompass endcaps
|
|
156
|
-
|
|
157
|
-
|
|
154
|
+
start.assign( start.sub( vec4( worldDir.mul( materialLineWidth ).mul( 0.5 ), 0 ) ) );
|
|
155
|
+
end.assign( end.add( vec4( worldDir.mul( materialLineWidth ).mul( 0.5 ), 0 ) ) );
|
|
158
156
|
|
|
159
157
|
// shift the position of the quad so it hugs the forward edge of the line
|
|
160
|
-
|
|
161
|
-
|
|
158
|
+
offset.assign( offset.sub( vec3( dir.mul( forwardOffset ), 0 ) ) );
|
|
159
|
+
offset.z.assign( offset.z.add( 0.5 ) );
|
|
162
160
|
|
|
163
161
|
}
|
|
164
162
|
|
|
165
163
|
// endcaps
|
|
166
164
|
|
|
167
|
-
|
|
165
|
+
If( positionGeometry.y.greaterThan( 1.0 ).or( positionGeometry.y.lessThan( 0.0 ) ), () => {
|
|
168
166
|
|
|
169
|
-
|
|
167
|
+
offset.assign( offset.add( vec3( dir.mul( 2.0 ).mul( forwardOffset ), 0 ) ) );
|
|
170
168
|
|
|
171
169
|
} );
|
|
172
170
|
|
|
173
171
|
// adjust for linewidth
|
|
174
|
-
|
|
172
|
+
offset.assign( offset.mul( materialLineWidth ).mul( 0.5 ) );
|
|
175
173
|
|
|
176
174
|
// set the world position
|
|
177
175
|
|
|
178
176
|
const worldPos = varying( vec4(), 'worldPos' );
|
|
179
177
|
|
|
180
|
-
|
|
181
|
-
|
|
178
|
+
worldPos.assign( positionGeometry.y.lessThan( 0.5 ).cond( start, end ) );
|
|
179
|
+
worldPos.assign( worldPos.add( vec4( offset, 0 ) ) );
|
|
182
180
|
|
|
183
181
|
// project the worldpos
|
|
184
|
-
|
|
182
|
+
clip.assign( cameraProjectionMatrix.mul( worldPos ) );
|
|
185
183
|
|
|
186
184
|
// shift the depth of the projected points so the line
|
|
187
185
|
// segments overlap neatly
|
|
188
186
|
const clipPose = temp( vec3() );
|
|
189
187
|
|
|
190
|
-
|
|
191
|
-
|
|
188
|
+
clipPose.assign( positionGeometry.y.lessThan( 0.5 ).cond( ndcStart, ndcEnd ) );
|
|
189
|
+
clip.z.assign( clipPose.z.mul( clip.w ) );
|
|
192
190
|
|
|
193
191
|
} else {
|
|
194
192
|
|
|
195
193
|
const offset = property( 'vec2', 'offset' );
|
|
196
194
|
|
|
197
|
-
|
|
195
|
+
offset.assign( vec2( dir.y, dir.x.negate() ) );
|
|
198
196
|
|
|
199
197
|
// undo aspect ratio adjustment
|
|
200
|
-
|
|
201
|
-
|
|
198
|
+
dir.x.assign( dir.x.div( aspect ) );
|
|
199
|
+
offset.x.assign( offset.x.div( aspect ) );
|
|
202
200
|
|
|
203
201
|
// sign flip
|
|
204
|
-
|
|
202
|
+
offset.assign( positionGeometry.x.lessThan( 0.0 ).cond( offset.negate(), offset ) );
|
|
205
203
|
|
|
206
204
|
// endcaps
|
|
207
|
-
|
|
205
|
+
If( positionGeometry.y.lessThan( 0.0 ), () => {
|
|
208
206
|
|
|
209
|
-
|
|
207
|
+
offset.assign( offset.sub( dir ) );
|
|
210
208
|
|
|
211
|
-
} ).elseif( positionGeometry.y.greaterThan( 1.0 ), (
|
|
209
|
+
} ).elseif( positionGeometry.y.greaterThan( 1.0 ), () => {
|
|
212
210
|
|
|
213
|
-
|
|
211
|
+
offset.assign( offset.add( dir ) );
|
|
214
212
|
|
|
215
213
|
} );
|
|
216
214
|
|
|
217
215
|
// adjust for linewidth
|
|
218
|
-
|
|
216
|
+
offset.assign( offset.mul( materialLineWidth ) );
|
|
219
217
|
|
|
220
218
|
// adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...
|
|
221
|
-
|
|
219
|
+
offset.assign( offset.div( viewport.w ) );
|
|
222
220
|
|
|
223
221
|
// select end
|
|
224
|
-
|
|
222
|
+
clip.assign( positionGeometry.y.lessThan( 0.5 ).cond( clipStart, clipEnd ) );
|
|
225
223
|
|
|
226
224
|
// back to clip space
|
|
227
|
-
|
|
225
|
+
offset.assign( offset.mul( clip.w ) );
|
|
228
226
|
|
|
229
|
-
|
|
227
|
+
clip.assign( clip.add( vec4( offset, 0, 0 ) ) );
|
|
230
228
|
|
|
231
229
|
}
|
|
232
230
|
|
|
233
231
|
return clip;
|
|
234
232
|
|
|
235
|
-
} );
|
|
233
|
+
} )();
|
|
236
234
|
|
|
237
235
|
const closestLineToLine = tslFn( ( { p1, p2, p3, p4 } ) => {
|
|
238
236
|
|
|
@@ -241,23 +239,23 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
241
239
|
|
|
242
240
|
const p21 = p2.sub( p1 );
|
|
243
241
|
|
|
244
|
-
const d1343 = dot(
|
|
245
|
-
const d4321 = dot(
|
|
246
|
-
const d1321 = dot(
|
|
247
|
-
const d4343 = dot( p43
|
|
248
|
-
const d2121 = dot( p21
|
|
242
|
+
const d1343 = p13.dot( p43 );
|
|
243
|
+
const d4321 = p43.dot( p21 );
|
|
244
|
+
const d1321 = p13.dot( p21 );
|
|
245
|
+
const d4343 = p43.dot( p43 );
|
|
246
|
+
const d2121 = p21.dot( p21 );
|
|
249
247
|
|
|
250
248
|
const denom = d2121.mul( d4343 ).sub( d4321.mul( d4321 ) );
|
|
251
249
|
const numer = d1343.mul( d4321 ).sub( d1321.mul( d4343 ) );
|
|
252
250
|
|
|
253
|
-
const mua =
|
|
254
|
-
const mub =
|
|
251
|
+
const mua = numer.div( denom ).clamp();
|
|
252
|
+
const mub = d1343.add( d4321.mul( mua ) ).div( d4343 ).clamp();
|
|
255
253
|
|
|
256
254
|
return vec2( mua, mub );
|
|
257
255
|
|
|
258
256
|
} );
|
|
259
257
|
|
|
260
|
-
this.colorNode =
|
|
258
|
+
this.colorNode = tslFn( () => {
|
|
261
259
|
|
|
262
260
|
const vUv = varying( vec2(), 'vUv' );
|
|
263
261
|
|
|
@@ -268,8 +266,8 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
268
266
|
const dashSizeNode = this.dashSizeNode ? float( this.dashSizeNode ) : materialLineDashSize;
|
|
269
267
|
const gapSizeNode = this.dashSizeNode ? float( this.dashGapNode ) : materialLineGapSize;
|
|
270
268
|
|
|
271
|
-
|
|
272
|
-
|
|
269
|
+
dashSize.assign( dashSizeNode );
|
|
270
|
+
gapSize.assign( gapSizeNode );
|
|
273
271
|
|
|
274
272
|
const instanceDistanceStart = attribute( 'instanceDistanceStart' );
|
|
275
273
|
const instanceDistanceEnd = attribute( 'instanceDistanceEnd' );
|
|
@@ -279,20 +277,19 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
279
277
|
const vLineDistance = varying( lineDistance.add( materialLineDashOffset ) );
|
|
280
278
|
const vLineDistanceOffset = offsetNode ? vLineDistance.add( offsetNode ) : vLineDistance;
|
|
281
279
|
|
|
282
|
-
|
|
283
|
-
|
|
280
|
+
vUv.y.lessThan( - 1.0 ).or( vUv.y.greaterThan( 1.0 ) ).discard(); // discard endcaps
|
|
281
|
+
vLineDistanceOffset.mod( dashSize.add( gapSize ) ).greaterThan( dashSize ).discard(); // todo - FIX
|
|
284
282
|
|
|
285
283
|
}
|
|
286
284
|
|
|
287
285
|
// force assignment into correct place in flow
|
|
288
286
|
const alpha = property( 'float', 'alpha' );
|
|
289
|
-
|
|
287
|
+
alpha.assign( 1 );
|
|
290
288
|
|
|
291
289
|
if ( useWorldUnits ) {
|
|
292
290
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
let worldEnd = varying( vec3(), 'worldEnd' );
|
|
291
|
+
const worldStart = varying( vec3(), 'worldStart' );
|
|
292
|
+
const worldEnd = varying( vec3(), 'worldEnd' );
|
|
296
293
|
|
|
297
294
|
// Find the closest points on the view ray and the line segment
|
|
298
295
|
const rayEnd = varying( vec4(), 'worldPos' ).xyz.normalize().mul( 1e5 );
|
|
@@ -310,11 +307,11 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
310
307
|
if ( useAlphaToCoverage ) {
|
|
311
308
|
|
|
312
309
|
const dnorm = norm.fwidth();
|
|
313
|
-
|
|
310
|
+
alpha.assign( smoothstep( dnorm.negate().add( 0.5 ), dnorm.add( 0.5 ), norm ).oneMinus() );
|
|
314
311
|
|
|
315
312
|
} else {
|
|
316
313
|
|
|
317
|
-
|
|
314
|
+
norm.greaterThan( 0.5 ).discard();
|
|
318
315
|
|
|
319
316
|
}
|
|
320
317
|
|
|
@@ -333,23 +330,23 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
333
330
|
|
|
334
331
|
// force assignment out of following 'if' statement - to avoid uniform control flow errors
|
|
335
332
|
const dlen = property( 'float', 'dlen' );
|
|
336
|
-
|
|
333
|
+
dlen.assign( len2.fwidth() );
|
|
337
334
|
|
|
338
|
-
|
|
335
|
+
If( vUv.y.abs().greaterThan( 1.0 ), () => {
|
|
339
336
|
|
|
340
|
-
|
|
337
|
+
alpha.assign( smoothstep( dlen.oneMinus(), dlen.add( 1 ), len2 ).oneMinus() );
|
|
341
338
|
|
|
342
339
|
} );
|
|
343
340
|
|
|
344
341
|
} else {
|
|
345
342
|
|
|
346
|
-
|
|
343
|
+
If( vUv.y.abs().greaterThan( 1.0 ), () => {
|
|
347
344
|
|
|
348
345
|
const a = vUv.x;
|
|
349
346
|
const b = vUv.y.greaterThan( 0.0 ).cond( vUv.y.sub( 1.0 ), vUv.y.add( 1.0 ) );
|
|
350
347
|
const len2 = a.mul( a ).add( b.mul( b ) );
|
|
351
348
|
|
|
352
|
-
|
|
349
|
+
len2.greaterThan( 1.0 ).discard();
|
|
353
350
|
|
|
354
351
|
} );
|
|
355
352
|
|
|
@@ -370,7 +367,9 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
370
367
|
const instanceColorStart = attribute( 'instanceColorStart' );
|
|
371
368
|
const instanceColorEnd = attribute( 'instanceColorEnd' );
|
|
372
369
|
|
|
373
|
-
|
|
370
|
+
const instanceColor = positionGeometry.y.lessThan( 0.5 ).cond( instanceColorStart, instanceColorEnd );
|
|
371
|
+
|
|
372
|
+
lineColorNode = instanceColor.mul( materialColor );
|
|
374
373
|
|
|
375
374
|
} else {
|
|
376
375
|
|
|
@@ -382,7 +381,7 @@ class Line2NodeMaterial extends NodeMaterial {
|
|
|
382
381
|
|
|
383
382
|
return vec4( lineColorNode, alpha );
|
|
384
383
|
|
|
385
|
-
} );
|
|
384
|
+
} )();
|
|
386
385
|
|
|
387
386
|
this.needsUpdate = true;
|
|
388
387
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import NodeMaterial, { addNodeMaterial } from './NodeMaterial.js';
|
|
2
2
|
import { attribute } from '../core/AttributeNode.js';
|
|
3
3
|
import { varying } from '../core/VaryingNode.js';
|
|
4
|
-
import { materialLineDashSize, materialLineGapSize, materialLineScale } from '../accessors/
|
|
4
|
+
import { materialLineDashSize, materialLineGapSize, materialLineScale } from '../accessors/MaterialNode.js';
|
|
5
5
|
import { dashSize, gapSize } from '../core/PropertyNode.js';
|
|
6
6
|
import { float } from '../shadernode/ShaderNode.js';
|
|
7
7
|
import { LineDashedMaterial } from 'three';
|
|
@@ -30,20 +30,20 @@ class LineDashedNodeMaterial extends NodeMaterial {
|
|
|
30
30
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
setupVariants(
|
|
33
|
+
setupVariants() {
|
|
34
34
|
|
|
35
35
|
const offsetNode = this.offsetNode;
|
|
36
36
|
const dashScaleNode = this.dashScaleNode ? float( this.dashScaleNode ) : materialLineScale;
|
|
37
37
|
const dashSizeNode = this.dashSizeNode ? float( this.dashSizeNode ) : materialLineDashSize;
|
|
38
38
|
const gapSizeNode = this.dashSizeNode ? float( this.dashGapNode ) : materialLineGapSize;
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
dashSize.assign( dashSizeNode );
|
|
41
|
+
gapSize.assign( gapSizeNode );
|
|
42
42
|
|
|
43
43
|
const vLineDistance = varying( attribute( 'lineDistance' ).mul( dashScaleNode ) );
|
|
44
44
|
const vLineDistanceOffset = offsetNode ? vLineDistance.add( offsetNode ) : vLineDistance;
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
vLineDistanceOffset.mod( dashSize.add( gapSize ) ).greaterThan( dashSize ).discard();
|
|
47
47
|
|
|
48
48
|
}
|
|
49
49
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// @TODO: We can simplify "export { default as SomeNode, other, exports } from '...'" to just "export * from '...'" if we will use only named exports
|
|
2
2
|
|
|
3
3
|
export { default as NodeMaterial, addNodeMaterial, createNodeMaterialFromType } from './NodeMaterial.js';
|
|
4
|
+
export { default as InstancedPointsNodeMaterial } from './InstancedPointsNodeMaterial.js';
|
|
4
5
|
export { default as LineBasicNodeMaterial } from './LineBasicNodeMaterial.js';
|
|
5
6
|
export { default as LineDashedNodeMaterial } from './LineDashedNodeMaterial.js';
|
|
6
7
|
export { default as Line2NodeMaterial } from './Line2NodeMaterial.js';
|
|
@@ -25,11 +25,11 @@ class MeshNormalNodeMaterial extends NodeMaterial {
|
|
|
25
25
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
setupDiffuseColor(
|
|
28
|
+
setupDiffuseColor() {
|
|
29
29
|
|
|
30
30
|
const opacityNode = this.opacityNode ? float( this.opacityNode ) : materialOpacity;
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
diffuseColor.assign( vec4( directionToColor( transformedNormalView ), opacityNode ) );
|
|
33
33
|
|
|
34
34
|
}
|
|
35
35
|
|
|
@@ -33,19 +33,19 @@ class MeshPhongNodeMaterial extends NodeMaterial {
|
|
|
33
33
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
setupVariants(
|
|
36
|
+
setupVariants() {
|
|
37
37
|
|
|
38
38
|
// SHININESS
|
|
39
39
|
|
|
40
40
|
const shininessNode = ( this.shininessNode ? float( this.shininessNode ) : materialShininess ).max( 1e-4 ); // to prevent pow( 0.0, 0.0 )
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
shininess.assign( shininessNode );
|
|
43
43
|
|
|
44
44
|
// SPECULAR COLOR
|
|
45
45
|
|
|
46
46
|
const specularNode = this.specularNode || materialSpecularColor;
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
specularColor.assign( specularNode );
|
|
49
49
|
|
|
50
50
|
}
|
|
51
51
|
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { addNodeMaterial } from './NodeMaterial.js';
|
|
2
2
|
import { transformedClearcoatNormalView } from '../accessors/NormalNode.js';
|
|
3
3
|
import { clearcoat, clearcoatRoughness, sheen, sheenRoughness, iridescence, iridescenceIOR, iridescenceThickness } from '../core/PropertyNode.js';
|
|
4
|
-
import { materialClearcoatNormal } from '../accessors/
|
|
5
|
-
import { materialClearcoat, materialClearcoatRoughness, materialSheen, materialSheenRoughness, materialIridescence, materialIridescenceIOR, materialIridescenceThickness } from '../accessors/MaterialNode.js';
|
|
4
|
+
import { materialClearcoat, materialClearcoatRoughness, materialClearcoatNormal, materialSheen, materialSheenRoughness, materialIridescence, materialIridescenceIOR, materialIridescenceThickness } from '../accessors/MaterialNode.js';
|
|
6
5
|
import { float, vec3 } from '../shadernode/ShaderNode.js';
|
|
7
6
|
import PhysicalLightingModel from '../functions/PhysicalLightingModel.js';
|
|
8
7
|
import MeshStandardNodeMaterial from './MeshStandardNodeMaterial.js';
|
|
@@ -44,9 +43,27 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
|
44
43
|
|
|
45
44
|
}
|
|
46
45
|
|
|
46
|
+
get useClearcoat() {
|
|
47
|
+
|
|
48
|
+
return this.clearcoat > 0 || this.clearcoatNode !== null;
|
|
49
|
+
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
get useIridescence() {
|
|
53
|
+
|
|
54
|
+
return this.iridescence > 0 || this.iridescenceNode !== null;
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
get useSheen() {
|
|
59
|
+
|
|
60
|
+
return this.sheen > 0 || this.sheenNode !== null;
|
|
61
|
+
|
|
62
|
+
}
|
|
63
|
+
|
|
47
64
|
setupLightingModel( /*builder*/ ) {
|
|
48
65
|
|
|
49
|
-
return new PhysicalLightingModel(
|
|
66
|
+
return new PhysicalLightingModel( this.useClearcoat, this.useSheen, this.useIridescence );
|
|
50
67
|
|
|
51
68
|
}
|
|
52
69
|
|
|
@@ -54,33 +71,43 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
|
54
71
|
|
|
55
72
|
super.setupVariants( builder );
|
|
56
73
|
|
|
57
|
-
const { stack } = builder;
|
|
58
|
-
|
|
59
74
|
// CLEARCOAT
|
|
60
75
|
|
|
61
|
-
|
|
62
|
-
|
|
76
|
+
if ( this.useClearcoat ) {
|
|
77
|
+
|
|
78
|
+
const clearcoatNode = this.clearcoatNode ? float( this.clearcoatNode ) : materialClearcoat;
|
|
79
|
+
const clearcoatRoughnessNode = this.clearcoatRoughnessNode ? float( this.clearcoatRoughnessNode ) : materialClearcoatRoughness;
|
|
80
|
+
|
|
81
|
+
clearcoat.assign( clearcoatNode );
|
|
82
|
+
clearcoatRoughness.assign( clearcoatRoughnessNode );
|
|
63
83
|
|
|
64
|
-
|
|
65
|
-
stack.assign( clearcoatRoughness, clearcoatRoughnessNode );
|
|
84
|
+
}
|
|
66
85
|
|
|
67
86
|
// SHEEN
|
|
68
87
|
|
|
69
|
-
|
|
70
|
-
const sheenRoughnessNode = this.sheenRoughnessNode ? float( this.sheenRoughnessNode ) : materialSheenRoughness;
|
|
88
|
+
if ( this.useSheen ) {
|
|
71
89
|
|
|
72
|
-
|
|
73
|
-
|
|
90
|
+
const sheenNode = this.sheenNode ? vec3( this.sheenNode ) : materialSheen;
|
|
91
|
+
const sheenRoughnessNode = this.sheenRoughnessNode ? float( this.sheenRoughnessNode ) : materialSheenRoughness;
|
|
92
|
+
|
|
93
|
+
sheen.assign( sheenNode );
|
|
94
|
+
sheenRoughness.assign( sheenRoughnessNode );
|
|
95
|
+
|
|
96
|
+
}
|
|
74
97
|
|
|
75
98
|
// IRIDESCENCE
|
|
76
99
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
100
|
+
if ( this.useIridescence ) {
|
|
101
|
+
|
|
102
|
+
const iridescenceNode = this.iridescenceNode ? float( this.iridescenceNode ) : materialIridescence;
|
|
103
|
+
const iridescenceIORNode = this.iridescenceIORNode ? float( this.iridescenceIORNode ) : materialIridescenceIOR;
|
|
104
|
+
const iridescenceThicknessNode = this.iridescenceThicknessNode ? float( this.iridescenceThicknessNode ) : materialIridescenceThickness;
|
|
105
|
+
|
|
106
|
+
iridescence.assign( iridescenceNode );
|
|
107
|
+
iridescenceIOR.assign( iridescenceIORNode );
|
|
108
|
+
iridescenceThickness.assign( iridescenceThicknessNode );
|
|
80
109
|
|
|
81
|
-
|
|
82
|
-
stack.assign( iridescenceIOR, iridescenceIORNode );
|
|
83
|
-
stack.assign( iridescenceThickness, iridescenceThicknessNode );
|
|
110
|
+
}
|
|
84
111
|
|
|
85
112
|
}
|
|
86
113
|
|
|
@@ -92,7 +119,7 @@ class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
|
92
119
|
|
|
93
120
|
const clearcoatNormalNode = this.clearcoatNormalNode ? vec3( this.clearcoatNormalNode ) : materialClearcoatNormal;
|
|
94
121
|
|
|
95
|
-
|
|
122
|
+
transformedClearcoatNormalView.assign( clearcoatNormalNode );
|
|
96
123
|
|
|
97
124
|
}
|
|
98
125
|
|
|
@@ -31,34 +31,34 @@ class MeshStandardNodeMaterial extends NodeMaterial {
|
|
|
31
31
|
|
|
32
32
|
setupLightingModel( /*builder*/ ) {
|
|
33
33
|
|
|
34
|
-
return new PhysicalLightingModel(
|
|
34
|
+
return new PhysicalLightingModel();
|
|
35
35
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
setupVariants(
|
|
38
|
+
setupVariants() {
|
|
39
39
|
|
|
40
40
|
// METALNESS
|
|
41
41
|
|
|
42
42
|
const metalnessNode = this.metalnessNode ? float( this.metalnessNode ) : materialMetalness;
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
metalness.assign( metalnessNode );
|
|
45
45
|
|
|
46
46
|
// ROUGHNESS
|
|
47
47
|
|
|
48
48
|
let roughnessNode = this.roughnessNode ? float( this.roughnessNode ) : materialRoughness;
|
|
49
49
|
roughnessNode = getRoughness( { roughness: roughnessNode } );
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
roughness.assign( roughnessNode );
|
|
52
52
|
|
|
53
53
|
// SPECULAR COLOR
|
|
54
54
|
|
|
55
55
|
const specularColorNode = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessNode );
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
specularColor.assign( specularColorNode );
|
|
58
58
|
|
|
59
59
|
// DIFFUSE COLOR
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
diffuseColor.assign( vec4( diffuseColor.rgb.mul( metalnessNode.oneMinus() ), diffuseColor.a ) );
|
|
62
62
|
|
|
63
63
|
}
|
|
64
64
|
|