super-three 0.156.0 → 0.157.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +753 -277
- package/build/three.js +753 -277
- package/build/three.min.js +2 -2
- package/build/three.module.js +750 -276
- package/build/three.module.min.js +1 -1
- package/examples/jsm/capabilities/WebGL.js +17 -0
- package/examples/jsm/controls/DragControls.js +3 -2
- package/examples/jsm/csm/CSMShader.js +25 -21
- package/examples/jsm/exporters/EXRExporter.js +102 -24
- package/examples/jsm/exporters/GLTFExporter.js +1 -1
- package/examples/jsm/libs/rhino3dm/rhino3dm.js +8726 -4
- package/examples/jsm/libs/rhino3dm/rhino3dm.module.js +8737 -4
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lights/LightProbeGenerator.js +37 -3
- package/examples/jsm/lines/LineMaterial.js +90 -156
- package/examples/jsm/loaders/3DMLoader.js +378 -104
- package/examples/jsm/loaders/GLTFLoader.js +1 -1
- package/examples/jsm/loaders/LDrawLoader.js +22 -16
- package/examples/jsm/loaders/RGBELoader.js +1 -1
- package/examples/jsm/loaders/USDZLoader.js +215 -12
- package/examples/jsm/materials/MeshGouraudMaterial.js +22 -18
- package/examples/jsm/nodes/Nodes.js +5 -1
- package/examples/jsm/nodes/accessors/BitangentNode.js +1 -1
- package/examples/jsm/nodes/accessors/BufferAttributeNode.js +2 -2
- package/examples/jsm/nodes/accessors/BufferNode.js +1 -1
- package/examples/jsm/nodes/accessors/CameraNode.js +1 -1
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +2 -2
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +6 -5
- package/examples/jsm/nodes/accessors/InstanceNode.js +2 -2
- package/examples/jsm/nodes/accessors/LineMaterialNode.js +7 -9
- package/examples/jsm/nodes/accessors/MaterialNode.js +34 -46
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +9 -9
- package/examples/jsm/nodes/accessors/ModelNode.js +1 -1
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +5 -4
- package/examples/jsm/nodes/accessors/MorphNode.js +4 -4
- package/examples/jsm/nodes/accessors/NormalNode.js +1 -1
- package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
- package/examples/jsm/nodes/accessors/PointUVNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +1 -1
- package/examples/jsm/nodes/accessors/ReferenceNode.js +13 -7
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +2 -2
- package/examples/jsm/nodes/accessors/SceneNode.js +2 -2
- package/examples/jsm/nodes/accessors/SkinningNode.js +2 -2
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +1 -1
- package/examples/jsm/nodes/accessors/TangentNode.js +1 -1
- package/examples/jsm/nodes/accessors/TextureBicubicNode.js +2 -2
- package/examples/jsm/nodes/accessors/TextureNode.js +12 -6
- package/examples/jsm/nodes/accessors/TextureSizeNode.js +2 -2
- package/examples/jsm/nodes/accessors/TextureStoreNode.js +1 -1
- package/examples/jsm/nodes/accessors/UVNode.js +1 -1
- package/examples/jsm/nodes/accessors/UserDataNode.js +2 -2
- package/examples/jsm/nodes/code/CodeNode.js +1 -1
- package/examples/jsm/nodes/code/ExpressionNode.js +1 -1
- package/examples/jsm/nodes/code/FunctionCallNode.js +1 -1
- package/examples/jsm/nodes/code/FunctionNode.js +18 -7
- package/examples/jsm/nodes/code/ScriptableNode.js +2 -2
- package/examples/jsm/nodes/code/ScriptableValueNode.js +2 -2
- package/examples/jsm/nodes/core/ArrayUniformNode.js +1 -1
- package/examples/jsm/nodes/core/AttributeNode.js +1 -1
- package/examples/jsm/nodes/core/BypassNode.js +1 -1
- package/examples/jsm/nodes/core/CacheNode.js +1 -1
- package/examples/jsm/nodes/core/ConstNode.js +1 -1
- package/examples/jsm/nodes/core/ContextNode.js +2 -2
- package/examples/jsm/nodes/core/IndexNode.js +1 -1
- package/examples/jsm/nodes/core/InputNode.js +1 -1
- package/examples/jsm/nodes/core/Node.js +28 -13
- package/examples/jsm/nodes/core/NodeBuilder.js +3 -17
- package/examples/jsm/nodes/core/NodeFrame.js +37 -14
- package/examples/jsm/nodes/core/OutputStructNode.js +8 -4
- package/examples/jsm/nodes/core/PropertyNode.js +3 -3
- package/examples/jsm/nodes/core/StackNode.js +1 -1
- package/examples/jsm/nodes/core/StructTypeNode.js +1 -1
- package/examples/jsm/nodes/core/TempNode.js +1 -1
- package/examples/jsm/nodes/core/UniformNode.js +3 -1
- package/examples/jsm/nodes/core/VarNode.js +1 -1
- package/examples/jsm/nodes/core/VaryingNode.js +1 -1
- package/examples/jsm/nodes/core/constants.js +1 -1
- package/examples/jsm/nodes/display/BlendModeNode.js +2 -2
- package/examples/jsm/nodes/display/BumpMapNode.js +2 -2
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +2 -2
- package/examples/jsm/nodes/display/ColorSpaceNode.js +2 -2
- package/examples/jsm/nodes/display/FrontFacingNode.js +1 -1
- package/examples/jsm/nodes/display/NormalMapNode.js +2 -2
- package/examples/jsm/nodes/display/PosterizeNode.js +2 -2
- package/examples/jsm/nodes/display/ToneMappingNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportDepthNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +1 -1
- package/examples/jsm/nodes/display/ViewportNode.js +2 -2
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +1 -1
- package/examples/jsm/nodes/display/ViewportTextureNode.js +1 -1
- package/examples/jsm/nodes/fog/FogExp2Node.js +2 -2
- package/examples/jsm/nodes/fog/FogNode.js +2 -2
- package/examples/jsm/nodes/fog/FogRangeNode.js +2 -2
- package/examples/jsm/nodes/geometry/RangeNode.js +2 -2
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
- package/examples/jsm/nodes/lighting/AONode.js +2 -2
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +3 -3
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +4 -4
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +4 -4
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +2 -2
- package/examples/jsm/nodes/lighting/HemisphereLightNode.js +3 -3
- package/examples/jsm/nodes/lighting/IESSpotLightNode.js +2 -2
- package/examples/jsm/nodes/lighting/LightNode.js +2 -2
- package/examples/jsm/nodes/lighting/LightingContextNode.js +3 -3
- package/examples/jsm/nodes/lighting/LightingNode.js +1 -1
- package/examples/jsm/nodes/lighting/LightsNode.js +4 -4
- package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
- package/examples/jsm/nodes/lighting/SpotLightNode.js +4 -4
- package/examples/jsm/nodes/materials/Line2NodeMaterial.js +449 -0
- package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/LineDashedNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/Materials.js +1 -0
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/MeshLambertNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +6 -6
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +3 -3
- package/examples/jsm/nodes/materials/NodeMaterial.js +27 -26
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +2 -2
- package/examples/jsm/nodes/math/CondNode.js +1 -1
- package/examples/jsm/nodes/math/HashNode.js +8 -9
- package/examples/jsm/nodes/math/MathNode.js +2 -2
- package/examples/jsm/nodes/math/OperatorNode.js +1 -1
- package/examples/jsm/nodes/procedural/CheckerNode.js +3 -3
- package/examples/jsm/nodes/shadernode/ShaderNode.js +81 -28
- package/examples/jsm/nodes/utils/ArrayElementNode.js +1 -1
- package/examples/jsm/nodes/utils/ConvertNode.js +1 -1
- package/examples/jsm/nodes/utils/DiscardNode.js +1 -1
- package/examples/jsm/nodes/utils/EquirectUVNode.js +2 -2
- package/examples/jsm/nodes/utils/JoinNode.js +1 -1
- package/examples/jsm/nodes/utils/LoopNode.js +11 -11
- package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -2
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
- package/examples/jsm/nodes/utils/OscNode.js +2 -2
- package/examples/jsm/nodes/utils/PackingNode.js +2 -2
- package/examples/jsm/nodes/utils/RemapNode.js +2 -2
- package/examples/jsm/nodes/utils/RotateUVNode.js +2 -2
- package/examples/jsm/nodes/utils/SetNode.js +62 -0
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +2 -2
- package/examples/jsm/nodes/utils/SplitNode.js +1 -1
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +2 -2
- package/examples/jsm/nodes/utils/TimerNode.js +2 -2
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +2 -2
- package/examples/jsm/objects/Sky.js +1 -3
- package/examples/jsm/postprocessing/OutputPass.js +3 -2
- package/examples/jsm/renderers/common/Background.js +2 -2
- package/examples/jsm/renderers/common/Bindings.js +3 -5
- package/examples/jsm/renderers/common/Pipelines.js +7 -7
- package/examples/jsm/renderers/common/RenderContext.js +3 -0
- package/examples/jsm/renderers/common/RenderObject.js +40 -16
- package/examples/jsm/renderers/common/RenderObjects.js +8 -14
- package/examples/jsm/renderers/common/Renderer.js +40 -13
- package/examples/jsm/renderers/common/SampledTexture.js +4 -2
- package/examples/jsm/renderers/common/StorageTexture.js +19 -0
- package/examples/jsm/renderers/common/Textures.js +14 -9
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +35 -0
- package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +20 -10
- package/examples/jsm/renderers/common/nodes/NodeSampler.js +0 -6
- package/examples/jsm/renderers/common/nodes/Nodes.js +51 -24
- package/examples/jsm/renderers/webgl/WebGLBackend.js +100 -5
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +92 -6
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +3 -3
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodes.js +14 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +5 -5
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +6 -3
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +5 -5
- package/examples/jsm/renderers/webgpu/utils/WebGPUTexturePassUtils.js +285 -0
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +197 -167
- package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
- package/examples/jsm/shaders/MMDToonShader.js +4 -4
- package/examples/jsm/shaders/OutputShader.js +2 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +6 -6
- package/examples/jsm/utils/BufferGeometryUtils.js +6 -4
- package/package.json +1 -1
- package/src/Three.js +0 -2
- package/src/animation/AnimationUtils.js +3 -20
- package/src/animation/KeyframeTrack.js +8 -8
- package/src/cameras/Camera.js +1 -5
- package/src/cameras/CubeCamera.js +14 -8
- package/src/constants.js +7 -1
- package/src/core/RenderTarget.js +16 -7
- package/src/extras/core/CurvePath.js +4 -1
- package/src/loaders/MaterialLoader.js +1 -1
- package/src/loaders/ObjectLoader.js +6 -0
- package/src/materials/Material.js +8 -8
- package/src/math/Color.js +1 -5
- package/src/math/ColorManagement.js +82 -60
- package/src/objects/Sprite.js +2 -2
- package/src/renderers/WebGLMultiviewRenderTarget.js +35 -0
- package/src/renderers/WebGLRenderer.js +78 -22
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +35 -2
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -9
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +19 -15
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +4 -4
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +11 -6
- package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +4 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +16 -16
- package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -1
- package/src/renderers/shaders/UniformsUtils.js +2 -2
- package/src/renderers/webgl/WebGLBackground.js +5 -4
- package/src/renderers/webgl/WebGLLights.js +14 -3
- package/src/renderers/webgl/WebGLMultiview.js +100 -0
- package/src/renderers/webgl/WebGLProgram.js +84 -5
- package/src/renderers/webgl/WebGLPrograms.js +11 -2
- package/src/renderers/webgl/WebGLTextures.js +214 -26
- package/src/renderers/webgl/WebGLUtils.js +21 -23
- package/src/renderers/webxr/WebXRManager.js +36 -12
- package/src/scenes/Fog.js +1 -0
- package/src/scenes/FogExp2.js +1 -0
- package/src/textures/Source.js +2 -2
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureMipmapUtils.js +0 -163
- package/src/lights/AmbientLightProbe.js +0 -21
- package/src/lights/HemisphereLightProbe.js +0 -30
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { addNodeClass } from '../core/Node.js';
|
|
2
|
+
import TempNode from '../core/TempNode.js';
|
|
3
|
+
import { vectorComponents } from '../core/constants.js';
|
|
4
|
+
|
|
5
|
+
class SetNode extends TempNode {
|
|
6
|
+
|
|
7
|
+
constructor( sourceNode, components, targetNode ) {
|
|
8
|
+
|
|
9
|
+
super();
|
|
10
|
+
|
|
11
|
+
this.sourceNode = sourceNode;
|
|
12
|
+
this.components = components;
|
|
13
|
+
this.targetNode = targetNode;
|
|
14
|
+
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
getNodeType( builder ) {
|
|
18
|
+
|
|
19
|
+
return this.sourceNode.getNodeType( builder );
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
generate( builder ) {
|
|
24
|
+
|
|
25
|
+
const { sourceNode, components, targetNode } = this;
|
|
26
|
+
|
|
27
|
+
const sourceType = this.getNodeType( builder );
|
|
28
|
+
const targetType = builder.getTypeFromLength( components.length );
|
|
29
|
+
|
|
30
|
+
const targetSnippet = targetNode.build( builder, targetType );
|
|
31
|
+
const sourceSnippet = sourceNode.build( builder, sourceType );
|
|
32
|
+
|
|
33
|
+
const length = builder.getTypeLength( sourceType );
|
|
34
|
+
const snippetValues = [];
|
|
35
|
+
|
|
36
|
+
for ( let i = 0; i < length; i ++ ) {
|
|
37
|
+
|
|
38
|
+
const component = vectorComponents[ i ];
|
|
39
|
+
|
|
40
|
+
if ( component === components[ 0 ] ) {
|
|
41
|
+
|
|
42
|
+
snippetValues.push( targetSnippet );
|
|
43
|
+
|
|
44
|
+
i += components.length - 1;
|
|
45
|
+
|
|
46
|
+
} else {
|
|
47
|
+
|
|
48
|
+
snippetValues.push( sourceSnippet + '.' + component );
|
|
49
|
+
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return `${ builder.getType( sourceType ) }( ${ snippetValues.join( ', ' ) } )`;
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export default SetNode;
|
|
61
|
+
|
|
62
|
+
addNodeClass( 'SetNode', SetNode );
|
|
@@ -13,7 +13,7 @@ class SpecularMIPLevelNode extends Node {
|
|
|
13
13
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
setup() {
|
|
17
17
|
|
|
18
18
|
const { textureNode, roughnessNode } = this;
|
|
19
19
|
|
|
@@ -34,4 +34,4 @@ export default SpecularMIPLevelNode;
|
|
|
34
34
|
|
|
35
35
|
export const specularMIPLevel = nodeProxy( SpecularMIPLevelNode );
|
|
36
36
|
|
|
37
|
-
addNodeClass( SpecularMIPLevelNode );
|
|
37
|
+
addNodeClass( 'SpecularMIPLevelNode', SpecularMIPLevelNode );
|
|
@@ -14,7 +14,7 @@ class SpriteSheetUVNode extends Node {
|
|
|
14
14
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
setup() {
|
|
18
18
|
|
|
19
19
|
const { frameNode, uvNode, countNode } = this;
|
|
20
20
|
|
|
@@ -38,4 +38,4 @@ export default SpriteSheetUVNode;
|
|
|
38
38
|
|
|
39
39
|
export const spritesheetUV = nodeProxy( SpriteSheetUVNode );
|
|
40
40
|
|
|
41
|
-
addNodeClass( SpriteSheetUVNode );
|
|
41
|
+
addNodeClass( 'SpriteSheetUVNode', SpriteSheetUVNode );
|
|
@@ -89,6 +89,6 @@ export default TimerNode;
|
|
|
89
89
|
export const timerLocal = ( timeScale, value = 0 ) => nodeObject( new TimerNode( TimerNode.LOCAL, timeScale, value ) );
|
|
90
90
|
export const timerGlobal = ( timeScale, value = 0 ) => nodeObject( new TimerNode( TimerNode.GLOBAL, timeScale, value ) );
|
|
91
91
|
export const timerDelta = ( timeScale, value = 0 ) => nodeObject( new TimerNode( TimerNode.DELTA, timeScale, value ) );
|
|
92
|
-
export const frameId = nodeImmutable( TimerNode, TimerNode.FRAME );
|
|
92
|
+
export const frameId = nodeImmutable( TimerNode, TimerNode.FRAME ).uint();
|
|
93
93
|
|
|
94
|
-
addNodeClass( TimerNode );
|
|
94
|
+
addNodeClass( 'TimerNode', TimerNode );
|
|
@@ -22,7 +22,7 @@ class TriplanarTexturesNode extends Node {
|
|
|
22
22
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
setup() {
|
|
26
26
|
|
|
27
27
|
const { textureXNode, textureYNode, textureZNode, scaleNode, positionNode, normalNode } = this;
|
|
28
28
|
|
|
@@ -59,4 +59,4 @@ export const triplanarTexture = ( ...params ) => triplanarTextures( ...params );
|
|
|
59
59
|
|
|
60
60
|
addNodeElement( 'triplanarTexture', triplanarTexture );
|
|
61
61
|
|
|
62
|
-
addNodeClass( TriplanarTexturesNode );
|
|
62
|
+
addNodeClass( 'TriplanarTexturesNode', TriplanarTexturesNode );
|
|
@@ -138,8 +138,6 @@ Sky.SkyShader = {
|
|
|
138
138
|
uniform float mieDirectionalG;
|
|
139
139
|
uniform vec3 up;
|
|
140
140
|
|
|
141
|
-
const vec3 cameraPos = vec3( 0.0, 0.0, 0.0 );
|
|
142
|
-
|
|
143
141
|
// constants for atmospheric scattering
|
|
144
142
|
const float pi = 3.141592653589793238462643383279502884197169;
|
|
145
143
|
|
|
@@ -169,7 +167,7 @@ Sky.SkyShader = {
|
|
|
169
167
|
|
|
170
168
|
void main() {
|
|
171
169
|
|
|
172
|
-
vec3 direction = normalize( vWorldPosition -
|
|
170
|
+
vec3 direction = normalize( vWorldPosition - cameraPosition );
|
|
173
171
|
|
|
174
172
|
// optical length
|
|
175
173
|
// cutoff angle at 90 to avoid singularity in next formula.
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
|
+
ColorManagement,
|
|
2
3
|
RawShaderMaterial,
|
|
3
4
|
UniformsUtils,
|
|
4
5
|
LinearToneMapping,
|
|
5
6
|
ReinhardToneMapping,
|
|
6
7
|
CineonToneMapping,
|
|
7
8
|
ACESFilmicToneMapping,
|
|
8
|
-
|
|
9
|
+
SRGBTransfer
|
|
9
10
|
} from 'three';
|
|
10
11
|
import { Pass, FullScreenQuad } from './Pass.js';
|
|
11
12
|
import { OutputShader } from '../shaders/OutputShader.js';
|
|
@@ -51,7 +52,7 @@ class OutputPass extends Pass {
|
|
|
51
52
|
|
|
52
53
|
this.material.defines = {};
|
|
53
54
|
|
|
54
|
-
if ( this._outputColorSpace
|
|
55
|
+
if ( ColorManagement.getTransfer( this._outputColorSpace ) === SRGBTransfer ) this.material.defines.SRGB_TRANSFER = '';
|
|
55
56
|
|
|
56
57
|
if ( this._toneMapping === LinearToneMapping ) this.material.defines.LINEAR_TONE_MAPPING = '';
|
|
57
58
|
else if ( this._toneMapping === ReinhardToneMapping ) this.material.defines.REINHARD_TONE_MAPPING = '';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import DataMap from './DataMap.js';
|
|
2
2
|
import { Color, Mesh, SphereGeometry, BackSide } from 'three';
|
|
3
|
-
import {
|
|
3
|
+
import { context, normalWorld, backgroundBlurriness, backgroundIntensity, NodeMaterial, modelViewProjection } from '../../nodes/Nodes.js';
|
|
4
4
|
|
|
5
5
|
let _clearAlpha;
|
|
6
6
|
const _clearColor = new Color();
|
|
@@ -60,7 +60,7 @@ class Background extends DataMap {
|
|
|
60
60
|
} ).mul( backgroundIntensity );
|
|
61
61
|
|
|
62
62
|
let viewProj = modelViewProjection();
|
|
63
|
-
viewProj =
|
|
63
|
+
viewProj = viewProj.setZ( viewProj.w );
|
|
64
64
|
|
|
65
65
|
const nodeMaterial = new NodeMaterial();
|
|
66
66
|
nodeMaterial.outputNode = this.backgroundMeshNode;
|
|
@@ -48,9 +48,9 @@ class Bindings extends DataMap {
|
|
|
48
48
|
|
|
49
49
|
if ( data.bindings === undefined ) {
|
|
50
50
|
|
|
51
|
-
const
|
|
51
|
+
const nodeBuilderState = this.nodes.getForCompute( computeNode );
|
|
52
52
|
|
|
53
|
-
const bindings =
|
|
53
|
+
const bindings = nodeBuilderState.bindings;
|
|
54
54
|
|
|
55
55
|
data.bindings = bindings;
|
|
56
56
|
|
|
@@ -82,9 +82,7 @@ class Bindings extends DataMap {
|
|
|
82
82
|
|
|
83
83
|
if ( binding.isSampledTexture ) {
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
this.textures.updateTexture( binding.texture, { store } );
|
|
85
|
+
this.textures.updateTexture( binding.texture );
|
|
88
86
|
|
|
89
87
|
} else if ( binding.isStorageBuffer ) {
|
|
90
88
|
|
|
@@ -109,31 +109,31 @@ class Pipelines extends DataMap {
|
|
|
109
109
|
|
|
110
110
|
// get shader
|
|
111
111
|
|
|
112
|
-
const
|
|
112
|
+
const nodeBuilderState = renderObject.getNodeBuilderState();
|
|
113
113
|
|
|
114
114
|
// programmable stages
|
|
115
115
|
|
|
116
|
-
let stageVertex = this.programs.vertex.get(
|
|
116
|
+
let stageVertex = this.programs.vertex.get( nodeBuilderState.vertexShader );
|
|
117
117
|
|
|
118
118
|
if ( stageVertex === undefined ) {
|
|
119
119
|
|
|
120
120
|
if ( previousPipeline && previousPipeline.vertexProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.vertexProgram );
|
|
121
121
|
|
|
122
|
-
stageVertex = new ProgrammableStage(
|
|
123
|
-
this.programs.vertex.set(
|
|
122
|
+
stageVertex = new ProgrammableStage( nodeBuilderState.vertexShader, 'vertex' );
|
|
123
|
+
this.programs.vertex.set( nodeBuilderState.vertexShader, stageVertex );
|
|
124
124
|
|
|
125
125
|
backend.createProgram( stageVertex );
|
|
126
126
|
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
let stageFragment = this.programs.fragment.get(
|
|
129
|
+
let stageFragment = this.programs.fragment.get( nodeBuilderState.fragmentShader );
|
|
130
130
|
|
|
131
131
|
if ( stageFragment === undefined ) {
|
|
132
132
|
|
|
133
133
|
if ( previousPipeline && previousPipeline.fragmentProgram.usedTimes === 0 ) this._releaseProgram( previousPipeline.fragmentProgram );
|
|
134
134
|
|
|
135
|
-
stageFragment = new ProgrammableStage(
|
|
136
|
-
this.programs.fragment.set(
|
|
135
|
+
stageFragment = new ProgrammableStage( nodeBuilderState.fragmentShader, 'fragment' );
|
|
136
|
+
this.programs.fragment.set( nodeBuilderState.fragmentShader, stageFragment );
|
|
137
137
|
|
|
138
138
|
backend.createProgram( stageFragment );
|
|
139
139
|
|
|
@@ -18,15 +18,16 @@ export default class RenderObject {
|
|
|
18
18
|
this.context = renderContext;
|
|
19
19
|
|
|
20
20
|
this.geometry = object.geometry;
|
|
21
|
+
this.version = material.version;
|
|
21
22
|
|
|
22
23
|
this.attributes = null;
|
|
23
24
|
this.pipeline = null;
|
|
24
25
|
this.vertexBuffers = null;
|
|
25
26
|
|
|
26
|
-
this.
|
|
27
|
+
this.initialCacheKey = this.getCacheKey();
|
|
28
|
+
|
|
29
|
+
this._nodeBuilderState = null;
|
|
27
30
|
this._bindings = null;
|
|
28
|
-
this._materialVersion = - 1;
|
|
29
|
-
this._materialCacheKey = '';
|
|
30
31
|
|
|
31
32
|
this.onDispose = null;
|
|
32
33
|
|
|
@@ -42,15 +43,15 @@ export default class RenderObject {
|
|
|
42
43
|
|
|
43
44
|
}
|
|
44
45
|
|
|
45
|
-
|
|
46
|
+
getNodeBuilderState() {
|
|
46
47
|
|
|
47
|
-
return this.
|
|
48
|
+
return this._nodeBuilderState || ( this._nodeBuilderState = this._nodes.getForRender( this ) );
|
|
48
49
|
|
|
49
50
|
}
|
|
50
51
|
|
|
51
52
|
getBindings() {
|
|
52
53
|
|
|
53
|
-
return this._bindings || ( this._bindings = this.
|
|
54
|
+
return this._bindings || ( this._bindings = this.getNodeBuilderState().createBindings() );
|
|
54
55
|
|
|
55
56
|
}
|
|
56
57
|
|
|
@@ -70,7 +71,7 @@ export default class RenderObject {
|
|
|
70
71
|
|
|
71
72
|
if ( this.attributes !== null ) return this.attributes;
|
|
72
73
|
|
|
73
|
-
const nodeAttributes = this.
|
|
74
|
+
const nodeAttributes = this.getNodeBuilderState().nodeAttributes;
|
|
74
75
|
const geometry = this.geometry;
|
|
75
76
|
|
|
76
77
|
const attributes = [];
|
|
@@ -102,23 +103,46 @@ export default class RenderObject {
|
|
|
102
103
|
|
|
103
104
|
}
|
|
104
105
|
|
|
105
|
-
|
|
106
|
+
getMaterialCacheKey() {
|
|
107
|
+
|
|
108
|
+
const material = this.material;
|
|
109
|
+
|
|
110
|
+
let cacheKey = material.customProgramCacheKey();
|
|
111
|
+
|
|
112
|
+
for ( const property in material ) {
|
|
113
|
+
|
|
114
|
+
if ( /^(is[A-Z])|^(visible|version|uuid|name|opacity|userData)$/.test( property ) ) continue;
|
|
115
|
+
|
|
116
|
+
let value = material[ property ];
|
|
117
|
+
|
|
118
|
+
if ( value !== null ) {
|
|
119
|
+
|
|
120
|
+
const type = typeof value;
|
|
106
121
|
|
|
107
|
-
|
|
122
|
+
if ( type === 'number' ) value = value !== 0 ? '1' : '0'; // Convert to on/off, important for clearcoat, transmission, etc
|
|
123
|
+
else if ( type === 'object' ) value = '{}';
|
|
108
124
|
|
|
109
|
-
|
|
125
|
+
}
|
|
110
126
|
|
|
111
|
-
|
|
112
|
-
this._materialCacheKey = material.customProgramCacheKey();
|
|
127
|
+
cacheKey += /*property + ':' +*/ value + ',';
|
|
113
128
|
|
|
114
129
|
}
|
|
115
130
|
|
|
116
|
-
|
|
131
|
+
return cacheKey;
|
|
117
132
|
|
|
118
|
-
|
|
119
|
-
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
getNodesCacheKey() {
|
|
136
|
+
|
|
137
|
+
// Environment Nodes Cache Key
|
|
138
|
+
|
|
139
|
+
return this._nodes.getCacheKey( this.scene, this.lightsNode );
|
|
140
|
+
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
getCacheKey() {
|
|
120
144
|
|
|
121
|
-
return
|
|
145
|
+
return `{material:${ this.getMaterialCacheKey() },nodes:${ this.getNodesCacheKey()}`;
|
|
122
146
|
|
|
123
147
|
}
|
|
124
148
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import DataMap from './DataMap.js';
|
|
2
1
|
import ChainMap from './ChainMap.js';
|
|
3
2
|
import RenderObject from './RenderObject.js';
|
|
4
3
|
|
|
@@ -14,7 +13,6 @@ class RenderObjects {
|
|
|
14
13
|
this.info = info;
|
|
15
14
|
|
|
16
15
|
this.chainMaps = {};
|
|
17
|
-
this.dataMap = new DataMap();
|
|
18
16
|
|
|
19
17
|
}
|
|
20
18
|
|
|
@@ -33,14 +31,17 @@ class RenderObjects {
|
|
|
33
31
|
|
|
34
32
|
} else {
|
|
35
33
|
|
|
36
|
-
|
|
37
|
-
const cacheKey = renderObject.getCacheKey();
|
|
34
|
+
if ( renderObject.version !== material.version ) {
|
|
38
35
|
|
|
39
|
-
|
|
36
|
+
renderObject.version = material.version;
|
|
40
37
|
|
|
41
|
-
renderObject.
|
|
38
|
+
if ( renderObject.initialCacheKey !== renderObject.getCacheKey() ) {
|
|
42
39
|
|
|
43
|
-
|
|
40
|
+
renderObject.dispose();
|
|
41
|
+
|
|
42
|
+
renderObject = this.get( object, material, scene, camera, lightsNode, renderContext, passId );
|
|
43
|
+
|
|
44
|
+
}
|
|
44
45
|
|
|
45
46
|
}
|
|
46
47
|
|
|
@@ -59,24 +60,17 @@ class RenderObjects {
|
|
|
59
60
|
dispose() {
|
|
60
61
|
|
|
61
62
|
this.chainMaps = {};
|
|
62
|
-
this.dataMap = new DataMap();
|
|
63
63
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
createRenderObject( nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext, passId ) {
|
|
67
67
|
|
|
68
68
|
const chainMap = this.getChainMap( passId );
|
|
69
|
-
const dataMap = this.dataMap;
|
|
70
69
|
|
|
71
70
|
const renderObject = new RenderObject( nodes, geometries, renderer, object, material, scene, camera, lightsNode, renderContext );
|
|
72
71
|
|
|
73
|
-
const data = dataMap.get( renderObject );
|
|
74
|
-
data.cacheKey = renderObject.getCacheKey();
|
|
75
|
-
|
|
76
72
|
renderObject.onDispose = () => {
|
|
77
73
|
|
|
78
|
-
dataMap.delete( renderObject );
|
|
79
|
-
|
|
80
74
|
this.pipelines.delete( renderObject );
|
|
81
75
|
this.bindings.delete( renderObject );
|
|
82
76
|
this.nodes.delete( renderObject );
|
|
@@ -46,6 +46,8 @@ class Renderer {
|
|
|
46
46
|
this.depth = true;
|
|
47
47
|
this.stencil = true;
|
|
48
48
|
|
|
49
|
+
this.info = new Info();
|
|
50
|
+
|
|
49
51
|
// internals
|
|
50
52
|
|
|
51
53
|
this._pixelRatio = 1;
|
|
@@ -56,7 +58,6 @@ class Renderer {
|
|
|
56
58
|
this._scissor = new Vector4( 0, 0, this._width, this._height );
|
|
57
59
|
this._scissorTest = false;
|
|
58
60
|
|
|
59
|
-
this._info = null;
|
|
60
61
|
this._properties = null;
|
|
61
62
|
this._attributes = null;
|
|
62
63
|
this._geometries = null;
|
|
@@ -83,7 +84,8 @@ class Renderer {
|
|
|
83
84
|
this._clearStencil = 0;
|
|
84
85
|
|
|
85
86
|
this._renderTarget = null;
|
|
86
|
-
this.
|
|
87
|
+
this._activeCubeFace = 0;
|
|
88
|
+
this._activeMipmapLevel = 0;
|
|
87
89
|
|
|
88
90
|
this._initialized = false;
|
|
89
91
|
this._initPromise = null;
|
|
@@ -130,15 +132,14 @@ class Renderer {
|
|
|
130
132
|
|
|
131
133
|
}
|
|
132
134
|
|
|
133
|
-
this._info = new Info();
|
|
134
135
|
this._nodes = new Nodes( this, backend );
|
|
135
136
|
this._attributes = new Attributes( backend );
|
|
136
137
|
this._background = new Background( this, this._nodes );
|
|
137
|
-
this._geometries = new Geometries( this._attributes, this.
|
|
138
|
-
this._textures = new Textures( backend, this.
|
|
138
|
+
this._geometries = new Geometries( this._attributes, this.info );
|
|
139
|
+
this._textures = new Textures( backend, this.info );
|
|
139
140
|
this._pipelines = new Pipelines( backend, this._nodes );
|
|
140
|
-
this._bindings = new Bindings( backend, this._nodes, this._textures, this._attributes, this._pipelines, this.
|
|
141
|
-
this._objects = new RenderObjects( this, this._nodes, this._geometries, this._pipelines, this._bindings, this.
|
|
141
|
+
this._bindings = new Bindings( backend, this._nodes, this._textures, this._attributes, this._pipelines, this.info );
|
|
142
|
+
this._objects = new RenderObjects( this, this._nodes, this._geometries, this._pipelines, this._bindings, this.info );
|
|
142
143
|
this._renderLists = new RenderLists();
|
|
143
144
|
this._renderContexts = new RenderContexts();
|
|
144
145
|
|
|
@@ -187,6 +188,7 @@ class Renderer {
|
|
|
187
188
|
const renderTarget = this._renderTarget;
|
|
188
189
|
const renderContext = this._renderContexts.get( scene, camera, renderTarget );
|
|
189
190
|
const activeCubeFace = this._activeCubeFace;
|
|
191
|
+
const activeMipmapLevel = this._activeMipmapLevel;
|
|
190
192
|
|
|
191
193
|
this._currentRenderContext = renderContext;
|
|
192
194
|
|
|
@@ -212,9 +214,9 @@ class Renderer {
|
|
|
212
214
|
|
|
213
215
|
if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
|
|
214
216
|
|
|
215
|
-
if ( this.
|
|
217
|
+
if ( this.info.autoReset === true ) this.info.reset();
|
|
216
218
|
|
|
217
|
-
this.
|
|
219
|
+
this.info.render.frame ++;
|
|
218
220
|
|
|
219
221
|
//
|
|
220
222
|
|
|
@@ -238,12 +240,16 @@ class Renderer {
|
|
|
238
240
|
const maxDepth = ( viewport.maxDepth === undefined ) ? 1 : viewport.maxDepth;
|
|
239
241
|
|
|
240
242
|
renderContext.viewportValue.copy( viewport ).multiplyScalar( pixelRatio ).floor();
|
|
243
|
+
renderContext.viewportValue.width >>= activeMipmapLevel;
|
|
244
|
+
renderContext.viewportValue.height >>= activeMipmapLevel;
|
|
241
245
|
renderContext.viewportValue.minDepth = minDepth;
|
|
242
246
|
renderContext.viewportValue.maxDepth = maxDepth;
|
|
243
247
|
renderContext.viewport = renderContext.viewportValue.equals( _screen ) === false;
|
|
244
248
|
|
|
245
249
|
renderContext.scissorValue.copy( scissor ).multiplyScalar( pixelRatio ).floor();
|
|
246
250
|
renderContext.scissor = this._scissorTest && renderContext.scissorValue.equals( _screen ) === false;
|
|
251
|
+
renderContext.scissorValue.width >>= activeMipmapLevel;
|
|
252
|
+
renderContext.scissorValue.height >>= activeMipmapLevel;
|
|
247
253
|
|
|
248
254
|
renderContext.depth = this.depth;
|
|
249
255
|
renderContext.stencil = this.stencil;
|
|
@@ -274,21 +280,28 @@ class Renderer {
|
|
|
274
280
|
|
|
275
281
|
if ( renderTarget !== null ) {
|
|
276
282
|
|
|
277
|
-
this._textures.updateRenderTarget( renderTarget );
|
|
283
|
+
this._textures.updateRenderTarget( renderTarget, activeMipmapLevel );
|
|
278
284
|
|
|
279
285
|
const renderTargetData = this._textures.get( renderTarget );
|
|
280
286
|
|
|
281
287
|
renderContext.textures = renderTargetData.textures;
|
|
282
288
|
renderContext.depthTexture = renderTargetData.depthTexture;
|
|
289
|
+
renderContext.width = renderTargetData.width;
|
|
290
|
+
renderContext.height = renderTargetData.height;
|
|
283
291
|
|
|
284
292
|
} else {
|
|
285
293
|
|
|
286
294
|
renderContext.textures = null;
|
|
287
295
|
renderContext.depthTexture = null;
|
|
296
|
+
renderContext.width = this.domElement.width;
|
|
297
|
+
renderContext.height = this.domElement.height;
|
|
288
298
|
|
|
289
299
|
}
|
|
290
300
|
|
|
301
|
+
renderContext.width >>= activeMipmapLevel;
|
|
302
|
+
renderContext.height >>= activeMipmapLevel;
|
|
291
303
|
renderContext.activeCubeFace = activeCubeFace;
|
|
304
|
+
renderContext.activeMipmapLevel = activeMipmapLevel;
|
|
292
305
|
renderContext.occlusionQueryCount = renderList.occlusionQueryCount;
|
|
293
306
|
|
|
294
307
|
//
|
|
@@ -329,6 +342,18 @@ class Renderer {
|
|
|
329
342
|
|
|
330
343
|
}
|
|
331
344
|
|
|
345
|
+
getActiveCubeFace() {
|
|
346
|
+
|
|
347
|
+
return this._activeCubeFace;
|
|
348
|
+
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
getActiveMipmapLevel() {
|
|
352
|
+
|
|
353
|
+
return this._activeMipmapLevel;
|
|
354
|
+
|
|
355
|
+
}
|
|
356
|
+
|
|
332
357
|
setAnimationLoop( callback ) {
|
|
333
358
|
|
|
334
359
|
if ( this._initialized === false ) this.init();
|
|
@@ -587,12 +612,13 @@ class Renderer {
|
|
|
587
612
|
|
|
588
613
|
dispose() {
|
|
589
614
|
|
|
615
|
+
this.info.dispose();
|
|
616
|
+
|
|
590
617
|
this._objects.dispose();
|
|
591
618
|
this._properties.dispose();
|
|
592
619
|
this._pipelines.dispose();
|
|
593
620
|
this._nodes.dispose();
|
|
594
621
|
this._bindings.dispose();
|
|
595
|
-
this._info.dispose();
|
|
596
622
|
this._renderLists.dispose();
|
|
597
623
|
this._renderContexts.dispose();
|
|
598
624
|
this._textures.dispose();
|
|
@@ -602,10 +628,11 @@ class Renderer {
|
|
|
602
628
|
|
|
603
629
|
}
|
|
604
630
|
|
|
605
|
-
setRenderTarget( renderTarget, activeCubeFace = 0 ) {
|
|
631
|
+
setRenderTarget( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {
|
|
606
632
|
|
|
607
633
|
this._renderTarget = renderTarget;
|
|
608
634
|
this._activeCubeFace = activeCubeFace;
|
|
635
|
+
this._activeMipmapLevel = activeMipmapLevel;
|
|
609
636
|
|
|
610
637
|
}
|
|
611
638
|
|
|
@@ -895,7 +922,7 @@ class Renderer {
|
|
|
895
922
|
|
|
896
923
|
//
|
|
897
924
|
|
|
898
|
-
this.backend.draw( renderObject, this.
|
|
925
|
+
this.backend.draw( renderObject, this.info );
|
|
899
926
|
|
|
900
927
|
}
|
|
901
928
|
|
|
@@ -28,9 +28,11 @@ class SampledTexture extends Binding {
|
|
|
28
28
|
|
|
29
29
|
update() {
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
const { texture, version } = this;
|
|
32
|
+
|
|
33
|
+
if ( version !== texture.version ) {
|
|
32
34
|
|
|
33
|
-
this.version =
|
|
35
|
+
this.version = texture.version;
|
|
34
36
|
|
|
35
37
|
return true;
|
|
36
38
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Texture, LinearFilter } from 'three';
|
|
2
|
+
|
|
3
|
+
class StorageTexture extends Texture {
|
|
4
|
+
|
|
5
|
+
constructor( width = 1, height = 1 ) {
|
|
6
|
+
|
|
7
|
+
super();
|
|
8
|
+
|
|
9
|
+
this.image = { width, height };
|
|
10
|
+
|
|
11
|
+
this.magFilter = LinearFilter;
|
|
12
|
+
this.minFilter = LinearFilter;
|
|
13
|
+
|
|
14
|
+
this.isStorageTexture = true;
|
|
15
|
+
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export default StorageTexture;
|