@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,57 @@
|
|
|
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
|
+
import type { InputSocket } from '../../core/InputSocket.js';
|
|
6
|
+
export interface RayPortalInputs {
|
|
7
|
+
/** Surface color emitted through the portal */
|
|
8
|
+
color?: OutputSocket | [number, number, number] | string;
|
|
9
|
+
/**
|
|
10
|
+
* Portal Transform (mat4) — defines the exit portal's position and
|
|
11
|
+
* orientation. Ignored in rasterizer mode; reserved for when
|
|
12
|
+
* three-gpu-pathtracer supports portal geometry.
|
|
13
|
+
*/
|
|
14
|
+
portalTransform?: OutputSocket;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Ray Portal — Blender "Ray Portal" shader node equivalent.
|
|
18
|
+
*
|
|
19
|
+
* Path-tracer-only node. Teleports rays from an entry surface to an exit
|
|
20
|
+
* surface defined by `Portal Transform`. Useful for mirrors, windows, and
|
|
21
|
+
* non-Euclidean geometry tricks in Cycles.
|
|
22
|
+
*
|
|
23
|
+
* In rasterizer mode this node acts as a simple passthrough emitter:
|
|
24
|
+
* it outputs the input `Color` unchanged and ignores `Portal Transform`.
|
|
25
|
+
* This produces plausible results for scenes where the portal would look
|
|
26
|
+
* like a glowing or transparent surface.
|
|
27
|
+
*
|
|
28
|
+
* NOTE: Full portal behaviour (ray teleportation) will be enabled once
|
|
29
|
+
* three-gpu-pathtracer exposes geometry-driven portal BSDF support.
|
|
30
|
+
*
|
|
31
|
+
* Parameters:
|
|
32
|
+
* blend (number) — blend factor [0–1] between portal BSDF and surface
|
|
33
|
+
* (rasterizer approximation only, default 1.0)
|
|
34
|
+
*
|
|
35
|
+
* Inputs:
|
|
36
|
+
* Color (color) — surface/portal color
|
|
37
|
+
* Portal Transform (shader) — exit-portal transform (rasterizer: ignored)
|
|
38
|
+
*
|
|
39
|
+
* Outputs:
|
|
40
|
+
* BSDF (shader/color) — emitted color (rasterizer passthrough)
|
|
41
|
+
*/
|
|
42
|
+
export declare class RayPortal extends ProcessNode {
|
|
43
|
+
get nodeType(): string;
|
|
44
|
+
static instanceSpecificDef: boolean;
|
|
45
|
+
get metadata(): NodeMetadata;
|
|
46
|
+
parameters: {
|
|
47
|
+
blend: number;
|
|
48
|
+
};
|
|
49
|
+
private readonly _inputs;
|
|
50
|
+
private readonly _outputs;
|
|
51
|
+
constructor(inputs?: RayPortalInputs);
|
|
52
|
+
getInputSockets(): Record<string, InputSocket<unknown>>;
|
|
53
|
+
getOutputSockets(): Record<string, OutputSocket>;
|
|
54
|
+
compileDefs(): string;
|
|
55
|
+
compileCall(ctx: CompileContext): string;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=RayPortal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RayPortal.d.ts","sourceRoot":"","sources":["../../../src/nodes/shader/RayPortal.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;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAE5D,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,KAAK,CAAC,EAAa,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAA;IACnE;;;;OAIG;IACH,eAAe,CAAC,EAAG,YAAY,CAAA;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,SAAU,SAAQ,WAAW;IACxC,IAAI,QAAQ,WAAyB;IACrC,MAAM,CAAC,mBAAmB,UAAQ;IAElC,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAEQ,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAiB;IAEvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;gBAE3C,MAAM,GAAE,eAAoB;IAUxC,eAAe;IACf,gBAAgB;IAEhB,WAAW,IAAI,MAAM;IAErB,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;CAUzC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { ProcessNode } from '../../core/ProcessNode.js';
|
|
2
|
+
/**
|
|
3
|
+
* Ray Portal — Blender "Ray Portal" shader node equivalent.
|
|
4
|
+
*
|
|
5
|
+
* Path-tracer-only node. Teleports rays from an entry surface to an exit
|
|
6
|
+
* surface defined by `Portal Transform`. Useful for mirrors, windows, and
|
|
7
|
+
* non-Euclidean geometry tricks in Cycles.
|
|
8
|
+
*
|
|
9
|
+
* In rasterizer mode this node acts as a simple passthrough emitter:
|
|
10
|
+
* it outputs the input `Color` unchanged and ignores `Portal Transform`.
|
|
11
|
+
* This produces plausible results for scenes where the portal would look
|
|
12
|
+
* like a glowing or transparent surface.
|
|
13
|
+
*
|
|
14
|
+
* NOTE: Full portal behaviour (ray teleportation) will be enabled once
|
|
15
|
+
* three-gpu-pathtracer exposes geometry-driven portal BSDF support.
|
|
16
|
+
*
|
|
17
|
+
* Parameters:
|
|
18
|
+
* blend (number) — blend factor [0–1] between portal BSDF and surface
|
|
19
|
+
* (rasterizer approximation only, default 1.0)
|
|
20
|
+
*
|
|
21
|
+
* Inputs:
|
|
22
|
+
* Color (color) — surface/portal color
|
|
23
|
+
* Portal Transform (shader) — exit-portal transform (rasterizer: ignored)
|
|
24
|
+
*
|
|
25
|
+
* Outputs:
|
|
26
|
+
* BSDF (shader/color) — emitted color (rasterizer passthrough)
|
|
27
|
+
*/
|
|
28
|
+
export class RayPortal extends ProcessNode {
|
|
29
|
+
get nodeType() { return 'RayPortal'; }
|
|
30
|
+
get metadata() {
|
|
31
|
+
return { label: 'Ray Portal', category: 'Shader', color: '#7a3d5a', cost: 'low' };
|
|
32
|
+
}
|
|
33
|
+
constructor(inputs = {}) {
|
|
34
|
+
super('RayPortal');
|
|
35
|
+
this.parameters = { blend: 1.0 };
|
|
36
|
+
this._inputs = this.createInputs(inputs, {
|
|
37
|
+
color: ['color', inputs.color ?? '#ffffff'],
|
|
38
|
+
// portalTransform is accepted but not wired in rasterizer mode
|
|
39
|
+
portalTransform: ['shader', null],
|
|
40
|
+
});
|
|
41
|
+
this._outputs = this.createOutputs({ BSDF: 'shader' });
|
|
42
|
+
}
|
|
43
|
+
getInputSockets() { return this._inputs; }
|
|
44
|
+
getOutputSockets() { return this._outputs; }
|
|
45
|
+
compileDefs() { return ''; }
|
|
46
|
+
compileCall(ctx) {
|
|
47
|
+
const color = ctx.resolveInput(this._inputs.color);
|
|
48
|
+
// SECURITY: validate blend is a finite number before emitting GLSL
|
|
49
|
+
const rawBlend = this.parameters.blend;
|
|
50
|
+
const blend = Number.isFinite(rawBlend) ? Math.min(Math.max(rawBlend, 0.0), 1.0).toFixed(4) : '1.0000';
|
|
51
|
+
// Rasterizer passthrough: BSDF = color * blend
|
|
52
|
+
// Portal Transform is intentionally unused in this mode.
|
|
53
|
+
return `vec3 ${ctx.outputVar(this, 'BSDF')} = ${color} * ${blend};`;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
RayPortal.instanceSpecificDef = false;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ShaderOutput } from '../types/shader.js';
|
|
2
|
+
/**
|
|
3
|
+
* Color Ramp — Blender ColorRamp node equivalent.
|
|
4
|
+
* Output variable: rampColor (vec3)
|
|
5
|
+
*/
|
|
6
|
+
export declare function colorRamp(value: string, colors?: string[]): ShaderOutput;
|
|
7
|
+
/**
|
|
8
|
+
* Principled BSDF — simplified PBR, Blender Principled BSDF node equivalent.
|
|
9
|
+
* Output variable: bsdf (vec3)
|
|
10
|
+
*/
|
|
11
|
+
export declare function principalBSDF(baseColor: string, roughness?: string, metallic?: string): ShaderOutput;
|
|
12
|
+
//# sourceMappingURL=color.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../src/shaders/color.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAUtD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,EAA2B,GAAG,YAAY,CAiBhG;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,MAAc,EACzB,QAAQ,GAAG,MAAc,GACxB,YAAY,CAad"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
function hexToVec3(hex) {
|
|
2
|
+
const h = hex.replace('#', '');
|
|
3
|
+
const r = (parseInt(h.substring(0, 2), 16) / 255).toFixed(4);
|
|
4
|
+
const g = (parseInt(h.substring(2, 4), 16) / 255).toFixed(4);
|
|
5
|
+
const b = (parseInt(h.substring(4, 6), 16) / 255).toFixed(4);
|
|
6
|
+
return `vec3(${r}, ${g}, ${b})`;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Color Ramp — Blender ColorRamp node equivalent.
|
|
10
|
+
* Output variable: rampColor (vec3)
|
|
11
|
+
*/
|
|
12
|
+
export function colorRamp(value, colors = ['#000000', '#ffffff']) {
|
|
13
|
+
const count = colors.length;
|
|
14
|
+
const colorLiterals = colors.map(hexToVec3).join(', ');
|
|
15
|
+
const defs = `
|
|
16
|
+
vec3 colorRamp(float t) {
|
|
17
|
+
vec3 _cr[${count}] = vec3[${count}](${colorLiterals});
|
|
18
|
+
float scaled = clamp(t, 0.0, 1.0) * float(${count - 1});
|
|
19
|
+
int idx = int(floor(scaled));
|
|
20
|
+
int next = min(idx + 1, ${count - 1});
|
|
21
|
+
return mix(_cr[idx], _cr[next], fract(scaled));
|
|
22
|
+
}
|
|
23
|
+
`;
|
|
24
|
+
const call = `vec3 rampColor = colorRamp(${value});`;
|
|
25
|
+
return { defs, call, varName: 'rampColor', type: 'vec3', uniforms: {} };
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Principled BSDF — simplified PBR, Blender Principled BSDF node equivalent.
|
|
29
|
+
* Output variable: bsdf (vec3)
|
|
30
|
+
*/
|
|
31
|
+
export function principalBSDF(baseColor, roughness = '0.5', metallic = '0.0') {
|
|
32
|
+
const defs = `
|
|
33
|
+
vec3 principledBSDF(vec3 baseColor, float roughness, float metallic) {
|
|
34
|
+
vec3 diffuse = baseColor * (1.0 - metallic);
|
|
35
|
+
vec3 specular = mix(vec3(0.04), baseColor, metallic);
|
|
36
|
+
float gloss = 1.0 - roughness;
|
|
37
|
+
return diffuse * (0.5 + 0.5 * gloss) + specular * gloss * gloss;
|
|
38
|
+
}
|
|
39
|
+
`;
|
|
40
|
+
const call = `vec3 bsdf = principledBSDF(${baseColor}, ${roughness}, ${metallic});`;
|
|
41
|
+
return { defs, call, varName: 'bsdf', type: 'vec3', uniforms: {} };
|
|
42
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ShaderOutput, ShaderFunctionOptions } from '../types/shader.js';
|
|
2
|
+
/**
|
|
3
|
+
* Perlin Noise — Blender Noise Texture node equivalent.
|
|
4
|
+
* Output variable: noiseValue (float)
|
|
5
|
+
*/
|
|
6
|
+
export declare function perlinNoise(uv: string, options?: ShaderFunctionOptions): ShaderOutput;
|
|
7
|
+
/**
|
|
8
|
+
* Voronoi Noise — Blender Voronoi Texture node equivalent.
|
|
9
|
+
* Output variable: voronoiValue (float)
|
|
10
|
+
*/
|
|
11
|
+
export declare function voronoiNoise(uv: string, options?: ShaderFunctionOptions): ShaderOutput;
|
|
12
|
+
//# sourceMappingURL=noise.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noise.d.ts","sourceRoot":"","sources":["../../src/shaders/noise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE7E;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,YAAY,CAqCzF;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,YAAY,CA6B1F"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Perlin Noise — Blender Noise Texture node equivalent.
|
|
3
|
+
* Output variable: noiseValue (float)
|
|
4
|
+
*/
|
|
5
|
+
export function perlinNoise(uv, options = {}) {
|
|
6
|
+
const scale = options.scale ?? 1.0;
|
|
7
|
+
const seed = options.seed ?? 0.0;
|
|
8
|
+
const defs = `
|
|
9
|
+
float _phash(vec3 p) {
|
|
10
|
+
return fract(sin(dot(p, vec3(127.1, 311.7, 74.7))) * 43758.5453);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
vec3 _pgrad(vec3 p) {
|
|
14
|
+
float h = _phash(floor(p));
|
|
15
|
+
return normalize(vec3(h, fract(h * 34.0), fract(h * 89.0)) * 2.0 - 1.0);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
float perlinNoise(vec3 p) {
|
|
19
|
+
vec3 pi = floor(p);
|
|
20
|
+
vec3 pf = p - pi;
|
|
21
|
+
vec3 u = pf * pf * (3.0 - 2.0 * pf);
|
|
22
|
+
float v000 = dot(_pgrad(pi + vec3(0,0,0)), pf - vec3(0,0,0));
|
|
23
|
+
float v100 = dot(_pgrad(pi + vec3(1,0,0)), pf - vec3(1,0,0));
|
|
24
|
+
float v010 = dot(_pgrad(pi + vec3(0,1,0)), pf - vec3(0,1,0));
|
|
25
|
+
float v110 = dot(_pgrad(pi + vec3(1,1,0)), pf - vec3(1,1,0));
|
|
26
|
+
float v001 = dot(_pgrad(pi + vec3(0,0,1)), pf - vec3(0,0,1));
|
|
27
|
+
float v101 = dot(_pgrad(pi + vec3(1,0,1)), pf - vec3(1,0,1));
|
|
28
|
+
float v011 = dot(_pgrad(pi + vec3(0,1,1)), pf - vec3(0,1,1));
|
|
29
|
+
float v111 = dot(_pgrad(pi + vec3(1,1,1)), pf - vec3(1,1,1));
|
|
30
|
+
return mix(
|
|
31
|
+
mix(mix(v000, v100, u.x), mix(v010, v110, u.x), u.y),
|
|
32
|
+
mix(mix(v001, v101, u.x), mix(v011, v111, u.x), u.y),
|
|
33
|
+
u.z
|
|
34
|
+
) * 0.5 + 0.5;
|
|
35
|
+
}
|
|
36
|
+
`;
|
|
37
|
+
const call = `float noiseValue = perlinNoise(vec3(${uv}, 0.0) * ${scale.toFixed(4)} + vec3(${seed.toFixed(4)}));`;
|
|
38
|
+
return { defs, call, varName: 'noiseValue', type: 'float', uniforms: {} };
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Voronoi Noise — Blender Voronoi Texture node equivalent.
|
|
42
|
+
* Output variable: voronoiValue (float)
|
|
43
|
+
*/
|
|
44
|
+
export function voronoiNoise(uv, options = {}) {
|
|
45
|
+
const scale = options.scale ?? 1.0;
|
|
46
|
+
const defs = `
|
|
47
|
+
float voronoiNoise(vec3 p) {
|
|
48
|
+
vec3 pi = floor(p);
|
|
49
|
+
vec3 pf = fract(p);
|
|
50
|
+
float minDist = 1.0;
|
|
51
|
+
for (int x = -1; x <= 1; x++) {
|
|
52
|
+
for (int y = -1; y <= 1; y++) {
|
|
53
|
+
for (int z = -1; z <= 1; z++) {
|
|
54
|
+
vec3 neighbor = vec3(float(x), float(y), float(z));
|
|
55
|
+
vec3 cell = pi + neighbor;
|
|
56
|
+
vec3 cellPoint = fract(sin(vec3(
|
|
57
|
+
dot(cell, vec3(127.1, 311.7, 74.7)),
|
|
58
|
+
dot(cell, vec3(269.5, 183.3, 246.1)),
|
|
59
|
+
dot(cell, vec3(113.5, 271.9, 124.6))
|
|
60
|
+
)) * 43758.5453);
|
|
61
|
+
minDist = min(minDist, length(neighbor + cellPoint - pf));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return minDist;
|
|
66
|
+
}
|
|
67
|
+
`;
|
|
68
|
+
const call = `float voronoiValue = voronoiNoise(vec3(${uv}, 0.0) * ${scale.toFixed(4)});`;
|
|
69
|
+
return { defs, call, varName: 'voronoiValue', type: 'float', uniforms: {} };
|
|
70
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type ShaderOutput = {
|
|
2
|
+
/** Function definitions — inject before main() */
|
|
3
|
+
defs: string;
|
|
4
|
+
/** Variable assignment — inject inside main() */
|
|
5
|
+
call: string;
|
|
6
|
+
/** Name of the output variable produced by `call` */
|
|
7
|
+
varName: string;
|
|
8
|
+
type: 'float' | 'vec2' | 'vec3' | 'vec4';
|
|
9
|
+
uniforms?: Record<string, unknown>;
|
|
10
|
+
};
|
|
11
|
+
export interface ShaderFunctionOptions {
|
|
12
|
+
scale?: number;
|
|
13
|
+
intensity?: number;
|
|
14
|
+
octaves?: number;
|
|
15
|
+
seed?: number;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=shader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader.d.ts","sourceRoot":"","sources":["../../src/types/shader.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAA;IACZ,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAA;IACZ,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC,CAAA;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@triforge/shader-core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "GLSL shader library for Three.js with Blender workflow",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"package.json"
|
|
11
|
+
],
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "tsc && esbuild src/index.ts --bundle --format=esm --external:three --outfile=dist/bundle.js",
|
|
14
|
+
"dev": "tsc --watch",
|
|
15
|
+
"test": "node test/run-tests.js"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"shader",
|
|
19
|
+
"glsl",
|
|
20
|
+
"three.js",
|
|
21
|
+
"materials",
|
|
22
|
+
"blender"
|
|
23
|
+
],
|
|
24
|
+
"author": "Aftab Ibrahim Kazi",
|
|
25
|
+
"license": "MIT",
|
|
26
|
+
"peerDependencies": {
|
|
27
|
+
"three": ">=0.128.0"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/three": "^0.156.0",
|
|
31
|
+
"esbuild": "^0.28.0",
|
|
32
|
+
"three": "^0.156.0",
|
|
33
|
+
"typescript": "^5.3.0"
|
|
34
|
+
},
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "https://github.com/AftabIbrahimKazi/triforge.git",
|
|
38
|
+
"directory": "st-shader-core"
|
|
39
|
+
},
|
|
40
|
+
"homepage": "https://github.com/AftabIbrahimKazi/triforge#readme",
|
|
41
|
+
"publishConfig": {
|
|
42
|
+
"access": "public"
|
|
43
|
+
}
|
|
44
|
+
}
|