super-three 0.141.0 → 0.144.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -8
- package/build/three.cjs +1558 -1034
- package/build/three.js +1558 -1034
- package/build/three.min.js +1 -1
- package/build/three.module.js +2012 -1243
- package/examples/js/animation/MMDPhysics.js +1 -16
- package/examples/js/controls/ArcballControls.js +16 -3
- package/examples/js/controls/FirstPersonControls.js +0 -7
- package/examples/js/controls/FlyControls.js +0 -8
- package/examples/js/controls/OrbitControls.js +0 -4
- package/examples/js/controls/PointerLockControls.js +0 -8
- package/examples/js/controls/TrackballControls.js +0 -2
- package/examples/js/controls/TransformControls.js +20 -16
- package/examples/js/effects/AnaglyphEffect.js +2 -2
- package/examples/js/effects/OutlineEffect.js +4 -24
- package/examples/js/effects/ParallaxBarrierEffect.js +2 -2
- package/examples/js/effects/PeppersGhostEffect.js +2 -2
- package/examples/js/effects/StereoEffect.js +2 -2
- package/examples/js/environments/RoomEnvironment.js +22 -0
- package/examples/js/exporters/ColladaExporter.js +4 -13
- package/examples/js/exporters/DRACOExporter.js +0 -12
- package/examples/js/exporters/GLTFExporter.js +28 -29
- package/examples/js/exporters/OBJExporter.js +2 -23
- package/examples/js/exporters/PLYExporter.js +12 -24
- package/examples/js/exporters/STLExporter.js +0 -7
- package/examples/js/exporters/USDZExporter.js +6 -0
- package/examples/js/geometries/ConvexGeometry.js +1 -1
- package/examples/js/geometries/ParametricGeometry.js +1 -8
- package/examples/js/interactive/SelectionHelper.js +2 -0
- package/examples/js/libs/ktx-parse.umd.js +1 -0
- package/examples/js/libs/meshopt_decoder.js +98 -32
- package/examples/js/loaders/ColladaLoader.js +1 -0
- package/examples/js/loaders/DRACOLoader.js +2 -25
- package/examples/js/loaders/EXRLoader.js +2 -13
- package/examples/js/loaders/FBXLoader.js +10 -3
- package/examples/js/loaders/FontLoader.js +3 -16
- package/examples/js/loaders/GLTFLoader.js +52 -36
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -11
- package/examples/js/loaders/LDrawLoader.js +139 -74
- package/examples/js/loaders/OBJLoader.js +7 -13
- package/examples/js/loaders/PCDLoader.js +59 -14
- package/examples/js/loaders/PLYLoader.js +3 -3
- package/examples/js/loaders/SVGLoader.js +4 -3
- package/examples/js/loaders/TIFFLoader.js +31 -0
- package/examples/js/loaders/VRMLLoader.js +33 -24
- package/examples/js/loaders/VTKLoader.js +1 -1
- package/examples/js/loaders/lwo/LWO2Parser.js +8 -7
- package/examples/js/loaders/lwo/LWO3Parser.js +8 -7
- package/examples/js/materials/MeshGouraudMaterial.js +385 -0
- package/examples/js/math/ColorConverter.js +0 -50
- package/examples/js/misc/GPUComputationRenderer.js +23 -0
- package/examples/js/misc/Volume.js +198 -190
- package/examples/js/misc/VolumeSlice.js +90 -88
- package/examples/js/modifiers/SimplifyModifier.js +1 -1
- package/examples/js/objects/GroundProjectedEnv.js +193 -0
- package/examples/js/objects/Reflector.js +9 -2
- package/examples/js/objects/ReflectorForSSRPass.js +3 -4
- package/examples/js/objects/Refractor.js +10 -4
- package/examples/js/objects/ShadowMesh.js +5 -1
- package/examples/js/postprocessing/OutlinePass.js +5 -3
- package/examples/js/renderers/CSS2DRenderer.js +2 -2
- package/examples/js/renderers/CSS3DRenderer.js +2 -2
- package/examples/js/renderers/Projector.js +2 -23
- package/examples/js/shaders/LuminosityShader.js +1 -1
- package/examples/js/shaders/MMDToonShader.js +6 -2
- package/examples/js/shaders/ToneMapShader.js +1 -1
- package/examples/js/utils/BufferGeometryUtils.js +1 -1
- package/examples/js/utils/GeometryUtils.js +2 -18
- package/examples/js/utils/PackedPhongMaterial.js +1 -1
- package/examples/js/utils/SceneUtils.js +0 -16
- package/examples/jsm/animation/MMDPhysics.js +3 -22
- package/examples/jsm/controls/ArcballControls.js +17 -2
- package/examples/jsm/controls/FirstPersonControls.js +0 -7
- package/examples/jsm/controls/FlyControls.js +0 -7
- package/examples/jsm/controls/OrbitControls.js +0 -5
- package/examples/jsm/controls/PointerLockControls.js +0 -7
- package/examples/jsm/controls/TrackballControls.js +0 -3
- package/examples/jsm/controls/TransformControls.js +18 -16
- package/examples/jsm/effects/AnaglyphEffect.js +2 -2
- package/examples/jsm/effects/OutlineEffect.js +4 -25
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -2
- package/examples/jsm/effects/PeppersGhostEffect.js +2 -2
- package/examples/jsm/effects/StereoEffect.js +2 -2
- package/examples/jsm/environments/RoomEnvironment.js +23 -0
- package/examples/jsm/exporters/ColladaExporter.js +4 -13
- package/examples/jsm/exporters/DRACOExporter.js +0 -13
- package/examples/jsm/exporters/GLTFExporter.js +29 -31
- package/examples/jsm/exporters/KTX2Exporter.js +29 -29
- package/examples/jsm/exporters/OBJExporter.js +0 -18
- package/examples/jsm/exporters/PLYExporter.js +14 -22
- package/examples/jsm/exporters/STLExporter.js +1 -9
- package/examples/jsm/exporters/USDZExporter.js +14 -3
- package/examples/jsm/geometries/ConvexGeometry.js +1 -1
- package/examples/jsm/geometries/ParametricGeometry.js +0 -6
- package/examples/jsm/interactive/HTMLMesh.js +9 -9
- package/examples/jsm/interactive/SelectionHelper.js +5 -3
- package/examples/jsm/libs/meshopt_decoder.module.js +97 -32
- package/examples/jsm/libs/utif.module.js +1579 -0
- package/examples/jsm/libs/zstddec.module.js +1 -0
- package/examples/jsm/loaders/ColladaLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -28
- package/examples/jsm/loaders/EXRLoader.js +3 -13
- package/examples/jsm/loaders/FBXLoader.js +10 -3
- package/examples/jsm/loaders/FontLoader.js +3 -16
- package/examples/jsm/loaders/GLTFLoader.js +52 -36
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +0 -13
- package/examples/jsm/loaders/KTX2Loader.js +192 -30
- package/examples/jsm/loaders/LDrawLoader.js +135 -74
- package/examples/jsm/loaders/OBJLoader.js +6 -14
- package/examples/jsm/loaders/PCDLoader.js +59 -13
- package/examples/jsm/loaders/PLYLoader.js +3 -3
- package/examples/jsm/loaders/RGBELoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +4 -3
- package/examples/jsm/loaders/TIFFLoader.js +36 -0
- package/examples/jsm/loaders/USDZLoader.js +393 -0
- package/examples/jsm/loaders/VRMLLoader.js +23 -25
- package/examples/jsm/loaders/VTKLoader.js +1 -1
- package/examples/jsm/loaders/lwo/LWO2Parser.js +6 -8
- package/examples/jsm/loaders/lwo/LWO3Parser.js +6 -8
- package/examples/jsm/materials/MeshGouraudMaterial.js +423 -0
- package/examples/jsm/math/ColorConverter.js +1 -49
- package/examples/jsm/misc/GPUComputationRenderer.js +43 -0
- package/examples/jsm/misc/Volume.js +169 -171
- package/examples/jsm/misc/VolumeSlice.js +78 -80
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +1 -1
- package/examples/jsm/node-editor/accessors/NormalEditor.js +1 -1
- package/examples/jsm/node-editor/accessors/PositionEditor.js +1 -1
- package/examples/jsm/node-editor/accessors/UVEditor.js +1 -1
- package/examples/jsm/node-editor/display/BlendEditor.js +1 -1
- package/examples/jsm/node-editor/display/NormalMapEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/ColorEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/FloatEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/SliderEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/TextureEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/Vector2Editor.js +1 -1
- package/examples/jsm/node-editor/inputs/Vector3Editor.js +1 -1
- package/examples/jsm/node-editor/inputs/Vector4Editor.js +1 -1
- package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +1 -1
- package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +1 -1
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +1 -1
- package/examples/jsm/node-editor/math/AngleEditor.js +1 -1
- package/examples/jsm/node-editor/math/DotEditor.js +1 -1
- package/examples/jsm/node-editor/math/InvertEditor.js +1 -1
- package/examples/jsm/node-editor/math/LimiterEditor.js +1 -1
- package/examples/jsm/node-editor/math/NormalizeEditor.js +1 -1
- package/examples/jsm/node-editor/math/OperatorEditor.js +1 -1
- package/examples/jsm/node-editor/math/PowerEditor.js +1 -1
- package/examples/jsm/node-editor/math/TrigonometryEditor.js +1 -1
- package/examples/jsm/node-editor/procedural/CheckerEditor.js +1 -1
- package/examples/jsm/node-editor/utils/JoinEditor.js +1 -1
- package/examples/jsm/node-editor/utils/OscillatorEditor.js +1 -1
- package/examples/jsm/node-editor/utils/PreviewEditor.js +3 -3
- package/examples/jsm/node-editor/utils/SplitEditor.js +1 -1
- package/examples/jsm/node-editor/utils/TimerEditor.js +1 -1
- package/examples/jsm/nodes/Nodes.js +43 -13
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +9 -5
- package/examples/jsm/nodes/accessors/NormalNode.js +4 -4
- package/examples/jsm/nodes/accessors/PositionNode.js +5 -5
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +31 -0
- package/examples/jsm/nodes/core/AttributeNode.js +3 -3
- package/examples/jsm/nodes/core/CodeNode.js +3 -3
- package/examples/jsm/nodes/core/FunctionCallNode.js +20 -5
- package/examples/jsm/nodes/core/FunctionNode.js +2 -2
- package/examples/jsm/nodes/core/Node.js +14 -12
- package/examples/jsm/nodes/core/NodeBuilder.js +12 -12
- package/examples/jsm/nodes/core/NodeUtils.js +23 -1
- package/examples/jsm/nodes/core/{NodeVary.js → NodeVarying.js} +3 -3
- package/examples/jsm/nodes/core/{VaryNode.js → VaryingNode.js} +7 -7
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +94 -0
- package/examples/jsm/nodes/geometry/RangeNode.js +109 -0
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -0
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -7
- package/examples/jsm/nodes/lighting/LightingContextNode.js +4 -4
- package/examples/jsm/nodes/loaders/NodeLoader.js +2 -2
- package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +31 -0
- package/examples/jsm/nodes/materials/Materials.js +13 -25
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +70 -0
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +4 -7
- package/examples/jsm/nodes/materials/NodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +28 -17
- package/examples/jsm/nodes/materialx/Disclaimer.md +199 -0
- package/examples/jsm/nodes/materialx/functions/lib/mx_hsv.js +56 -0
- package/examples/jsm/nodes/materialx/functions/lib/mx_noise.js +607 -0
- package/examples/jsm/nodes/math/MathNode.js +2 -12
- package/examples/jsm/nodes/parsers/GLSLNodeFunction.js +21 -6
- package/examples/jsm/nodes/procedural/CheckerNode.js +2 -2
- package/examples/jsm/nodes/shadernode/ShaderNode.js +5 -5
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +8 -5
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +20 -6
- package/examples/jsm/nodes/utils/ConvertNode.js +8 -3
- package/examples/jsm/nodes/utils/JoinNode.js +7 -7
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +2 -1
- package/examples/jsm/nodes/utils/RotateUVNode.js +32 -0
- package/examples/jsm/nodes/utils/SplitNode.js +21 -5
- package/examples/jsm/nodes/utils/TimerNode.js +2 -2
- package/examples/jsm/objects/GroundProjectedEnv.js +186 -0
- package/examples/jsm/objects/Reflector.js +12 -5
- package/examples/jsm/objects/ReflectorForSSRPass.js +3 -5
- package/examples/jsm/objects/Refractor.js +12 -6
- package/examples/jsm/objects/ShadowMesh.js +8 -2
- package/examples/jsm/postprocessing/OutlinePass.js +5 -3
- package/examples/jsm/renderers/CSS2DRenderer.js +2 -2
- package/examples/jsm/renderers/CSS3DRenderer.js +2 -2
- package/examples/jsm/renderers/Projector.js +2 -24
- package/examples/jsm/renderers/webgl/nodes/SlotNode.js +9 -5
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +329 -218
- package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +7 -3
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +39 -3
- package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +6 -0
- package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +6 -0
- package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
- package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +17 -19
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +16 -14
- package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +66 -81
- package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +5 -3
- package/examples/jsm/renderers/webgpu/WebGPUTextures.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPUUtils.js +81 -0
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +25 -30
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
- package/examples/jsm/shaders/LuminosityShader.js +1 -1
- package/examples/jsm/shaders/MMDToonShader.js +2 -2
- package/examples/jsm/shaders/ToneMapShader.js +1 -1
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -1
- package/examples/jsm/utils/GeometryUtils.js +17 -25
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -1
- package/examples/jsm/utils/SceneUtils.js +1 -21
- package/examples/jsm/webxr/OculusHandPointerModel.js +6 -1
- package/examples/jsm/webxr/VRButton.js +1 -7
- package/package.json +18 -14
- package/src/Three.Legacy.js +262 -36
- package/src/Three.js +3 -2
- package/src/animation/AnimationAction.js +6 -5
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +1 -1
- package/src/animation/AnimationUtils.js +204 -199
- package/src/animation/KeyframeTrack.js +1 -1
- package/src/animation/PropertyBinding.js +24 -5
- package/src/cameras/CubeCamera.js +0 -7
- package/src/constants.js +2 -4
- package/src/core/BufferAttribute.js +81 -111
- package/src/core/BufferGeometry.js +3 -41
- package/src/core/InstancedBufferAttribute.js +0 -10
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +56 -7
- package/src/core/Object3D.js +22 -5
- package/src/core/Uniform.js +0 -7
- package/src/core/UniformsGroup.js +92 -0
- package/src/extras/DataUtils.js +104 -88
- package/src/extras/core/Path.js +1 -0
- package/src/extras/core/ShapePath.js +1 -4
- package/src/extras/curves/CatmullRomCurve3.js +4 -2
- package/src/geometries/BoxGeometry.js +1 -1
- package/src/geometries/CapsuleGeometry.js +1 -1
- package/src/geometries/CircleGeometry.js +1 -1
- package/src/geometries/ConeGeometry.js +1 -1
- package/src/geometries/CylinderGeometry.js +2 -1
- package/src/geometries/DodecahedronGeometry.js +1 -1
- package/src/geometries/EdgesGeometry.js +5 -4
- package/src/geometries/ExtrudeGeometry.js +2 -11
- package/src/geometries/IcosahedronGeometry.js +1 -1
- package/src/geometries/LatheGeometry.js +2 -2
- package/src/geometries/OctahedronGeometry.js +1 -1
- package/src/geometries/PlaneGeometry.js +2 -1
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/RingGeometry.js +1 -1
- package/src/geometries/ShapeGeometry.js +2 -1
- package/src/geometries/SphereGeometry.js +2 -1
- package/src/geometries/TetrahedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +2 -1
- package/src/geometries/TorusKnotGeometry.js +2 -1
- package/src/geometries/TubeGeometry.js +2 -1
- package/src/geometries/WireframeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +97 -38
- package/src/helpers/DirectionalLightHelper.js +1 -0
- package/src/helpers/HemisphereLightHelper.js +1 -0
- package/src/helpers/PlaneHelper.js +6 -9
- package/src/helpers/PolarGridHelper.js +18 -14
- package/src/helpers/SpotLightHelper.js +1 -0
- package/src/lights/SpotLight.js +2 -0
- package/src/loaders/FileLoader.js +12 -1
- package/src/loaders/LoadingManager.js +1 -1
- package/src/loaders/MaterialLoader.js +49 -7
- package/src/loaders/ObjectLoader.js +4 -41
- package/src/materials/Material.js +1 -33
- package/src/materials/Materials.js +0 -27
- package/src/materials/MeshLambertMaterial.js +28 -1
- package/src/materials/ShaderMaterial.js +3 -7
- package/src/math/Color.js +3 -13
- package/src/math/MathUtils.js +1 -7
- package/src/math/Matrix3.js +1 -7
- package/src/math/Matrix4.js +3 -27
- package/src/math/Quaternion.js +1 -21
- package/src/math/Vector2.js +4 -24
- package/src/math/Vector3.js +7 -46
- package/src/math/Vector4.js +4 -24
- package/src/renderers/WebGLRenderer.js +84 -8
- package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +12 -12
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -5
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -5
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +24 -24
- package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +2 -1
- package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +113 -99
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +34 -12
- package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +30 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +3 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +13 -1
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -4
- package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +18 -7
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +8 -3
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +9 -6
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +14 -10
- package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +4 -2
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +22 -50
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib.js +31 -31
- package/src/renderers/shaders/UniformsLib.js +12 -11
- package/src/renderers/shaders/UniformsUtils.js +14 -0
- package/src/renderers/webgl/WebGLBackground.js +2 -2
- package/src/renderers/webgl/WebGLLights.js +37 -13
- package/src/renderers/webgl/WebGLMorphtargets.js +0 -20
- package/src/renderers/webgl/WebGLProgram.js +6 -11
- package/src/renderers/webgl/WebGLPrograms.js +30 -26
- package/src/renderers/webgl/WebGLRenderLists.js +5 -4
- package/src/renderers/webgl/WebGLRenderStates.js +5 -4
- package/src/renderers/webgl/WebGLShaderCache.js +9 -6
- package/src/renderers/webgl/WebGLShadowMap.js +10 -15
- package/src/renderers/webgl/WebGLState.js +47 -0
- package/src/renderers/webgl/WebGLUniforms.js +4 -4
- package/src/renderers/webgl/WebGLUniformsGroups.js +372 -0
- package/src/renderers/webgl/WebGLUtils.js +2 -0
- package/src/renderers/webvr/WebVRManager.js +42 -9
- package/src/renderers/webvr/WebVRUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +45 -37
- package/src/renderers/webxr/WebXRManager.js +58 -33
- package/src/scenes/Scene.js +16 -3
- package/src/textures/Source.js +1 -1
- package/src/utils.js +1 -1
- package/examples/js/controls/experimental/CameraControls.js +0 -1048
- package/examples/js/loaders/KTX2Loader.js +0 -558
- package/examples/jsm/controls/experimental/CameraControls.js +0 -1248
- package/examples/jsm/nodes/accessors/ReflectNode.js +0 -70
- package/examples/jsm/package.json +0 -3
- package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +0 -45
- package/src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js +0 -122
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import TempNode from '../core/TempNode.js';
|
|
2
|
+
import { ShaderNode, vec3, mat3, add, sub, mul, max, div, dot, float, mix, cos, sin, atan2, sqrt } from '../shadernode/ShaderNodeBaseElements.js';
|
|
3
|
+
|
|
4
|
+
const luminanceNode = new ShaderNode( ( { color } ) => {
|
|
5
|
+
|
|
6
|
+
const LUMA = vec3( 0.2125, 0.7154, 0.0721 );
|
|
7
|
+
|
|
8
|
+
return dot( color, LUMA );
|
|
9
|
+
|
|
10
|
+
} );
|
|
11
|
+
|
|
12
|
+
const saturationNode = new ShaderNode( ( { color, adjustment } ) => {
|
|
13
|
+
|
|
14
|
+
const intensityNode = luminanceNode.call( { color } );
|
|
15
|
+
|
|
16
|
+
return mix( intensityNode, color, adjustment );
|
|
17
|
+
|
|
18
|
+
} );
|
|
19
|
+
|
|
20
|
+
const vibranceNode = new ShaderNode( ( { color, adjustment } ) => {
|
|
21
|
+
|
|
22
|
+
const average = div( add( color.r, color.g, color.b ), 3.0 );
|
|
23
|
+
|
|
24
|
+
const mx = max( color.r, max( color.g, color.b ) );
|
|
25
|
+
const amt = mul( sub( mx, average ), mul( - 3.0, adjustment ) );
|
|
26
|
+
|
|
27
|
+
return mix( color.rgb, vec3( mx ), amt );
|
|
28
|
+
|
|
29
|
+
} );
|
|
30
|
+
|
|
31
|
+
const hueNode = new ShaderNode( ( { color, adjustment } ) => {
|
|
32
|
+
|
|
33
|
+
const RGBtoYIQ = mat3( 0.299, 0.587, 0.114, 0.595716, - 0.274453, - 0.321263, 0.211456, - 0.522591, 0.311135 );
|
|
34
|
+
const YIQtoRGB = mat3( 1.0, 0.9563, 0.6210, 1.0, - 0.2721, - 0.6474, 1.0, - 1.107, 1.7046 );
|
|
35
|
+
|
|
36
|
+
const yiq = mul( RGBtoYIQ, color );
|
|
37
|
+
|
|
38
|
+
const hue = add( atan2( yiq.z, yiq.y ), adjustment );
|
|
39
|
+
const chroma = sqrt( add( mul( yiq.z, yiq.z ), mul( yiq.y, yiq.y ) ) );
|
|
40
|
+
|
|
41
|
+
return mul( YIQtoRGB, vec3( yiq.x, mul( chroma, cos( hue ) ), mul( chroma, sin( hue ) ) ) );
|
|
42
|
+
|
|
43
|
+
} );
|
|
44
|
+
|
|
45
|
+
class ColorAdjustmentNode extends TempNode {
|
|
46
|
+
|
|
47
|
+
static SATURATION = 'saturation';
|
|
48
|
+
static VIBRANCE = 'vibrance';
|
|
49
|
+
static HUE = 'hue';
|
|
50
|
+
|
|
51
|
+
constructor( method, colorNode, adjustmentNode = float( 1 ) ) {
|
|
52
|
+
|
|
53
|
+
super( 'vec3' );
|
|
54
|
+
|
|
55
|
+
this.method = method;
|
|
56
|
+
|
|
57
|
+
this.colorNode = colorNode;
|
|
58
|
+
this.adjustmentNode = adjustmentNode;
|
|
59
|
+
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
construct() {
|
|
63
|
+
|
|
64
|
+
const { method, colorNode, adjustmentNode } = this;
|
|
65
|
+
|
|
66
|
+
const callParams = { color: colorNode, adjustment: adjustmentNode };
|
|
67
|
+
|
|
68
|
+
let outputNode = null;
|
|
69
|
+
|
|
70
|
+
if ( method === ColorAdjustmentNode.SATURATION ) {
|
|
71
|
+
|
|
72
|
+
outputNode = saturationNode.call( callParams );
|
|
73
|
+
|
|
74
|
+
} else if ( method === ColorAdjustmentNode.VIBRANCE ) {
|
|
75
|
+
|
|
76
|
+
outputNode = vibranceNode.call( callParams );
|
|
77
|
+
|
|
78
|
+
} else if ( method === ColorAdjustmentNode.HUE ) {
|
|
79
|
+
|
|
80
|
+
outputNode = hueNode.call( callParams );
|
|
81
|
+
|
|
82
|
+
} else {
|
|
83
|
+
|
|
84
|
+
console.error( `${ this.type }: Method "${ this.method }" not supported!` );
|
|
85
|
+
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return outputNode;
|
|
89
|
+
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export default ColorAdjustmentNode;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import Node from '../core/Node.js';
|
|
2
|
+
import { attribute, float } from '../shadernode/ShaderNodeBaseElements.js';
|
|
3
|
+
import { MathUtils, InstancedBufferAttribute } from 'three';
|
|
4
|
+
|
|
5
|
+
class RangeNode extends Node {
|
|
6
|
+
|
|
7
|
+
constructor( min, max ) {
|
|
8
|
+
|
|
9
|
+
super();
|
|
10
|
+
|
|
11
|
+
this.min = min;
|
|
12
|
+
this.max = max;
|
|
13
|
+
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
getVectorLength() {
|
|
17
|
+
|
|
18
|
+
const min = this.min;
|
|
19
|
+
|
|
20
|
+
let length = 1;
|
|
21
|
+
|
|
22
|
+
if ( min.isVector2 ) length = 2;
|
|
23
|
+
else if ( min.isVector3 ) length = 3;
|
|
24
|
+
else if ( min.isVector4 ) length = 4;
|
|
25
|
+
else if ( min.isColor ) length = 3;
|
|
26
|
+
|
|
27
|
+
return length;
|
|
28
|
+
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
getNodeType( builder ) {
|
|
32
|
+
|
|
33
|
+
return ( builder.object.isInstancedMesh === true ) ? builder.getTypeFromLength( this.getVectorLength() ) : 'float';
|
|
34
|
+
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
construct( builder ) {
|
|
38
|
+
|
|
39
|
+
const { min, max } = this;
|
|
40
|
+
const { object, geometry } = builder;
|
|
41
|
+
|
|
42
|
+
let output = null;
|
|
43
|
+
|
|
44
|
+
if ( object.isInstancedMesh === true ) {
|
|
45
|
+
|
|
46
|
+
const vectorLength = this.getVectorLength();
|
|
47
|
+
const attributeName = 'node' + this.id;
|
|
48
|
+
|
|
49
|
+
const length = vectorLength * object.count;
|
|
50
|
+
const array = new Float32Array( length );
|
|
51
|
+
|
|
52
|
+
const attributeGeometry = geometry.getAttribute( attributeName );
|
|
53
|
+
|
|
54
|
+
if ( attributeGeometry === undefined || attributeGeometry.array.length < length ) {
|
|
55
|
+
|
|
56
|
+
if ( vectorLength === 1 ) {
|
|
57
|
+
|
|
58
|
+
for ( let i = 0; i < length; i ++ ) {
|
|
59
|
+
|
|
60
|
+
array[ i ] = MathUtils.lerp( min, max, Math.random() );
|
|
61
|
+
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
} else if ( min.isColor ) {
|
|
65
|
+
|
|
66
|
+
for ( let i = 0; i < length; i += 3 ) {
|
|
67
|
+
|
|
68
|
+
array[ i ] = MathUtils.lerp( min.r, max.r, Math.random() );
|
|
69
|
+
array[ i + 1 ] = MathUtils.lerp( min.g, max.g, Math.random() );
|
|
70
|
+
array[ i + 2 ] = MathUtils.lerp( min.b, max.b, Math.random() );
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
} else {
|
|
75
|
+
|
|
76
|
+
for ( let i = 0; i < length; i ++ ) {
|
|
77
|
+
|
|
78
|
+
const index = i % vectorLength;
|
|
79
|
+
|
|
80
|
+
const minValue = min.getComponent( index );
|
|
81
|
+
const maxValue = max.getComponent( index );
|
|
82
|
+
|
|
83
|
+
array[ i ] = MathUtils.lerp( minValue, maxValue, Math.random() );
|
|
84
|
+
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
geometry.setAttribute( attributeName, new InstancedBufferAttribute( array, vectorLength ) );
|
|
90
|
+
|
|
91
|
+
geometry.dispose();
|
|
92
|
+
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
output = attribute( attributeName, builder.getTypeFromLength( vectorLength ) );
|
|
96
|
+
|
|
97
|
+
} else {
|
|
98
|
+
|
|
99
|
+
output = float( 0 );
|
|
100
|
+
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return output;
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export default RangeNode;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import LightingNode from './LightingNode.js';
|
|
2
2
|
import ContextNode from '../core/ContextNode.js';
|
|
3
3
|
import MaxMipLevelNode from '../utils/MaxMipLevelNode.js';
|
|
4
|
-
import { ShaderNode, float, add, mul, div, log2, clamp, roughness, reflect, mix,
|
|
4
|
+
import { ShaderNode, float, add, mul, div, log2, clamp, roughness, reflect, mix, positionViewDirection, negate, normalize, transformedNormalView, transformedNormalWorld, transformDirection, cameraViewMatrix } from '../shadernode/ShaderNodeElements.js';
|
|
5
5
|
|
|
6
6
|
// taken from here: http://casual-effects.blogspot.ca/2011/08/plausible-environment-lighting-in-two.html
|
|
7
7
|
const getSpecularMIPLevel = new ShaderNode( ( { texture, levelNode } ) => {
|
|
@@ -15,7 +15,7 @@ const getSpecularMIPLevel = new ShaderNode( ( { texture, levelNode } ) => {
|
|
|
15
15
|
|
|
16
16
|
} );
|
|
17
17
|
|
|
18
|
-
class
|
|
18
|
+
class EnvironmentNode extends LightingNode {
|
|
19
19
|
|
|
20
20
|
constructor( envNode = null ) {
|
|
21
21
|
|
|
@@ -28,13 +28,11 @@ class EnvironmentLightNode extends LightingNode {
|
|
|
28
28
|
construct( builder ) {
|
|
29
29
|
|
|
30
30
|
const envNode = this.envNode;
|
|
31
|
-
|
|
32
|
-
const flipNormalWorld = vec3( negate( transformedNormalWorld.x ), transformedNormalWorld.yz );
|
|
31
|
+
const properties = builder.getNodeProperties( this );
|
|
33
32
|
|
|
34
33
|
let reflectVec = reflect( negate( positionViewDirection ), transformedNormalView );
|
|
35
34
|
reflectVec = normalize( mix( reflectVec, transformedNormalView, mul( roughness, roughness ) ) );
|
|
36
35
|
reflectVec = transformDirection( reflectVec, cameraViewMatrix );
|
|
37
|
-
reflectVec = vec3( negate( reflectVec.x ), reflectVec.yz );
|
|
38
36
|
|
|
39
37
|
const radianceContext = new ContextNode( envNode, {
|
|
40
38
|
tempRead: false,
|
|
@@ -45,7 +43,7 @@ class EnvironmentLightNode extends LightingNode {
|
|
|
45
43
|
|
|
46
44
|
const irradianceContext = new ContextNode( envNode, {
|
|
47
45
|
tempRead: false,
|
|
48
|
-
uvNode:
|
|
46
|
+
uvNode: transformedNormalWorld,
|
|
49
47
|
levelNode: float( 1 ),
|
|
50
48
|
levelShaderNode: getSpecularMIPLevel
|
|
51
49
|
} );
|
|
@@ -58,8 +56,11 @@ class EnvironmentLightNode extends LightingNode {
|
|
|
58
56
|
|
|
59
57
|
builder.context.iblIrradiance.add( mul( Math.PI, irradianceContext ) );
|
|
60
58
|
|
|
59
|
+
properties.radianceContext = radianceContext;
|
|
60
|
+
properties.irradianceContext = irradianceContext;
|
|
61
|
+
|
|
61
62
|
}
|
|
62
63
|
|
|
63
64
|
}
|
|
64
65
|
|
|
65
|
-
export default
|
|
66
|
+
export default EnvironmentNode;
|
|
@@ -39,10 +39,10 @@ class LightingContextNode extends ContextNode {
|
|
|
39
39
|
};
|
|
40
40
|
|
|
41
41
|
const lighting = {
|
|
42
|
-
radiance
|
|
43
|
-
irradiance
|
|
44
|
-
iblIrradiance
|
|
45
|
-
ambientOcclusion
|
|
42
|
+
radiance: temp( vec3() ),
|
|
43
|
+
irradiance: temp( vec3() ),
|
|
44
|
+
iblIrradiance: temp( vec3() ),
|
|
45
|
+
ambientOcclusion: temp( float( 1 ) )
|
|
46
46
|
};
|
|
47
47
|
|
|
48
48
|
Object.assign( properties, reflectedLight, lighting );
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as Nodes from '../Nodes.js';
|
|
2
|
-
import { Loader } from 'three';
|
|
2
|
+
import { FileLoader, Loader } from 'three';
|
|
3
3
|
|
|
4
4
|
class NodeLoader extends Loader {
|
|
5
5
|
|
|
@@ -79,7 +79,7 @@ class NodeLoader extends Loader {
|
|
|
79
79
|
|
|
80
80
|
parse( json ) {
|
|
81
81
|
|
|
82
|
-
const node = Nodes.fromType( type );
|
|
82
|
+
const node = Nodes.fromType( json.type );
|
|
83
83
|
node.uuid = json.uuid;
|
|
84
84
|
|
|
85
85
|
const nodes = this.parseNodes( json.inputNodes );
|
|
@@ -1,4 +1,35 @@
|
|
|
1
1
|
import { MaterialLoader } from 'three';
|
|
2
|
+
import {
|
|
3
|
+
NodeMaterial,
|
|
4
|
+
LineBasicNodeMaterial,
|
|
5
|
+
MeshBasicNodeMaterial,
|
|
6
|
+
MeshStandardNodeMaterial,
|
|
7
|
+
PointsNodeMaterial,
|
|
8
|
+
SpriteNodeMaterial
|
|
9
|
+
} from '../materials/Materials.js';
|
|
10
|
+
|
|
11
|
+
const superFromTypeFunction = MaterialLoader.createMaterialFromType;
|
|
12
|
+
|
|
13
|
+
MaterialLoader.createMaterialFromType = function ( type ) {
|
|
14
|
+
|
|
15
|
+
const materialLib = {
|
|
16
|
+
NodeMaterial,
|
|
17
|
+
LineBasicNodeMaterial,
|
|
18
|
+
MeshBasicNodeMaterial,
|
|
19
|
+
MeshStandardNodeMaterial,
|
|
20
|
+
PointsNodeMaterial,
|
|
21
|
+
SpriteNodeMaterial,
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
if ( materialLib[ type ] !== undefined ) {
|
|
25
|
+
|
|
26
|
+
return new materialLib[ type ]();
|
|
27
|
+
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return superFromTypeFunction.call( this, type );
|
|
31
|
+
|
|
32
|
+
};
|
|
2
33
|
|
|
3
34
|
class NodeMaterialLoader extends MaterialLoader {
|
|
4
35
|
|
|
@@ -2,44 +2,32 @@ import NodeMaterial from './NodeMaterial.js';
|
|
|
2
2
|
import LineBasicNodeMaterial from './LineBasicNodeMaterial.js';
|
|
3
3
|
import MeshBasicNodeMaterial from './MeshBasicNodeMaterial.js';
|
|
4
4
|
import MeshStandardNodeMaterial from './MeshStandardNodeMaterial.js';
|
|
5
|
+
import MeshPhysicalNodeMaterial from './MeshPhysicalNodeMaterial.js';
|
|
5
6
|
import PointsNodeMaterial from './PointsNodeMaterial.js';
|
|
6
7
|
import SpriteNodeMaterial from './SpriteNodeMaterial.js';
|
|
7
|
-
import { Material } from 'three';
|
|
8
8
|
|
|
9
9
|
export {
|
|
10
10
|
NodeMaterial,
|
|
11
11
|
LineBasicNodeMaterial,
|
|
12
12
|
MeshBasicNodeMaterial,
|
|
13
13
|
MeshStandardNodeMaterial,
|
|
14
|
+
MeshPhysicalNodeMaterial,
|
|
14
15
|
PointsNodeMaterial,
|
|
15
16
|
SpriteNodeMaterial
|
|
16
17
|
};
|
|
17
18
|
|
|
18
|
-
const materialLib = {
|
|
19
|
-
NodeMaterial,
|
|
20
|
-
LineBasicNodeMaterial,
|
|
21
|
-
MeshBasicNodeMaterial,
|
|
22
|
-
MeshStandardNodeMaterial,
|
|
23
|
-
PointsNodeMaterial,
|
|
24
|
-
SpriteNodeMaterial
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
const fromTypeFunction = Material.fromType;
|
|
28
|
-
|
|
29
|
-
Material.fromType = function ( type ) {
|
|
30
|
-
|
|
31
|
-
if ( materialLib[ type ] !== undefined ) {
|
|
32
|
-
|
|
33
|
-
return new materialLib[ type ]();
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
return fromTypeFunction.call( this, type );
|
|
38
|
-
|
|
39
|
-
};
|
|
40
|
-
|
|
41
19
|
NodeMaterial.fromMaterial = function ( material ) {
|
|
42
20
|
|
|
21
|
+
const materialLib = {
|
|
22
|
+
NodeMaterial,
|
|
23
|
+
LineBasicNodeMaterial,
|
|
24
|
+
MeshBasicNodeMaterial,
|
|
25
|
+
MeshStandardNodeMaterial,
|
|
26
|
+
MeshPhysicalNodeMaterial,
|
|
27
|
+
PointsNodeMaterial,
|
|
28
|
+
SpriteNodeMaterial
|
|
29
|
+
};
|
|
30
|
+
|
|
43
31
|
const type = material.type.replace( 'Material', 'NodeMaterial' );
|
|
44
32
|
|
|
45
33
|
if ( materialLib[ type ] === undefined ) {
|
|
@@ -50,7 +38,7 @@ NodeMaterial.fromMaterial = function ( material ) {
|
|
|
50
38
|
|
|
51
39
|
const nodeMaterial = new materialLib[ type ]( material );
|
|
52
40
|
|
|
53
|
-
for (
|
|
41
|
+
for ( const key in material ) {
|
|
54
42
|
|
|
55
43
|
if ( nodeMaterial[ key ] === undefined ) {
|
|
56
44
|
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import MeshStandardNodeMaterial from './MeshStandardNodeMaterial.js';
|
|
2
|
+
|
|
3
|
+
import { MeshPhysicalMaterial } from 'three';
|
|
4
|
+
|
|
5
|
+
const defaultValues = new MeshPhysicalMaterial();
|
|
6
|
+
|
|
7
|
+
export default class MeshPhysicalNodeMaterial extends MeshStandardNodeMaterial {
|
|
8
|
+
|
|
9
|
+
constructor( parameters ) {
|
|
10
|
+
|
|
11
|
+
super();
|
|
12
|
+
|
|
13
|
+
this.isMeshPhysicalNodeMaterial = true;
|
|
14
|
+
|
|
15
|
+
this.clearcoatNode = null;
|
|
16
|
+
this.clearcoatRoughnessNode = null;
|
|
17
|
+
this.clearcoatNormalNode = null;
|
|
18
|
+
|
|
19
|
+
this.sheenNode = null;
|
|
20
|
+
this.sheenRoughnessNode = null;
|
|
21
|
+
|
|
22
|
+
this.iridescenceNode = null;
|
|
23
|
+
this.iridescenceIORNode = null;
|
|
24
|
+
this.iridescenceThicknessNode = null;
|
|
25
|
+
|
|
26
|
+
this.specularIntensityNode = null;
|
|
27
|
+
this.specularColorNode = null;
|
|
28
|
+
|
|
29
|
+
this.transmissionNode = null;
|
|
30
|
+
this.thicknessNode = null;
|
|
31
|
+
this.attenuationDistanceNode = null;
|
|
32
|
+
this.attenuationColorNode = null;
|
|
33
|
+
|
|
34
|
+
this.sheen = 0;
|
|
35
|
+
this.clearcoat = 0;
|
|
36
|
+
this.iridescence = 0;
|
|
37
|
+
this.transmission = 0;
|
|
38
|
+
|
|
39
|
+
this.setDefaultValues( defaultValues );
|
|
40
|
+
|
|
41
|
+
this.setValues( parameters );
|
|
42
|
+
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
copy( source ) {
|
|
46
|
+
|
|
47
|
+
this.clearcoatNode = source.clearcoatNode;
|
|
48
|
+
this.clearcoatRoughnessNode = source.clearcoatRoughnessNode;
|
|
49
|
+
this.clearcoatNormalNode = source.clearcoatNormalNode;
|
|
50
|
+
|
|
51
|
+
this.sheenNode = source.sheenNode;
|
|
52
|
+
this.sheenRoughnessNode = source.sheenRoughnessNode;
|
|
53
|
+
|
|
54
|
+
this.iridescenceNode = source.iridescenceNode;
|
|
55
|
+
this.iridescenceIORNode = source.iridescenceIORNode;
|
|
56
|
+
this.iridescenceThicknessNode = source.iridescenceThicknessNode;
|
|
57
|
+
|
|
58
|
+
this.specularIntensityNode = source.specularIntensityNode;
|
|
59
|
+
this.specularColorNode = source.specularColorNode;
|
|
60
|
+
|
|
61
|
+
this.transmissionNode = source.transmissionNode;
|
|
62
|
+
this.thicknessNode = source.thicknessNode;
|
|
63
|
+
this.attenuationDistanceNode = source.attenuationDistanceNode;
|
|
64
|
+
this.attenuationColorNode = source.attenuationColorNode;
|
|
65
|
+
|
|
66
|
+
return super.copy( source );
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
}
|
|
@@ -35,9 +35,6 @@ export default class MeshStandardNodeMaterial extends NodeMaterial {
|
|
|
35
35
|
this.metalnessNode = null;
|
|
36
36
|
this.roughnessNode = null;
|
|
37
37
|
|
|
38
|
-
this.clearcoatNode = null;
|
|
39
|
-
this.clearcoatRoughnessNode = null;
|
|
40
|
-
|
|
41
38
|
this.envNode = null;
|
|
42
39
|
|
|
43
40
|
this.lightsNode = null;
|
|
@@ -54,7 +51,10 @@ export default class MeshStandardNodeMaterial extends NodeMaterial {
|
|
|
54
51
|
|
|
55
52
|
this.generatePosition( builder );
|
|
56
53
|
|
|
57
|
-
|
|
54
|
+
const colorNodes = this.generateDiffuseColor( builder );
|
|
55
|
+
const { colorNode } = colorNodes;
|
|
56
|
+
let { diffuseColorNode } = colorNodes;
|
|
57
|
+
|
|
58
58
|
const envNode = this.envNode || builder.scene.environmentNode;
|
|
59
59
|
|
|
60
60
|
diffuseColorNode = this.generateStandardMaterial( builder, { colorNode, diffuseColorNode } );
|
|
@@ -155,9 +155,6 @@ export default class MeshStandardNodeMaterial extends NodeMaterial {
|
|
|
155
155
|
this.metalnessNode = source.metalnessNode;
|
|
156
156
|
this.roughnessNode = source.roughnessNode;
|
|
157
157
|
|
|
158
|
-
this.clearcoatNode = source.clearcoatNode;
|
|
159
|
-
this.clearcoatRoughnessNode = source.clearcoatRoughnessNode;
|
|
160
|
-
|
|
161
158
|
this.envNode = source.envNode;
|
|
162
159
|
|
|
163
160
|
this.lightsNode = source.lightsNode;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Material, ShaderMaterial } from 'three';
|
|
2
|
-
import { getNodesKeys } from '../core/NodeUtils.js';
|
|
2
|
+
import { getNodesKeys, getCacheKey } from '../core/NodeUtils.js';
|
|
3
3
|
import ExpressionNode from '../core/ExpressionNode.js';
|
|
4
4
|
import {
|
|
5
5
|
float, vec3, vec4,
|
|
@@ -37,7 +37,7 @@ class NodeMaterial extends ShaderMaterial {
|
|
|
37
37
|
|
|
38
38
|
customProgramCacheKey() {
|
|
39
39
|
|
|
40
|
-
return this
|
|
40
|
+
return getCacheKey( this );
|
|
41
41
|
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -2,8 +2,8 @@ import NodeMaterial from './NodeMaterial.js';
|
|
|
2
2
|
import { SpriteMaterial } from 'three';
|
|
3
3
|
import {
|
|
4
4
|
vec2, vec3, vec4,
|
|
5
|
-
|
|
6
|
-
positionLocal,
|
|
5
|
+
uniform, add, mul, sub,
|
|
6
|
+
positionLocal, length, cos, sin,
|
|
7
7
|
modelViewMatrix, cameraProjectionMatrix, modelWorldMatrix, materialRotation
|
|
8
8
|
} from '../shadernode/ShaderNodeElements.js';
|
|
9
9
|
|
|
@@ -22,13 +22,13 @@ class SpriteNodeMaterial extends NodeMaterial {
|
|
|
22
22
|
this.colorNode = null;
|
|
23
23
|
this.opacityNode = null;
|
|
24
24
|
|
|
25
|
-
this.rotationNode = null;
|
|
26
|
-
|
|
27
25
|
this.alphaTestNode = null;
|
|
28
26
|
|
|
29
27
|
this.lightNode = null;
|
|
30
28
|
|
|
31
29
|
this.positionNode = null;
|
|
30
|
+
this.rotationNode = null;
|
|
31
|
+
this.scaleNode = null;
|
|
32
32
|
|
|
33
33
|
this.setDefaultValues( defaultValues );
|
|
34
34
|
|
|
@@ -40,25 +40,36 @@ class SpriteNodeMaterial extends NodeMaterial {
|
|
|
40
40
|
|
|
41
41
|
// < VERTEX STAGE >
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
if ( this.positionNode !== null ) {
|
|
46
|
-
|
|
47
|
-
vertex = bypass( vertex, assign( positionLocal, this.positionNode ) );
|
|
43
|
+
const { positionNode, rotationNode, scaleNode } = this;
|
|
48
44
|
|
|
49
|
-
|
|
45
|
+
const vertex = positionLocal;
|
|
50
46
|
|
|
51
|
-
let mvPosition = mul( modelViewMatrix, vec4( 0, 0, 0, 1 ) );
|
|
47
|
+
let mvPosition = mul( modelViewMatrix, positionNode ? vec4( positionNode.xyz, 1 ) : vec4( 0, 0, 0, 1 ) );
|
|
52
48
|
|
|
53
|
-
|
|
49
|
+
let scale = vec2(
|
|
54
50
|
length( vec3( modelWorldMatrix[ 0 ].x, modelWorldMatrix[ 0 ].y, modelWorldMatrix[ 0 ].z ) ),
|
|
55
51
|
length( vec3( modelWorldMatrix[ 1 ].x, modelWorldMatrix[ 1 ].y, modelWorldMatrix[ 1 ].z ) )
|
|
56
52
|
);
|
|
57
53
|
|
|
58
|
-
|
|
59
|
-
|
|
54
|
+
if ( scaleNode !== null ) {
|
|
55
|
+
|
|
56
|
+
scale = mul( scale, scaleNode );
|
|
57
|
+
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
let alignedPosition = vertex.xy;
|
|
60
61
|
|
|
61
|
-
|
|
62
|
+
if ( builder.object.center?.isVector2 === true ) {
|
|
63
|
+
|
|
64
|
+
alignedPosition = sub( alignedPosition, sub( uniform( builder.object.center ), vec2( 0.5 ) ) );
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
alignedPosition = mul( alignedPosition, scale );
|
|
69
|
+
|
|
70
|
+
const rotation = rotationNode || materialRotation;
|
|
71
|
+
|
|
72
|
+
const rotatedPosition = vec2(
|
|
62
73
|
sub( mul( cos( rotation ), alignedPosition.x ), mul( sin( rotation ), alignedPosition.y ) ),
|
|
63
74
|
add( mul( sin( rotation ), alignedPosition.x ), mul( cos( rotation ), alignedPosition.y ) )
|
|
64
75
|
);
|
|
@@ -78,13 +89,13 @@ class SpriteNodeMaterial extends NodeMaterial {
|
|
|
78
89
|
this.colorNode = source.colorNode;
|
|
79
90
|
this.opacityNode = source.opacityNode;
|
|
80
91
|
|
|
81
|
-
this.rotationNode = source.rotationNode;
|
|
82
|
-
|
|
83
92
|
this.alphaTestNode = source.alphaTestNode;
|
|
84
93
|
|
|
85
94
|
this.lightNode = source.lightNode;
|
|
86
95
|
|
|
87
96
|
this.positionNode = source.positionNode;
|
|
97
|
+
this.rotationNode = source.rotationNode;
|
|
98
|
+
this.scaleNode = source.scaleNode;
|
|
88
99
|
|
|
89
100
|
return super.copy( source );
|
|
90
101
|
|