@triforge/shader-core 0.2.1 → 0.4.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.
Files changed (46) hide show
  1. package/dist/bundle.js +196 -39
  2. package/dist/core/CompileContext.d.ts +2 -0
  3. package/dist/core/CompileContext.d.ts.map +1 -1
  4. package/dist/core/CompileContext.js +24 -9
  5. package/dist/core/OutputNode.d.ts.map +1 -1
  6. package/dist/core/OutputNode.js +1 -0
  7. package/dist/core/ShaderNode.d.ts +7 -0
  8. package/dist/core/ShaderNode.d.ts.map +1 -1
  9. package/dist/core/ShaderNode.js +23 -0
  10. package/dist/core/SocketType.d.ts +1 -1
  11. package/dist/core/SocketType.js +1 -1
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +1 -0
  15. package/dist/nodes/output/MaterialOutput.js +2 -2
  16. package/dist/nodes/process/AddShader.js +4 -4
  17. package/dist/nodes/process/Bump.d.ts +25 -2
  18. package/dist/nodes/process/Bump.d.ts.map +1 -1
  19. package/dist/nodes/process/Bump.js +113 -32
  20. package/dist/nodes/process/DiffuseBSDF.js +8 -8
  21. package/dist/nodes/process/Emission.js +4 -4
  22. package/dist/nodes/process/GlassBSDF.js +14 -14
  23. package/dist/nodes/process/GlossyBSDF.js +15 -15
  24. package/dist/nodes/process/MixShader.js +4 -4
  25. package/dist/nodes/process/PrincipledBSDF.d.ts +7 -0
  26. package/dist/nodes/process/PrincipledBSDF.d.ts.map +1 -1
  27. package/dist/nodes/process/PrincipledBSDF.js +55 -40
  28. package/dist/nodes/process/PrincipledHair.js +71 -71
  29. package/dist/nodes/process/PrincipledVolume.js +22 -22
  30. package/dist/nodes/process/RefractionBSDF.js +8 -8
  31. package/dist/nodes/process/ShaderScript.d.ts +2 -2
  32. package/dist/nodes/process/ShaderScript.d.ts.map +1 -1
  33. package/dist/nodes/process/ShaderScript.js +7 -3
  34. package/dist/nodes/process/ShaderToRGB.js +2 -2
  35. package/dist/nodes/process/SheenBSDF.js +13 -13
  36. package/dist/nodes/process/SpecularBSDF.js +16 -16
  37. package/dist/nodes/process/SubsurfaceScattering.js +8 -8
  38. package/dist/nodes/process/ToonBSDF.js +7 -7
  39. package/dist/nodes/process/TranslucentBSDF.js +6 -6
  40. package/dist/nodes/process/TransparentBSDF.d.ts +26 -0
  41. package/dist/nodes/process/TransparentBSDF.d.ts.map +1 -0
  42. package/dist/nodes/process/TransparentBSDF.js +29 -0
  43. package/dist/nodes/process/VolumeAbsorption.js +4 -4
  44. package/dist/nodes/process/VolumeScatter.js +8 -8
  45. package/dist/nodes/shader/RayPortal.js +1 -1
  46. package/package.json +1 -1
@@ -60,6 +60,13 @@ export class ShaderNode {
60
60
  vertexInjections() {
61
61
  return [];
62
62
  }
63
+ /**
64
+ * Whether this node's contribution to the compiled material requires
65
+ * `transparent: true` on the resulting THREE.ShaderMaterial (e.g. a
66
+ * `shader`-socket alpha channel that can read below 1.0).
67
+ * Override in nodes that carry alpha semantics — see PrincipledBSDF.
68
+ */
69
+ wantsTransparency() { return false; }
63
70
  /**
64
71
  * Returns the named output socket.
65
72
  * Throws ShaderNodeError if the socket does not exist.
@@ -144,6 +151,22 @@ export class ShaderNode {
144
151
  enumerable: true,
145
152
  configurable: true,
146
153
  });
154
+ // Per-component aliases (e.g. parameters['location.x']) for any vector-typed
155
+ // uniform parameter, so a KeyframeTrack can animate a single axis. Reads/writes
156
+ // go through the same uniforms[uniformName].value array as the whole-vector
157
+ // getter/setter above, so both access styles stay in sync automatically.
158
+ const AXES = ['x', 'y', 'z'];
159
+ AXES.forEach((axis, idx) => {
160
+ Object.defineProperty(this.parameters, `${paramName}.${axis}`, {
161
+ get: () => uniforms[uniformName].value[idx],
162
+ set: (v) => {
163
+ const arr = uniforms[uniformName].value;
164
+ arr[idx] = finiteOr(v, 0);
165
+ },
166
+ enumerable: true,
167
+ configurable: true,
168
+ });
169
+ });
147
170
  }
148
171
  else {
149
172
  Object.defineProperty(this.parameters, paramName, {
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Socket types mirror Blender's socket colours.
3
3
  *
4
- * shader — yellow — BSDF / material output
4
+ * shader — yellow — BSDF / material output — vec4 RGB + alpha
5
5
  * color — yellow-green — vec3 RGB
6
6
  * vector — purple — vec2 / vec3 spatial
7
7
  * float — grey — single scalar
@@ -1,6 +1,6 @@
1
1
  /** Maps SocketType to its GLSL primitive. */
2
2
  export const SOCKET_GLSL_TYPE = {
3
- shader: 'vec3',
3
+ shader: 'vec4',
4
4
  color: 'vec3',
5
5
  vector: 'vec2',
6
6
  float: 'float',
package/dist/index.d.ts CHANGED
@@ -83,6 +83,7 @@ export { SubsurfaceScattering } from './nodes/process/SubsurfaceScattering.js';
83
83
  export { ToonBSDF } from './nodes/process/ToonBSDF.js';
84
84
  export { SpecularBSDF } from './nodes/process/SpecularBSDF.js';
85
85
  export { TranslucentBSDF } from './nodes/process/TranslucentBSDF.js';
86
+ export { TransparentBSDF } from './nodes/process/TransparentBSDF.js';
86
87
  export { PrincipledHair } from './nodes/process/PrincipledHair.js';
87
88
  export { Math as ShaderMath } from './nodes/process/Math.js';
88
89
  export { Clamp } from './nodes/process/Clamp.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -88,6 +88,7 @@ export { SubsurfaceScattering } from './nodes/process/SubsurfaceScattering.js';
88
88
  export { ToonBSDF } from './nodes/process/ToonBSDF.js';
89
89
  export { SpecularBSDF } from './nodes/process/SpecularBSDF.js';
90
90
  export { TranslucentBSDF } from './nodes/process/TranslucentBSDF.js';
91
+ export { TransparentBSDF } from './nodes/process/TransparentBSDF.js';
91
92
  export { PrincipledHair } from './nodes/process/PrincipledHair.js';
92
93
  // ── Process nodes — Converter ─────────────────────────────────────────────────
93
94
  export { Math as ShaderMath } from './nodes/process/Math.js';
@@ -112,7 +112,7 @@ export class MaterialOutput extends OutputNode {
112
112
  compileCall(ctx) {
113
113
  const sv = this._inputs.surface.isConnected()
114
114
  ? ctx.outputVar(this._inputs.surface.connection.node, this._inputs.surface.connection.name)
115
- : 'vec3(0.8)';
116
- return `gl_FragColor = vec4(${sv}, 1.0);`;
115
+ : 'vec4(0.8, 0.8, 0.8, 1.0)';
116
+ return `gl_FragColor = ${sv};`;
117
117
  }
118
118
  }
@@ -26,11 +26,11 @@ export class AddShader extends ProcessNode {
26
26
  compileCall(ctx) {
27
27
  const s1 = ctx.resolveInput(this._inputs.shader1);
28
28
  const s2 = ctx.resolveInput(this._inputs.shader2);
29
- return `vec3 ${ctx.outputVar(this, 'BSDF')} = _st_addShader(${s1}, ${s2});`;
29
+ return `vec4 ${ctx.outputVar(this, 'BSDF')} = _st_addShader(${s1}, ${s2});`;
30
30
  }
31
31
  }
32
32
  AddShader.instanceSpecificDef = false;
33
- AddShader.glslFunction = `
34
- vec3 _st_addShader(vec3 a, vec3 b) {
35
- return a + b;
33
+ AddShader.glslFunction = `
34
+ vec4 _st_addShader(vec4 a, vec4 b) {
35
+ return vec4(a.rgb + b.rgb, max(a.a, b.a));
36
36
  }`;
@@ -7,19 +7,42 @@ export interface BumpInputs {
7
7
  distance?: OutputSocket | number;
8
8
  height?: OutputSocket;
9
9
  normal?: OutputSocket;
10
+ /**
11
+ * 'derivative' (default) — height gradient via dFdx/dFdy of the `height` input.
12
+ * Screen-space, camera/rasterization-dependent: stable for procedural/vertex-fed
13
+ * height but can speckle or seam-flicker across a wide camera-distance range when
14
+ * `height` comes from a sampled texture.
15
+ *
16
+ * 'uv-offset' — explicit texelSize-offset samples of a height texture at a fixed
17
+ * LOD, independent of screen-space derivatives. Stable under camera motion for
18
+ * texture-driven relief (e.g. planetary crater/regolith maps). Requires `uniformName`.
19
+ */
20
+ method?: 'derivative' | 'uv-offset';
21
+ /** Required when method:'uv-offset'. Name of the sampler2D height-map uniform. */
22
+ uniformName?: string;
23
+ /** UV to sample at, when method:'uv-offset'. Defaults to the surface UV (vUv). */
24
+ vector?: OutputSocket;
25
+ /** Texel size (1 / texture resolution) for the uv-offset samples. Default 1/512. */
26
+ texelSize?: OutputSocket | number;
27
+ /** Explicit mip/LOD level for the uv-offset samples. Default 0. */
28
+ lod?: OutputSocket | number;
10
29
  }
11
30
  /**
12
31
  * Bump — Blender "Bump" node equivalent.
13
- * Converts a height map into a perturbed surface normal using screen-space derivatives.
32
+ * Converts a height map into a perturbed surface normal.
14
33
  *
15
34
  * Inputs: strength [0-1], distance, height (float), normal (optional override)
35
+ * method ('derivative' | 'uv-offset'), uniformName/vector/texelSize/lod
36
+ * (uv-offset mode only)
16
37
  * Outputs: Normal (color/vec3)
17
38
  */
18
39
  export declare class Bump extends ProcessNode {
19
40
  get nodeType(): string;
20
41
  static instanceSpecificDef: boolean;
21
42
  get metadata(): NodeMetadata;
22
- static glslFunction: string;
43
+ static derivativeGlslFunction: string;
44
+ private readonly _method;
45
+ private readonly _uniformName;
23
46
  private readonly _inputs;
24
47
  private readonly _outputs;
25
48
  constructor(inputs?: BumpInputs);
@@ -1 +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"}
1
+ {"version":3,"file":"Bump.d.ts","sourceRoot":"","sources":["../../../src/nodes/process/Bump.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAIvD,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;IACvB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAO,YAAY,GAAG,WAAW,CAAA;IACxC,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kFAAkF;IAClF,MAAM,CAAC,EAAO,YAAY,CAAA;IAC1B,oFAAoF;IACpF,SAAS,CAAC,EAAI,YAAY,GAAG,MAAM,CAAA;IACnC,mEAAmE;IACnE,GAAG,CAAC,EAAU,YAAY,GAAG,MAAM,CAAA;CACpC;AAED;;;;;;;;GAQG;AACH,qBAAa,IAAK,SAAQ,WAAW;IACnC,IAAI,QAAQ,WAAoB;IAKhC,MAAM,CAAC,mBAAmB,UAAO;IAEjC,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAED,MAAM,CAAC,sBAAsB,SA8BxB;IAEL,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2E;IACnG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmE;gBAEhF,MAAM,GAAE,UAAe;IA+BnC,eAAe;IACf,gBAAgB;IAEhB,WAAW,IAAI,MAAM;IAarB,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;CAkDzC"}
@@ -1,9 +1,14 @@
1
1
  import { ProcessNode } from '../../core/ProcessNode.js';
2
+ import { ShaderNodeError } from '../../core/ShaderNodeError.js';
3
+ import { ShaderConfig } from '../../core/ShaderConfig.js';
4
+ import { assertGlslIdentifier } from '../../core/glslIdentifier.js';
2
5
  /**
3
6
  * Bump — Blender "Bump" node equivalent.
4
- * Converts a height map into a perturbed surface normal using screen-space derivatives.
7
+ * Converts a height map into a perturbed surface normal.
5
8
  *
6
9
  * Inputs: strength [0-1], distance, height (float), normal (optional override)
10
+ * method ('derivative' | 'uv-offset'), uniformName/vector/texelSize/lod
11
+ * (uv-offset mode only)
7
12
  * Outputs: Normal (color/vec3)
8
13
  */
9
14
  export class Bump extends ProcessNode {
@@ -13,53 +18,129 @@ export class Bump extends ProcessNode {
13
18
  }
14
19
  constructor(inputs = {}) {
15
20
  super('Bump');
21
+ this._method = inputs.method ?? 'derivative';
22
+ if (this._method === 'uv-offset') {
23
+ if (ShaderConfig.errorLevel !== 'off' && !inputs.uniformName) {
24
+ ShaderNodeError.throw({
25
+ nodeType: 'Bump',
26
+ nodeId: this.id,
27
+ problem: 'uniformName is required when method:"uv-offset".',
28
+ fix: 'new Bump({ method: "uv-offset", uniformName: "uHeightTex" })\n After compile(): mat.material.uniforms.uHeightTex = { value: texture }',
29
+ });
30
+ }
31
+ if (inputs.uniformName)
32
+ assertGlslIdentifier(inputs.uniformName, 'Bump uniformName');
33
+ this._uniformName = inputs.uniformName ?? null;
34
+ }
35
+ else {
36
+ this._uniformName = null;
37
+ }
16
38
  this._inputs = this.createInputs(inputs, {
17
39
  strength: ['float', inputs.strength ?? 1.0],
18
40
  distance: ['float', inputs.distance ?? 1.0],
19
41
  height: ['float', 0.5],
20
42
  normal: ['color', null],
43
+ vector: ['vector', null],
44
+ texelSize: ['float', inputs.texelSize ?? 1 / 512],
45
+ lod: ['float', inputs.lod ?? 0.0],
21
46
  });
22
47
  this._outputs = this.createOutputs({ Normal: 'color' });
23
48
  }
24
49
  getInputSockets() { return this._inputs; }
25
50
  getOutputSockets() { return this._outputs; }
26
- compileDefs() { return Bump.glslFunction; }
51
+ compileDefs() {
52
+ if (this._method === 'uv-offset') {
53
+ return [
54
+ '#ifndef _ST_BUMP_TEXLOD_EXT',
55
+ '#define _ST_BUMP_TEXLOD_EXT',
56
+ '#extension GL_EXT_shader_texture_lod : enable',
57
+ '#endif',
58
+ `uniform sampler2D ${this._uniformName};`,
59
+ ].join('\n');
60
+ }
61
+ return Bump.derivativeGlslFunction;
62
+ }
27
63
  compileCall(ctx) {
28
- const height = ctx.resolveInput(this._inputs.height);
29
64
  const strength = ctx.resolveInput(this._inputs.strength);
30
65
  const distance = ctx.resolveInput(this._inputs.distance);
31
66
  const normal = this._inputs.normal.isConnected()
32
67
  ? ctx.outputVar(this._inputs.normal.connection.node, this._inputs.normal.connection.name)
33
68
  : 'normalize(vNormal)';
69
+ if (this._method === 'uv-offset') {
70
+ const uv = this._inputs.vector.isConnected() ? ctx.resolveInput(this._inputs.vector) : 'vUv';
71
+ const texelSize = ctx.resolveInput(this._inputs.texelSize);
72
+ const lod = ctx.resolveInput(this._inputs.lod);
73
+ const id = this.id;
74
+ const hL = `_bmp_${id}_hL`, hR = `_bmp_${id}_hR`;
75
+ const hD = `_bmp_${id}_hD`, hU = `_bmp_${id}_hU`;
76
+ const dPdx = `_bmp_${id}_dPdx`, dPdy = `_bmp_${id}_dPdy`;
77
+ const dUdx = `_bmp_${id}_dUdx`, dUdy = `_bmp_${id}_dUdy`;
78
+ const det = `_bmp_${id}_det`, sgn = `_bmp_${id}_sgn`, invDet = `_bmp_${id}_invDet`;
79
+ const T = `_bmp_${id}_T`, B = `_bmp_${id}_B`;
80
+ const dhdu = `_bmp_${id}_dhdu`, dhdv = `_bmp_${id}_dhdv`;
81
+ const scale = `_bmp_${id}_scale`;
82
+ const ts = `_bmp_${id}_ts`;
83
+ return [
84
+ `float ${ts} = ${texelSize};`,
85
+ `float ${hL} = texture2DLodEXT(${this._uniformName}, ${uv} - vec2(${ts}, 0.0), ${lod}).r;`,
86
+ `float ${hR} = texture2DLodEXT(${this._uniformName}, ${uv} + vec2(${ts}, 0.0), ${lod}).r;`,
87
+ `float ${hD} = texture2DLodEXT(${this._uniformName}, ${uv} - vec2(0.0, ${ts}), ${lod}).r;`,
88
+ `float ${hU} = texture2DLodEXT(${this._uniformName}, ${uv} + vec2(0.0, ${ts}), ${lod}).r;`,
89
+ // Cotangent frame from screen-space derivatives — this builds the tangent
90
+ // basis (surface-fixed), not the height sample, so it doesn't carry the
91
+ // camera-distance instability the uv-offset method exists to avoid.
92
+ `vec3 ${dPdx} = dFdx(vPosition);`,
93
+ `vec3 ${dPdy} = dFdy(vPosition);`,
94
+ `vec2 ${dUdx} = dFdx(vUv);`,
95
+ `vec2 ${dUdy} = dFdy(vUv);`,
96
+ `float ${det} = ${dUdx}.x * ${dUdy}.y - ${dUdx}.y * ${dUdy}.x;`,
97
+ `float ${sgn} = sign(${det});`,
98
+ `float ${invDet} = ${sgn} / max(abs(${det}), 1e-6);`,
99
+ `vec3 ${T} = normalize((${dUdy}.y * ${dPdx} - ${dUdx}.y * ${dPdy}) * ${invDet});`,
100
+ `vec3 ${B} = normalize(cross(${normal}, ${T})) * ${sgn};`,
101
+ `float ${dhdu} = (${hR} - ${hL}) / max(2.0 * ${ts}, 1e-6);`,
102
+ `float ${dhdv} = (${hU} - ${hD}) / max(2.0 * ${ts}, 1e-6);`,
103
+ `float ${scale} = ${strength} * ${distance} * 50.0;`,
104
+ `vec3 ${ctx.outputVar(this, 'Normal')} = normalize(${normal} - ${T} * ${dhdu} * ${scale} - ${B} * ${dhdv} * ${scale});`,
105
+ ].join('\n ');
106
+ }
107
+ const height = ctx.resolveInput(this._inputs.height);
34
108
  return `vec3 ${ctx.outputVar(this, 'Normal')} = _st_bump(${height}, ${strength}, ${distance}, ${normal});`;
35
109
  }
36
110
  }
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
- }`;
111
+ // Both modes emit their own per-instance defs (a #ifndef-guarded shared function
112
+ // for 'derivative', a per-instance uniform declaration for 'uv-offset' — see
113
+ // compileDefs). instanceSpecificDef:true is required so multiple 'uv-offset'
114
+ // instances each get their own uniform decl instead of being deduped by nodeType.
115
+ Bump.instanceSpecificDef = true;
116
+ Bump.derivativeGlslFunction = `
117
+ #ifndef _ST_BUMP_FN
118
+ #define _ST_BUMP_FN
119
+ vec3 _st_bump(float height, float strength, float distance, vec3 N) {
120
+ // Cotangent frame bump — camera-independent.
121
+ // We derive world-space surface tangent T and bitangent B from the UV
122
+ // parameterisation (cotangent frame). This gives vectors that are fixed
123
+ // to the surface regardless of camera orientation.
124
+ // Then we express the height gradient in UV space (dh/du, dh/dv) which
125
+ // is also surface-fixed, eliminating the screen-space dependency.
126
+ vec3 dPdx = dFdx(vPosition);
127
+ vec3 dPdy = dFdy(vPosition);
128
+ vec2 dUdx = dFdx(vUv);
129
+ vec2 dUdy = dFdy(vUv);
130
+
131
+ float det = dUdx.x * dUdy.y - dUdx.y * dUdy.x;
132
+ float sgn = sign(det);
133
+ float invDet = sgn / max(abs(det), 1e-6);
134
+
135
+ // World-space tangent and bitangent from UV Jacobian (camera-independent)
136
+ vec3 T = normalize((dUdy.y * dPdx - dUdx.y * dPdy) * invDet);
137
+ vec3 B = normalize(cross(N, T)) * sgn;
138
+
139
+ // Height gradient in UV space (camera-independent)
140
+ float dhdu = (dUdy.y * dFdx(height) - dUdx.y * dFdy(height)) * invDet;
141
+ float dhdv = (dUdx.x * dFdy(height) - dUdy.x * dFdx(height)) * invDet;
142
+
143
+ float scale = strength * distance * 50.0;
144
+ return normalize(N - T * dhdu * scale - B * dhdv * scale);
145
+ }
146
+ #endif`;
@@ -29,15 +29,15 @@ export class DiffuseBSDF extends ProcessNode {
29
29
  const normal = this._inputs.normal.isConnected()
30
30
  ? ctx.outputVar(this._inputs.normal.connection.node, this._inputs.normal.connection.name)
31
31
  : 'normalize(vNormal)';
32
- return `vec3 ${ctx.outputVar(this, 'BSDF')} = _st_diffuseBSDF(${color}, ${roughness}, ${normal});`;
32
+ return `vec4 ${ctx.outputVar(this, 'BSDF')} = vec4(_st_diffuseBSDF(${color}, ${roughness}, ${normal}), 1.0);`;
33
33
  }
34
34
  }
35
35
  DiffuseBSDF.instanceSpecificDef = false;
36
- DiffuseBSDF.glslFunction = `
37
- vec3 _st_diffuseBSDF(vec3 color, float roughness, vec3 N) {
38
- vec3 L = normalize(vec3(1.0, 2.0, 1.0));
39
- float NdotL = max(dot(N, L), 0.0);
40
- float diffuse = NdotL / 3.14159265;
41
- vec3 ambient = color * 0.15;
42
- return ambient + color * (diffuse * (1.0 - roughness * 0.5));
36
+ DiffuseBSDF.glslFunction = `
37
+ vec3 _st_diffuseBSDF(vec3 color, float roughness, vec3 N) {
38
+ vec3 L = normalize(vec3(1.0, 2.0, 1.0));
39
+ float NdotL = max(dot(N, L), 0.0);
40
+ float diffuse = NdotL / 3.14159265;
41
+ vec3 ambient = color * 0.15;
42
+ return ambient + color * (diffuse * (1.0 - roughness * 0.5));
43
43
  }`;
@@ -26,11 +26,11 @@ export class Emission extends ProcessNode {
26
26
  compileCall(ctx) {
27
27
  const color = ctx.resolveInput(this._inputs.color);
28
28
  const strength = ctx.resolveInput(this._inputs.strength);
29
- return `vec3 ${ctx.outputVar(this, 'BSDF')} = _st_emission(${color}, ${strength});`;
29
+ return `vec4 ${ctx.outputVar(this, 'BSDF')} = vec4(_st_emission(${color}, ${strength}), 1.0);`;
30
30
  }
31
31
  }
32
32
  Emission.instanceSpecificDef = false;
33
- Emission.glslFunction = `
34
- vec3 _st_emission(vec3 color, float strength) {
35
- return color * strength;
33
+ Emission.glslFunction = `
34
+ vec3 _st_emission(vec3 color, float strength) {
35
+ return color * strength;
36
36
  }`;
@@ -31,21 +31,21 @@ export class GlassBSDF extends ProcessNode {
31
31
  const normal = this._inputs.normal.isConnected()
32
32
  ? ctx.outputVar(this._inputs.normal.connection.node, this._inputs.normal.connection.name)
33
33
  : 'normalize(vNormal)';
34
- return `vec3 ${ctx.outputVar(this, 'BSDF')} = _st_glassBSDF(${color}, ${roughness}, ${ior}, ${normal});`;
34
+ return `vec4 ${ctx.outputVar(this, 'BSDF')} = vec4(_st_glassBSDF(${color}, ${roughness}, ${ior}, ${normal}), 1.0);`;
35
35
  }
36
36
  }
37
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;
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
51
  }`;
@@ -29,22 +29,22 @@ export class GlossyBSDF extends ProcessNode {
29
29
  const normal = this._inputs.normal.isConnected()
30
30
  ? ctx.outputVar(this._inputs.normal.connection.node, this._inputs.normal.connection.name)
31
31
  : 'normalize(vNormal)';
32
- return `vec3 ${ctx.outputVar(this, 'BSDF')} = _st_glossyBSDF(${color}, ${roughness}, ${normal});`;
32
+ return `vec4 ${ctx.outputVar(this, 'BSDF')} = vec4(_st_glossyBSDF(${color}, ${roughness}, ${normal}), 1.0);`;
33
33
  }
34
34
  }
35
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;
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
50
  }`;
@@ -37,11 +37,11 @@ export class MixShader extends ProcessNode {
37
37
  const fac = ctx.resolveInput(this._inputs.fac);
38
38
  const shader1 = ctx.resolveInput(this._inputs.shader1);
39
39
  const shader2 = ctx.resolveInput(this._inputs.shader2);
40
- return `vec3 ${ctx.outputVar(this, 'BSDF')} = _st_mixShader(${fac}, ${shader1}, ${shader2});`;
40
+ return `vec4 ${ctx.outputVar(this, 'BSDF')} = _st_mixShader(${fac}, ${shader1}, ${shader2});`;
41
41
  }
42
42
  }
43
43
  MixShader.instanceSpecificDef = false;
44
- MixShader.glslFunction = `
45
- vec3 _st_mixShader(float fac, vec3 a, vec3 b) {
46
- return mix(a, b, clamp(fac, 0.0, 1.0));
44
+ MixShader.glslFunction = `
45
+ vec4 _st_mixShader(float fac, vec4 a, vec4 b) {
46
+ return mix(a, b, clamp(fac, 0.0, 1.0));
47
47
  }`;
@@ -27,6 +27,13 @@ export declare class PrincipledBSDF extends ProcessNode {
27
27
  getInputSockets(): Record<string, import("../../index.js").InputSocket<unknown>>;
28
28
  getOutputSockets(): Record<string, OutputSocket>;
29
29
  compileDefs(): string;
30
+ /**
31
+ * Alpha has no channel of its own in the underlying vec3 lighting function —
32
+ * it's applied as the vec4 alpha component at the call site instead (see
33
+ * compileCall). transparent:true is needed whenever alpha can read below 1.0:
34
+ * a non-default literal, or any live/connected value (conservatively true).
35
+ */
36
+ wantsTransparency(): boolean;
30
37
  compileCall(ctx: CompileContext): string;
31
38
  }
32
39
  //# sourceMappingURL=PrincipledBSDF.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PrincipledBSDF.d.ts","sourceRoot":"","sources":["../../../src/nodes/process/PrincipledBSDF.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,SAAS,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;IACjC,QAAQ,CAAC,EAAG,YAAY,GAAG,MAAM,CAAA;IACjC,SAAS,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;IACjC,GAAG,CAAC,EAAQ,YAAY,GAAG,MAAM,CAAA;IACjC,KAAK,CAAC,EAAM,YAAY,GAAG,MAAM,CAAA;IACjC,MAAM,CAAC,EAAK,YAAY,CAAA;CACzB;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,SAuCnB;IAEA,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2E;IACnG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmE;gBAEhF,MAAM,GAAE,oBAAyB;IAa7C,eAAe;IACf,gBAAgB;IAChB,WAAW;IAEX,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;CAMzC"}
1
+ {"version":3,"file":"PrincipledBSDF.d.ts","sourceRoot":"","sources":["../../../src/nodes/process/PrincipledBSDF.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,SAAS,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;IACjC,QAAQ,CAAC,EAAG,YAAY,GAAG,MAAM,CAAA;IACjC,SAAS,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;IACjC,GAAG,CAAC,EAAQ,YAAY,GAAG,MAAM,CAAA;IACjC,KAAK,CAAC,EAAM,YAAY,GAAG,MAAM,CAAA;IACjC,MAAM,CAAC,EAAK,YAAY,CAAA;CACzB;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,SAuCnB;IAEA,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2E;IACnG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmE;gBAEhF,MAAM,GAAE,oBAAyB;IAa7C,eAAe;IACf,gBAAgB;IAChB,WAAW;IAEX;;;;;OAKG;IACH,iBAAiB,IAAI,OAAO;IAO5B,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;CAQzC"}