super-three 0.155.0 → 0.157.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +361 -324
- package/build/three.js +361 -324
- package/build/three.min.js +2 -2
- package/build/three.module.js +354 -323
- 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/controls/OrbitControls.js +13 -5
- package/examples/jsm/csm/CSMShader.js +59 -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/libs/tween.module.js +790 -735
- package/examples/jsm/libs/utif.module.js +1644 -1558
- 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/DDSLoader.js +46 -3
- package/examples/jsm/loaders/EXRLoader.js +4 -4
- package/examples/jsm/loaders/FBXLoader.js +2 -0
- package/examples/jsm/loaders/GLTFLoader.js +18 -8
- package/examples/jsm/loaders/KTX2Loader.js +126 -77
- package/examples/jsm/loaders/LDrawLoader.js +22 -16
- package/examples/jsm/loaders/LogLuvLoader.js +2 -2
- package/examples/jsm/loaders/MMDLoader.js +10 -7
- package/examples/jsm/loaders/RGBELoader.js +48 -66
- package/examples/jsm/loaders/STLLoader.js +7 -0
- package/examples/jsm/loaders/USDZLoader.js +215 -12
- package/examples/jsm/materials/MeshGouraudMaterial.js +22 -18
- package/examples/jsm/nodes/Nodes.js +8 -1
- package/examples/jsm/nodes/accessors/BitangentNode.js +1 -1
- package/examples/jsm/nodes/accessors/BufferAttributeNode.js +30 -4
- 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 +19 -4
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +4 -5
- package/examples/jsm/nodes/accessors/InstanceNode.js +2 -2
- package/examples/jsm/nodes/accessors/LineMaterialNode.js +29 -0
- package/examples/jsm/nodes/accessors/MaterialNode.js +23 -13
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +12 -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 +3 -3
- 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 +18 -8
- package/examples/jsm/nodes/accessors/TextureSizeNode.js +2 -2
- package/examples/jsm/nodes/accessors/TextureStoreNode.js +29 -0
- 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 +3 -3
- 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 +45 -14
- package/examples/jsm/nodes/core/NodeBuilder.js +83 -15
- package/examples/jsm/nodes/core/NodeFrame.js +37 -14
- package/examples/jsm/nodes/core/NodeUniform.js +1 -1
- package/examples/jsm/nodes/core/OutputStructNode.js +62 -0
- package/examples/jsm/nodes/core/PropertyNode.js +3 -1
- package/examples/jsm/nodes/core/StackNode.js +5 -5
- package/examples/jsm/nodes/core/StructTypeNode.js +24 -0
- 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 +21 -7
- 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 +54 -0
- package/examples/jsm/nodes/materials/Materials.js +2 -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 +39 -29
- 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 +34 -0
- 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 +85 -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 +2 -2
- 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/FilmPass.js +3 -5
- package/examples/jsm/postprocessing/OutputPass.js +3 -2
- package/examples/jsm/postprocessing/RenderPass.js +30 -12
- package/examples/jsm/postprocessing/SAOPass.js +23 -98
- package/examples/jsm/postprocessing/SSAOPass.js +10 -30
- package/examples/jsm/renderers/common/Backend.js +11 -8
- package/examples/jsm/renderers/common/Background.js +2 -2
- package/examples/jsm/renderers/common/Binding.js +6 -0
- package/examples/jsm/renderers/common/Bindings.js +4 -5
- package/examples/jsm/renderers/common/Pipelines.js +9 -9
- package/examples/jsm/renderers/common/RenderContext.js +3 -0
- package/examples/jsm/renderers/common/RenderContexts.js +26 -1
- package/examples/jsm/renderers/common/RenderList.js +12 -4
- package/examples/jsm/renderers/common/RenderObject.js +43 -15
- package/examples/jsm/renderers/common/RenderObjects.js +8 -14
- package/examples/jsm/renderers/common/Renderer.js +52 -16
- package/examples/jsm/renderers/common/SampledTexture.js +6 -3
- package/examples/jsm/renderers/common/Sampler.js +1 -1
- package/examples/jsm/renderers/common/StorageBuffer.js +1 -1
- package/examples/jsm/renderers/common/StorageTexture.js +19 -0
- package/examples/jsm/renderers/common/Textures.js +166 -21
- package/examples/jsm/renderers/common/nodes/NodeBuilderState.js +35 -0
- package/examples/jsm/renderers/common/nodes/NodeSampledTexture.js +21 -11
- package/examples/jsm/renderers/common/nodes/NodeSampler.js +1 -7
- package/examples/jsm/renderers/common/nodes/Nodes.js +79 -18
- package/examples/jsm/renderers/webgl/WebGLBackend.js +702 -0
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +207 -20
- package/examples/jsm/renderers/webgl/utils/WebGLAttributeUtils.js +84 -0
- package/examples/jsm/renderers/webgl/utils/WebGLExtensions.js +26 -0
- package/examples/jsm/renderers/webgl/utils/WebGLState.js +529 -0
- package/examples/jsm/renderers/webgl/utils/WebGLTextureUtils.js +212 -0
- package/examples/jsm/renderers/webgl/utils/WebGLUtils.js +242 -0
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +340 -0
- package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/WebGLNodeBuilder.js +4 -4
- package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/WebGLNodes.js +14 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +282 -43
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +18 -2
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeBuilder.js +93 -60
- package/examples/jsm/renderers/webgpu/nodes/WGSLNodeFunction.js +2 -2
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +15 -2
- package/examples/jsm/renderers/webgpu/utils/WebGPUPipelineUtils.js +39 -14
- package/examples/jsm/renderers/webgpu/utils/WebGPUTexturePassUtils.js +285 -0
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +205 -284
- package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +6 -5
- package/examples/jsm/shaders/FilmShader.js +11 -54
- 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/SAOShader.js +0 -13
- package/examples/jsm/shaders/SSAOShader.js +33 -26
- 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 +1 -2
- package/src/animation/AnimationUtils.js +3 -20
- package/src/animation/KeyframeTrack.js +8 -8
- package/src/audio/Audio.js +6 -0
- package/src/cameras/Camera.js +1 -5
- package/src/cameras/CubeCamera.js +14 -8
- package/src/constants.js +10 -1
- package/src/core/Object3D.js +1 -14
- package/src/core/RenderTarget.js +16 -7
- package/src/core/UniformsGroup.js +2 -2
- package/src/extras/core/CurvePath.js +4 -1
- package/src/loaders/DataTextureLoader.js +0 -2
- package/src/loaders/MaterialLoader.js +1 -1
- package/src/loaders/ObjectLoader.js +6 -0
- package/src/materials/Material.js +10 -10
- package/src/math/Color.js +1 -5
- package/src/math/ColorManagement.js +82 -60
- package/src/math/Vector2.js +2 -2
- package/src/math/Vector3.js +3 -3
- package/src/math/Vector4.js +4 -4
- package/src/objects/Line.js +1 -1
- package/src/objects/Mesh.js +1 -1
- package/src/objects/Points.js +1 -1
- package/src/objects/Sprite.js +2 -2
- package/src/renderers/WebGLRenderer.js +42 -51
- 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/map_fragment.glsl.js +11 -1
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/background.glsl.js +8 -0
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -1
- package/src/renderers/shaders/UniformsUtils.js +2 -2
- package/src/renderers/webgl/WebGLBackground.js +9 -17
- package/src/renderers/webgl/WebGLLights.js +14 -3
- package/src/renderers/webgl/WebGLProgram.js +36 -5
- package/src/renderers/webgl/WebGLPrograms.js +9 -1
- package/src/renderers/webgl/WebGLTextures.js +19 -8
- package/src/renderers/webgl/WebGLUtils.js +25 -20
- package/src/scenes/Fog.js +1 -0
- package/src/scenes/FogExp2.js +1 -0
- package/src/textures/Source.js +2 -2
- package/src/textures/Texture.js +2 -2
- package/src/utils.js +9 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureMipmapUtils.js +0 -163
- package/src/lights/AmbientLightProbe.js +0 -21
- package/src/lights/HemisphereLightProbe.js +0 -30
- /package/examples/jsm/renderers/{webgl → webgl-legacy}/nodes/SlotNode.js +0 -0
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NoColorSpace, FloatType } from 'three';
|
|
2
2
|
|
|
3
3
|
import UniformsGroup from '../../common/UniformsGroup.js';
|
|
4
|
-
|
|
5
|
-
FloatNodeUniform, Vector2NodeUniform, Vector3NodeUniform, Vector4NodeUniform,
|
|
6
|
-
ColorNodeUniform, Matrix3NodeUniform, Matrix4NodeUniform
|
|
7
|
-
} from '../../common/nodes/NodeUniform.js';
|
|
4
|
+
|
|
8
5
|
import NodeSampler from '../../common/nodes/NodeSampler.js';
|
|
9
6
|
import { NodeSampledTexture, NodeSampledCubeTexture } from '../../common/nodes/NodeSampledTexture.js';
|
|
10
7
|
|
|
@@ -12,10 +9,10 @@ import UniformBuffer from '../../common/UniformBuffer.js';
|
|
|
12
9
|
import StorageBuffer from '../../common/StorageBuffer.js';
|
|
13
10
|
import { getVectorLength, getStrideLength } from '../../common/BufferUtils.js';
|
|
14
11
|
|
|
15
|
-
import CubeRenderTarget from '../../common/CubeRenderTarget.js';
|
|
16
|
-
|
|
17
12
|
import { NodeBuilder, CodeNode, NodeMaterial } from '../../../nodes/Nodes.js';
|
|
18
13
|
|
|
14
|
+
import { getFormat } from '../utils/WebGPUTextureUtils.js';
|
|
15
|
+
|
|
19
16
|
import WGSLNodeParser from './WGSLNodeParser.js';
|
|
20
17
|
|
|
21
18
|
const gpuShaderStageLib = {
|
|
@@ -63,7 +60,7 @@ const wgslTypeLib = {
|
|
|
63
60
|
|
|
64
61
|
const wgslMethods = {
|
|
65
62
|
dFdx: 'dpdx',
|
|
66
|
-
dFdy: 'dpdy',
|
|
63
|
+
dFdy: '- dpdy',
|
|
67
64
|
mod: 'threejs_mod',
|
|
68
65
|
lessThanEqual: 'threejs_lessThanEqual',
|
|
69
66
|
inversesqrt: 'inverseSqrt'
|
|
@@ -136,7 +133,7 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
136
133
|
|
|
137
134
|
}
|
|
138
135
|
|
|
139
|
-
|
|
136
|
+
_getSampler( texture, textureProperty, uvSnippet, shaderStage = this.shaderStage ) {
|
|
140
137
|
|
|
141
138
|
if ( shaderStage === 'fragment' ) {
|
|
142
139
|
|
|
@@ -144,17 +141,13 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
144
141
|
|
|
145
142
|
} else {
|
|
146
143
|
|
|
147
|
-
this.
|
|
148
|
-
|
|
149
|
-
const dimension = `textureDimensions( ${textureProperty}, 0 )`;
|
|
150
|
-
|
|
151
|
-
return `textureLoad( ${textureProperty}, threejs_repeatWrapping( ${uvSnippet}, ${dimension} ), 0 )`;
|
|
144
|
+
return this.getTextureLoad( texture, textureProperty, uvSnippet );
|
|
152
145
|
|
|
153
146
|
}
|
|
154
147
|
|
|
155
148
|
}
|
|
156
149
|
|
|
157
|
-
|
|
150
|
+
_getVideoSampler( textureProperty, uvSnippet, shaderStage = this.shaderStage ) {
|
|
158
151
|
|
|
159
152
|
if ( shaderStage === 'fragment' ) {
|
|
160
153
|
|
|
@@ -168,21 +161,33 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
168
161
|
|
|
169
162
|
}
|
|
170
163
|
|
|
171
|
-
|
|
164
|
+
_getSamplerLevel( texture, textureProperty, uvSnippet, biasSnippet, shaderStage = this.shaderStage ) {
|
|
172
165
|
|
|
173
|
-
if ( shaderStage === 'fragment' ) {
|
|
166
|
+
if ( shaderStage === 'fragment' && this.isUnfilterable( texture ) === false ) {
|
|
174
167
|
|
|
175
168
|
return `textureSampleLevel( ${textureProperty}, ${textureProperty}_sampler, ${uvSnippet}, ${biasSnippet} )`;
|
|
176
169
|
|
|
177
170
|
} else {
|
|
178
171
|
|
|
179
|
-
this.
|
|
172
|
+
return this.getTextureLoad( texture, textureProperty, uvSnippet, biasSnippet );
|
|
173
|
+
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
getTextureLoad( texture, textureProperty, uvSnippet, biasSnippet = '0' ) {
|
|
180
179
|
|
|
181
|
-
|
|
180
|
+
this._include( 'repeatWrapping' );
|
|
182
181
|
|
|
183
|
-
|
|
182
|
+
const dimension = `textureDimensions( ${textureProperty}, 0 )`;
|
|
184
183
|
|
|
185
|
-
}
|
|
184
|
+
return `textureLoad( ${textureProperty}, threejs_repeatWrapping( ${uvSnippet}, ${dimension} ), i32( ${biasSnippet} ) )`;
|
|
185
|
+
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
isUnfilterable( texture ) {
|
|
189
|
+
|
|
190
|
+
return texture.isDataTexture === true && texture.type === FloatType;
|
|
186
191
|
|
|
187
192
|
}
|
|
188
193
|
|
|
@@ -192,11 +197,15 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
192
197
|
|
|
193
198
|
if ( texture.isVideoTexture === true ) {
|
|
194
199
|
|
|
195
|
-
snippet = this.
|
|
200
|
+
snippet = this._getVideoSampler( textureProperty, uvSnippet, shaderStage );
|
|
201
|
+
|
|
202
|
+
} else if ( this.isUnfilterable( texture ) ) {
|
|
203
|
+
|
|
204
|
+
snippet = this.getTextureLoad( texture, textureProperty, uvSnippet );
|
|
196
205
|
|
|
197
206
|
} else {
|
|
198
207
|
|
|
199
|
-
snippet = this.
|
|
208
|
+
snippet = this._getSampler( texture, textureProperty, uvSnippet, shaderStage );
|
|
200
209
|
|
|
201
210
|
}
|
|
202
211
|
|
|
@@ -224,11 +233,11 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
224
233
|
|
|
225
234
|
if ( texture.isVideoTexture === true ) {
|
|
226
235
|
|
|
227
|
-
snippet = this.
|
|
236
|
+
snippet = this._getVideoSampler( textureProperty, uvSnippet, shaderStage );
|
|
228
237
|
|
|
229
238
|
} else {
|
|
230
239
|
|
|
231
|
-
snippet = this.
|
|
240
|
+
snippet = this._getSamplerLevel( texture, textureProperty, uvSnippet, biasSnippet, shaderStage );
|
|
232
241
|
|
|
233
242
|
}
|
|
234
243
|
|
|
@@ -296,13 +305,14 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
296
305
|
|
|
297
306
|
}
|
|
298
307
|
|
|
308
|
+
texture.store = node.isStoreTextureNode === true;
|
|
299
309
|
texture.setVisibility( gpuShaderStageLib[ shaderStage ] );
|
|
300
310
|
|
|
301
311
|
// add first textures in sequence and group for last
|
|
302
312
|
const lastBinding = bindings[ bindings.length - 1 ];
|
|
303
313
|
const index = lastBinding && lastBinding.isUniformsGroup ? bindings.length - 1 : bindings.length;
|
|
304
314
|
|
|
305
|
-
if ( shaderStage === 'fragment' ) {
|
|
315
|
+
if ( shaderStage === 'fragment' && this.isUnfilterable( node.value ) === false && texture.store === false ) {
|
|
306
316
|
|
|
307
317
|
const sampler = new NodeSampler( `${uniformNode.name}_sampler`, uniformNode.node );
|
|
308
318
|
sampler.setVisibility( gpuShaderStageLib[ shaderStage ] );
|
|
@@ -354,7 +364,7 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
354
364
|
|
|
355
365
|
for ( const uniformNode of node.nodes ) {
|
|
356
366
|
|
|
357
|
-
const uniformNodeGPU = this.
|
|
367
|
+
const uniformNodeGPU = this.getNodeUniform( uniformNode, type );
|
|
358
368
|
|
|
359
369
|
// fit bounds to buffer
|
|
360
370
|
uniformNodeGPU.boundary = getVectorLength( uniformNodeGPU.itemSize );
|
|
@@ -368,7 +378,7 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
368
378
|
|
|
369
379
|
} else {
|
|
370
380
|
|
|
371
|
-
uniformGPU = this.
|
|
381
|
+
uniformGPU = this.getNodeUniform( uniformNode, type );
|
|
372
382
|
|
|
373
383
|
uniformsGroup.addUniform( uniformGPU );
|
|
374
384
|
|
|
@@ -392,7 +402,7 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
392
402
|
|
|
393
403
|
isReference( type ) {
|
|
394
404
|
|
|
395
|
-
return super.isReference( type ) || type === 'texture_2d' || type === 'texture_cube';
|
|
405
|
+
return super.isReference( type ) || type === 'texture_2d' || type === 'texture_cube' || type === 'texture_storage_2d';
|
|
396
406
|
|
|
397
407
|
}
|
|
398
408
|
|
|
@@ -492,6 +502,44 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
492
502
|
|
|
493
503
|
}
|
|
494
504
|
|
|
505
|
+
getStructMembers( struct ) {
|
|
506
|
+
|
|
507
|
+
const snippets = [];
|
|
508
|
+
const members = struct.getMemberTypes();
|
|
509
|
+
|
|
510
|
+
for ( let i = 0; i < members.length; i ++ ) {
|
|
511
|
+
|
|
512
|
+
const member = members[ i ];
|
|
513
|
+
snippets.push( `\t@location( ${i} ) m${i} : ${ member }<f32>` );
|
|
514
|
+
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
return snippets.join( ',\n' );
|
|
518
|
+
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
getStructs( shaderStage ) {
|
|
522
|
+
|
|
523
|
+
const snippets = [];
|
|
524
|
+
const structs = this.structs[ shaderStage ];
|
|
525
|
+
|
|
526
|
+
for ( let index = 0, length = structs.length; index < length; index ++ ) {
|
|
527
|
+
|
|
528
|
+
const struct = structs[ index ];
|
|
529
|
+
const name = struct.name;
|
|
530
|
+
|
|
531
|
+
let snippet = `\struct ${ name } {\n`;
|
|
532
|
+
snippet += this.getStructMembers( struct );
|
|
533
|
+
snippet += '\n}';
|
|
534
|
+
|
|
535
|
+
snippets.push( snippet );
|
|
536
|
+
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
return snippets.join( '\n\n' );
|
|
540
|
+
|
|
541
|
+
}
|
|
542
|
+
|
|
495
543
|
getVar( type, name ) {
|
|
496
544
|
|
|
497
545
|
return `var ${ name } : ${ this.getType( type ) }`;
|
|
@@ -540,6 +588,7 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
540
588
|
|
|
541
589
|
attributesSnippet += ' @interpolate( flat )';
|
|
542
590
|
|
|
591
|
+
|
|
543
592
|
}
|
|
544
593
|
|
|
545
594
|
snippets.push( `${ attributesSnippet } ${ varying.name } : ${ this.getType( varying.type ) }` );
|
|
@@ -580,9 +629,9 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
580
629
|
|
|
581
630
|
if ( uniform.type === 'texture' || uniform.type === 'cubeTexture' ) {
|
|
582
631
|
|
|
583
|
-
|
|
632
|
+
const texture = uniform.node.value;
|
|
584
633
|
|
|
585
|
-
|
|
634
|
+
if ( shaderStage === 'fragment' && this.isUnfilterable( texture ) === false && uniform.node.isStoreTextureNode !== true ) {
|
|
586
635
|
|
|
587
636
|
if ( texture.isDepthTexture === true && texture.compareFunction !== null ) {
|
|
588
637
|
|
|
@@ -596,8 +645,6 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
596
645
|
|
|
597
646
|
}
|
|
598
647
|
|
|
599
|
-
const texture = uniform.node.value;
|
|
600
|
-
|
|
601
648
|
let textureType;
|
|
602
649
|
|
|
603
650
|
if ( texture.isCubeTexture === true ) {
|
|
@@ -612,6 +659,12 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
612
659
|
|
|
613
660
|
textureType = 'texture_external';
|
|
614
661
|
|
|
662
|
+
} else if ( uniform.node.isStoreTextureNode === true ) {
|
|
663
|
+
|
|
664
|
+
const format = getFormat( texture );
|
|
665
|
+
|
|
666
|
+
textureType = 'texture_storage_2d<' + format + ', write>';
|
|
667
|
+
|
|
615
668
|
} else {
|
|
616
669
|
|
|
617
670
|
textureType = 'texture_2d<f32>';
|
|
@@ -712,13 +765,16 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
712
765
|
|
|
713
766
|
}
|
|
714
767
|
|
|
768
|
+
const outputNode = mainNode.outputNode;
|
|
715
769
|
const stageData = shadersData[ shaderStage ];
|
|
716
770
|
|
|
717
771
|
stageData.uniforms = this.getUniforms( shaderStage );
|
|
718
772
|
stageData.attributes = this.getAttributes( shaderStage );
|
|
719
773
|
stageData.varyings = this.getVaryings( shaderStage );
|
|
774
|
+
stageData.structs = this.getStructs( shaderStage );
|
|
720
775
|
stageData.vars = this.getVars( shaderStage );
|
|
721
776
|
stageData.codes = this.getCodes( shaderStage );
|
|
777
|
+
stageData.returnType = ( outputNode !== undefined && outputNode.isOutputStructNode === true ) ? outputNode.nodeType : '@location( 0 ) vec4<f32>';
|
|
722
778
|
stageData.flow = flow;
|
|
723
779
|
|
|
724
780
|
}
|
|
@@ -736,18 +792,6 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
736
792
|
|
|
737
793
|
}
|
|
738
794
|
|
|
739
|
-
getRenderTarget( width, height, options ) {
|
|
740
|
-
|
|
741
|
-
return new RenderTarget( width, height, options );
|
|
742
|
-
|
|
743
|
-
}
|
|
744
|
-
|
|
745
|
-
getCubeRenderTarget( size, options ) {
|
|
746
|
-
|
|
747
|
-
return new CubeRenderTarget( size, options );
|
|
748
|
-
|
|
749
|
-
}
|
|
750
|
-
|
|
751
795
|
getMethod( method ) {
|
|
752
796
|
|
|
753
797
|
if ( wgslPolyfill[ method ] !== undefined ) {
|
|
@@ -778,20 +822,6 @@ class WGSLNodeBuilder extends NodeBuilder {
|
|
|
778
822
|
|
|
779
823
|
}
|
|
780
824
|
|
|
781
|
-
_getNodeUniform( uniformNode, type ) {
|
|
782
|
-
|
|
783
|
-
if ( type === 'float' ) return new FloatNodeUniform( uniformNode );
|
|
784
|
-
if ( type === 'vec2' ) return new Vector2NodeUniform( uniformNode );
|
|
785
|
-
if ( type === 'vec3' ) return new Vector3NodeUniform( uniformNode );
|
|
786
|
-
if ( type === 'vec4' ) return new Vector4NodeUniform( uniformNode );
|
|
787
|
-
if ( type === 'color' ) return new ColorNodeUniform( uniformNode );
|
|
788
|
-
if ( type === 'mat3' ) return new Matrix3NodeUniform( uniformNode );
|
|
789
|
-
if ( type === 'mat4' ) return new Matrix4NodeUniform( uniformNode );
|
|
790
|
-
|
|
791
|
-
throw new Error( `Uniform "${type}" not declared.` );
|
|
792
|
-
|
|
793
|
-
}
|
|
794
|
-
|
|
795
825
|
_getWGSLVertexCode( shaderData ) {
|
|
796
826
|
|
|
797
827
|
return `${ this.getSignature() }
|
|
@@ -831,11 +861,14 @@ fn main( ${shaderData.attributes} ) -> NodeVaryingsStruct {
|
|
|
831
861
|
// uniforms
|
|
832
862
|
${shaderData.uniforms}
|
|
833
863
|
|
|
864
|
+
// structs
|
|
865
|
+
${shaderData.structs}
|
|
866
|
+
|
|
834
867
|
// codes
|
|
835
868
|
${shaderData.codes}
|
|
836
869
|
|
|
837
870
|
@fragment
|
|
838
|
-
fn main( ${shaderData.varyings} ) ->
|
|
871
|
+
fn main( ${shaderData.varyings} ) -> ${shaderData.returnType} {
|
|
839
872
|
|
|
840
873
|
// vars
|
|
841
874
|
${shaderData.vars}
|
|
@@ -2,7 +2,7 @@ import NodeFunction from '../../../nodes/core/NodeFunction.js';
|
|
|
2
2
|
import NodeFunctionInput from '../../../nodes/core/NodeFunctionInput.js';
|
|
3
3
|
|
|
4
4
|
const declarationRegexp = /^[fn]*\s*([a-z_0-9]+)?\s*\(([\s\S]*?)\)\s*[\-\>]*\s*([a-z_0-9]+)?/i;
|
|
5
|
-
const propertiesRegexp = /[a-z_0-9]
|
|
5
|
+
const propertiesRegexp = /[a-z_0-9]+|<(.*?)>+/ig;
|
|
6
6
|
|
|
7
7
|
const wgslTypeLib = {
|
|
8
8
|
f32: 'float'
|
|
@@ -46,7 +46,7 @@ const parse = ( source ) => {
|
|
|
46
46
|
|
|
47
47
|
// precision
|
|
48
48
|
|
|
49
|
-
if ( i < propsMatches.length &&
|
|
49
|
+
if ( i < propsMatches.length && propsMatches[ i ][ 0 ].startsWith( '<' ) === true )
|
|
50
50
|
i ++;
|
|
51
51
|
|
|
52
52
|
// add input
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
|
-
GPUTextureAspect, GPUTextureViewDimension, GPUBufferBindingType
|
|
2
|
+
GPUTextureAspect, GPUTextureViewDimension, GPUBufferBindingType, GPUTextureSampleType
|
|
3
3
|
} from './WebGPUConstants.js';
|
|
4
|
+
import { FloatType } from 'three';
|
|
4
5
|
|
|
5
6
|
class WebGPUBindingUtils {
|
|
6
7
|
|
|
@@ -58,13 +59,25 @@ class WebGPUBindingUtils {
|
|
|
58
59
|
|
|
59
60
|
bindingGPU.externalTexture = {}; // GPUExternalTextureBindingLayout
|
|
60
61
|
|
|
62
|
+
} else if ( binding.isSampledTexture && binding.store ) {
|
|
63
|
+
|
|
64
|
+
const format = this.backend.get( binding.texture ).texture.format;
|
|
65
|
+
|
|
66
|
+
bindingGPU.storageTexture = { format }; // GPUStorageTextureBindingLayout
|
|
67
|
+
|
|
61
68
|
} else if ( binding.isSampledTexture ) {
|
|
62
69
|
|
|
63
70
|
const texture = {}; // GPUTextureBindingLayout
|
|
64
71
|
|
|
65
72
|
if ( binding.texture.isDepthTexture ) {
|
|
66
73
|
|
|
67
|
-
texture.sampleType =
|
|
74
|
+
texture.sampleType = GPUTextureSampleType.Depth;
|
|
75
|
+
|
|
76
|
+
} else if ( binding.texture.isDataTexture && binding.texture.type === FloatType ) {
|
|
77
|
+
|
|
78
|
+
// @TODO: Add support for this soon: backend.hasFeature( 'float32-filterable' )
|
|
79
|
+
|
|
80
|
+
texture.sampleType = GPUTextureSampleType.UnfilterableFloat;
|
|
68
81
|
|
|
69
82
|
}
|
|
70
83
|
|
|
@@ -64,25 +64,49 @@ class WebGPUPipelineUtils {
|
|
|
64
64
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
const colorWriteMask = this._getColorWriteMask( material );
|
|
68
|
+
|
|
69
|
+
const targets = [];
|
|
70
|
+
|
|
71
|
+
if ( renderObject.context.textures !== null ) {
|
|
72
|
+
|
|
73
|
+
const textures = renderObject.context.textures;
|
|
74
|
+
|
|
75
|
+
for ( let i = 0; i < textures.length; i ++ ) {
|
|
76
|
+
|
|
77
|
+
const colorFormat = utils.getTextureFormatGPU( textures[ i ] );
|
|
78
|
+
|
|
79
|
+
targets.push( {
|
|
80
|
+
format: colorFormat,
|
|
81
|
+
blend: blending,
|
|
82
|
+
writeMask: colorWriteMask
|
|
83
|
+
} );
|
|
84
|
+
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
} else {
|
|
88
|
+
|
|
89
|
+
const colorFormat = utils.getCurrentColorFormat( renderObject.context );
|
|
90
|
+
|
|
91
|
+
targets.push( {
|
|
92
|
+
format: colorFormat,
|
|
93
|
+
blend: blending,
|
|
94
|
+
writeMask: colorWriteMask
|
|
95
|
+
} );
|
|
96
|
+
|
|
97
|
+
}
|
|
68
98
|
|
|
69
99
|
const vertexModule = backend.get( vertexProgram ).module;
|
|
70
100
|
const fragmentModule = backend.get( fragmentProgram ).module;
|
|
71
101
|
|
|
72
102
|
const primitiveState = this._getPrimitiveState( object, geometry, material );
|
|
73
|
-
const colorWriteMask = this._getColorWriteMask( material );
|
|
74
103
|
const depthCompare = this._getDepthCompare( material );
|
|
75
|
-
const colorFormat = utils.getCurrentColorFormat( renderObject.context );
|
|
76
104
|
const depthStencilFormat = utils.getCurrentDepthStencilFormat( renderObject.context );
|
|
77
105
|
const sampleCount = utils.getSampleCount( renderObject.context );
|
|
78
106
|
|
|
79
107
|
pipelineData.pipeline = device.createRenderPipeline( {
|
|
80
108
|
vertex: Object.assign( {}, vertexModule, { buffers: vertexBuffers } ),
|
|
81
|
-
fragment: Object.assign( {}, fragmentModule, { targets
|
|
82
|
-
format: colorFormat,
|
|
83
|
-
blend: blending,
|
|
84
|
-
writeMask: colorWriteMask
|
|
85
|
-
} ] } ),
|
|
109
|
+
fragment: Object.assign( {}, fragmentModule, { targets } ),
|
|
86
110
|
primitive: primitiveState,
|
|
87
111
|
depthStencil: {
|
|
88
112
|
format: depthStencilFormat,
|
|
@@ -94,7 +118,8 @@ class WebGPUPipelineUtils {
|
|
|
94
118
|
stencilWriteMask: material.stencilWriteMask
|
|
95
119
|
},
|
|
96
120
|
multisample: {
|
|
97
|
-
count: sampleCount
|
|
121
|
+
count: sampleCount,
|
|
122
|
+
alphaToCoverageEnabled: material.alphaToCoverage
|
|
98
123
|
},
|
|
99
124
|
layout: device.createPipelineLayout( {
|
|
100
125
|
bindGroupLayouts: [ bindingsData.layout ]
|
|
@@ -441,17 +466,17 @@ class WebGPUPipelineUtils {
|
|
|
441
466
|
switch ( material.side ) {
|
|
442
467
|
|
|
443
468
|
case FrontSide:
|
|
444
|
-
descriptor.frontFace = GPUFrontFace.
|
|
445
|
-
descriptor.cullMode = GPUCullMode.
|
|
469
|
+
descriptor.frontFace = GPUFrontFace.CCW;
|
|
470
|
+
descriptor.cullMode = GPUCullMode.Back;
|
|
446
471
|
break;
|
|
447
472
|
|
|
448
473
|
case BackSide:
|
|
449
|
-
descriptor.frontFace = GPUFrontFace.
|
|
450
|
-
descriptor.cullMode = GPUCullMode.
|
|
474
|
+
descriptor.frontFace = GPUFrontFace.CCW;
|
|
475
|
+
descriptor.cullMode = GPUCullMode.Front;
|
|
451
476
|
break;
|
|
452
477
|
|
|
453
478
|
case DoubleSide:
|
|
454
|
-
descriptor.frontFace = GPUFrontFace.
|
|
479
|
+
descriptor.frontFace = GPUFrontFace.CCW;
|
|
455
480
|
descriptor.cullMode = GPUCullMode.None;
|
|
456
481
|
break;
|
|
457
482
|
|