@triforge/shader-core 0.1.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 +90 -0
- package/dist/bundle.js +5578 -0
- package/dist/core/CompileContext.d.ts +60 -0
- package/dist/core/CompileContext.d.ts.map +1 -0
- package/dist/core/CompileContext.js +276 -0
- package/dist/core/InputNode.d.ts +11 -0
- package/dist/core/InputNode.d.ts.map +1 -0
- package/dist/core/InputNode.js +13 -0
- package/dist/core/InputSocket.d.ts +21 -0
- package/dist/core/InputSocket.d.ts.map +1 -0
- package/dist/core/InputSocket.js +23 -0
- package/dist/core/OutputNode.d.ts +30 -0
- package/dist/core/OutputNode.d.ts.map +1 -0
- package/dist/core/OutputNode.js +60 -0
- package/dist/core/OutputSocket.d.ts +18 -0
- package/dist/core/OutputSocket.d.ts.map +1 -0
- package/dist/core/OutputSocket.js +16 -0
- package/dist/core/ProcessNode.d.ts +8 -0
- package/dist/core/ProcessNode.d.ts.map +1 -0
- package/dist/core/ProcessNode.js +7 -0
- package/dist/core/ShaderConfig.d.ts +13 -0
- package/dist/core/ShaderConfig.d.ts.map +1 -0
- package/dist/core/ShaderConfig.js +11 -0
- package/dist/core/ShaderNode.d.ts +114 -0
- package/dist/core/ShaderNode.d.ts.map +1 -0
- package/dist/core/ShaderNode.js +156 -0
- package/dist/core/ShaderNodeError.d.ts +32 -0
- package/dist/core/ShaderNodeError.d.ts.map +1 -0
- package/dist/core/ShaderNodeError.js +61 -0
- package/dist/core/SocketType.d.ts +12 -0
- package/dist/core/SocketType.d.ts.map +1 -0
- package/dist/core/SocketType.js +7 -0
- package/dist/index.d.ts +164 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +108 -0
- package/dist/nodes/input/Attribute.d.ts +45 -0
- package/dist/nodes/input/Attribute.d.ts.map +1 -0
- package/dist/nodes/input/Attribute.js +58 -0
- package/dist/nodes/input/CameraData.d.ts +21 -0
- package/dist/nodes/input/CameraData.d.ts.map +1 -0
- package/dist/nodes/input/CameraData.js +33 -0
- package/dist/nodes/input/ColorAttribute.d.ts +28 -0
- package/dist/nodes/input/ColorAttribute.d.ts.map +1 -0
- package/dist/nodes/input/ColorAttribute.js +32 -0
- package/dist/nodes/input/Geometry.d.ts +23 -0
- package/dist/nodes/input/Geometry.d.ts.map +1 -0
- package/dist/nodes/input/Geometry.js +38 -0
- package/dist/nodes/input/HairInfo.d.ts +38 -0
- package/dist/nodes/input/HairInfo.d.ts.map +1 -0
- package/dist/nodes/input/HairInfo.js +50 -0
- package/dist/nodes/input/LayerWeight.d.ts +26 -0
- package/dist/nodes/input/LayerWeight.d.ts.map +1 -0
- package/dist/nodes/input/LayerWeight.js +35 -0
- package/dist/nodes/input/LightPath.d.ts +60 -0
- package/dist/nodes/input/LightPath.d.ts.map +1 -0
- package/dist/nodes/input/LightPath.js +112 -0
- package/dist/nodes/input/ObjectInfo.d.ts +22 -0
- package/dist/nodes/input/ObjectInfo.d.ts.map +1 -0
- package/dist/nodes/input/ObjectInfo.js +41 -0
- package/dist/nodes/input/OceanAttribute.d.ts +32 -0
- package/dist/nodes/input/OceanAttribute.d.ts.map +1 -0
- package/dist/nodes/input/OceanAttribute.js +38 -0
- package/dist/nodes/input/ParticleInfo.d.ts +31 -0
- package/dist/nodes/input/ParticleInfo.d.ts.map +1 -0
- package/dist/nodes/input/ParticleInfo.js +44 -0
- package/dist/nodes/input/RGB.d.ts +19 -0
- package/dist/nodes/input/RGB.d.ts.map +1 -0
- package/dist/nodes/input/RGB.js +23 -0
- package/dist/nodes/input/ScreenCamera.d.ts +37 -0
- package/dist/nodes/input/ScreenCamera.d.ts.map +1 -0
- package/dist/nodes/input/ScreenCamera.js +59 -0
- package/dist/nodes/input/Tangent.d.ts +21 -0
- package/dist/nodes/input/Tangent.d.ts.map +1 -0
- package/dist/nodes/input/Tangent.js +30 -0
- package/dist/nodes/input/TextureCoordinate.d.ts +17 -0
- package/dist/nodes/input/TextureCoordinate.d.ts.map +1 -0
- package/dist/nodes/input/TextureCoordinate.js +24 -0
- package/dist/nodes/input/UVMap.d.ts +20 -0
- package/dist/nodes/input/UVMap.d.ts.map +1 -0
- package/dist/nodes/input/UVMap.js +23 -0
- package/dist/nodes/input/Value.d.ts +19 -0
- package/dist/nodes/input/Value.d.ts.map +1 -0
- package/dist/nodes/input/Value.js +22 -0
- package/dist/nodes/input/Wireframe.d.ts +25 -0
- package/dist/nodes/input/Wireframe.d.ts.map +1 -0
- package/dist/nodes/input/Wireframe.js +30 -0
- package/dist/nodes/output/Displacement.d.ts +28 -0
- package/dist/nodes/output/Displacement.d.ts.map +1 -0
- package/dist/nodes/output/Displacement.js +34 -0
- package/dist/nodes/output/MaterialOutput.d.ts +43 -0
- package/dist/nodes/output/MaterialOutput.d.ts.map +1 -0
- package/dist/nodes/output/MaterialOutput.js +118 -0
- package/dist/nodes/output/ScreenOutput.d.ts +38 -0
- package/dist/nodes/output/ScreenOutput.d.ts.map +1 -0
- package/dist/nodes/output/ScreenOutput.js +88 -0
- package/dist/nodes/process/AddShader.d.ts +30 -0
- package/dist/nodes/process/AddShader.d.ts.map +1 -0
- package/dist/nodes/process/AddShader.js +36 -0
- package/dist/nodes/process/AnimatedNoiseTexture.d.ts +39 -0
- package/dist/nodes/process/AnimatedNoiseTexture.d.ts.map +1 -0
- package/dist/nodes/process/AnimatedNoiseTexture.js +93 -0
- package/dist/nodes/process/Blackbody.d.ts +29 -0
- package/dist/nodes/process/Blackbody.d.ts.map +1 -0
- package/dist/nodes/process/Blackbody.js +50 -0
- package/dist/nodes/process/BrickTexture.d.ts +36 -0
- package/dist/nodes/process/BrickTexture.d.ts.map +1 -0
- package/dist/nodes/process/BrickTexture.js +71 -0
- package/dist/nodes/process/BrightContrast.d.ts +30 -0
- package/dist/nodes/process/BrightContrast.d.ts.map +1 -0
- package/dist/nodes/process/BrightContrast.js +41 -0
- package/dist/nodes/process/Bump.d.ts +31 -0
- package/dist/nodes/process/Bump.d.ts.map +1 -0
- package/dist/nodes/process/Bump.js +65 -0
- package/dist/nodes/process/CheckerTexture.d.ts +30 -0
- package/dist/nodes/process/CheckerTexture.d.ts.map +1 -0
- package/dist/nodes/process/CheckerTexture.js +48 -0
- package/dist/nodes/process/Clamp.d.ts +32 -0
- package/dist/nodes/process/Clamp.d.ts.map +1 -0
- package/dist/nodes/process/Clamp.js +37 -0
- package/dist/nodes/process/ColorRamp.d.ts +28 -0
- package/dist/nodes/process/ColorRamp.d.ts.map +1 -0
- package/dist/nodes/process/ColorRamp.js +49 -0
- package/dist/nodes/process/CombineColor.d.ts +34 -0
- package/dist/nodes/process/CombineColor.d.ts.map +1 -0
- package/dist/nodes/process/CombineColor.js +69 -0
- package/dist/nodes/process/CombineRGB.d.ts +29 -0
- package/dist/nodes/process/CombineRGB.d.ts.map +1 -0
- package/dist/nodes/process/CombineRGB.js +33 -0
- package/dist/nodes/process/CombineXYZ.d.ts +29 -0
- package/dist/nodes/process/CombineXYZ.d.ts.map +1 -0
- package/dist/nodes/process/CombineXYZ.js +33 -0
- package/dist/nodes/process/DiffuseBSDF.d.ts +30 -0
- package/dist/nodes/process/DiffuseBSDF.d.ts.map +1 -0
- package/dist/nodes/process/DiffuseBSDF.js +43 -0
- package/dist/nodes/process/Emission.d.ts +30 -0
- package/dist/nodes/process/Emission.d.ts.map +1 -0
- package/dist/nodes/process/Emission.js +36 -0
- package/dist/nodes/process/EnvironmentTexture.d.ts +41 -0
- package/dist/nodes/process/EnvironmentTexture.d.ts.map +1 -0
- package/dist/nodes/process/EnvironmentTexture.js +65 -0
- package/dist/nodes/process/FloatCurve.d.ts +34 -0
- package/dist/nodes/process/FloatCurve.d.ts.map +1 -0
- package/dist/nodes/process/FloatCurve.js +46 -0
- package/dist/nodes/process/Fresnel.d.ts +36 -0
- package/dist/nodes/process/Fresnel.d.ts.map +1 -0
- package/dist/nodes/process/Fresnel.js +53 -0
- package/dist/nodes/process/Gamma.d.ts +29 -0
- package/dist/nodes/process/Gamma.d.ts.map +1 -0
- package/dist/nodes/process/Gamma.js +35 -0
- package/dist/nodes/process/GlassBSDF.d.ts +31 -0
- package/dist/nodes/process/GlassBSDF.d.ts.map +1 -0
- package/dist/nodes/process/GlassBSDF.js +51 -0
- package/dist/nodes/process/GlossyBSDF.d.ts +30 -0
- package/dist/nodes/process/GlossyBSDF.d.ts.map +1 -0
- package/dist/nodes/process/GlossyBSDF.js +50 -0
- package/dist/nodes/process/GradientTexture.d.ts +31 -0
- package/dist/nodes/process/GradientTexture.d.ts.map +1 -0
- package/dist/nodes/process/GradientTexture.js +49 -0
- package/dist/nodes/process/HashValue.d.ts +30 -0
- package/dist/nodes/process/HashValue.d.ts.map +1 -0
- package/dist/nodes/process/HashValue.js +34 -0
- package/dist/nodes/process/HueSaturationValue.d.ts +32 -0
- package/dist/nodes/process/HueSaturationValue.d.ts.map +1 -0
- package/dist/nodes/process/HueSaturationValue.js +58 -0
- package/dist/nodes/process/ImageTexture.d.ts +34 -0
- package/dist/nodes/process/ImageTexture.d.ts.map +1 -0
- package/dist/nodes/process/ImageTexture.js +53 -0
- package/dist/nodes/process/InvertColor.d.ts +29 -0
- package/dist/nodes/process/InvertColor.d.ts.map +1 -0
- package/dist/nodes/process/InvertColor.js +35 -0
- package/dist/nodes/process/MagicTexture.d.ts +30 -0
- package/dist/nodes/process/MagicTexture.d.ts.map +1 -0
- package/dist/nodes/process/MagicTexture.js +54 -0
- package/dist/nodes/process/MapRange.d.ts +38 -0
- package/dist/nodes/process/MapRange.d.ts.map +1 -0
- package/dist/nodes/process/MapRange.js +52 -0
- package/dist/nodes/process/Mapping.d.ts +37 -0
- package/dist/nodes/process/Mapping.d.ts.map +1 -0
- package/dist/nodes/process/Mapping.js +57 -0
- package/dist/nodes/process/Math.d.ts +40 -0
- package/dist/nodes/process/Math.d.ts.map +1 -0
- package/dist/nodes/process/Math.js +100 -0
- package/dist/nodes/process/MixRGB.d.ts +35 -0
- package/dist/nodes/process/MixRGB.d.ts.map +1 -0
- package/dist/nodes/process/MixRGB.js +63 -0
- package/dist/nodes/process/MixShader.d.ts +35 -0
- package/dist/nodes/process/MixShader.d.ts.map +1 -0
- package/dist/nodes/process/MixShader.js +47 -0
- package/dist/nodes/process/MusgraveTexture.d.ts +36 -0
- package/dist/nodes/process/MusgraveTexture.d.ts.map +1 -0
- package/dist/nodes/process/MusgraveTexture.js +70 -0
- package/dist/nodes/process/NoiseTexture.d.ts +31 -0
- package/dist/nodes/process/NoiseTexture.d.ts.map +1 -0
- package/dist/nodes/process/NoiseTexture.js +78 -0
- package/dist/nodes/process/Normal.d.ts +30 -0
- package/dist/nodes/process/Normal.d.ts.map +1 -0
- package/dist/nodes/process/Normal.js +38 -0
- package/dist/nodes/process/NormalMap.d.ts +34 -0
- package/dist/nodes/process/NormalMap.d.ts.map +1 -0
- package/dist/nodes/process/NormalMap.js +54 -0
- package/dist/nodes/process/PrincipledBSDF.d.ts +32 -0
- package/dist/nodes/process/PrincipledBSDF.d.ts.map +1 -0
- package/dist/nodes/process/PrincipledBSDF.js +75 -0
- package/dist/nodes/process/PrincipledHair.d.ts +63 -0
- package/dist/nodes/process/PrincipledHair.d.ts.map +1 -0
- package/dist/nodes/process/PrincipledHair.js +137 -0
- package/dist/nodes/process/PrincipledVolume.d.ts +37 -0
- package/dist/nodes/process/PrincipledVolume.d.ts.map +1 -0
- package/dist/nodes/process/PrincipledVolume.js +67 -0
- package/dist/nodes/process/RGBCurves.d.ts +45 -0
- package/dist/nodes/process/RGBCurves.d.ts.map +1 -0
- package/dist/nodes/process/RGBCurves.js +81 -0
- package/dist/nodes/process/RGBtoBW.d.ts +28 -0
- package/dist/nodes/process/RGBtoBW.d.ts.map +1 -0
- package/dist/nodes/process/RGBtoBW.js +31 -0
- package/dist/nodes/process/RefractionBSDF.d.ts +32 -0
- package/dist/nodes/process/RefractionBSDF.d.ts.map +1 -0
- package/dist/nodes/process/RefractionBSDF.js +46 -0
- package/dist/nodes/process/SchwarzschildMarch.d.ts +56 -0
- package/dist/nodes/process/SchwarzschildMarch.d.ts.map +1 -0
- package/dist/nodes/process/SchwarzschildMarch.js +306 -0
- package/dist/nodes/process/SeparateColor.d.ts +33 -0
- package/dist/nodes/process/SeparateColor.d.ts.map +1 -0
- package/dist/nodes/process/SeparateColor.js +79 -0
- package/dist/nodes/process/SeparateRGB.d.ts +27 -0
- package/dist/nodes/process/SeparateRGB.d.ts.map +1 -0
- package/dist/nodes/process/SeparateRGB.js +31 -0
- package/dist/nodes/process/SeparateXYZ.d.ts +27 -0
- package/dist/nodes/process/SeparateXYZ.d.ts.map +1 -0
- package/dist/nodes/process/SeparateXYZ.js +31 -0
- package/dist/nodes/process/ShaderScript.d.ts +95 -0
- package/dist/nodes/process/ShaderScript.d.ts.map +1 -0
- package/dist/nodes/process/ShaderScript.js +119 -0
- package/dist/nodes/process/ShaderToRGB.d.ts +28 -0
- package/dist/nodes/process/ShaderToRGB.d.ts.map +1 -0
- package/dist/nodes/process/ShaderToRGB.js +33 -0
- package/dist/nodes/process/SheenBSDF.d.ts +31 -0
- package/dist/nodes/process/SheenBSDF.d.ts.map +1 -0
- package/dist/nodes/process/SheenBSDF.js +49 -0
- package/dist/nodes/process/SpecularBSDF.d.ts +32 -0
- package/dist/nodes/process/SpecularBSDF.d.ts.map +1 -0
- package/dist/nodes/process/SpecularBSDF.js +54 -0
- package/dist/nodes/process/SubsurfaceScattering.d.ts +33 -0
- package/dist/nodes/process/SubsurfaceScattering.d.ts.map +1 -0
- package/dist/nodes/process/SubsurfaceScattering.js +46 -0
- package/dist/nodes/process/ToonBSDF.d.ts +31 -0
- package/dist/nodes/process/ToonBSDF.d.ts.map +1 -0
- package/dist/nodes/process/ToonBSDF.js +44 -0
- package/dist/nodes/process/TranslucentBSDF.d.ts +29 -0
- package/dist/nodes/process/TranslucentBSDF.d.ts.map +1 -0
- package/dist/nodes/process/TranslucentBSDF.js +39 -0
- package/dist/nodes/process/VectorCurves.d.ts +42 -0
- package/dist/nodes/process/VectorCurves.d.ts.map +1 -0
- package/dist/nodes/process/VectorCurves.js +71 -0
- package/dist/nodes/process/VectorMath.d.ts +38 -0
- package/dist/nodes/process/VectorMath.d.ts.map +1 -0
- package/dist/nodes/process/VectorMath.js +105 -0
- package/dist/nodes/process/VectorRotate.d.ts +34 -0
- package/dist/nodes/process/VectorRotate.d.ts.map +1 -0
- package/dist/nodes/process/VectorRotate.js +52 -0
- package/dist/nodes/process/VectorTransform.d.ts +36 -0
- package/dist/nodes/process/VectorTransform.d.ts.map +1 -0
- package/dist/nodes/process/VectorTransform.js +48 -0
- package/dist/nodes/process/VolumeAbsorption.d.ts +30 -0
- package/dist/nodes/process/VolumeAbsorption.d.ts.map +1 -0
- package/dist/nodes/process/VolumeAbsorption.js +36 -0
- package/dist/nodes/process/VolumeScatter.d.ts +31 -0
- package/dist/nodes/process/VolumeScatter.d.ts.map +1 -0
- package/dist/nodes/process/VolumeScatter.js +42 -0
- package/dist/nodes/process/VoronoiTexture.d.ts +38 -0
- package/dist/nodes/process/VoronoiTexture.d.ts.map +1 -0
- package/dist/nodes/process/VoronoiTexture.js +123 -0
- package/dist/nodes/process/WaveTexture.d.ts +39 -0
- package/dist/nodes/process/WaveTexture.d.ts.map +1 -0
- package/dist/nodes/process/WaveTexture.js +77 -0
- package/dist/nodes/process/Wavelength.d.ts +28 -0
- package/dist/nodes/process/Wavelength.d.ts.map +1 -0
- package/dist/nodes/process/Wavelength.js +43 -0
- package/dist/nodes/process/WhiteNoise.d.ts +27 -0
- package/dist/nodes/process/WhiteNoise.d.ts.map +1 -0
- package/dist/nodes/process/WhiteNoise.js +44 -0
- package/dist/nodes/shader/AmbientOcclusion.d.ts +47 -0
- package/dist/nodes/shader/AmbientOcclusion.d.ts.map +1 -0
- package/dist/nodes/shader/AmbientOcclusion.js +128 -0
- package/dist/nodes/shader/RayPortal.d.ts +57 -0
- package/dist/nodes/shader/RayPortal.d.ts.map +1 -0
- package/dist/nodes/shader/RayPortal.js +56 -0
- package/dist/shaders/color.d.ts +12 -0
- package/dist/shaders/color.d.ts.map +1 -0
- package/dist/shaders/color.js +42 -0
- package/dist/shaders/noise.d.ts +12 -0
- package/dist/shaders/noise.d.ts.map +1 -0
- package/dist/shaders/noise.js +70 -0
- package/dist/types/shader.d.ts +17 -0
- package/dist/types/shader.d.ts.map +1 -0
- package/dist/types/shader.js +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
/**
|
|
3
|
+
* Animated Noise Texture — time-animated extension of NoiseTexture.
|
|
4
|
+
* Uses four scrolling noise layers for realistic wave-like movement.
|
|
5
|
+
* Injects a `time` uniform into the compiled ShaderMaterial automatically.
|
|
6
|
+
*
|
|
7
|
+
* Inputs: vector, scale, detail, roughness, distortion, speed
|
|
8
|
+
* Outputs: Fac (float), Color (color)
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* const noise = new AnimatedNoiseTexture({ scale: 5.0, speed: 1.0 })
|
|
12
|
+
* // After mat.compile(), time updates via: mat.material.uniforms.time.value = t
|
|
13
|
+
*/
|
|
14
|
+
export class AnimatedNoiseTexture extends ProcessNode {
|
|
15
|
+
get nodeType() { return 'AnimatedNoiseTexture'; }
|
|
16
|
+
get metadata() {
|
|
17
|
+
return {
|
|
18
|
+
label: 'Animated Noise Texture',
|
|
19
|
+
category: 'Texture',
|
|
20
|
+
color: '#3a6b3a',
|
|
21
|
+
cost: 'high',
|
|
22
|
+
costNote: 'Four noise layers per fragment. Limit to 2 instances per material.',
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
constructor(inputs = {}) {
|
|
26
|
+
super('AnimatedNoiseTexture');
|
|
27
|
+
this.speed = inputs.speed ?? 1.0;
|
|
28
|
+
this._inputs = this.createInputs(inputs, {
|
|
29
|
+
vector: ['color', null],
|
|
30
|
+
scale: ['float', inputs.scale ?? 5.0],
|
|
31
|
+
detail: ['float', inputs.detail ?? 2.0],
|
|
32
|
+
roughness: ['float', inputs.roughness ?? 0.5],
|
|
33
|
+
distortion: ['float', inputs.distortion ?? 0.0],
|
|
34
|
+
});
|
|
35
|
+
this._outputs = this.createOutputs({ Fac: 'float', Color: 'color' });
|
|
36
|
+
}
|
|
37
|
+
getInputSockets() { return this._inputs; }
|
|
38
|
+
getOutputSockets() { return this._outputs; }
|
|
39
|
+
compileDefs() { return AnimatedNoiseTexture.glslFunction; }
|
|
40
|
+
compileCall(ctx) {
|
|
41
|
+
const p3 = this._inputs.vector.isConnected()
|
|
42
|
+
? ctx.outputVar(this._inputs.vector.connection.node, this._inputs.vector.connection.name)
|
|
43
|
+
: 'vPosition';
|
|
44
|
+
const scale = ctx.resolveInput(this._inputs.scale);
|
|
45
|
+
const fv = ctx.outputVar(this, 'Fac');
|
|
46
|
+
const cv = ctx.outputVar(this, 'Color');
|
|
47
|
+
return [
|
|
48
|
+
`float ${fv} = _st_animatedNoise(${p3}, ${scale}, ${this.speed.toFixed(4)});`,
|
|
49
|
+
`vec3 ${cv} = vec3(${fv});`,
|
|
50
|
+
].join('\n ');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
AnimatedNoiseTexture.instanceSpecificDef = false;
|
|
54
|
+
AnimatedNoiseTexture.glslFunction = `
|
|
55
|
+
uniform float time;
|
|
56
|
+
|
|
57
|
+
float _st_an_hash(vec3 p) {
|
|
58
|
+
return fract(sin(dot(p, vec3(127.1, 311.7, 74.7))) * 43758.5453);
|
|
59
|
+
}
|
|
60
|
+
vec3 _st_an_grad(vec3 p) {
|
|
61
|
+
float h = _st_an_hash(floor(p));
|
|
62
|
+
return normalize(vec3(h, fract(h * 34.0), fract(h * 89.0)) * 2.0 - 1.0);
|
|
63
|
+
}
|
|
64
|
+
float _st_an_perlin(vec3 p) {
|
|
65
|
+
vec3 pi = floor(p), pf = p - pi, u = pf * pf * (3.0 - 2.0 * pf);
|
|
66
|
+
float v000 = dot(_st_an_grad(pi+vec3(0,0,0)), pf-vec3(0,0,0));
|
|
67
|
+
float v100 = dot(_st_an_grad(pi+vec3(1,0,0)), pf-vec3(1,0,0));
|
|
68
|
+
float v010 = dot(_st_an_grad(pi+vec3(0,1,0)), pf-vec3(0,1,0));
|
|
69
|
+
float v110 = dot(_st_an_grad(pi+vec3(1,1,0)), pf-vec3(1,1,0));
|
|
70
|
+
float v001 = dot(_st_an_grad(pi+vec3(0,0,1)), pf-vec3(0,0,1));
|
|
71
|
+
float v101 = dot(_st_an_grad(pi+vec3(1,0,1)), pf-vec3(1,0,1));
|
|
72
|
+
float v011 = dot(_st_an_grad(pi+vec3(0,1,1)), pf-vec3(0,1,1));
|
|
73
|
+
float v111 = dot(_st_an_grad(pi+vec3(1,1,1)), pf-vec3(1,1,1));
|
|
74
|
+
return mix(
|
|
75
|
+
mix(mix(v000,v100,u.x), mix(v010,v110,u.x), u.y),
|
|
76
|
+
mix(mix(v001,v101,u.x), mix(v011,v111,u.x), u.y), u.z
|
|
77
|
+
) * 0.5 + 0.5;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
float _st_animatedNoise(vec3 pos, float scale, float speed) {
|
|
81
|
+
vec2 worldXZ = pos.xz;
|
|
82
|
+
vec2 wp = worldXZ * 0.008 * scale;
|
|
83
|
+
float t = time * speed;
|
|
84
|
+
vec2 uv0 = wp + vec2( t / 17.0, t / 29.0);
|
|
85
|
+
vec2 uv1 = wp + vec2(-t / 19.0, t / 31.0);
|
|
86
|
+
vec2 uv2 = wp * 2.1 + vec2( t / 41.0, t / 53.0);
|
|
87
|
+
vec2 uv3 = wp * 2.1 + vec2(-t / 37.0, -t / 61.0);
|
|
88
|
+
float n = _st_an_perlin(vec3(uv0, 0.0))
|
|
89
|
+
+ _st_an_perlin(vec3(uv1, 0.0))
|
|
90
|
+
+ _st_an_perlin(vec3(uv2, 0.0))
|
|
91
|
+
+ _st_an_perlin(vec3(uv3, 0.0));
|
|
92
|
+
return n * 0.25;
|
|
93
|
+
}`;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
import type { NodeMetadata } from '../../core/ShaderNode.js';
|
|
3
|
+
import type { CompileContext } from '../../core/CompileContext.js';
|
|
4
|
+
import type { OutputSocket } from '../../core/OutputSocket.js';
|
|
5
|
+
export interface BlackbodyInputs {
|
|
6
|
+
temperature?: OutputSocket | number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Blackbody — Blender "Blackbody" node equivalent.
|
|
10
|
+
* Converts temperature in Kelvin to an emission colour.
|
|
11
|
+
* 1000K = deep red, 6500K = white, 10000K = blue-white.
|
|
12
|
+
*
|
|
13
|
+
* Inputs: temperature (float, Kelvin)
|
|
14
|
+
* Outputs: Color (color)
|
|
15
|
+
*/
|
|
16
|
+
export declare class Blackbody extends ProcessNode {
|
|
17
|
+
get nodeType(): string;
|
|
18
|
+
static instanceSpecificDef: boolean;
|
|
19
|
+
get metadata(): NodeMetadata;
|
|
20
|
+
static glslFunction: string;
|
|
21
|
+
private readonly _inputs;
|
|
22
|
+
private readonly _outputs;
|
|
23
|
+
constructor(inputs?: BlackbodyInputs);
|
|
24
|
+
getInputSockets(): Record<string, import("../../core/InputSocket.js").InputSocket<unknown>>;
|
|
25
|
+
getOutputSockets(): Record<string, OutputSocket>;
|
|
26
|
+
compileDefs(): string;
|
|
27
|
+
compileCall(ctx: CompileContext): string;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=Blackbody.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Blackbody.d.ts","sourceRoot":"","sources":["../../../src/nodes/process/Blackbody.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE9D,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;CACpC;AAED;;;;;;;GAOG;AACH,qBAAa,SAAU,SAAQ,WAAW;IACxC,IAAI,QAAQ,WAAyB;IACrC,MAAM,CAAC,mBAAmB,UAAQ;IAElC,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAED,MAAM,CAAC,YAAY,SAmBnB;IAEA,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2E;IACnG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmE;gBAEhF,MAAM,GAAE,eAAoB;IAQxC,eAAe;IACf,gBAAgB;IAChB,WAAW;IAEX,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;CAIzC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
/**
|
|
3
|
+
* Blackbody — Blender "Blackbody" node equivalent.
|
|
4
|
+
* Converts temperature in Kelvin to an emission colour.
|
|
5
|
+
* 1000K = deep red, 6500K = white, 10000K = blue-white.
|
|
6
|
+
*
|
|
7
|
+
* Inputs: temperature (float, Kelvin)
|
|
8
|
+
* Outputs: Color (color)
|
|
9
|
+
*/
|
|
10
|
+
export class Blackbody extends ProcessNode {
|
|
11
|
+
get nodeType() { return 'Blackbody'; }
|
|
12
|
+
get metadata() {
|
|
13
|
+
return { label: 'Blackbody', category: 'Color', color: '#633060', cost: 'low' };
|
|
14
|
+
}
|
|
15
|
+
constructor(inputs = {}) {
|
|
16
|
+
super('Blackbody');
|
|
17
|
+
this._inputs = this.createInputs(inputs, {
|
|
18
|
+
temperature: ['float', inputs.temperature ?? 3200.0],
|
|
19
|
+
});
|
|
20
|
+
this._outputs = this.createOutputs({ Color: 'color' });
|
|
21
|
+
}
|
|
22
|
+
getInputSockets() { return this._inputs; }
|
|
23
|
+
getOutputSockets() { return this._outputs; }
|
|
24
|
+
compileDefs() { return Blackbody.glslFunction; }
|
|
25
|
+
compileCall(ctx) {
|
|
26
|
+
const temp = ctx.resolveInput(this._inputs.temperature);
|
|
27
|
+
return `vec3 ${ctx.outputVar(this, 'Color')} = _st_blackbody(${temp});`;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
Blackbody.instanceSpecificDef = false;
|
|
31
|
+
Blackbody.glslFunction = `
|
|
32
|
+
vec3 _st_blackbody(float t) {
|
|
33
|
+
t = clamp(t, 800.0, 40000.0) / 100.0;
|
|
34
|
+
float r, g, b;
|
|
35
|
+
if (t <= 66.0) {
|
|
36
|
+
r = 1.0;
|
|
37
|
+
g = clamp((99.4708025861 * log(t) - 161.1195681661) / 255.0, 0.0, 1.0);
|
|
38
|
+
} else {
|
|
39
|
+
r = clamp((329.698727446 * pow(t - 60.0, -0.1332047592)) / 255.0, 0.0, 1.0);
|
|
40
|
+
g = clamp((288.1221695283 * pow(t - 60.0, -0.0755148492)) / 255.0, 0.0, 1.0);
|
|
41
|
+
}
|
|
42
|
+
if (t >= 66.0) {
|
|
43
|
+
b = 1.0;
|
|
44
|
+
} else if (t <= 19.0) {
|
|
45
|
+
b = 0.0;
|
|
46
|
+
} else {
|
|
47
|
+
b = clamp((138.5177312231 * log(t - 10.0) - 305.0447927307) / 255.0, 0.0, 1.0);
|
|
48
|
+
}
|
|
49
|
+
return vec3(r, g, b);
|
|
50
|
+
}`;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
import type { NodeMetadata } from '../../core/ShaderNode.js';
|
|
3
|
+
import type { CompileContext } from '../../core/CompileContext.js';
|
|
4
|
+
import type { OutputSocket } from '../../core/OutputSocket.js';
|
|
5
|
+
export interface BrickTextureInputs {
|
|
6
|
+
vector?: OutputSocket;
|
|
7
|
+
color1?: OutputSocket | string;
|
|
8
|
+
color2?: OutputSocket | string;
|
|
9
|
+
mortar?: OutputSocket | string;
|
|
10
|
+
scale?: number | OutputSocket;
|
|
11
|
+
mortarSize?: number | OutputSocket;
|
|
12
|
+
mortarSmooth?: number | OutputSocket;
|
|
13
|
+
bias?: number | OutputSocket;
|
|
14
|
+
brickWidth?: number | OutputSocket;
|
|
15
|
+
rowHeight?: number | OutputSocket;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Brick Texture — Blender "Brick Texture" node equivalent.
|
|
19
|
+
* Procedural brick/tile pattern with mortar lines.
|
|
20
|
+
*
|
|
21
|
+
* Outputs: Color (color), Fac (float — 1.0 on mortar, 0.0 on brick)
|
|
22
|
+
*/
|
|
23
|
+
export declare class BrickTexture extends ProcessNode {
|
|
24
|
+
get nodeType(): string;
|
|
25
|
+
static instanceSpecificDef: boolean;
|
|
26
|
+
get metadata(): NodeMetadata;
|
|
27
|
+
static glslFunction: string;
|
|
28
|
+
private readonly _inputs;
|
|
29
|
+
private readonly _outputs;
|
|
30
|
+
constructor(inputs?: BrickTextureInputs);
|
|
31
|
+
getInputSockets(): Record<string, import("../../core/InputSocket.js").InputSocket<unknown>>;
|
|
32
|
+
getOutputSockets(): Record<string, OutputSocket>;
|
|
33
|
+
compileDefs(): string;
|
|
34
|
+
compileCall(ctx: CompileContext): string;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=BrickTexture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrickTexture.d.ts","sourceRoot":"","sources":["../../../src/nodes/process/BrickTexture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE9D,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAQ,YAAY,CAAA;IAC3B,MAAM,CAAC,EAAQ,YAAY,GAAG,MAAM,CAAA;IACpC,MAAM,CAAC,EAAQ,YAAY,GAAG,MAAM,CAAA;IACpC,MAAM,CAAC,EAAQ,YAAY,GAAG,MAAM,CAAA;IACpC,KAAK,CAAC,EAAS,MAAM,GAAG,YAAY,CAAA;IACpC,UAAU,CAAC,EAAI,MAAM,GAAG,YAAY,CAAA;IACpC,YAAY,CAAC,EAAE,MAAM,GAAG,YAAY,CAAA;IACpC,IAAI,CAAC,EAAU,MAAM,GAAG,YAAY,CAAA;IACpC,UAAU,CAAC,EAAI,MAAM,GAAG,YAAY,CAAA;IACpC,SAAS,CAAC,EAAK,MAAM,GAAG,YAAY,CAAA;CACrC;AAED;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,WAAW;IAC3C,IAAI,QAAQ,WAA4B;IACxC,MAAM,CAAC,mBAAmB,UAAQ;IAElC,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAED,MAAM,CAAC,YAAY,SAgBnB;IAEA,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2E;IACnG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmE;gBAEhF,MAAM,GAAE,kBAAuB;IAiB3C,eAAe;IACf,gBAAgB;IAChB,WAAW;IAEX,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;CAqBzC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
/**
|
|
3
|
+
* Brick Texture — Blender "Brick Texture" node equivalent.
|
|
4
|
+
* Procedural brick/tile pattern with mortar lines.
|
|
5
|
+
*
|
|
6
|
+
* Outputs: Color (color), Fac (float — 1.0 on mortar, 0.0 on brick)
|
|
7
|
+
*/
|
|
8
|
+
export class BrickTexture extends ProcessNode {
|
|
9
|
+
get nodeType() { return 'BrickTexture'; }
|
|
10
|
+
get metadata() {
|
|
11
|
+
return { label: 'Brick Texture', category: 'Texture', color: '#3a6b3a', cost: 'low' };
|
|
12
|
+
}
|
|
13
|
+
constructor(inputs = {}) {
|
|
14
|
+
super('BrickTexture');
|
|
15
|
+
this._inputs = this.createInputs(inputs, {
|
|
16
|
+
vector: ['color', null],
|
|
17
|
+
color1: ['color', inputs.color1 ?? '#cc8855'],
|
|
18
|
+
color2: ['color', inputs.color2 ?? '#aa6633'],
|
|
19
|
+
mortar: ['color', inputs.mortar ?? '#222222'],
|
|
20
|
+
scale: ['float', inputs.scale ?? 5.0],
|
|
21
|
+
mortarSize: ['float', inputs.mortarSize ?? 0.02],
|
|
22
|
+
mortarSmooth: ['float', inputs.mortarSmooth ?? 0.1],
|
|
23
|
+
bias: ['float', inputs.bias ?? 0.0],
|
|
24
|
+
brickWidth: ['float', inputs.brickWidth ?? 0.5],
|
|
25
|
+
rowHeight: ['float', inputs.rowHeight ?? 0.25],
|
|
26
|
+
});
|
|
27
|
+
this._outputs = this.createOutputs({ Color: 'color', Fac: 'float' });
|
|
28
|
+
}
|
|
29
|
+
getInputSockets() { return this._inputs; }
|
|
30
|
+
getOutputSockets() { return this._outputs; }
|
|
31
|
+
compileDefs() { return BrickTexture.glslFunction; }
|
|
32
|
+
compileCall(ctx) {
|
|
33
|
+
const vec = this._inputs.vector.isConnected()
|
|
34
|
+
? `vec3(${ctx.outputVar(this._inputs.vector.connection.node, this._inputs.vector.connection.name)})`
|
|
35
|
+
: 'vec3(vUv, 0.0)';
|
|
36
|
+
const c1 = ctx.resolveInput(this._inputs.color1);
|
|
37
|
+
const c2 = ctx.resolveInput(this._inputs.color2);
|
|
38
|
+
const mo = ctx.resolveInput(this._inputs.mortar);
|
|
39
|
+
const sc = ctx.resolveInput(this._inputs.scale);
|
|
40
|
+
const ms = ctx.resolveInput(this._inputs.mortarSize);
|
|
41
|
+
const mm = ctx.resolveInput(this._inputs.mortarSmooth);
|
|
42
|
+
const bi = ctx.resolveInput(this._inputs.bias);
|
|
43
|
+
const bw = ctx.resolveInput(this._inputs.brickWidth);
|
|
44
|
+
const rh = ctx.resolveInput(this._inputs.rowHeight);
|
|
45
|
+
const cv = ctx.outputVar(this, 'Color');
|
|
46
|
+
const fv = ctx.outputVar(this, 'Fac');
|
|
47
|
+
return [
|
|
48
|
+
`vec4 _br_${this.id} = _st_brickTexture(${vec}, ${c1}, ${c2}, ${mo}, ${sc}, ${ms}, ${mm}, ${bi}, ${bw}, ${rh});`,
|
|
49
|
+
`vec3 ${cv} = _br_${this.id}.rgb;`,
|
|
50
|
+
`float ${fv} = _br_${this.id}.a;`,
|
|
51
|
+
].join('\n ');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
BrickTexture.instanceSpecificDef = false;
|
|
55
|
+
BrickTexture.glslFunction = `
|
|
56
|
+
vec4 _st_brickTexture(vec3 p, vec3 c1, vec3 c2, vec3 mortar, float scale,
|
|
57
|
+
float mortarSize, float mortarSmooth, float bias, float brickW, float rowH) {
|
|
58
|
+
p *= scale;
|
|
59
|
+
float rowNum = floor(p.y / rowH);
|
|
60
|
+
float offset = mod(rowNum, 2.0) * brickW * 0.5;
|
|
61
|
+
float brickX = mod(p.x + offset, brickW);
|
|
62
|
+
float brickY = mod(p.y, rowH);
|
|
63
|
+
float mx = smoothstep(mortarSize - mortarSmooth, mortarSize + mortarSmooth, brickX);
|
|
64
|
+
float my = smoothstep(mortarSize - mortarSmooth, mortarSize + mortarSmooth, brickY);
|
|
65
|
+
mx *= smoothstep(mortarSize - mortarSmooth, mortarSize + mortarSmooth, brickW - brickX);
|
|
66
|
+
my *= smoothstep(mortarSize - mortarSmooth, mortarSize + mortarSmooth, rowH - brickY);
|
|
67
|
+
float isMortar = 1.0 - mx * my;
|
|
68
|
+
float b = clamp(bias, -1.0, 1.0);
|
|
69
|
+
vec3 col = mix(mix(c1, c2, step(0.5 + b * 0.5, fract(rowNum * 0.5 + brickX / brickW))), mortar, isMortar);
|
|
70
|
+
return vec4(col, isMortar);
|
|
71
|
+
}`;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
import type { NodeMetadata } from '../../core/ShaderNode.js';
|
|
3
|
+
import type { CompileContext } from '../../core/CompileContext.js';
|
|
4
|
+
import type { OutputSocket } from '../../core/OutputSocket.js';
|
|
5
|
+
export interface BrightContrastInputs {
|
|
6
|
+
color?: OutputSocket | string;
|
|
7
|
+
bright?: OutputSocket | number;
|
|
8
|
+
contrast?: OutputSocket | number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Bright Contrast — Blender "Bright/Contrast" node equivalent.
|
|
12
|
+
* Adjusts brightness and contrast of a colour.
|
|
13
|
+
*
|
|
14
|
+
* Inputs: color, bright [-100 to 100], contrast [-100 to 100]
|
|
15
|
+
* Outputs: Color (color)
|
|
16
|
+
*/
|
|
17
|
+
export declare class BrightContrast extends ProcessNode {
|
|
18
|
+
get nodeType(): string;
|
|
19
|
+
static instanceSpecificDef: boolean;
|
|
20
|
+
get metadata(): NodeMetadata;
|
|
21
|
+
static glslFunction: string;
|
|
22
|
+
private readonly _inputs;
|
|
23
|
+
private readonly _outputs;
|
|
24
|
+
constructor(inputs?: BrightContrastInputs);
|
|
25
|
+
getInputSockets(): Record<string, import("../../core/InputSocket.js").InputSocket<unknown>>;
|
|
26
|
+
getOutputSockets(): Record<string, OutputSocket>;
|
|
27
|
+
compileDefs(): string;
|
|
28
|
+
compileCall(ctx: CompileContext): string;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=BrightContrast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrightContrast.d.ts","sourceRoot":"","sources":["../../../src/nodes/process/BrightContrast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE9D,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAK,YAAY,GAAG,MAAM,CAAA;IAChC,MAAM,CAAC,EAAI,YAAY,GAAG,MAAM,CAAA;IAChC,QAAQ,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;CACjC;AAED;;;;;;GAMG;AACH,qBAAa,cAAe,SAAQ,WAAW;IAC7C,IAAI,QAAQ,WAA8B;IAC1C,MAAM,CAAC,mBAAmB,UAAQ;IAElC,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAED,MAAM,CAAC,YAAY,SAOnB;IAEA,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2E;IACnG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmE;gBAEhF,MAAM,GAAE,oBAAyB;IAU7C,eAAe;IACf,gBAAgB;IAChB,WAAW;IAEX,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;CAMzC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
/**
|
|
3
|
+
* Bright Contrast — Blender "Bright/Contrast" node equivalent.
|
|
4
|
+
* Adjusts brightness and contrast of a colour.
|
|
5
|
+
*
|
|
6
|
+
* Inputs: color, bright [-100 to 100], contrast [-100 to 100]
|
|
7
|
+
* Outputs: Color (color)
|
|
8
|
+
*/
|
|
9
|
+
export class BrightContrast extends ProcessNode {
|
|
10
|
+
get nodeType() { return 'BrightContrast'; }
|
|
11
|
+
get metadata() {
|
|
12
|
+
return { label: 'Bright/Contrast', category: 'Color', color: '#633060', cost: 'low' };
|
|
13
|
+
}
|
|
14
|
+
constructor(inputs = {}) {
|
|
15
|
+
super('BrightContrast');
|
|
16
|
+
this._inputs = this.createInputs(inputs, {
|
|
17
|
+
color: ['color', '#ffffff'],
|
|
18
|
+
bright: ['float', inputs.bright ?? 0.0],
|
|
19
|
+
contrast: ['float', inputs.contrast ?? 0.0],
|
|
20
|
+
});
|
|
21
|
+
this._outputs = this.createOutputs({ Color: 'color' });
|
|
22
|
+
}
|
|
23
|
+
getInputSockets() { return this._inputs; }
|
|
24
|
+
getOutputSockets() { return this._outputs; }
|
|
25
|
+
compileDefs() { return BrightContrast.glslFunction; }
|
|
26
|
+
compileCall(ctx) {
|
|
27
|
+
const col = ctx.resolveInput(this._inputs.color);
|
|
28
|
+
const bright = ctx.resolveInput(this._inputs.bright);
|
|
29
|
+
const contrast = ctx.resolveInput(this._inputs.contrast);
|
|
30
|
+
return `vec3 ${ctx.outputVar(this, 'Color')} = _st_brightContrast(${col}, ${bright}, ${contrast});`;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
BrightContrast.instanceSpecificDef = false;
|
|
34
|
+
BrightContrast.glslFunction = `
|
|
35
|
+
vec3 _st_brightContrast(vec3 col, float bright, float contrast) {
|
|
36
|
+
float b = bright / 100.0;
|
|
37
|
+
float c = contrast / 100.0;
|
|
38
|
+
float a = 1.0 + c;
|
|
39
|
+
float o = b - c * 0.5;
|
|
40
|
+
return clamp(col * a + vec3(o), 0.0, 1.0);
|
|
41
|
+
}`;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
import type { NodeMetadata } from '../../core/ShaderNode.js';
|
|
3
|
+
import type { CompileContext } from '../../core/CompileContext.js';
|
|
4
|
+
import type { OutputSocket } from '../../core/OutputSocket.js';
|
|
5
|
+
export interface BumpInputs {
|
|
6
|
+
strength?: OutputSocket | number;
|
|
7
|
+
distance?: OutputSocket | number;
|
|
8
|
+
height?: OutputSocket;
|
|
9
|
+
normal?: OutputSocket;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Bump — Blender "Bump" node equivalent.
|
|
13
|
+
* Converts a height map into a perturbed surface normal using screen-space derivatives.
|
|
14
|
+
*
|
|
15
|
+
* Inputs: strength [0-1], distance, height (float), normal (optional override)
|
|
16
|
+
* Outputs: Normal (color/vec3)
|
|
17
|
+
*/
|
|
18
|
+
export declare class Bump extends ProcessNode {
|
|
19
|
+
get nodeType(): string;
|
|
20
|
+
static instanceSpecificDef: boolean;
|
|
21
|
+
get metadata(): NodeMetadata;
|
|
22
|
+
static glslFunction: string;
|
|
23
|
+
private readonly _inputs;
|
|
24
|
+
private readonly _outputs;
|
|
25
|
+
constructor(inputs?: BumpInputs);
|
|
26
|
+
getInputSockets(): Record<string, import("../../core/InputSocket.js").InputSocket<unknown>>;
|
|
27
|
+
getOutputSockets(): Record<string, OutputSocket>;
|
|
28
|
+
compileDefs(): string;
|
|
29
|
+
compileCall(ctx: CompileContext): string;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=Bump.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bump.d.ts","sourceRoot":"","sources":["../../../src/nodes/process/Bump.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE9D,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;IAChC,QAAQ,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;IAChC,MAAM,CAAC,EAAI,YAAY,CAAA;IACvB,MAAM,CAAC,EAAI,YAAY,CAAA;CACxB;AAED;;;;;;GAMG;AACH,qBAAa,IAAK,SAAQ,WAAW;IACnC,IAAI,QAAQ,WAAoB;IAChC,MAAM,CAAC,mBAAmB,UAAQ;IAElC,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAED,MAAM,CAAC,YAAY,SA2BnB;IAEA,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2E;IACnG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmE;gBAEhF,MAAM,GAAE,UAAe;IAWnC,eAAe;IACf,gBAAgB;IAChB,WAAW;IAEX,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;CASzC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
/**
|
|
3
|
+
* Bump — Blender "Bump" node equivalent.
|
|
4
|
+
* Converts a height map into a perturbed surface normal using screen-space derivatives.
|
|
5
|
+
*
|
|
6
|
+
* Inputs: strength [0-1], distance, height (float), normal (optional override)
|
|
7
|
+
* Outputs: Normal (color/vec3)
|
|
8
|
+
*/
|
|
9
|
+
export class Bump extends ProcessNode {
|
|
10
|
+
get nodeType() { return 'Bump'; }
|
|
11
|
+
get metadata() {
|
|
12
|
+
return { label: 'Bump', category: 'Vector', color: '#4a3a8a', cost: 'medium' };
|
|
13
|
+
}
|
|
14
|
+
constructor(inputs = {}) {
|
|
15
|
+
super('Bump');
|
|
16
|
+
this._inputs = this.createInputs(inputs, {
|
|
17
|
+
strength: ['float', inputs.strength ?? 1.0],
|
|
18
|
+
distance: ['float', inputs.distance ?? 1.0],
|
|
19
|
+
height: ['float', 0.5],
|
|
20
|
+
normal: ['color', null],
|
|
21
|
+
});
|
|
22
|
+
this._outputs = this.createOutputs({ Normal: 'color' });
|
|
23
|
+
}
|
|
24
|
+
getInputSockets() { return this._inputs; }
|
|
25
|
+
getOutputSockets() { return this._outputs; }
|
|
26
|
+
compileDefs() { return Bump.glslFunction; }
|
|
27
|
+
compileCall(ctx) {
|
|
28
|
+
const height = ctx.resolveInput(this._inputs.height);
|
|
29
|
+
const strength = ctx.resolveInput(this._inputs.strength);
|
|
30
|
+
const distance = ctx.resolveInput(this._inputs.distance);
|
|
31
|
+
const normal = this._inputs.normal.isConnected()
|
|
32
|
+
? ctx.outputVar(this._inputs.normal.connection.node, this._inputs.normal.connection.name)
|
|
33
|
+
: 'normalize(vNormal)';
|
|
34
|
+
return `vec3 ${ctx.outputVar(this, 'Normal')} = _st_bump(${height}, ${strength}, ${distance}, ${normal});`;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
Bump.instanceSpecificDef = false;
|
|
38
|
+
Bump.glslFunction = `
|
|
39
|
+
vec3 _st_bump(float height, float strength, float distance, vec3 N) {
|
|
40
|
+
// Cotangent frame bump — camera-independent.
|
|
41
|
+
// We derive world-space surface tangent T and bitangent B from the UV
|
|
42
|
+
// parameterisation (cotangent frame). This gives vectors that are fixed
|
|
43
|
+
// to the surface regardless of camera orientation.
|
|
44
|
+
// Then we express the height gradient in UV space (dh/du, dh/dv) which
|
|
45
|
+
// is also surface-fixed, eliminating the screen-space dependency.
|
|
46
|
+
vec3 dPdx = dFdx(vPosition);
|
|
47
|
+
vec3 dPdy = dFdy(vPosition);
|
|
48
|
+
vec2 dUdx = dFdx(vUv);
|
|
49
|
+
vec2 dUdy = dFdy(vUv);
|
|
50
|
+
|
|
51
|
+
float det = dUdx.x * dUdy.y - dUdx.y * dUdy.x;
|
|
52
|
+
float sgn = sign(det);
|
|
53
|
+
float invDet = sgn / max(abs(det), 1e-6);
|
|
54
|
+
|
|
55
|
+
// World-space tangent and bitangent from UV Jacobian (camera-independent)
|
|
56
|
+
vec3 T = normalize((dUdy.y * dPdx - dUdx.y * dPdy) * invDet);
|
|
57
|
+
vec3 B = normalize(cross(N, T)) * sgn;
|
|
58
|
+
|
|
59
|
+
// Height gradient in UV space (camera-independent)
|
|
60
|
+
float dhdu = (dUdy.y * dFdx(height) - dUdx.y * dFdy(height)) * invDet;
|
|
61
|
+
float dhdv = (dUdx.x * dFdy(height) - dUdy.x * dFdx(height)) * invDet;
|
|
62
|
+
|
|
63
|
+
float scale = strength * distance * 50.0;
|
|
64
|
+
return normalize(N - T * dhdu * scale - B * dhdv * scale);
|
|
65
|
+
}`;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
import type { NodeMetadata } from '../../core/ShaderNode.js';
|
|
3
|
+
import type { CompileContext } from '../../core/CompileContext.js';
|
|
4
|
+
import type { OutputSocket } from '../../core/OutputSocket.js';
|
|
5
|
+
export interface CheckerTextureInputs {
|
|
6
|
+
vector?: OutputSocket;
|
|
7
|
+
color1?: OutputSocket | string;
|
|
8
|
+
color2?: OutputSocket | string;
|
|
9
|
+
scale?: number | OutputSocket;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Checker Texture — Blender "Checker Texture" node equivalent.
|
|
13
|
+
* Alternating square grid pattern.
|
|
14
|
+
*
|
|
15
|
+
* Outputs: Color (color), Fac (float — 0.0 or 1.0)
|
|
16
|
+
*/
|
|
17
|
+
export declare class CheckerTexture extends ProcessNode {
|
|
18
|
+
get nodeType(): string;
|
|
19
|
+
static instanceSpecificDef: boolean;
|
|
20
|
+
get metadata(): NodeMetadata;
|
|
21
|
+
static glslFunction: string;
|
|
22
|
+
private readonly _inputs;
|
|
23
|
+
private readonly _outputs;
|
|
24
|
+
constructor(inputs?: CheckerTextureInputs);
|
|
25
|
+
getInputSockets(): Record<string, import("../../core/InputSocket.js").InputSocket<unknown>>;
|
|
26
|
+
getOutputSockets(): Record<string, OutputSocket>;
|
|
27
|
+
compileDefs(): string;
|
|
28
|
+
compileCall(ctx: CompileContext): string;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=CheckerTexture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CheckerTexture.d.ts","sourceRoot":"","sources":["../../../src/nodes/process/CheckerTexture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE9D,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;IAC9B,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;IAC9B,KAAK,CAAC,EAAG,MAAM,GAAG,YAAY,CAAA;CAC/B;AAED;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,WAAW;IAC7C,IAAI,QAAQ,WAA8B;IAC1C,MAAM,CAAC,mBAAmB,UAAQ;IAElC,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAED,MAAM,CAAC,YAAY,SAKnB;IAEA,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2E;IACnG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmE;gBAEhF,MAAM,GAAE,oBAAyB;IAW7C,eAAe;IACf,gBAAgB;IAChB,WAAW;IAEX,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;CAezC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
/**
|
|
3
|
+
* Checker Texture — Blender "Checker Texture" node equivalent.
|
|
4
|
+
* Alternating square grid pattern.
|
|
5
|
+
*
|
|
6
|
+
* Outputs: Color (color), Fac (float — 0.0 or 1.0)
|
|
7
|
+
*/
|
|
8
|
+
export class CheckerTexture extends ProcessNode {
|
|
9
|
+
get nodeType() { return 'CheckerTexture'; }
|
|
10
|
+
get metadata() {
|
|
11
|
+
return { label: 'Checker Texture', category: 'Texture', color: '#3a6b3a', cost: 'low' };
|
|
12
|
+
}
|
|
13
|
+
constructor(inputs = {}) {
|
|
14
|
+
super('CheckerTexture');
|
|
15
|
+
this._inputs = this.createInputs(inputs, {
|
|
16
|
+
vector: ['color', null],
|
|
17
|
+
color1: ['color', inputs.color1 ?? '#ffffff'],
|
|
18
|
+
color2: ['color', inputs.color2 ?? '#000000'],
|
|
19
|
+
scale: ['float', inputs.scale ?? 5.0],
|
|
20
|
+
});
|
|
21
|
+
this._outputs = this.createOutputs({ Color: 'color', Fac: 'float' });
|
|
22
|
+
}
|
|
23
|
+
getInputSockets() { return this._inputs; }
|
|
24
|
+
getOutputSockets() { return this._outputs; }
|
|
25
|
+
compileDefs() { return CheckerTexture.glslFunction; }
|
|
26
|
+
compileCall(ctx) {
|
|
27
|
+
const vec = this._inputs.vector.isConnected()
|
|
28
|
+
? `vec3(${ctx.outputVar(this._inputs.vector.connection.node, this._inputs.vector.connection.name)})`
|
|
29
|
+
: 'vec3(vUv, 0.0)';
|
|
30
|
+
const c1 = ctx.resolveInput(this._inputs.color1);
|
|
31
|
+
const c2 = ctx.resolveInput(this._inputs.color2);
|
|
32
|
+
const sc = ctx.resolveInput(this._inputs.scale);
|
|
33
|
+
const cv = ctx.outputVar(this, 'Color');
|
|
34
|
+
const fv = ctx.outputVar(this, 'Fac');
|
|
35
|
+
return [
|
|
36
|
+
`vec4 _ck_${this.id} = _st_checkerTexture(${vec}, ${c1}, ${c2}, ${sc});`,
|
|
37
|
+
`vec3 ${cv} = _ck_${this.id}.rgb;`,
|
|
38
|
+
`float ${fv} = _ck_${this.id}.a;`,
|
|
39
|
+
].join('\n ');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
CheckerTexture.instanceSpecificDef = false;
|
|
43
|
+
CheckerTexture.glslFunction = `
|
|
44
|
+
vec4 _st_checkerTexture(vec3 p, vec3 c1, vec3 c2, float scale) {
|
|
45
|
+
vec3 s = floor(p * scale);
|
|
46
|
+
float fac = mod(s.x + s.y + s.z, 2.0);
|
|
47
|
+
return vec4(mix(c1, c2, fac), fac);
|
|
48
|
+
}`;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
import type { NodeMetadata } from '../../core/ShaderNode.js';
|
|
3
|
+
import type { CompileContext } from '../../core/CompileContext.js';
|
|
4
|
+
import type { OutputSocket } from '../../core/OutputSocket.js';
|
|
5
|
+
export type ClampMode = 'MINMAX' | 'RANGE';
|
|
6
|
+
export interface ClampInputs {
|
|
7
|
+
value?: OutputSocket | number;
|
|
8
|
+
min?: OutputSocket | number;
|
|
9
|
+
max?: OutputSocket | number;
|
|
10
|
+
mode?: ClampMode;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Clamp — Blender "Clamp" converter node equivalent.
|
|
14
|
+
* Pins a float value between min and max.
|
|
15
|
+
*
|
|
16
|
+
* Inputs: value, min, max
|
|
17
|
+
* Outputs: Result (float)
|
|
18
|
+
*/
|
|
19
|
+
export declare class Clamp extends ProcessNode {
|
|
20
|
+
get nodeType(): string;
|
|
21
|
+
static instanceSpecificDef: boolean;
|
|
22
|
+
get metadata(): NodeMetadata;
|
|
23
|
+
static glslFunction: string;
|
|
24
|
+
private readonly _inputs;
|
|
25
|
+
private readonly _outputs;
|
|
26
|
+
constructor(inputs?: ClampInputs);
|
|
27
|
+
getInputSockets(): Record<string, import("../../core/InputSocket.js").InputSocket<unknown>>;
|
|
28
|
+
getOutputSockets(): Record<string, OutputSocket>;
|
|
29
|
+
compileDefs(): string;
|
|
30
|
+
compileCall(ctx: CompileContext): string;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=Clamp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Clamp.d.ts","sourceRoot":"","sources":["../../../src/nodes/process/Clamp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE9D,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAA;AAE1C,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;IAC7B,GAAG,CAAC,EAAI,YAAY,GAAG,MAAM,CAAA;IAC7B,GAAG,CAAC,EAAI,YAAY,GAAG,MAAM,CAAA;IAC7B,IAAI,CAAC,EAAG,SAAS,CAAA;CAClB;AAED;;;;;;GAMG;AACH,qBAAa,KAAM,SAAQ,WAAW;IACpC,IAAI,QAAQ,WAAqB;IACjC,MAAM,CAAC,mBAAmB,UAAQ;IAElC,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAED,MAAM,CAAC,YAAY,SAGnB;IAEA,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2E;IACnG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmE;gBAEhF,MAAM,GAAE,WAAgB;IAUpC,eAAe;IACf,gBAAgB;IAChB,WAAW;IAEX,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;CAMzC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
/**
|
|
3
|
+
* Clamp — Blender "Clamp" converter node equivalent.
|
|
4
|
+
* Pins a float value between min and max.
|
|
5
|
+
*
|
|
6
|
+
* Inputs: value, min, max
|
|
7
|
+
* Outputs: Result (float)
|
|
8
|
+
*/
|
|
9
|
+
export class Clamp extends ProcessNode {
|
|
10
|
+
get nodeType() { return 'Clamp'; }
|
|
11
|
+
get metadata() {
|
|
12
|
+
return { label: 'Clamp', category: 'Converter', color: '#4a3a6a', cost: 'low' };
|
|
13
|
+
}
|
|
14
|
+
constructor(inputs = {}) {
|
|
15
|
+
super('Clamp');
|
|
16
|
+
this._inputs = this.createInputs(inputs, {
|
|
17
|
+
value: ['float', inputs.value ?? 0.5],
|
|
18
|
+
min: ['float', inputs.min ?? 0.0],
|
|
19
|
+
max: ['float', inputs.max ?? 1.0],
|
|
20
|
+
});
|
|
21
|
+
this._outputs = this.createOutputs({ Result: 'float' });
|
|
22
|
+
}
|
|
23
|
+
getInputSockets() { return this._inputs; }
|
|
24
|
+
getOutputSockets() { return this._outputs; }
|
|
25
|
+
compileDefs() { return Clamp.glslFunction; }
|
|
26
|
+
compileCall(ctx) {
|
|
27
|
+
const v = ctx.resolveInput(this._inputs.value);
|
|
28
|
+
const lo = ctx.resolveInput(this._inputs.min);
|
|
29
|
+
const hi = ctx.resolveInput(this._inputs.max);
|
|
30
|
+
return `float ${ctx.outputVar(this, 'Result')} = _st_clamp(${v}, ${lo}, ${hi});`;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
Clamp.instanceSpecificDef = false;
|
|
34
|
+
Clamp.glslFunction = `
|
|
35
|
+
float _st_clamp(float v, float lo, float hi) {
|
|
36
|
+
return clamp(v, min(lo, hi), max(lo, hi));
|
|
37
|
+
}`;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
import { CompileContext } from '../../core/CompileContext.js';
|
|
3
|
+
import type { NodeMetadata } from '../../core/ShaderNode.js';
|
|
4
|
+
import type { OutputSocket } from '../../core/OutputSocket.js';
|
|
5
|
+
export interface ColorRampInputs {
|
|
6
|
+
fac?: OutputSocket | number;
|
|
7
|
+
stops?: string[];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Color Ramp — Blender "ColorRamp" node equivalent.
|
|
11
|
+
*
|
|
12
|
+
* Inputs: fac (float)
|
|
13
|
+
* Outputs: Color (color)
|
|
14
|
+
*/
|
|
15
|
+
export declare class ColorRamp extends ProcessNode {
|
|
16
|
+
get nodeType(): string;
|
|
17
|
+
static instanceSpecificDef: boolean;
|
|
18
|
+
get metadata(): NodeMetadata;
|
|
19
|
+
private readonly stops;
|
|
20
|
+
private readonly _inputs;
|
|
21
|
+
private readonly _outputs;
|
|
22
|
+
constructor(inputs?: ColorRampInputs);
|
|
23
|
+
getInputSockets(): Record<string, import("../../core/InputSocket.js").InputSocket<unknown>>;
|
|
24
|
+
getOutputSockets(): Record<string, OutputSocket>;
|
|
25
|
+
compileDefs(): string;
|
|
26
|
+
compileCall(ctx: CompileContext): string;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=ColorRamp.d.ts.map
|