@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,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 FresnelInputs {
|
|
6
|
+
ior?: number | OutputSocket;
|
|
7
|
+
normal?: OutputSocket;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Fresnel — outputs reflectance based on viewing angle.
|
|
11
|
+
* Equivalent to Blender's "Fresnel" input node.
|
|
12
|
+
*
|
|
13
|
+
* At grazing angles (looking across the surface) → value near 1.0 (reflects sky)
|
|
14
|
+
* Looking straight down at the surface → value near 0.0 (sees through)
|
|
15
|
+
*
|
|
16
|
+
* Inputs:
|
|
17
|
+
* ior (float) — index of refraction default: 1.45
|
|
18
|
+
* normal (vector) — surface normal override, defaults to geometry normal
|
|
19
|
+
*
|
|
20
|
+
* Outputs:
|
|
21
|
+
* Fac (float) — fresnel reflectance [0-1]
|
|
22
|
+
*/
|
|
23
|
+
export declare class Fresnel 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?: FresnelInputs);
|
|
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=Fresnel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Fresnel.d.ts","sourceRoot":"","sources":["../../../src/nodes/process/Fresnel.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,aAAa;IAC5B,GAAG,CAAC,EAAK,MAAM,GAAG,YAAY,CAAA;IAC9B,MAAM,CAAC,EAAE,YAAY,CAAA;CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,OAAQ,SAAQ,WAAW;IACtC,IAAI,QAAQ,WAAuB;IACnC,MAAM,CAAC,mBAAmB,UAAQ;IAElC,IAAI,QAAQ,IAAI,YAAY,CAO3B;IAED,MAAM,CAAC,YAAY,SAMnB;IAEA,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2E;IACnG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmE;gBAEhF,MAAM,GAAE,aAAkB;IAStC,eAAe;IACf,gBAAgB;IAChB,WAAW;IAEX,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;CAQzC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
/**
|
|
3
|
+
* Fresnel — outputs reflectance based on viewing angle.
|
|
4
|
+
* Equivalent to Blender's "Fresnel" input node.
|
|
5
|
+
*
|
|
6
|
+
* At grazing angles (looking across the surface) → value near 1.0 (reflects sky)
|
|
7
|
+
* Looking straight down at the surface → value near 0.0 (sees through)
|
|
8
|
+
*
|
|
9
|
+
* Inputs:
|
|
10
|
+
* ior (float) — index of refraction default: 1.45
|
|
11
|
+
* normal (vector) — surface normal override, defaults to geometry normal
|
|
12
|
+
*
|
|
13
|
+
* Outputs:
|
|
14
|
+
* Fac (float) — fresnel reflectance [0-1]
|
|
15
|
+
*/
|
|
16
|
+
export class Fresnel extends ProcessNode {
|
|
17
|
+
get nodeType() { return 'Fresnel'; }
|
|
18
|
+
get metadata() {
|
|
19
|
+
return {
|
|
20
|
+
label: 'Fresnel',
|
|
21
|
+
category: 'Input',
|
|
22
|
+
color: '#3d6b96',
|
|
23
|
+
cost: 'low',
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
constructor(inputs = {}) {
|
|
27
|
+
super('Fresnel');
|
|
28
|
+
this._inputs = this.createInputs(inputs, {
|
|
29
|
+
ior: ['float', inputs.ior ?? 1.33],
|
|
30
|
+
normal: ['color', null],
|
|
31
|
+
});
|
|
32
|
+
this._outputs = this.createOutputs({ Fac: 'float' });
|
|
33
|
+
}
|
|
34
|
+
getInputSockets() { return this._inputs; }
|
|
35
|
+
getOutputSockets() { return this._outputs; }
|
|
36
|
+
compileDefs() { return Fresnel.glslFunction; }
|
|
37
|
+
compileCall(ctx) {
|
|
38
|
+
const ior = ctx.resolveInput(this._inputs.ior);
|
|
39
|
+
const normal = this._inputs.normal.isConnected()
|
|
40
|
+
? ctx.outputVar(this._inputs.normal.connection.node, this._inputs.normal.connection.name)
|
|
41
|
+
: 'normalize(vNormal)';
|
|
42
|
+
const outVar = ctx.outputVar(this, 'Fac');
|
|
43
|
+
return `float ${outVar} = _st_fresnel(${ior}, ${normal});`;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
Fresnel.instanceSpecificDef = false;
|
|
47
|
+
Fresnel.glslFunction = `
|
|
48
|
+
float _st_fresnel(float ior, vec3 N) {
|
|
49
|
+
vec3 V = normalize(cameraPosition - vPosition);
|
|
50
|
+
float F0 = pow((1.0 - ior) / (1.0 + ior), 2.0);
|
|
51
|
+
float c = max(dot(V, N), 0.0);
|
|
52
|
+
return F0 + (1.0 - F0) * pow(1.0 - c, 5.0);
|
|
53
|
+
}`;
|
|
@@ -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 GammaInputs {
|
|
6
|
+
color?: OutputSocket | string;
|
|
7
|
+
gamma?: OutputSocket | number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Gamma — Blender "Gamma" node equivalent.
|
|
11
|
+
* Applies exponential gamma correction to a colour.
|
|
12
|
+
*
|
|
13
|
+
* Inputs: color, gamma (float — 1.0 = no change, <1 = lighten, >1 = darken)
|
|
14
|
+
* Outputs: Color (color)
|
|
15
|
+
*/
|
|
16
|
+
export declare class Gamma 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?: GammaInputs);
|
|
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=Gamma.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Gamma.d.ts","sourceRoot":"","sources":["../../../src/nodes/process/Gamma.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,WAAW;IAC1B,KAAK,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;IAC7B,KAAK,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;CAC9B;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;IASpC,eAAe;IACf,gBAAgB;IAChB,WAAW;IAEX,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;CAKzC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
/**
|
|
3
|
+
* Gamma — Blender "Gamma" node equivalent.
|
|
4
|
+
* Applies exponential gamma correction to a colour.
|
|
5
|
+
*
|
|
6
|
+
* Inputs: color, gamma (float — 1.0 = no change, <1 = lighten, >1 = darken)
|
|
7
|
+
* Outputs: Color (color)
|
|
8
|
+
*/
|
|
9
|
+
export class Gamma extends ProcessNode {
|
|
10
|
+
get nodeType() { return 'Gamma'; }
|
|
11
|
+
get metadata() {
|
|
12
|
+
return { label: 'Gamma', category: 'Color', color: '#633060', cost: 'low' };
|
|
13
|
+
}
|
|
14
|
+
constructor(inputs = {}) {
|
|
15
|
+
super('Gamma');
|
|
16
|
+
this._inputs = this.createInputs(inputs, {
|
|
17
|
+
color: ['color', '#ffffff'],
|
|
18
|
+
gamma: ['float', inputs.gamma ?? 1.0],
|
|
19
|
+
});
|
|
20
|
+
this._outputs = this.createOutputs({ Color: 'color' });
|
|
21
|
+
}
|
|
22
|
+
getInputSockets() { return this._inputs; }
|
|
23
|
+
getOutputSockets() { return this._outputs; }
|
|
24
|
+
compileDefs() { return Gamma.glslFunction; }
|
|
25
|
+
compileCall(ctx) {
|
|
26
|
+
const col = ctx.resolveInput(this._inputs.color);
|
|
27
|
+
const gamma = ctx.resolveInput(this._inputs.gamma);
|
|
28
|
+
return `vec3 ${ctx.outputVar(this, 'Color')} = _st_gamma(${col}, ${gamma});`;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
Gamma.instanceSpecificDef = false;
|
|
32
|
+
Gamma.glslFunction = `
|
|
33
|
+
vec3 _st_gamma(vec3 col, float gamma) {
|
|
34
|
+
return pow(max(col, vec3(0.0)), vec3(gamma));
|
|
35
|
+
}`;
|
|
@@ -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 GlassBSDFInputs {
|
|
6
|
+
color?: OutputSocket | string;
|
|
7
|
+
roughness?: OutputSocket | number;
|
|
8
|
+
ior?: OutputSocket | number;
|
|
9
|
+
normal?: OutputSocket;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Glass BSDF — Blender "Glass BSDF" node equivalent.
|
|
13
|
+
* Combines specular reflection and refraction — physically-based glass.
|
|
14
|
+
*
|
|
15
|
+
* Inputs: color, roughness, ior, normal
|
|
16
|
+
* Outputs: BSDF (shader)
|
|
17
|
+
*/
|
|
18
|
+
export declare class GlassBSDF 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?: GlassBSDFInputs);
|
|
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=GlassBSDF.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlassBSDF.d.ts","sourceRoot":"","sources":["../../../src/nodes/process/GlassBSDF.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,KAAK,CAAC,EAAM,YAAY,GAAG,MAAM,CAAA;IACjC,SAAS,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;IACjC,GAAG,CAAC,EAAQ,YAAY,GAAG,MAAM,CAAA;IACjC,MAAM,CAAC,EAAK,YAAY,CAAA;CACzB;AAED;;;;;;GAMG;AACH,qBAAa,SAAU,SAAQ,WAAW;IACxC,IAAI,QAAQ,WAAyB;IACrC,MAAM,CAAC,mBAAmB,UAAQ;IAElC,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAED,MAAM,CAAC,YAAY,SAanB;IAEA,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2E;IACnG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmE;gBAEhF,MAAM,GAAE,eAAoB;IAWxC,eAAe;IACf,gBAAgB;IAChB,WAAW;IAEX,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;CASzC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
/**
|
|
3
|
+
* Glass BSDF — Blender "Glass BSDF" node equivalent.
|
|
4
|
+
* Combines specular reflection and refraction — physically-based glass.
|
|
5
|
+
*
|
|
6
|
+
* Inputs: color, roughness, ior, normal
|
|
7
|
+
* Outputs: BSDF (shader)
|
|
8
|
+
*/
|
|
9
|
+
export class GlassBSDF extends ProcessNode {
|
|
10
|
+
get nodeType() { return 'GlassBSDF'; }
|
|
11
|
+
get metadata() {
|
|
12
|
+
return { label: 'Glass BSDF', category: 'Shader', color: '#336699', cost: 'medium' };
|
|
13
|
+
}
|
|
14
|
+
constructor(inputs = {}) {
|
|
15
|
+
super('GlassBSDF');
|
|
16
|
+
this._inputs = this.createInputs(inputs, {
|
|
17
|
+
color: ['color', '#ffffff'],
|
|
18
|
+
roughness: ['float', inputs.roughness ?? 0.0],
|
|
19
|
+
ior: ['float', inputs.ior ?? 1.45],
|
|
20
|
+
normal: ['color', null],
|
|
21
|
+
});
|
|
22
|
+
this._outputs = this.createOutputs({ BSDF: 'shader' });
|
|
23
|
+
}
|
|
24
|
+
getInputSockets() { return this._inputs; }
|
|
25
|
+
getOutputSockets() { return this._outputs; }
|
|
26
|
+
compileDefs() { return GlassBSDF.glslFunction; }
|
|
27
|
+
compileCall(ctx) {
|
|
28
|
+
const color = ctx.resolveInput(this._inputs.color);
|
|
29
|
+
const roughness = ctx.resolveInput(this._inputs.roughness);
|
|
30
|
+
const ior = ctx.resolveInput(this._inputs.ior);
|
|
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, 'BSDF')} = _st_glassBSDF(${color}, ${roughness}, ${ior}, ${normal});`;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
GlassBSDF.instanceSpecificDef = false;
|
|
38
|
+
GlassBSDF.glslFunction = `
|
|
39
|
+
vec3 _st_glassBSDF(vec3 color, float roughness, float ior, vec3 N) {
|
|
40
|
+
vec3 V = normalize(cameraPosition - vPosition);
|
|
41
|
+
vec3 L = normalize(vec3(1.0, 2.0, 1.0));
|
|
42
|
+
vec3 H = normalize(L + V);
|
|
43
|
+
float F0 = pow((1.0 - ior) / (1.0 + ior), 2.0);
|
|
44
|
+
float fresnel = F0 + (1.0 - F0) * pow(1.0 - max(dot(V, N), 0.0), 5.0);
|
|
45
|
+
float NdotH = max(dot(N, H), 0.0);
|
|
46
|
+
float a2 = roughness * roughness * roughness * roughness;
|
|
47
|
+
float D = a2 / max(3.14159 * pow(NdotH * NdotH * (a2 - 1.0) + 1.0, 2.0), 0.0001);
|
|
48
|
+
vec3 spec = vec3(1.0) * D * fresnel;
|
|
49
|
+
vec3 refr = color * (1.0 - fresnel) * (1.0 - roughness * 0.3);
|
|
50
|
+
return spec + refr;
|
|
51
|
+
}`;
|
|
@@ -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 GlossyBSDFInputs {
|
|
6
|
+
color?: OutputSocket | string;
|
|
7
|
+
roughness?: OutputSocket | number;
|
|
8
|
+
normal?: OutputSocket;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Glossy BSDF — Blender "Glossy BSDF" node equivalent.
|
|
12
|
+
* Pure specular/mirror surface — no diffuse.
|
|
13
|
+
*
|
|
14
|
+
* Inputs: color, roughness [0-1], normal
|
|
15
|
+
* Outputs: BSDF (shader)
|
|
16
|
+
*/
|
|
17
|
+
export declare class GlossyBSDF 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?: GlossyBSDFInputs);
|
|
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=GlossyBSDF.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlossyBSDF.d.ts","sourceRoot":"","sources":["../../../src/nodes/process/GlossyBSDF.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,gBAAgB;IAC/B,KAAK,CAAC,EAAM,YAAY,GAAG,MAAM,CAAA;IACjC,SAAS,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;IACjC,MAAM,CAAC,EAAK,YAAY,CAAA;CACzB;AAED;;;;;;GAMG;AACH,qBAAa,UAAW,SAAQ,WAAW;IACzC,IAAI,QAAQ,WAA0B;IACtC,MAAM,CAAC,mBAAmB,UAAQ;IAElC,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAED,MAAM,CAAC,YAAY,SAcnB;IAEA,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2E;IACnG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmE;gBAEhF,MAAM,GAAE,gBAAqB;IAUzC,eAAe;IACf,gBAAgB;IAChB,WAAW;IAEX,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;CAQzC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
/**
|
|
3
|
+
* Glossy BSDF — Blender "Glossy BSDF" node equivalent.
|
|
4
|
+
* Pure specular/mirror surface — no diffuse.
|
|
5
|
+
*
|
|
6
|
+
* Inputs: color, roughness [0-1], normal
|
|
7
|
+
* Outputs: BSDF (shader)
|
|
8
|
+
*/
|
|
9
|
+
export class GlossyBSDF extends ProcessNode {
|
|
10
|
+
get nodeType() { return 'GlossyBSDF'; }
|
|
11
|
+
get metadata() {
|
|
12
|
+
return { label: 'Glossy BSDF', category: 'Shader', color: '#336699', cost: 'medium' };
|
|
13
|
+
}
|
|
14
|
+
constructor(inputs = {}) {
|
|
15
|
+
super('GlossyBSDF');
|
|
16
|
+
this._inputs = this.createInputs(inputs, {
|
|
17
|
+
color: ['color', '#ffffff'],
|
|
18
|
+
roughness: ['float', inputs.roughness ?? 0.5],
|
|
19
|
+
normal: ['color', null],
|
|
20
|
+
});
|
|
21
|
+
this._outputs = this.createOutputs({ BSDF: 'shader' });
|
|
22
|
+
}
|
|
23
|
+
getInputSockets() { return this._inputs; }
|
|
24
|
+
getOutputSockets() { return this._outputs; }
|
|
25
|
+
compileDefs() { return GlossyBSDF.glslFunction; }
|
|
26
|
+
compileCall(ctx) {
|
|
27
|
+
const color = ctx.resolveInput(this._inputs.color);
|
|
28
|
+
const roughness = ctx.resolveInput(this._inputs.roughness);
|
|
29
|
+
const normal = this._inputs.normal.isConnected()
|
|
30
|
+
? ctx.outputVar(this._inputs.normal.connection.node, this._inputs.normal.connection.name)
|
|
31
|
+
: 'normalize(vNormal)';
|
|
32
|
+
return `vec3 ${ctx.outputVar(this, 'BSDF')} = _st_glossyBSDF(${color}, ${roughness}, ${normal});`;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
GlossyBSDF.instanceSpecificDef = false;
|
|
36
|
+
GlossyBSDF.glslFunction = `
|
|
37
|
+
vec3 _st_glossyBSDF(vec3 color, float roughness, vec3 N) {
|
|
38
|
+
vec3 L = normalize(vec3(1.0, 2.0, 1.0));
|
|
39
|
+
vec3 V = normalize(cameraPosition - vPosition);
|
|
40
|
+
vec3 H = normalize(L + V);
|
|
41
|
+
float a = roughness * roughness;
|
|
42
|
+
float a2 = a * a;
|
|
43
|
+
float NdotH = max(dot(N, H), 0.0);
|
|
44
|
+
float D = a2 / max(3.14159265 * pow(NdotH * NdotH * (a2 - 1.0) + 1.0, 2.0), 0.0001);
|
|
45
|
+
float NdotL = max(dot(N, L), 0.0);
|
|
46
|
+
float NdotV = max(dot(N, V), 0.0001);
|
|
47
|
+
float k = (roughness + 1.0) * (roughness + 1.0) / 8.0;
|
|
48
|
+
float G = (NdotL / (NdotL * (1.0 - k) + k)) * (NdotV / (NdotV * (1.0 - k) + k));
|
|
49
|
+
return color * D * G / max(4.0 * NdotL * NdotV, 0.0001) * NdotL;
|
|
50
|
+
}`;
|
|
@@ -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 type GradientType = 'LINEAR' | 'QUADRATIC' | 'EASING' | 'DIAGONAL' | 'RADIAL' | 'QUADRATIC_SPHERE' | 'SPHERICAL';
|
|
6
|
+
export interface GradientTextureInputs {
|
|
7
|
+
vector?: OutputSocket;
|
|
8
|
+
type?: GradientType;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Gradient Texture — Blender "Gradient Texture" node equivalent.
|
|
12
|
+
* Generates gradient patterns from a vector input.
|
|
13
|
+
*
|
|
14
|
+
* Inputs: vector, type
|
|
15
|
+
* Outputs: Color (color), Fac (float)
|
|
16
|
+
*/
|
|
17
|
+
export declare class GradientTexture extends ProcessNode {
|
|
18
|
+
get nodeType(): string;
|
|
19
|
+
static instanceSpecificDef: boolean;
|
|
20
|
+
get metadata(): NodeMetadata;
|
|
21
|
+
private readonly type;
|
|
22
|
+
private readonly _inputs;
|
|
23
|
+
private readonly _outputs;
|
|
24
|
+
constructor(inputs?: GradientTextureInputs);
|
|
25
|
+
getInputSockets(): Record<string, import("../../core/InputSocket.js").InputSocket<unknown>>;
|
|
26
|
+
getOutputSockets(): Record<string, OutputSocket>;
|
|
27
|
+
compileDefs(): string;
|
|
28
|
+
compileCall(ctx: CompileContext): string;
|
|
29
|
+
private buildExpr;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=GradientTexture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GradientTexture.d.ts","sourceRoot":"","sources":["../../../src/nodes/process/GradientTexture.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,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,kBAAkB,GAAG,WAAW,CAAA;AAEvH,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,IAAI,CAAC,EAAI,YAAY,CAAA;CACtB;AAED;;;;;;GAMG;AACH,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,IAAI,QAAQ,WAA+B;IAC3C,MAAM,CAAC,mBAAmB,UAAO;IAEjC,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAED,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2E;IACnG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmE;gBAEhF,MAAM,GAAE,qBAA0B;IAO9C,eAAe;IACf,gBAAgB;IAChB,WAAW;IAEX,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;IAWxC,OAAO,CAAC,SAAS;CAelB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
/**
|
|
3
|
+
* Gradient Texture — Blender "Gradient Texture" node equivalent.
|
|
4
|
+
* Generates gradient patterns from a vector input.
|
|
5
|
+
*
|
|
6
|
+
* Inputs: vector, type
|
|
7
|
+
* Outputs: Color (color), Fac (float)
|
|
8
|
+
*/
|
|
9
|
+
export class GradientTexture extends ProcessNode {
|
|
10
|
+
get nodeType() { return 'GradientTexture'; }
|
|
11
|
+
get metadata() {
|
|
12
|
+
return { label: 'Gradient Texture', category: 'Texture', color: '#3a6b3a', cost: 'low' };
|
|
13
|
+
}
|
|
14
|
+
constructor(inputs = {}) {
|
|
15
|
+
super('GradientTexture');
|
|
16
|
+
this.type = inputs.type ?? 'LINEAR';
|
|
17
|
+
this._inputs = this.createInputs(inputs, { vector: ['color', null] });
|
|
18
|
+
this._outputs = this.createOutputs({ Color: 'color', Fac: 'float' });
|
|
19
|
+
}
|
|
20
|
+
getInputSockets() { return this._inputs; }
|
|
21
|
+
getOutputSockets() { return this._outputs; }
|
|
22
|
+
compileDefs() { return ''; }
|
|
23
|
+
compileCall(ctx) {
|
|
24
|
+
const v = ctx.resolveInput(this._inputs.vector);
|
|
25
|
+
const fv = ctx.outputVar(this, 'Fac');
|
|
26
|
+
const cv = ctx.outputVar(this, 'Color');
|
|
27
|
+
const expr = this.buildExpr(v);
|
|
28
|
+
return [
|
|
29
|
+
`float ${fv} = clamp(${expr}, 0.0, 1.0);`,
|
|
30
|
+
`vec3 ${cv} = vec3(${fv});`,
|
|
31
|
+
].join('\n ');
|
|
32
|
+
}
|
|
33
|
+
buildExpr(v) {
|
|
34
|
+
switch (this.type) {
|
|
35
|
+
case 'LINEAR': return `(${v}).x`;
|
|
36
|
+
case 'QUADRATIC': return `pow(max((${v}).x, 0.0), 2.0)`;
|
|
37
|
+
case 'EASING': {
|
|
38
|
+
const t = `(${v}).x`;
|
|
39
|
+
return `(${t} * ${t} * (3.0 - 2.0 * ${t}))`;
|
|
40
|
+
}
|
|
41
|
+
case 'DIAGONAL': return `((${v}).x + (${v}).y) * 0.5`;
|
|
42
|
+
case 'RADIAL': return `(atan((${v}).y, (${v}).x) / 6.28318 + 0.5)`;
|
|
43
|
+
case 'SPHERICAL': return `max(1.0 - length(${v}), 0.0)`;
|
|
44
|
+
case 'QUADRATIC_SPHERE': return `max(1.0 - pow(length(${v}), 2.0), 0.0)`;
|
|
45
|
+
default: return `(${v}).x`;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
GradientTexture.instanceSpecificDef = true;
|
|
@@ -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 HashValueInputs {
|
|
6
|
+
value?: OutputSocket | number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Hash Value — Blender "Hash Value" node equivalent.
|
|
10
|
+
* Hashes any input float to a pseudo-random float in [0, 1].
|
|
11
|
+
* Deterministic: same input always produces the same output.
|
|
12
|
+
* Useful for per-element procedural randomness without textures.
|
|
13
|
+
*
|
|
14
|
+
* Inputs: value (float)
|
|
15
|
+
* Outputs: Value (float)
|
|
16
|
+
*/
|
|
17
|
+
export declare class HashValue 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?: HashValueInputs);
|
|
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=HashValue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HashValue.d.ts","sourceRoot":"","sources":["../../../src/nodes/process/HashValue.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,KAAK,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;CAC9B;AAED;;;;;;;;GAQG;AACH,qBAAa,SAAU,SAAQ,WAAW;IACxC,IAAI,QAAQ,WAAyB;IACrC,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,eAAoB;IAQxC,eAAe;IACf,gBAAgB;IAChB,WAAW;IAEX,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;CAGzC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
/**
|
|
3
|
+
* Hash Value — Blender "Hash Value" node equivalent.
|
|
4
|
+
* Hashes any input float to a pseudo-random float in [0, 1].
|
|
5
|
+
* Deterministic: same input always produces the same output.
|
|
6
|
+
* Useful for per-element procedural randomness without textures.
|
|
7
|
+
*
|
|
8
|
+
* Inputs: value (float)
|
|
9
|
+
* Outputs: Value (float)
|
|
10
|
+
*/
|
|
11
|
+
export class HashValue extends ProcessNode {
|
|
12
|
+
get nodeType() { return 'HashValue'; }
|
|
13
|
+
get metadata() {
|
|
14
|
+
return { label: 'Hash Value', category: 'Converter', color: '#4a7a4a', cost: 'low' };
|
|
15
|
+
}
|
|
16
|
+
constructor(inputs = {}) {
|
|
17
|
+
super('HashValue');
|
|
18
|
+
this._inputs = this.createInputs(inputs, {
|
|
19
|
+
value: ['float', 0.0],
|
|
20
|
+
});
|
|
21
|
+
this._outputs = this.createOutputs({ Value: 'float' });
|
|
22
|
+
}
|
|
23
|
+
getInputSockets() { return this._inputs; }
|
|
24
|
+
getOutputSockets() { return this._outputs; }
|
|
25
|
+
compileDefs() { return HashValue.glslFunction; }
|
|
26
|
+
compileCall(ctx) {
|
|
27
|
+
return `float ${ctx.outputVar(this, 'Value')} = _st_hashValue(${ctx.resolveInput(this._inputs.value)});`;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
HashValue.instanceSpecificDef = false;
|
|
31
|
+
HashValue.glslFunction = `
|
|
32
|
+
float _st_hashValue(float v) {
|
|
33
|
+
return fract(sin(v * 127.1 + 311.7) * 43758.5453);
|
|
34
|
+
}`;
|
|
@@ -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 interface HueSaturationValueInputs {
|
|
6
|
+
hue?: OutputSocket | number;
|
|
7
|
+
saturation?: OutputSocket | number;
|
|
8
|
+
value?: OutputSocket | number;
|
|
9
|
+
fac?: OutputSocket | number;
|
|
10
|
+
color?: OutputSocket | string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Hue Saturation Value — Blender "Hue/Saturation/Value" node equivalent.
|
|
14
|
+
* Adjusts the HSV components of a colour.
|
|
15
|
+
*
|
|
16
|
+
* Inputs: hue [0-1], saturation [0-2], value [0-2], fac [0-1], color
|
|
17
|
+
* Outputs: Color (color)
|
|
18
|
+
*/
|
|
19
|
+
export declare class HueSaturationValue 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?: HueSaturationValueInputs);
|
|
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=HueSaturationValue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HueSaturationValue.d.ts","sourceRoot":"","sources":["../../../src/nodes/process/HueSaturationValue.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,wBAAwB;IACvC,GAAG,CAAC,EAAS,YAAY,GAAG,MAAM,CAAA;IAClC,UAAU,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;IAClC,KAAK,CAAC,EAAO,YAAY,GAAG,MAAM,CAAA;IAClC,GAAG,CAAC,EAAS,YAAY,GAAG,MAAM,CAAA;IAClC,KAAK,CAAC,EAAO,YAAY,GAAG,MAAM,CAAA;CACnC;AAED;;;;;;GAMG;AACH,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,IAAI,QAAQ,WAAkC;IAC9C,MAAM,CAAC,mBAAmB,UAAQ;IAElC,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAED,MAAM,CAAC,YAAY,SAoBnB;IAEA,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2E;IACnG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmE;gBAEhF,MAAM,GAAE,wBAA6B;IAYjD,eAAe;IACf,gBAAgB;IAChB,WAAW;IAEX,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;CAQzC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
/**
|
|
3
|
+
* Hue Saturation Value — Blender "Hue/Saturation/Value" node equivalent.
|
|
4
|
+
* Adjusts the HSV components of a colour.
|
|
5
|
+
*
|
|
6
|
+
* Inputs: hue [0-1], saturation [0-2], value [0-2], fac [0-1], color
|
|
7
|
+
* Outputs: Color (color)
|
|
8
|
+
*/
|
|
9
|
+
export class HueSaturationValue extends ProcessNode {
|
|
10
|
+
get nodeType() { return 'HueSaturationValue'; }
|
|
11
|
+
get metadata() {
|
|
12
|
+
return { label: 'Hue Saturation Value', category: 'Color', color: '#633060', cost: 'low' };
|
|
13
|
+
}
|
|
14
|
+
constructor(inputs = {}) {
|
|
15
|
+
super('HueSaturationValue');
|
|
16
|
+
this._inputs = this.createInputs(inputs, {
|
|
17
|
+
hue: ['float', inputs.hue ?? 0.5],
|
|
18
|
+
saturation: ['float', inputs.saturation ?? 1.0],
|
|
19
|
+
value: ['float', inputs.value ?? 1.0],
|
|
20
|
+
fac: ['float', inputs.fac ?? 1.0],
|
|
21
|
+
color: ['color', '#ffffff'],
|
|
22
|
+
});
|
|
23
|
+
this._outputs = this.createOutputs({ Color: 'color' });
|
|
24
|
+
}
|
|
25
|
+
getInputSockets() { return this._inputs; }
|
|
26
|
+
getOutputSockets() { return this._outputs; }
|
|
27
|
+
compileDefs() { return HueSaturationValue.glslFunction; }
|
|
28
|
+
compileCall(ctx) {
|
|
29
|
+
const col = ctx.resolveInput(this._inputs.color);
|
|
30
|
+
const hue = ctx.resolveInput(this._inputs.hue);
|
|
31
|
+
const sat = ctx.resolveInput(this._inputs.saturation);
|
|
32
|
+
const val = ctx.resolveInput(this._inputs.value);
|
|
33
|
+
const fac = ctx.resolveInput(this._inputs.fac);
|
|
34
|
+
return `vec3 ${ctx.outputVar(this, 'Color')} = _st_hueSatVal(${col}, ${hue}, ${sat}, ${val}, ${fac});`;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
HueSaturationValue.instanceSpecificDef = false;
|
|
38
|
+
HueSaturationValue.glslFunction = `
|
|
39
|
+
vec3 _st_rgbToHsv(vec3 c) {
|
|
40
|
+
vec4 K = vec4(0.0, -1.0/3.0, 2.0/3.0, -1.0);
|
|
41
|
+
vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));
|
|
42
|
+
vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));
|
|
43
|
+
float d = q.x - min(q.w, q.y);
|
|
44
|
+
float e = 1.0e-10;
|
|
45
|
+
return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);
|
|
46
|
+
}
|
|
47
|
+
vec3 _st_hsvToRgb(vec3 c) {
|
|
48
|
+
vec4 K = vec4(1.0, 2.0/3.0, 1.0/3.0, 3.0);
|
|
49
|
+
vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
|
|
50
|
+
return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
|
|
51
|
+
}
|
|
52
|
+
vec3 _st_hueSatVal(vec3 col, float hue, float sat, float val, float fac) {
|
|
53
|
+
vec3 hsv = _st_rgbToHsv(col);
|
|
54
|
+
hsv.x = fract(hsv.x + hue - 0.5);
|
|
55
|
+
hsv.y = clamp(hsv.y * sat, 0.0, 1.0);
|
|
56
|
+
hsv.z = clamp(hsv.z * val, 0.0, 1.0);
|
|
57
|
+
return mix(col, _st_hsvToRgb(hsv), fac);
|
|
58
|
+
}`;
|
|
@@ -0,0 +1,34 @@
|
|
|
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 ImageTextureInputs {
|
|
6
|
+
vector?: OutputSocket;
|
|
7
|
+
uniformName: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Image Texture — Blender "Image Texture" node equivalent.
|
|
11
|
+
* Samples an external texture via a sampler2D uniform.
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* const node = new ImageTexture({ uniformName: 'uAlbedo' })
|
|
15
|
+
* // After mat.compile():
|
|
16
|
+
* mat.material.uniforms.uAlbedo = { value: new THREE.TextureLoader().load('path.jpg') }
|
|
17
|
+
*
|
|
18
|
+
* Inputs: vector (UV), uniformName (string — name of sampler2D uniform)
|
|
19
|
+
* Outputs: Color (color), Alpha (float)
|
|
20
|
+
*/
|
|
21
|
+
export declare class ImageTexture extends ProcessNode {
|
|
22
|
+
get nodeType(): string;
|
|
23
|
+
static instanceSpecificDef: boolean;
|
|
24
|
+
get metadata(): NodeMetadata;
|
|
25
|
+
private readonly uniformName;
|
|
26
|
+
private readonly _inputs;
|
|
27
|
+
private readonly _outputs;
|
|
28
|
+
constructor(inputs: ImageTextureInputs);
|
|
29
|
+
getInputSockets(): Record<string, import("../../core/InputSocket.js").InputSocket<unknown>>;
|
|
30
|
+
getOutputSockets(): Record<string, OutputSocket>;
|
|
31
|
+
compileDefs(): string;
|
|
32
|
+
compileCall(ctx: CompileContext): string;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=ImageTexture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageTexture.d.ts","sourceRoot":"","sources":["../../../src/nodes/process/ImageTexture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAGvD,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,EAAK,YAAY,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,YAAa,SAAQ,WAAW;IAC3C,IAAI,QAAQ,WAA4B;IACxC,MAAM,CAAC,mBAAmB,UAAO;IAEjC,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAED,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2E;IACnG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmE;gBAEhF,MAAM,EAAE,kBAAkB;IAiBtC,eAAe;IACf,gBAAgB;IAEhB,WAAW,IAAI,MAAM;IAIrB,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;CAYzC"}
|