super-three 0.152.0 → 0.154.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 +778 -557
- package/build/three.js +778 -557
- package/build/three.min.js +1 -1
- package/build/three.module.js +769 -539
- package/build/three.module.min.js +1 -1
- package/examples/jsm/cameras/CinematicCamera.js +1 -2
- package/examples/jsm/capabilities/WebGPU.js +15 -1
- package/examples/jsm/controls/ArcballControls.js +2 -1
- package/examples/jsm/controls/FlyControls.js +25 -9
- package/examples/jsm/controls/OrbitControls.js +5 -1
- package/examples/jsm/csm/CSM.js +1 -3
- package/examples/jsm/effects/AnaglyphEffect.js +6 -20
- package/examples/jsm/effects/OutlineEffect.js +1 -1
- package/examples/jsm/effects/ParallaxBarrierEffect.js +3 -0
- package/examples/jsm/environments/RoomEnvironment.js +6 -2
- package/examples/jsm/exporters/GLTFExporter.js +74 -2
- package/examples/jsm/exporters/USDZExporter.js +170 -129
- package/examples/jsm/helpers/ViewHelper.js +1 -1
- package/examples/jsm/lines/LineMaterial.js +1 -1
- package/examples/jsm/loaders/3DMLoader.js +1 -1
- package/examples/jsm/loaders/3MFLoader.js +5 -1
- package/examples/jsm/loaders/AMFLoader.js +5 -1
- package/examples/jsm/loaders/ColladaLoader.js +4 -1
- package/examples/jsm/loaders/DRACOLoader.js +2 -0
- package/examples/jsm/loaders/FBXLoader.js +9 -2
- package/examples/jsm/loaders/GLTFLoader.js +230 -94
- package/examples/jsm/loaders/KTX2Loader.js +106 -47
- package/examples/jsm/loaders/LDrawLoader.js +4 -7
- package/examples/jsm/loaders/MMDLoader.js +40 -13
- package/examples/jsm/loaders/PCDLoader.js +25 -10
- package/examples/jsm/loaders/PDBLoader.js +7 -2
- package/examples/jsm/loaders/PLYLoader.js +30 -8
- package/examples/jsm/loaders/STLLoader.js +8 -3
- package/examples/jsm/loaders/VRMLLoader.js +55 -7
- package/examples/jsm/loaders/VTKLoader.js +12 -4
- package/examples/jsm/loaders/XYZLoader.js +9 -3
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -2
- package/examples/jsm/math/Lut.js +5 -4
- package/examples/jsm/math/MeshSurfaceSampler.js +82 -37
- package/examples/jsm/misc/GPUComputationRenderer.js +1 -0
- package/examples/jsm/misc/VolumeSlice.js +3 -1
- package/examples/jsm/nodes/Nodes.js +22 -16
- package/examples/jsm/nodes/accessors/BufferAttributeNode.js +99 -0
- package/examples/jsm/nodes/accessors/BufferNode.js +2 -2
- package/examples/jsm/nodes/accessors/CameraNode.js +25 -4
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +7 -1
- package/examples/jsm/nodes/accessors/InstanceNode.js +29 -12
- package/examples/jsm/nodes/accessors/MaterialNode.js +55 -47
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +2 -2
- package/examples/jsm/nodes/accessors/ModelNode.js +3 -1
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +4 -9
- package/examples/jsm/nodes/accessors/MorphNode.js +70 -0
- package/examples/jsm/nodes/accessors/NormalNode.js +3 -2
- package/examples/jsm/nodes/accessors/Object3DNode.js +10 -2
- package/examples/jsm/nodes/accessors/ReferenceNode.js +2 -2
- package/examples/jsm/nodes/accessors/SceneNode.js +46 -0
- package/examples/jsm/nodes/accessors/SkinningNode.js +43 -62
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +2 -2
- package/examples/jsm/nodes/accessors/TangentNode.js +2 -2
- package/examples/jsm/nodes/accessors/TextureBicubicNode.js +94 -0
- package/examples/jsm/nodes/accessors/TextureNode.js +68 -6
- package/examples/jsm/nodes/accessors/TextureSizeNode.js +35 -0
- package/examples/jsm/nodes/accessors/UVNode.js +1 -1
- package/examples/jsm/nodes/code/CodeNode.js +3 -0
- package/examples/jsm/nodes/code/FunctionNode.js +25 -4
- package/examples/jsm/nodes/core/AttributeNode.js +1 -1
- package/examples/jsm/nodes/core/BypassNode.js +2 -2
- package/examples/jsm/nodes/core/ContextNode.js +2 -0
- package/examples/jsm/nodes/core/IndexNode.js +66 -0
- package/examples/jsm/nodes/core/LightingModel.js +2 -1
- package/examples/jsm/nodes/core/Node.js +13 -16
- package/examples/jsm/nodes/core/NodeAttribute.js +2 -1
- package/examples/jsm/nodes/core/NodeBuilder.js +86 -8
- package/examples/jsm/nodes/core/NodeUtils.js +10 -0
- package/examples/jsm/nodes/core/PropertyNode.js +6 -2
- package/examples/jsm/nodes/core/StackNode.js +8 -1
- package/examples/jsm/nodes/core/UniformNode.js +1 -1
- package/examples/jsm/nodes/core/VarNode.js +1 -3
- package/examples/jsm/nodes/display/BlendModeNode.js +9 -9
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +7 -7
- package/examples/jsm/nodes/display/ColorSpaceNode.js +50 -49
- package/examples/jsm/nodes/display/NormalMapNode.js +3 -3
- package/examples/jsm/nodes/display/ToneMappingNode.js +24 -15
- package/examples/jsm/nodes/display/ViewportDepthNode.js +69 -0
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +34 -0
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +7 -6
- package/examples/jsm/nodes/display/ViewportTextureNode.js +33 -19
- package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +5 -5
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +10 -8
- package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +2 -2
- package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +43 -0
- package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +4 -4
- package/examples/jsm/nodes/functions/BSDF/D_GGX.js +2 -2
- package/examples/jsm/nodes/functions/BSDF/EnvironmentBRDF.js +13 -0
- package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +2 -4
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +2 -2
- package/examples/jsm/nodes/functions/PhongLightingModel.js +7 -7
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +132 -19
- package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +2 -2
- package/examples/jsm/nodes/functions/material/getRoughness.js +3 -3
- package/examples/jsm/nodes/geometry/RangeNode.js +33 -51
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +6 -3
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +2 -2
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +107 -62
- package/examples/jsm/nodes/lighting/HemisphereLightNode.js +2 -2
- package/examples/jsm/nodes/lighting/LightUtils.js +2 -2
- package/examples/jsm/nodes/lighting/LightingContextNode.js +17 -15
- package/examples/jsm/nodes/lighting/PointLightNode.js +3 -3
- package/examples/jsm/nodes/lighting/SpotLightNode.js +3 -3
- package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +0 -15
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +0 -15
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +0 -10
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +0 -9
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +41 -0
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +1 -14
- package/examples/jsm/nodes/materials/NodeMaterial.js +119 -29
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +0 -9
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +0 -7
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +3 -3
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +14 -14
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +4 -4
- package/examples/jsm/nodes/math/MathNode.js +6 -0
- 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 +60 -33
- package/examples/jsm/nodes/utils/EquirectUVNode.js +2 -3
- package/examples/jsm/nodes/utils/LoopNode.js +186 -0
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +1 -1
- package/examples/jsm/objects/GroundProjectedSkybox.js +1 -1
- package/examples/jsm/objects/Lensflare.js +3 -4
- package/examples/jsm/objects/MarchingCubes.js +5 -1
- package/examples/jsm/objects/Reflector.js +4 -1
- package/examples/jsm/objects/Refractor.js +1 -1
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/Water.js +2 -1
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/offscreen/scene.js +1 -0
- package/examples/jsm/physics/RapierPhysics.js +93 -133
- package/examples/jsm/postprocessing/AfterimagePass.js +3 -0
- package/examples/jsm/postprocessing/BloomPass.js +7 -2
- package/examples/jsm/postprocessing/BokehPass.js +3 -2
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -0
- package/examples/jsm/postprocessing/EffectComposer.js +4 -1
- package/examples/jsm/postprocessing/FilmPass.js +1 -0
- package/examples/jsm/postprocessing/OutlinePass.js +8 -9
- package/examples/jsm/postprocessing/OutputPass.js +72 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +4 -2
- package/examples/jsm/postprocessing/SMAAPass.js +5 -2
- package/examples/jsm/postprocessing/SSAARenderPass.js +5 -13
- package/examples/jsm/postprocessing/SSAOPass.js +4 -2
- package/examples/jsm/postprocessing/SSRPass.js +3 -1
- package/examples/jsm/postprocessing/SavePass.js +5 -2
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +17 -4
- package/examples/jsm/postprocessing/TexturePass.js +2 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +13 -13
- package/examples/jsm/renderers/{webgpu/WebGPUAnimation.js → common/Animation.js} +2 -2
- package/examples/jsm/renderers/common/Attributes.js +75 -0
- package/examples/jsm/renderers/common/Backend.js +162 -0
- package/examples/jsm/renderers/common/Background.js +134 -0
- package/examples/jsm/renderers/common/Binding.js +11 -0
- package/examples/jsm/renderers/common/Bindings.js +169 -0
- package/examples/jsm/renderers/common/Buffer.js +38 -0
- package/examples/jsm/renderers/{webgpu/WebGPUBufferUtils.js → common/BufferUtils.js} +2 -2
- package/examples/jsm/renderers/{webgpu/WebGPUWeakMap.js → common/ChainMap.js} +11 -5
- package/examples/jsm/renderers/common/ComputePipeline.js +17 -0
- package/examples/jsm/renderers/common/Constants.js +14 -0
- package/examples/jsm/renderers/common/CubeRenderTarget.js +65 -0
- package/examples/jsm/renderers/common/DataMap.js +54 -0
- package/examples/jsm/renderers/{webgpu/WebGPUGeometries.js → common/Geometries.js} +38 -37
- package/examples/jsm/renderers/{webgpu/WebGPUInfo.js → common/Info.js} +2 -3
- package/examples/jsm/renderers/common/Pipeline.js +13 -0
- package/examples/jsm/renderers/common/Pipelines.js +321 -0
- package/examples/jsm/renderers/common/ProgrammableStage.js +18 -0
- package/examples/jsm/renderers/common/RenderContext.js +37 -0
- package/examples/jsm/renderers/common/RenderContexts.js +38 -0
- package/examples/jsm/renderers/{webgpu/WebGPURenderLists.js → common/RenderList.js} +2 -39
- package/examples/jsm/renderers/common/RenderLists.js +38 -0
- package/examples/jsm/renderers/common/RenderObject.js +113 -0
- package/examples/jsm/renderers/common/RenderObjects.js +92 -0
- package/examples/jsm/renderers/common/RenderPipeline.js +16 -0
- package/examples/jsm/renderers/{webgpu/WebGPURenderTarget.js → common/RenderTarget.js} +2 -2
- package/examples/jsm/renderers/common/Renderer.js +864 -0
- package/examples/jsm/renderers/common/SampledTexture.js +80 -0
- package/examples/jsm/renderers/common/Sampler.js +18 -0
- package/examples/jsm/renderers/common/StorageBuffer.js +17 -0
- package/examples/jsm/renderers/common/Textures.js +206 -0
- package/examples/jsm/renderers/{webgpu/WebGPUUniform.js → common/Uniform.js} +13 -9
- package/examples/jsm/renderers/common/UniformBuffer.js +15 -0
- package/examples/jsm/renderers/{webgpu/WebGPUUniformsGroup.js → common/UniformsGroup.js} +13 -13
- package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodes.js → common/nodes/NodeRender.js} +3 -3
- package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampledTexture.js → common/nodes/NodeSampledTexture.js} +4 -4
- package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampler.js → common/nodes/NodeSampler.js} +3 -3
- package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeUniform.js → common/nodes/NodeUniform.js} +1 -1
- package/examples/jsm/renderers/common/nodes/Nodes.js +319 -0
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +340 -0
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +23 -19
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +847 -0
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +15 -1131
- package/examples/jsm/renderers/webgpu/nodes/{WebGPUNodeBuilder.js → WGSLNodeBuilder.js} +75 -45
- package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeFunction.js +2 -2
- package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeParser.js +1 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +255 -0
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +145 -0
- package/examples/jsm/renderers/webgpu/{constants.js → utils/WebGPUConstants.js} +6 -7
- package/examples/jsm/renderers/webgpu/{WebGPURenderPipeline.js → utils/WebGPUPipelineUtils.js} +154 -247
- package/examples/jsm/renderers/webgpu/{WebGPUTextureUtils.js → utils/WebGPUTextureMipmapUtils.js} +3 -25
- package/examples/jsm/renderers/webgpu/{WebGPUTextures.js → utils/WebGPUTextureUtils.js} +392 -505
- package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +92 -0
- package/examples/jsm/shaders/BleachBypassShader.js +2 -0
- package/examples/jsm/shaders/BlendShader.js +1 -2
- package/examples/jsm/shaders/BokehShader2.js +3 -0
- package/examples/jsm/shaders/ColorifyShader.js +2 -0
- package/examples/jsm/shaders/ConvolutionShader.js +2 -0
- package/examples/jsm/shaders/CopyShader.js +4 -2
- package/examples/jsm/shaders/DotScreenShader.js +2 -0
- package/examples/jsm/shaders/ExposureShader.js +44 -0
- package/examples/jsm/shaders/FilmShader.js +2 -0
- package/examples/jsm/shaders/GammaCorrectionShader.js +2 -0
- package/examples/jsm/shaders/HorizontalBlurShader.js +2 -0
- package/examples/jsm/shaders/OutputShader.js +61 -0
- package/examples/jsm/shaders/RGBShiftShader.js +2 -0
- package/examples/jsm/shaders/SepiaShader.js +2 -0
- package/examples/jsm/shaders/ToonShader.js +13 -5
- package/examples/jsm/shaders/VerticalBlurShader.js +2 -0
- package/examples/jsm/shaders/VignetteShader.js +2 -0
- package/examples/jsm/shaders/WaterRefractionShader.js +5 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +17 -1
- package/examples/jsm/utils/TextureUtils.js +86 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +34 -13
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +1 -0
- package/examples/jsm/webxr/XRPlanes.js +100 -0
- package/package.json +3 -1
- package/src/Three.Legacy.js +0 -228
- package/src/audio/PositionalAudio.js +8 -0
- package/src/cameras/Camera.js +5 -0
- package/src/cameras/CubeCamera.js +76 -13
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/constants.js +13 -1
- package/src/core/BufferAttribute.js +3 -25
- package/src/core/BufferGeometry.js +1 -8
- package/src/core/Object3D.js +1 -1
- package/src/extras/core/Curve.js +1 -1
- package/src/loaders/CubeTextureLoader.js +2 -0
- package/src/loaders/Loader.js +2 -0
- package/src/loaders/MaterialLoader.js +5 -0
- package/src/loaders/ObjectLoader.js +1 -0
- package/src/materials/Material.js +13 -1
- package/src/materials/MeshPhysicalMaterial.js +32 -6
- package/src/math/Color.js +16 -11
- package/src/math/Frustum.js +16 -2
- package/src/math/MathUtils.js +16 -0
- package/src/math/Matrix3.js +26 -6
- package/src/math/Matrix4.js +74 -19
- package/src/objects/InstancedMesh.js +3 -0
- package/src/objects/Mesh.js +14 -10
- package/src/objects/Skeleton.js +1 -3
- package/src/objects/SkinnedMesh.js +36 -8
- package/src/renderers/WebGLRenderer.js +126 -21
- package/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js +68 -0
- package/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +26 -3
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +9 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +26 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +10 -2
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/{output_fragment.glsl.js → opaque_fragment.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +10 -5
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +6 -1
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +7 -1
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +6 -1
- package/src/renderers/shaders/ShaderChunk.js +10 -6
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/cube.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -2
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +12 -2
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/points.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib.js +4 -1
- package/src/renderers/shaders/UniformsLib.js +2 -0
- package/src/renderers/webgl/WebGLBindingStates.js +13 -5
- package/src/renderers/webgl/WebGLGeometries.js +12 -0
- package/src/renderers/webgl/WebGLInfo.js +0 -1
- package/src/renderers/webgl/WebGLMaterials.js +18 -0
- package/src/renderers/webgl/WebGLObjects.js +23 -3
- package/src/renderers/webgl/WebGLProgram.js +43 -5
- package/src/renderers/webgl/WebGLPrograms.js +19 -7
- package/src/renderers/webgl/WebGLTextures.js +19 -1
- package/src/renderers/webvr/WebVRManager.js +12 -0
- package/src/renderers/webxr/WebXRManager.js +39 -99
- package/src/scenes/Scene.js +0 -14
- package/src/textures/DepthTexture.js +22 -0
- package/src/textures/FramebufferTexture.js +1 -3
- package/src/textures/Source.js +4 -0
- package/src/textures/Texture.js +1 -1
- package/examples/jsm/exporters/ColladaExporter.js +0 -725
- package/examples/jsm/geometries/LightningStrike.js +0 -1017
- package/examples/jsm/loaders/PRWMLoader.js +0 -299
- package/examples/jsm/nodes/core/InstanceIndexNode.js +0 -26
- package/examples/jsm/objects/LightningStorm.js +0 -245
- package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +0 -361
- package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +0 -197
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +0 -190
- package/examples/jsm/renderers/webgpu/WebGPUBinding.js +0 -22
- package/examples/jsm/renderers/webgpu/WebGPUBindings.js +0 -270
- package/examples/jsm/renderers/webgpu/WebGPUBuffer.js +0 -43
- package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +0 -78
- package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +0 -22
- package/examples/jsm/renderers/webgpu/WebGPUProperties.js +0 -44
- package/examples/jsm/renderers/webgpu/WebGPURenderObject.js +0 -40
- package/examples/jsm/renderers/webgpu/WebGPURenderObjects.js +0 -50
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +0 -274
- package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +0 -54
- package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +0 -75
- package/examples/jsm/renderers/webgpu/WebGPUSampler.js +0 -29
- package/examples/jsm/renderers/webgpu/WebGPUStorageBuffer.js +0 -20
- package/examples/jsm/renderers/webgpu/WebGPUTextureRenderer.js +0 -38
- package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +0 -18
- package/examples/jsm/renderers/webgpu/WebGPUUtils.js +0 -88
- package/examples/jsm/shaders/ToneMapShader.js +0 -73
- /package/src/renderers/shaders/ShaderChunk/{encodings_fragment.glsl.js → colorspace_fragment.glsl.js} +0 -0
- /package/src/renderers/shaders/ShaderChunk/{encodings_pars_fragment.glsl.js → colorspace_pars_fragment.glsl.js} +0 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Triangle,
|
|
3
|
+
Vector2,
|
|
3
4
|
Vector3
|
|
4
5
|
} from 'three';
|
|
5
6
|
|
|
@@ -16,26 +17,20 @@ import {
|
|
|
16
17
|
|
|
17
18
|
const _face = new Triangle();
|
|
18
19
|
const _color = new Vector3();
|
|
20
|
+
const _uva = new Vector2(), _uvb = new Vector2(), _uvc = new Vector2();
|
|
19
21
|
|
|
20
22
|
class MeshSurfaceSampler {
|
|
21
23
|
|
|
22
24
|
constructor( mesh ) {
|
|
23
25
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if ( geometry.index ) {
|
|
27
|
-
|
|
28
|
-
console.warn( 'THREE.MeshSurfaceSampler: Converting geometry to non-indexed BufferGeometry.' );
|
|
29
|
-
|
|
30
|
-
geometry = geometry.toNonIndexed();
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
this.geometry = geometry;
|
|
26
|
+
this.geometry = mesh.geometry;
|
|
35
27
|
this.randomFunction = Math.random;
|
|
36
28
|
|
|
29
|
+
this.indexAttribute = this.geometry.index;
|
|
37
30
|
this.positionAttribute = this.geometry.getAttribute( 'position' );
|
|
31
|
+
this.normalAttribute = this.geometry.getAttribute( 'normal' );
|
|
38
32
|
this.colorAttribute = this.geometry.getAttribute( 'color' );
|
|
33
|
+
this.uvAttribute = this.geometry.getAttribute( 'uv' );
|
|
39
34
|
this.weightAttribute = null;
|
|
40
35
|
|
|
41
36
|
this.distribution = null;
|
|
@@ -52,49 +47,62 @@ class MeshSurfaceSampler {
|
|
|
52
47
|
|
|
53
48
|
build() {
|
|
54
49
|
|
|
50
|
+
const indexAttribute = this.indexAttribute;
|
|
55
51
|
const positionAttribute = this.positionAttribute;
|
|
56
52
|
const weightAttribute = this.weightAttribute;
|
|
57
53
|
|
|
58
|
-
const
|
|
54
|
+
const totalFaces = indexAttribute ? ( indexAttribute.count / 3 ) : ( positionAttribute.count / 3 );
|
|
55
|
+
const faceWeights = new Float32Array( totalFaces );
|
|
59
56
|
|
|
60
57
|
// Accumulate weights for each mesh face.
|
|
61
58
|
|
|
62
|
-
for ( let i = 0; i <
|
|
59
|
+
for ( let i = 0; i < totalFaces; i ++ ) {
|
|
63
60
|
|
|
64
61
|
let faceWeight = 1;
|
|
65
62
|
|
|
63
|
+
let i0 = 3 * i;
|
|
64
|
+
let i1 = 3 * i + 1;
|
|
65
|
+
let i2 = 3 * i + 2;
|
|
66
|
+
|
|
67
|
+
if ( indexAttribute ) {
|
|
68
|
+
|
|
69
|
+
i0 = indexAttribute.getX( i0 );
|
|
70
|
+
i1 = indexAttribute.getX( i1 );
|
|
71
|
+
i2 = indexAttribute.getX( i2 );
|
|
72
|
+
|
|
73
|
+
}
|
|
74
|
+
|
|
66
75
|
if ( weightAttribute ) {
|
|
67
76
|
|
|
68
|
-
faceWeight = weightAttribute.getX(
|
|
69
|
-
+ weightAttribute.getX(
|
|
70
|
-
+ weightAttribute.getX(
|
|
77
|
+
faceWeight = weightAttribute.getX( i0 )
|
|
78
|
+
+ weightAttribute.getX( i1 )
|
|
79
|
+
+ weightAttribute.getX( i2 );
|
|
71
80
|
|
|
72
81
|
}
|
|
73
82
|
|
|
74
|
-
_face.a.fromBufferAttribute( positionAttribute,
|
|
75
|
-
_face.b.fromBufferAttribute( positionAttribute,
|
|
76
|
-
_face.c.fromBufferAttribute( positionAttribute,
|
|
83
|
+
_face.a.fromBufferAttribute( positionAttribute, i0 );
|
|
84
|
+
_face.b.fromBufferAttribute( positionAttribute, i1 );
|
|
85
|
+
_face.c.fromBufferAttribute( positionAttribute, i2 );
|
|
77
86
|
faceWeight *= _face.getArea();
|
|
78
87
|
|
|
79
|
-
faceWeights[ i
|
|
88
|
+
faceWeights[ i ] = faceWeight;
|
|
80
89
|
|
|
81
90
|
}
|
|
82
91
|
|
|
83
92
|
// Store cumulative total face weights in an array, where weight index
|
|
84
93
|
// corresponds to face index.
|
|
85
94
|
|
|
86
|
-
|
|
87
|
-
|
|
95
|
+
const distribution = new Float32Array( totalFaces );
|
|
88
96
|
let cumulativeTotal = 0;
|
|
89
97
|
|
|
90
|
-
for ( let i = 0; i <
|
|
98
|
+
for ( let i = 0; i < totalFaces; i ++ ) {
|
|
91
99
|
|
|
92
100
|
cumulativeTotal += faceWeights[ i ];
|
|
93
|
-
|
|
94
|
-
this.distribution[ i ] = cumulativeTotal;
|
|
101
|
+
distribution[ i ] = cumulativeTotal;
|
|
95
102
|
|
|
96
103
|
}
|
|
97
104
|
|
|
105
|
+
this.distribution = distribution;
|
|
98
106
|
return this;
|
|
99
107
|
|
|
100
108
|
}
|
|
@@ -106,13 +114,17 @@ class MeshSurfaceSampler {
|
|
|
106
114
|
|
|
107
115
|
}
|
|
108
116
|
|
|
109
|
-
sample( targetPosition, targetNormal, targetColor ) {
|
|
117
|
+
sample( targetPosition, targetNormal, targetColor, targetUV ) {
|
|
110
118
|
|
|
111
|
-
const
|
|
119
|
+
const faceIndex = this.sampleFaceIndex();
|
|
120
|
+
return this.sampleFace( faceIndex, targetPosition, targetNormal, targetColor, targetUV );
|
|
112
121
|
|
|
113
|
-
|
|
122
|
+
}
|
|
114
123
|
|
|
115
|
-
|
|
124
|
+
sampleFaceIndex() {
|
|
125
|
+
|
|
126
|
+
const cumulativeTotal = this.distribution[ this.distribution.length - 1 ];
|
|
127
|
+
return this.binarySearch( this.randomFunction() * cumulativeTotal );
|
|
116
128
|
|
|
117
129
|
}
|
|
118
130
|
|
|
@@ -150,7 +162,7 @@ class MeshSurfaceSampler {
|
|
|
150
162
|
|
|
151
163
|
}
|
|
152
164
|
|
|
153
|
-
sampleFace( faceIndex, targetPosition, targetNormal, targetColor ) {
|
|
165
|
+
sampleFace( faceIndex, targetPosition, targetNormal, targetColor, targetUV ) {
|
|
154
166
|
|
|
155
167
|
let u = this.randomFunction();
|
|
156
168
|
let v = this.randomFunction();
|
|
@@ -162,9 +174,22 @@ class MeshSurfaceSampler {
|
|
|
162
174
|
|
|
163
175
|
}
|
|
164
176
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
177
|
+
// get the vertex attribute indices
|
|
178
|
+
const indexAttribute = this.indexAttribute;
|
|
179
|
+
let i0 = faceIndex * 3;
|
|
180
|
+
let i1 = faceIndex * 3 + 1;
|
|
181
|
+
let i2 = faceIndex * 3 + 2;
|
|
182
|
+
if ( indexAttribute ) {
|
|
183
|
+
|
|
184
|
+
i0 = indexAttribute.getX( i0 );
|
|
185
|
+
i1 = indexAttribute.getX( i1 );
|
|
186
|
+
i2 = indexAttribute.getX( i2 );
|
|
187
|
+
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
_face.a.fromBufferAttribute( this.positionAttribute, i0 );
|
|
191
|
+
_face.b.fromBufferAttribute( this.positionAttribute, i1 );
|
|
192
|
+
_face.c.fromBufferAttribute( this.positionAttribute, i2 );
|
|
168
193
|
|
|
169
194
|
targetPosition
|
|
170
195
|
.set( 0, 0, 0 )
|
|
@@ -174,15 +199,26 @@ class MeshSurfaceSampler {
|
|
|
174
199
|
|
|
175
200
|
if ( targetNormal !== undefined ) {
|
|
176
201
|
|
|
177
|
-
|
|
202
|
+
if ( this.normalAttribute !== undefined ) {
|
|
203
|
+
|
|
204
|
+
_face.a.fromBufferAttribute( this.normalAttribute, i0 );
|
|
205
|
+
_face.b.fromBufferAttribute( this.normalAttribute, i1 );
|
|
206
|
+
_face.c.fromBufferAttribute( this.normalAttribute, i2 );
|
|
207
|
+
targetNormal.set( 0, 0, 0 ).addScaledVector( _face.a, u ).addScaledVector( _face.b, v ).addScaledVector( _face.c, 1 - ( u + v ) ).normalize();
|
|
208
|
+
|
|
209
|
+
} else {
|
|
210
|
+
|
|
211
|
+
_face.getNormal( targetNormal );
|
|
212
|
+
|
|
213
|
+
}
|
|
178
214
|
|
|
179
215
|
}
|
|
180
216
|
|
|
181
217
|
if ( targetColor !== undefined && this.colorAttribute !== undefined ) {
|
|
182
218
|
|
|
183
|
-
_face.a.fromBufferAttribute( this.colorAttribute,
|
|
184
|
-
_face.b.fromBufferAttribute( this.colorAttribute,
|
|
185
|
-
_face.c.fromBufferAttribute( this.colorAttribute,
|
|
219
|
+
_face.a.fromBufferAttribute( this.colorAttribute, i0 );
|
|
220
|
+
_face.b.fromBufferAttribute( this.colorAttribute, i1 );
|
|
221
|
+
_face.c.fromBufferAttribute( this.colorAttribute, i2 );
|
|
186
222
|
|
|
187
223
|
_color
|
|
188
224
|
.set( 0, 0, 0 )
|
|
@@ -196,6 +232,15 @@ class MeshSurfaceSampler {
|
|
|
196
232
|
|
|
197
233
|
}
|
|
198
234
|
|
|
235
|
+
if ( targetUV !== undefined && this.uvAttribute !== undefined ) {
|
|
236
|
+
|
|
237
|
+
_uva.fromBufferAttribute( this.uvAttribute, i0 );
|
|
238
|
+
_uvb.fromBufferAttribute( this.uvAttribute, i1 );
|
|
239
|
+
_uvc.fromBufferAttribute( this.uvAttribute, i2 );
|
|
240
|
+
targetUV.set( 0, 0 ).addScaledVector( _uva, u ).addScaledVector( _uvb, v ).addScaledVector( _uvc, 1 - ( u + v ) );
|
|
241
|
+
|
|
242
|
+
}
|
|
243
|
+
|
|
199
244
|
return this;
|
|
200
245
|
|
|
201
246
|
}
|
|
@@ -332,6 +332,7 @@ class GPUComputationRenderer {
|
|
|
332
332
|
uniforms = uniforms || {};
|
|
333
333
|
|
|
334
334
|
const material = new ShaderMaterial( {
|
|
335
|
+
name: 'GPUComputationShader',
|
|
335
336
|
uniforms: uniforms,
|
|
336
337
|
vertexShader: getPassThroughVertexShader(),
|
|
337
338
|
fragmentShader: computeFragmentShader
|
|
@@ -5,7 +5,8 @@ import {
|
|
|
5
5
|
Mesh,
|
|
6
6
|
MeshBasicMaterial,
|
|
7
7
|
PlaneGeometry,
|
|
8
|
-
Texture
|
|
8
|
+
Texture,
|
|
9
|
+
SRGBColorSpace
|
|
9
10
|
} from 'three';
|
|
10
11
|
|
|
11
12
|
/**
|
|
@@ -68,6 +69,7 @@ class VolumeSlice {
|
|
|
68
69
|
const canvasMap = new Texture( this.canvas );
|
|
69
70
|
canvasMap.minFilter = LinearFilter;
|
|
70
71
|
canvasMap.wrapS = canvasMap.wrapT = ClampToEdgeWrapping;
|
|
72
|
+
canvasMap.colorSpace = SRGBColorSpace;
|
|
71
73
|
const material = new MeshBasicMaterial( { map: canvasMap, side: DoubleSide, transparent: true } );
|
|
72
74
|
/**
|
|
73
75
|
* @member {Mesh} mesh The mesh ready to get used in the scene
|
|
@@ -10,8 +10,8 @@ export { default as AttributeNode, attribute } from './core/AttributeNode.js';
|
|
|
10
10
|
export { default as BypassNode, bypass } from './core/BypassNode.js';
|
|
11
11
|
export { default as CacheNode, cache } from './core/CacheNode.js';
|
|
12
12
|
export { default as ConstNode } from './core/ConstNode.js';
|
|
13
|
-
export { default as ContextNode, context } from './core/ContextNode.js';
|
|
14
|
-
export { default as
|
|
13
|
+
export { default as ContextNode, context, label } from './core/ContextNode.js';
|
|
14
|
+
export { default as IndexNode, vertexIndex, instanceIndex } from './core/IndexNode.js';
|
|
15
15
|
export { default as LightingModel, lightingModel } from './core/LightingModel.js';
|
|
16
16
|
export { default as Node, addNodeClass, createNodeFromType } from './core/Node.js';
|
|
17
17
|
export { default as NodeAttribute } from './core/NodeAttribute.js';
|
|
@@ -28,14 +28,14 @@ export { default as PropertyNode, property, diffuseColor, roughness, metalness,
|
|
|
28
28
|
export { default as StackNode, stack } from './core/StackNode.js';
|
|
29
29
|
export { default as TempNode } from './core/TempNode.js';
|
|
30
30
|
export { default as UniformNode, uniform } from './core/UniformNode.js';
|
|
31
|
-
export { default as VarNode,
|
|
31
|
+
export { default as VarNode, temp } from './core/VarNode.js';
|
|
32
32
|
export { default as VaryingNode, varying } from './core/VaryingNode.js';
|
|
33
33
|
|
|
34
34
|
import * as NodeUtils from './core/NodeUtils.js';
|
|
35
35
|
export { NodeUtils };
|
|
36
36
|
|
|
37
37
|
// math
|
|
38
|
-
export { default as MathNode, EPSILON, INFINITY, radians, degrees, exp, exp2, log, log2, sqrt, inverseSqrt, floor, ceil, normalize, fract, sin, cos, tan, asin, acos, atan, abs, sign, length, negate, oneMinus, dFdx, dFdy, round, reciprocal, atan2, min, max, mod, step, reflect, distance, difference, dot, cross, pow, pow2, pow3, pow4, transformDirection, mix, clamp, saturate, refract, smoothstep, faceForward } from './math/MathNode.js';
|
|
38
|
+
export { default as MathNode, EPSILON, INFINITY, radians, degrees, exp, exp2, log, log2, sqrt, inverseSqrt, floor, ceil, normalize, fract, sin, cos, tan, asin, acos, atan, abs, sign, length, negate, oneMinus, dFdx, dFdy, round, reciprocal, trunc, fwidth, atan2, min, max, mod, step, reflect, distance, difference, dot, cross, pow, pow2, pow3, pow4, transformDirection, mix, clamp, saturate, refract, smoothstep, faceForward } from './math/MathNode.js';
|
|
39
39
|
export { default as OperatorNode, add, sub, mul, div, remainder, equal, assign, lessThan, greaterThan, lessThanEqual, greaterThanEqual, and, or, xor, bitAnd, bitOr, bitXor, shiftLeft, shiftRight } from './math/OperatorNode.js';
|
|
40
40
|
export { default as CondNode, cond } from './math/CondNode.js';
|
|
41
41
|
|
|
@@ -45,6 +45,7 @@ export { default as ConvertNode } from './utils/ConvertNode.js';
|
|
|
45
45
|
export { default as DiscardNode, discard } from './utils/DiscardNode.js';
|
|
46
46
|
export { default as EquirectUVNode, equirectUV } from './utils/EquirectUVNode.js';
|
|
47
47
|
export { default as JoinNode } from './utils/JoinNode.js';
|
|
48
|
+
export { default as LoopNode, loop } from './utils/LoopNode.js';
|
|
48
49
|
export { default as MatcapUVNode, matcapUV } from './utils/MatcapUVNode.js';
|
|
49
50
|
export { default as MaxMipLevelNode, maxMipLevel } from './utils/MaxMipLevelNode.js';
|
|
50
51
|
export { default as OscNode, oscSine, oscSquare, oscTriangle, oscSawtooth } from './utils/OscNode.js';
|
|
@@ -62,45 +63,51 @@ export * from './shadernode/ShaderNode.js';
|
|
|
62
63
|
|
|
63
64
|
// accessors
|
|
64
65
|
export { default as BitangentNode, bitangentGeometry, bitangentLocal, bitangentView, bitangentWorld, transformedBitangentView, transformedBitangentWorld } from './accessors/BitangentNode.js';
|
|
66
|
+
export { default as BufferAttributeNode, bufferAttribute, dynamicBufferAttribute, instancedBufferAttribute, instancedDynamicBufferAttribute } from './accessors/BufferAttributeNode.js';
|
|
65
67
|
export { default as BufferNode, buffer } from './accessors/BufferNode.js';
|
|
66
|
-
export { default as CameraNode, cameraProjectionMatrix, cameraViewMatrix, cameraNormalMatrix, cameraWorldMatrix, cameraPosition } from './accessors/CameraNode.js';
|
|
68
|
+
export { default as CameraNode, cameraProjectionMatrix, cameraViewMatrix, cameraNormalMatrix, cameraWorldMatrix, cameraPosition, cameraNear, cameraFar } from './accessors/CameraNode.js';
|
|
67
69
|
export { default as CubeTextureNode, cubeTexture } from './accessors/CubeTextureNode.js';
|
|
68
70
|
export { default as ExtendedMaterialNode, materialNormal } from './accessors/ExtendedMaterialNode.js';
|
|
69
71
|
export { default as InstanceNode, instance } from './accessors/InstanceNode.js';
|
|
70
|
-
export { default as MaterialNode,
|
|
72
|
+
export { default as MaterialNode, materialAlphaTest, materialColor, materialShininess, materialEmissive, materialOpacity, materialSpecularColor, materialReflectivity, materialRoughness, materialMetalness, materialRotation, materialSheen, materialSheenRoughness } from './accessors/MaterialNode.js';
|
|
71
73
|
export { default as MaterialReferenceNode, materialReference } from './accessors/MaterialReferenceNode.js';
|
|
72
|
-
export { default as
|
|
74
|
+
export { default as MorphNode, morph } from './accessors/MorphNode.js';
|
|
75
|
+
export { default as TextureBicubicNode, textureBicubic } from './accessors/TextureBicubicNode.js';
|
|
76
|
+
export { default as ModelNode, modelDirection, modelViewMatrix, modelNormalMatrix, modelWorldMatrix, modelPosition, modelViewPosition, modelScale } from './accessors/ModelNode.js';
|
|
73
77
|
export { default as ModelViewProjectionNode, modelViewProjection } from './accessors/ModelViewProjectionNode.js';
|
|
74
|
-
export { default as NormalNode, normalGeometry, normalLocal, normalView, normalWorld, transformedNormalView, transformedNormalWorld } from './accessors/NormalNode.js';
|
|
75
|
-
export { default as Object3DNode, objectDirection, objectViewMatrix, objectNormalMatrix, objectWorldMatrix, objectPosition, objectViewPosition } from './accessors/Object3DNode.js';
|
|
78
|
+
export { default as NormalNode, normalGeometry, normalLocal, normalView, normalWorld, transformedNormalView, transformedNormalWorld, transformedClearcoatNormalView } from './accessors/NormalNode.js';
|
|
79
|
+
export { default as Object3DNode, objectDirection, objectViewMatrix, objectNormalMatrix, objectWorldMatrix, objectPosition, objectScale, objectViewPosition } from './accessors/Object3DNode.js';
|
|
76
80
|
export { default as PointUVNode, pointUV } from './accessors/PointUVNode.js';
|
|
77
81
|
export { default as PositionNode, positionGeometry, positionLocal, positionWorld, positionWorldDirection, positionView, positionViewDirection } from './accessors/PositionNode.js';
|
|
78
82
|
export { default as ReferenceNode, reference } from './accessors/ReferenceNode.js';
|
|
79
83
|
export { default as ReflectVectorNode, reflectVector } from './accessors/ReflectVectorNode.js';
|
|
80
84
|
export { default as SkinningNode, skinning } from './accessors/SkinningNode.js';
|
|
85
|
+
export { default as SceneNode, backgroundBlurriness } from './accessors/SceneNode.js';
|
|
81
86
|
export { default as StorageBufferNode, storage } from './accessors/StorageBufferNode.js';
|
|
82
87
|
export { default as TangentNode, tangentGeometry, tangentLocal, tangentView, tangentWorld, transformedTangentView, transformedTangentWorld } from './accessors/TangentNode.js';
|
|
83
|
-
export { default as TextureNode, texture, sampler } from './accessors/TextureNode.js';
|
|
88
|
+
export { default as TextureNode, texture, /*textureLevel,*/ sampler } from './accessors/TextureNode.js';
|
|
84
89
|
export { default as UVNode, uv } from './accessors/UVNode.js';
|
|
85
90
|
export { default as UserDataNode, userData } from './accessors/UserDataNode.js';
|
|
86
91
|
|
|
87
92
|
// display
|
|
88
93
|
export { default as BlendModeNode, burn, dodge, overlay, screen } from './display/BlendModeNode.js';
|
|
89
94
|
export { default as ColorAdjustmentNode, saturation, vibrance, hue, lumaCoeffs, luminance } from './display/ColorAdjustmentNode.js';
|
|
90
|
-
export { default as ColorSpaceNode,
|
|
95
|
+
export { default as ColorSpaceNode, linearToColorSpace, colorSpaceToLinear, linearTosRGB, sRGBToLinear } from './display/ColorSpaceNode.js';
|
|
91
96
|
export { default as FrontFacingNode, frontFacing, faceDirection } from './display/FrontFacingNode.js';
|
|
92
97
|
export { default as NormalMapNode, normalMap, TBNViewMatrix } from './display/NormalMapNode.js';
|
|
93
98
|
export { default as PosterizeNode, posterize } from './display/PosterizeNode.js';
|
|
94
99
|
export { default as ToneMappingNode, toneMapping } from './display/ToneMappingNode.js';
|
|
95
100
|
export { default as ViewportNode, viewportCoordinate, viewportResolution, viewportTopLeft, viewportBottomLeft, viewportTopRight, viewportBottomRight } from './display/ViewportNode.js';
|
|
96
|
-
export { default as ViewportTextureNode, viewportTexture } from './display/ViewportTextureNode.js';
|
|
101
|
+
export { default as ViewportTextureNode, viewportTexture, viewportMipTexture } from './display/ViewportTextureNode.js';
|
|
97
102
|
export { default as ViewportSharedTextureNode, viewportSharedTexture } from './display/ViewportSharedTextureNode.js';
|
|
103
|
+
export { default as ViewportDepthTextureNode, viewportDepthTexture } from './display/ViewportDepthTextureNode.js';
|
|
104
|
+
export { default as ViewportDepthNode, viewZToOrthographicDepth, orthographicDepthToViewZ, viewZToPerspectiveDepth, perspectiveDepthToViewZ, depth, depthTexture } from './display/ViewportDepthNode.js';
|
|
98
105
|
|
|
99
106
|
// code
|
|
100
107
|
export { default as ExpressionNode, expression } from './code/ExpressionNode.js';
|
|
101
|
-
export { default as CodeNode, code, js } from './code/CodeNode.js';
|
|
108
|
+
export { default as CodeNode, code, js, wgsl, glsl } from './code/CodeNode.js';
|
|
102
109
|
export { default as FunctionCallNode, call } from './code/FunctionCallNode.js';
|
|
103
|
-
export { default as FunctionNode,
|
|
110
|
+
export { default as FunctionNode, wgslFn, glslFn } from './code/FunctionNode.js';
|
|
104
111
|
export { default as ScriptableNode, scriptable, global } from './code/ScriptableNode.js';
|
|
105
112
|
export { default as ScriptableValueNode, scriptableValue } from './code/ScriptableValueNode.js';
|
|
106
113
|
|
|
@@ -139,8 +146,7 @@ export { default as NodeObjectLoader } from './loaders/NodeObjectLoader.js';
|
|
|
139
146
|
export { default as NodeMaterialLoader } from './loaders/NodeMaterialLoader.js';
|
|
140
147
|
|
|
141
148
|
// parsers
|
|
142
|
-
export { default as
|
|
143
|
-
export { default as GLSLNodeParser } from './parsers/GLSLNodeParser.js';
|
|
149
|
+
export { default as GLSLNodeParser } from './parsers/GLSLNodeParser.js'; // @TODO: Move to jsm/renderers/webgl.
|
|
144
150
|
|
|
145
151
|
// materials
|
|
146
152
|
export * from './materials/Materials.js';
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import InputNode from '../core/InputNode.js';
|
|
2
|
+
import { addNodeClass } from '../core/Node.js';
|
|
3
|
+
import { varying } from '../core/VaryingNode.js';
|
|
4
|
+
import { nodeObject } from '../shadernode/ShaderNode.js';
|
|
5
|
+
import { InterleavedBufferAttribute, InterleavedBuffer, StaticDrawUsage, DynamicDrawUsage } from 'three';
|
|
6
|
+
|
|
7
|
+
class BufferAttributeNode extends InputNode {
|
|
8
|
+
|
|
9
|
+
constructor( value, bufferType, bufferStride = 0, bufferOffset = 0 ) {
|
|
10
|
+
|
|
11
|
+
super( value, bufferType );
|
|
12
|
+
|
|
13
|
+
this.isBufferNode = true;
|
|
14
|
+
|
|
15
|
+
this.bufferType = bufferType;
|
|
16
|
+
this.bufferStride = bufferStride;
|
|
17
|
+
this.bufferOffset = bufferOffset;
|
|
18
|
+
|
|
19
|
+
this.usage = StaticDrawUsage;
|
|
20
|
+
this.instanced = false;
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
construct( builder ) {
|
|
25
|
+
|
|
26
|
+
const type = this.getNodeType( builder );
|
|
27
|
+
const array = this.value;
|
|
28
|
+
const itemSize = builder.getTypeLength( type );
|
|
29
|
+
const stride = this.bufferStride || itemSize;
|
|
30
|
+
const offset = this.bufferOffset;
|
|
31
|
+
|
|
32
|
+
const buffer = new InterleavedBuffer( array, stride );
|
|
33
|
+
const bufferAttribute = new InterleavedBufferAttribute( buffer, itemSize, offset );
|
|
34
|
+
|
|
35
|
+
buffer.setUsage( this.usage );
|
|
36
|
+
|
|
37
|
+
this.attribute = bufferAttribute;
|
|
38
|
+
this.attribute.isInstancedBufferAttribute = this.instanced; // @TODO: Add a possible: InstancedInterleavedBufferAttribute
|
|
39
|
+
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
generate( builder ) {
|
|
43
|
+
|
|
44
|
+
const nodeType = this.getNodeType( builder );
|
|
45
|
+
|
|
46
|
+
const nodeUniform = builder.getBufferAttributeFromNode( this, nodeType );
|
|
47
|
+
const propertyName = builder.getPropertyName( nodeUniform );
|
|
48
|
+
|
|
49
|
+
let output = null;
|
|
50
|
+
|
|
51
|
+
if ( builder.shaderStage === 'vertex' ) {
|
|
52
|
+
|
|
53
|
+
output = propertyName;
|
|
54
|
+
|
|
55
|
+
} else {
|
|
56
|
+
|
|
57
|
+
const nodeVarying = varying( this );
|
|
58
|
+
|
|
59
|
+
output = nodeVarying.build( builder, nodeType );
|
|
60
|
+
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return output;
|
|
64
|
+
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
getInputType( /*builder*/ ) {
|
|
68
|
+
|
|
69
|
+
return 'bufferAttribute';
|
|
70
|
+
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
setUsage( value ) {
|
|
74
|
+
|
|
75
|
+
this.usage = value;
|
|
76
|
+
|
|
77
|
+
return this;
|
|
78
|
+
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
setInstanced( value ) {
|
|
82
|
+
|
|
83
|
+
this.instanced = value;
|
|
84
|
+
|
|
85
|
+
return this;
|
|
86
|
+
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export default BufferAttributeNode;
|
|
92
|
+
|
|
93
|
+
export const bufferAttribute = ( array, type, stride, offset ) => nodeObject( new BufferAttributeNode( array, type, stride, offset ) );
|
|
94
|
+
export const dynamicBufferAttribute = ( array, type, stride, offset ) => bufferAttribute( array, type, stride, offset ).setUsage( DynamicDrawUsage );
|
|
95
|
+
|
|
96
|
+
export const instancedBufferAttribute = ( array, type, stride, offset ) => bufferAttribute( array, type, stride, offset ).setInstanced( true );
|
|
97
|
+
export const instancedDynamicBufferAttribute = ( array, type, stride, offset ) => dynamicBufferAttribute( array, type, stride, offset ).setInstanced( true );
|
|
98
|
+
|
|
99
|
+
addNodeClass( BufferAttributeNode );
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import UniformNode from '../core/UniformNode.js';
|
|
2
2
|
import { addNodeClass } from '../core/Node.js';
|
|
3
|
-
import { nodeObject
|
|
3
|
+
import { nodeObject } from '../shadernode/ShaderNode.js';
|
|
4
4
|
|
|
5
5
|
class BufferNode extends UniformNode {
|
|
6
6
|
|
|
@@ -25,6 +25,6 @@ class BufferNode extends UniformNode {
|
|
|
25
25
|
|
|
26
26
|
export default BufferNode;
|
|
27
27
|
|
|
28
|
-
export const buffer = ( value,
|
|
28
|
+
export const buffer = ( value, type, count ) => nodeObject( new BufferNode( value, type, count ) );
|
|
29
29
|
|
|
30
30
|
addNodeClass( BufferNode );
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Object3DNode from './Object3DNode.js';
|
|
2
2
|
import { addNodeClass } from '../core/Node.js';
|
|
3
|
+
import { label } from '../core/ContextNode.js';
|
|
3
4
|
import { nodeImmutable } from '../shadernode/ShaderNode.js';
|
|
4
5
|
|
|
5
6
|
class CameraNode extends Object3DNode {
|
|
@@ -18,6 +19,10 @@ class CameraNode extends Object3DNode {
|
|
|
18
19
|
|
|
19
20
|
return 'mat4';
|
|
20
21
|
|
|
22
|
+
} else if ( scope === CameraNode.NEAR || scope === CameraNode.FAR ) {
|
|
23
|
+
|
|
24
|
+
return 'float';
|
|
25
|
+
|
|
21
26
|
}
|
|
22
27
|
|
|
23
28
|
return super.getNodeType( builder );
|
|
@@ -30,13 +35,21 @@ class CameraNode extends Object3DNode {
|
|
|
30
35
|
const uniformNode = this._uniformNode;
|
|
31
36
|
const scope = this.scope;
|
|
32
37
|
|
|
33
|
-
if ( scope === CameraNode.
|
|
38
|
+
if ( scope === CameraNode.VIEW_MATRIX ) {
|
|
39
|
+
|
|
40
|
+
uniformNode.value = camera.matrixWorldInverse;
|
|
41
|
+
|
|
42
|
+
} else if ( scope === CameraNode.PROJECTION_MATRIX ) {
|
|
34
43
|
|
|
35
44
|
uniformNode.value = camera.projectionMatrix;
|
|
36
45
|
|
|
37
|
-
} else if ( scope === CameraNode.
|
|
46
|
+
} else if ( scope === CameraNode.NEAR ) {
|
|
38
47
|
|
|
39
|
-
uniformNode.value = camera.
|
|
48
|
+
uniformNode.value = camera.near;
|
|
49
|
+
|
|
50
|
+
} else if ( scope === CameraNode.FAR ) {
|
|
51
|
+
|
|
52
|
+
uniformNode.value = camera.far;
|
|
40
53
|
|
|
41
54
|
} else {
|
|
42
55
|
|
|
@@ -56,6 +69,10 @@ class CameraNode extends Object3DNode {
|
|
|
56
69
|
|
|
57
70
|
this._uniformNode.nodeType = 'mat4';
|
|
58
71
|
|
|
72
|
+
} else if ( scope === CameraNode.NEAR || scope === CameraNode.FAR ) {
|
|
73
|
+
|
|
74
|
+
this._uniformNode.nodeType = 'float';
|
|
75
|
+
|
|
59
76
|
}
|
|
60
77
|
|
|
61
78
|
return super.generate( builder );
|
|
@@ -65,10 +82,14 @@ class CameraNode extends Object3DNode {
|
|
|
65
82
|
}
|
|
66
83
|
|
|
67
84
|
CameraNode.PROJECTION_MATRIX = 'projectionMatrix';
|
|
85
|
+
CameraNode.NEAR = 'near';
|
|
86
|
+
CameraNode.FAR = 'far';
|
|
68
87
|
|
|
69
88
|
export default CameraNode;
|
|
70
89
|
|
|
71
|
-
export const cameraProjectionMatrix = nodeImmutable( CameraNode, CameraNode.PROJECTION_MATRIX );
|
|
90
|
+
export const cameraProjectionMatrix = label( nodeImmutable( CameraNode, CameraNode.PROJECTION_MATRIX ), 'projectionMatrix' );
|
|
91
|
+
export const cameraNear = nodeImmutable( CameraNode, CameraNode.NEAR );
|
|
92
|
+
export const cameraFar = nodeImmutable( CameraNode, CameraNode.FAR );
|
|
72
93
|
export const cameraViewMatrix = nodeImmutable( CameraNode, CameraNode.VIEW_MATRIX );
|
|
73
94
|
export const cameraNormalMatrix = nodeImmutable( CameraNode, CameraNode.NORMAL_MATRIX );
|
|
74
95
|
export const cameraWorldMatrix = nodeImmutable( CameraNode, CameraNode.WORLD_MATRIX );
|
|
@@ -20,7 +20,7 @@ class ExtendedMaterialNode extends MaterialNode {
|
|
|
20
20
|
const scope = this.scope;
|
|
21
21
|
let type = null;
|
|
22
22
|
|
|
23
|
-
if ( scope === ExtendedMaterialNode.NORMAL ) {
|
|
23
|
+
if ( scope === ExtendedMaterialNode.NORMAL || scope === ExtendedMaterialNode.CLEARCOAT_NORMAL ) {
|
|
24
24
|
|
|
25
25
|
type = 'vec3';
|
|
26
26
|
|
|
@@ -41,6 +41,10 @@ class ExtendedMaterialNode extends MaterialNode {
|
|
|
41
41
|
|
|
42
42
|
node = material.normalMap ? normalMap( this.getTexture( 'normalMap' ), materialReference( 'normalScale', 'vec2' ) ) : normalView;
|
|
43
43
|
|
|
44
|
+
} else if ( scope === ExtendedMaterialNode.CLEARCOAT_NORMAL ) {
|
|
45
|
+
|
|
46
|
+
node = material.clearcoatNormalMap ? normalMap( this.getTexture( 'clearcoatNormalMap' ), materialReference( 'clearcoatNormalScale', 'vec2' ) ) : normalView;
|
|
47
|
+
|
|
44
48
|
}
|
|
45
49
|
|
|
46
50
|
return node || super.construct( builder );
|
|
@@ -50,9 +54,11 @@ class ExtendedMaterialNode extends MaterialNode {
|
|
|
50
54
|
}
|
|
51
55
|
|
|
52
56
|
ExtendedMaterialNode.NORMAL = 'normal';
|
|
57
|
+
ExtendedMaterialNode.CLEARCOAT_NORMAL = 'clearcoatNormal';
|
|
53
58
|
|
|
54
59
|
export default ExtendedMaterialNode;
|
|
55
60
|
|
|
56
61
|
export const materialNormal = nodeImmutable( ExtendedMaterialNode, ExtendedMaterialNode.NORMAL );
|
|
62
|
+
export const materialClearcoatNormal = nodeImmutable( ExtendedMaterialNode, ExtendedMaterialNode.CLEARCOAT_NORMAL );
|
|
57
63
|
|
|
58
64
|
addNodeClass( ExtendedMaterialNode );
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import Node, { addNodeClass } from '../core/Node.js';
|
|
2
|
-
import {
|
|
3
|
-
import { temp } from '../core/VarNode.js';
|
|
4
|
-
import { buffer } from './BufferNode.js';
|
|
2
|
+
import { instancedBufferAttribute, instancedDynamicBufferAttribute } from './BufferAttributeNode.js';
|
|
5
3
|
import { normalLocal } from './NormalNode.js';
|
|
6
4
|
import { positionLocal } from './PositionNode.js';
|
|
7
|
-
import { nodeProxy, vec3, mat3 } from '../shadernode/ShaderNode.js';
|
|
5
|
+
import { nodeProxy, vec3, mat3, mat4 } from '../shadernode/ShaderNode.js';
|
|
6
|
+
import { DynamicDrawUsage } from 'three';
|
|
8
7
|
|
|
9
8
|
class InstanceNode extends Node {
|
|
10
9
|
|
|
@@ -14,17 +13,35 @@ class InstanceNode extends Node {
|
|
|
14
13
|
|
|
15
14
|
this.instanceMesh = instanceMesh;
|
|
16
15
|
|
|
17
|
-
|
|
16
|
+
this.instanceMatrixNode = null;
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
}
|
|
20
19
|
|
|
21
|
-
|
|
20
|
+
construct( builder ) {
|
|
22
21
|
|
|
23
|
-
|
|
22
|
+
let instanceMatrixNode = this.instanceMatrixNode;
|
|
23
|
+
|
|
24
|
+
if ( instanceMatrixNode === null ) {
|
|
25
|
+
|
|
26
|
+
const instanceMesh = this.instanceMesh;
|
|
27
|
+
const instaceAttribute = instanceMesh.instanceMatrix;
|
|
28
|
+
const array = instaceAttribute.array;
|
|
29
|
+
|
|
30
|
+
const bufferFn = instaceAttribute.usage === DynamicDrawUsage ? instancedDynamicBufferAttribute : instancedBufferAttribute;
|
|
31
|
+
|
|
32
|
+
const instanceBuffers = [
|
|
33
|
+
// F.Signature -> bufferAttribute( array, type, stride, offset )
|
|
34
|
+
bufferFn( array, 'vec4', 16, 0 ),
|
|
35
|
+
bufferFn( array, 'vec4', 16, 4 ),
|
|
36
|
+
bufferFn( array, 'vec4', 16, 8 ),
|
|
37
|
+
bufferFn( array, 'vec4', 16, 12 )
|
|
38
|
+
];
|
|
39
|
+
|
|
40
|
+
instanceMatrixNode = mat4( ...instanceBuffers );
|
|
24
41
|
|
|
25
|
-
|
|
42
|
+
this.instanceMatrixNode = instanceMatrixNode;
|
|
26
43
|
|
|
27
|
-
|
|
44
|
+
}
|
|
28
45
|
|
|
29
46
|
// POSITION
|
|
30
47
|
|
|
@@ -40,8 +57,8 @@ class InstanceNode extends Node {
|
|
|
40
57
|
|
|
41
58
|
// ASSIGNS
|
|
42
59
|
|
|
43
|
-
|
|
44
|
-
|
|
60
|
+
builder.stack.assign( positionLocal, instancePosition );
|
|
61
|
+
builder.stack.assign( normalLocal, instanceNormal );
|
|
45
62
|
|
|
46
63
|
}
|
|
47
64
|
|