@tinypoly/gpu-renderer 0.2.1 → 0.2.2
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/dist/frameLayout.d.ts.map +1 -1
- package/dist/frameLayout.js +2 -0
- package/dist/frameLayout.js.map +1 -1
- package/dist/grass.d.ts +106 -0
- package/dist/grass.d.ts.map +1 -0
- package/dist/grass.js +350 -0
- package/dist/grass.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/materialLayout.d.ts +6 -0
- package/dist/materialLayout.d.ts.map +1 -1
- package/dist/materialLayout.js +2 -0
- package/dist/materialLayout.js.map +1 -1
- package/dist/pathTracePass.d.ts +2 -2
- package/dist/pathTracePass.d.ts.map +1 -1
- package/dist/pathTracePass.js +11 -9
- package/dist/pathTracePass.js.map +1 -1
- package/dist/renderer.d.ts.map +1 -1
- package/dist/renderer.js +14 -3
- package/dist/renderer.js.map +1 -1
- package/dist/shaderProgram.d.ts.map +1 -1
- package/dist/shaderProgram.js +10 -1
- package/dist/shaderProgram.js.map +1 -1
- package/dist/subsurface.d.ts +2 -0
- package/dist/subsurface.d.ts.map +1 -1
- package/dist/subsurface.js +3 -2
- package/dist/subsurface.js.map +1 -1
- package/dist/wgsl/bsdf.wgsl.d.ts +1 -1
- package/dist/wgsl/bsdf.wgsl.d.ts.map +1 -1
- package/dist/wgsl/bsdf.wgsl.js +39 -3
- package/dist/wgsl/bsdf.wgsl.js.map +1 -1
- package/dist/wgsl/grass.wgsl.d.ts +14 -0
- package/dist/wgsl/grass.wgsl.d.ts.map +1 -0
- package/dist/wgsl/grass.wgsl.js +456 -0
- package/dist/wgsl/grass.wgsl.js.map +1 -0
- package/dist/wgsl/lights.wgsl.d.ts +1 -1
- package/dist/wgsl/lights.wgsl.d.ts.map +1 -1
- package/dist/wgsl/lights.wgsl.js +5 -0
- package/dist/wgsl/lights.wgsl.js.map +1 -1
- package/dist/wgsl/pathTrace.wgsl.d.ts +1 -1
- package/dist/wgsl/pathTrace.wgsl.d.ts.map +1 -1
- package/dist/wgsl/pathTrace.wgsl.js +34 -5
- package/dist/wgsl/pathTrace.wgsl.js.map +1 -1
- package/dist/wgsl/surface.wgsl.d.ts +1 -1
- package/dist/wgsl/surface.wgsl.d.ts.map +1 -1
- package/dist/wgsl/surface.wgsl.js +2 -0
- package/dist/wgsl/surface.wgsl.js.map +1 -1
- package/package.json +2 -2
- package/src/frameLayout.ts +2 -0
- package/src/grass.ts +523 -0
- package/src/index.ts +2 -0
- package/src/materialLayout.ts +7 -0
- package/src/pathTracePass.ts +11 -9
- package/src/renderer.ts +21 -6
- package/src/shaderProgram.ts +11 -1
- package/src/subsurface.ts +3 -2
- package/src/wgsl/bsdf.wgsl.ts +39 -3
- package/src/wgsl/grass.wgsl.ts +456 -0
- package/src/wgsl/lights.wgsl.ts +5 -0
- package/src/wgsl/pathTrace.wgsl.ts +34 -5
- package/src/wgsl/surface.wgsl.ts +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shaderProgram.js","sourceRoot":"","sources":["../src/shaderProgram.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shaderProgram.js","sourceRoot":"","sources":["../src/shaderProgram.ts"],"names":[],"mappings":"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"}
|
package/dist/subsurface.d.ts
CHANGED
|
@@ -56,6 +56,8 @@ export interface VolumeMedium {
|
|
|
56
56
|
export type VolumeMaterial = SerializedMaterial & {
|
|
57
57
|
volume?: VolumeInput;
|
|
58
58
|
};
|
|
59
|
+
/** A colour as `#rrggbb` or linear rgb, in linear rgb clamped to one; white when it reads as neither. */
|
|
60
|
+
export declare function linearAlbedo(color: unknown): [number, number, number];
|
|
59
61
|
/** The medium an input describes, with its defaults, or `null` when it describes none. */
|
|
60
62
|
export declare function volumeMedium(input: unknown): VolumeMedium | null;
|
|
61
63
|
/**
|
package/dist/subsurface.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subsurface.d.ts","sourceRoot":"","sources":["../src/subsurface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG;IACtC,+GAA+G;IAC/G,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACpC,+GAA+G;IAC/G,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sGAAsG;IACtG,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,kDAAkD;AAClD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,mHAAmH;AACnH,MAAM,MAAM,kBAAkB,GAAG,kBAAkB,GAAG;IAAE,UAAU,CAAC,EAAE,eAAe,CAAA;CAAE,CAAC;AAQvF,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAyBxE;AAED,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,kBAAkB,GAAG,SAAS,GAAG,gBAAgB,GAAG,IAAI,CAE9F;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,qHAAqH;IACrH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0GAA0G;IAC1G,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACnC,oHAAoH;IACpH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"subsurface.d.ts","sourceRoot":"","sources":["../src/subsurface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG;IACtC,+GAA+G;IAC/G,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACpC,+GAA+G;IAC/G,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sGAAsG;IACtG,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,kDAAkD;AAClD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,mHAAmH;AACnH,MAAM,MAAM,kBAAkB,GAAG,kBAAkB,GAAG;IAAE,UAAU,CAAC,EAAE,eAAe,CAAA;CAAE,CAAC;AAQvF,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAyBxE;AAED,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,kBAAkB,GAAG,SAAS,GAAG,gBAAgB,GAAG,IAAI,CAE9F;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,qHAAqH;IACrH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0GAA0G;IAC1G,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACnC,oHAAoH;IACpH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC;AAI3E,yGAAyG;AACzG,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAarE;AAED,0FAA0F;AAC1F,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAchE;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,kFAAkF;AAClF,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG;IAAE,KAAK,CAAC,EAAE,UAAU,CAAA;CAAE,CAAC;AAExE,mDAAmD;AACnD,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIlD;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,kBAAkB,GAAG,SAAS,GAAG,MAAM,CAExE;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,SAAS,GAAG,YAAY,GAAG,IAAI,CAEtF"}
|
package/dist/subsurface.js
CHANGED
|
@@ -30,7 +30,8 @@ export function subsurfaceOf(material) {
|
|
|
30
30
|
return subsurfaceMedium(material?.subsurface);
|
|
31
31
|
}
|
|
32
32
|
const srgbToLinear = (c) => (c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4);
|
|
33
|
-
|
|
33
|
+
/** A colour as `#rrggbb` or linear rgb, in linear rgb clamped to one; white when it reads as neither. */
|
|
34
|
+
export function linearAlbedo(color) {
|
|
34
35
|
if (Array.isArray(color) && color.length >= 3) {
|
|
35
36
|
return [0, 1, 2].map(k => Math.min(1, Math.max(0, finite(color[k], 1))));
|
|
36
37
|
}
|
|
@@ -52,7 +53,7 @@ export function volumeMedium(input) {
|
|
|
52
53
|
return null;
|
|
53
54
|
return {
|
|
54
55
|
density,
|
|
55
|
-
albedo:
|
|
56
|
+
albedo: linearAlbedo(value.color),
|
|
56
57
|
anisotropy: Math.min(0.95, Math.max(-0.95, finite(value.anisotropy, 0))),
|
|
57
58
|
};
|
|
58
59
|
}
|
package/dist/subsurface.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subsurface.js","sourceRoot":"","sources":["../src/subsurface.ts"],"names":[],"mappings":"AAkCA,MAAM,cAAc,GAA6B,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC/D,MAAM,aAAa,GAAG,IAAI,CAAC;AAE3B,MAAM,MAAM,GAAG,CAAC,KAAc,EAAE,QAAgB,EAAE,EAAE,CAClD,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AAEzE,0FAA0F;AAC1F,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,KAAK,KAAK,IAAI;QAAE,KAAK,GAAG,EAAE,CAAC;IAC/B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAErD,MAAM,KAAK,GAAG,KAA0C,CAAC;IACzD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjE,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;IAE9D,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAC7C,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QAC5C,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC;YACvD,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC,CAAC,cAAc,CAAC;IAErB,2GAA2G;IAC3G,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAErG,OAAO;QACL,MAAM;QACN,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACtC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;KACzE,CAAC;AACJ,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,YAAY,CAAC,QAAwC;IACnE,OAAO,gBAAgB,CAAE,QAA2C,EAAE,UAAU,CAAC,CAAC;AACpF,CAAC;AAyBD,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;AAE9F,
|
|
1
|
+
{"version":3,"file":"subsurface.js","sourceRoot":"","sources":["../src/subsurface.ts"],"names":[],"mappings":"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"}
|
package/dist/wgsl/bsdf.wgsl.d.ts
CHANGED
|
@@ -9,5 +9,5 @@
|
|
|
9
9
|
* for the diffuse lobe, the visible normal distribution (Heitz 2018) for GGX, anisotropic or not, and the Blinn-Phong
|
|
10
10
|
* lobe for Phong, mixed by how much each lobe reflects.
|
|
11
11
|
*/
|
|
12
|
-
export declare const BSDF_WGSL = "\n/** How a surface answers a direction: what it reflects, and how likely sampling was to have chosen it. */\nstruct BsdfEval {\n // The bidirectional distribution times the cosine at the surface, which is what a contribution is multiplied by.\n value: vec3<f32>,\n // Solid angle density of this direction under this renderer's own sampling, for the power heuristic.\n pdf: f32,\n};\n\nstruct BsdfSample {\n direction: vec3<f32>,\n // The distribution over its own density: what the path's throughput is multiplied by.\n weight: vec3<f32>,\n pdf: f32,\n valid: bool,\n // The diffuse lobe chose the direction, rather than a specular one: which of the denoiser's two signals it feeds.\n diffuse: bool,\n};\n\nfn luminanceOf(color: vec3<f32>) -> f32 {\n return dot(color, vec3<f32>(0.2126, 0.7152, 0.0722));\n}\n\nfn max3(color: vec3<f32>) -> f32 {\n return max(color.r, max(color.g, color.b));\n}\n\n/** Schlick's approximation, as in Three: the reflectance always reaches one at a grazing angle. */\nfn fresnelSchlick(f0: vec3<f32>, cosine: f32) -> vec3<f32> {\n return schlick3(f0, 1.0, cosine);\n}\n\n/** Reflectance at normal incidence: the dielectric's own, turned towards the base colour as the surface turns metal. */\nfn surfaceF0(surface: Surface) -> vec3<f32> {\n return mix(surface.specularColor, surface.albedo, surface.metalness);\n}\n\n/** GGX, with alpha the square of the roughness, as Three parameterises it. */\nfn ggxDistribution(alpha2: f32, nh: f32) -> f32 {\n let denominator = nh * nh * (alpha2 - 1.0) + 1.0;\n\n return alpha2 / (PI * denominator * denominator);\n}\n\n/** Smith's height correlated visibility, which already carries the 1/(4 nl nv) the lobe would otherwise need. */\nfn ggxVisibility(alpha2: f32, nl: f32, nv: f32) -> f32 {\n return 0.5 / (nl * sqrt(nv * nv * (1.0 - alpha2) + alpha2) + nv * sqrt(nl * nl * (1.0 - alpha2) + alpha2) + 1e-7);\n}\n\n/** The separable masking term, which is the one the visible normal sampling is built on. */\nfn ggxMasking(alpha2: f32, nv: f32) -> f32 {\n return 2.0 * nv / (nv + sqrt(alpha2 + (1.0 - alpha2) * nv * nv));\n}\n\n/** Karis' analytic fit of the GGX directional albedo (Three's DFGApprox): the scale and bias applied to F0 and F90. */\nfn dfgApprox(roughness: f32, nv: f32) -> vec2<f32> {\n let r = roughness * vec4<f32>(-1.0, -0.0275, -0.572, 0.022) + vec4<f32>(1.0, 0.0425, 1.04, -0.04);\n let a004 = min(r.x * r.x, exp2(-9.28 * nv)) * r.x + r.y;\n\n return vec2<f32>(-1.04, 1.04) * a004 + r.zw;\n}\n\n/** Three's IBLSheenBRDF: the Charlie sheen lobe integrated over the hemisphere. */\nfn sheenAlbedo(cosine: f32, roughness: f32) -> f32 {\n let r2 = roughness * roughness;\n let inverse = 1.0 / (roughness + 0.1);\n let a = -1.9362 + 1.0678 * roughness + 0.4573 * r2 - 0.8469 * inverse;\n let b = -0.6014 + 0.5538 * roughness - 0.4670 * r2 - 0.1255 * inverse;\n\n return clamp(exp(a * clamp(cosine, 0.0, 1.0) + b), 0.0, 1.0);\n}\n\n/** Three's D_Charlie times V_Neubelt. */\nfn sheenLobe(roughness: f32, nh: f32, nv: f32, nl: f32) -> f32 {\n let inverse = 1.0 / (roughness * roughness);\n let sin2h = max(1.0 - nh * nh, 0.0078125);\n let distribution = (2.0 + inverse) * pow(sin2h, inverse * 0.5) / (2.0 * PI);\n\n return distribution * clamp(1.0 / (4.0 * (nl + nv - nl * nv)), 0.0, 1.0);\n}\n\n/** The frame the specular lobe is defined in: Three's anisotropy direction when there is one, any frame otherwise. */\nfn specularBasis(surface: Surface) -> mat3x3<f32> {\n let normal = surface.normal;\n\n if (surface.anisotropy > 0.0) {\n let t = surface.anisotropyT - normal * dot(normal, surface.anisotropyT);\n let tangent = normalize(t);\n\n if (all(tangent == tangent) && dot(t, t) > 1e-12) {\n return mat3x3<f32>(tangent, cross(normal, tangent), normal);\n }\n }\n\n return orthonormalBasis(normal);\n}\n\n/** The GGX roughness along the frame's two axes: Three's alphaT along the anisotropy, alpha across it. */\nfn specularAlphas(surface: Surface) -> vec2<f32> {\n let alpha = surface.roughness * surface.roughness;\n\n if (surface.anisotropy > 0.0) {\n return vec2<f32>(max(surface.alphaT, 1e-4), max(alpha, 1e-4));\n }\n\n return vec2<f32>(max(alpha, 1e-4));\n}\n\n/** Anisotropic GGX in the lobe's own frame; with equal alphas it is exactly the isotropic distribution. */\nfn ggxAnisotropic(h: vec3<f32>, alphas: vec2<f32>) -> f32 {\n let x = h.x / alphas.x;\n let y = h.y / alphas.y;\n let d = x * x + y * y + h.z * h.z;\n\n return 1.0 / (PI * alphas.x * alphas.y * d * d);\n}\n\n/** Smith's masking of one direction, in the lobe's frame. */\nfn ggxMaskingAnisotropic(v: vec3<f32>, alphas: vec2<f32>) -> f32 {\n let projected = alphas.x * alphas.x * v.x * v.x + alphas.y * alphas.y * v.y * v.y;\n\n return 2.0 * v.z / (v.z + sqrt(v.z * v.z + projected));\n}\n\n/** Three's V_GGX_SmithCorrelated_Anisotropic, in the lobe's frame. */\nfn ggxVisibilityAnisotropic(l: vec3<f32>, v: vec3<f32>, alphas: vec2<f32>) -> f32 {\n let gv = l.z * length(vec3<f32>(alphas.x * v.x, alphas.y * v.y, v.z));\n let gl = v.z * length(vec3<f32>(alphas.x * l.x, alphas.y * l.y, l.z));\n\n return 0.5 / max(gv + gl, 1e-7);\n}\n\n/**\n * A half vector drawn from the distribution of normals the view direction can actually see (Heitz 2018), which is what\n * keeps the specular lobe from wasting samples on microfacets facing away. The view is in the lobe's frame.\n */\nfn sampleVisibleNormal(view: vec3<f32>, alphas: vec2<f32>, u: vec2<f32>) -> vec3<f32> {\n let stretched = normalize(vec3<f32>(alphas.x * view.x, alphas.y * view.y, view.z));\n let lengthSquared = stretched.x * stretched.x + stretched.y * stretched.y;\n let t1 = select(\n vec3<f32>(1.0, 0.0, 0.0),\n vec3<f32>(-stretched.y, stretched.x, 0.0) * inverseSqrt(max(lengthSquared, 1e-20)),\n lengthSquared > 1e-20);\n let t2 = cross(stretched, t1);\n let radius = sqrt(u.x);\n let angle = 2.0 * PI * u.y;\n let px = radius * cos(angle);\n let raw = radius * sin(angle);\n let lift = 0.5 * (1.0 + stretched.z);\n let py = (1.0 - lift) * sqrt(max(0.0, 1.0 - px * px)) + lift * raw;\n let normal = t1 * px + t2 * py + stretched * sqrt(max(0.0, 1.0 - px * px - py * py));\n\n return normalize(vec3<f32>(alphas.x * normal.x, alphas.y * normal.y, max(normal.z, 1e-6)));\n}\n\n/** What the clearcoat takes back from everything under it, seen from this view: Three's (1 - clearcoat * Fcc). */\nfn coatTransmittance(surface: Surface, view: vec3<f32>) -> f32 {\n if (surface.clearcoat <= 0.0) {\n return 1.0;\n }\n\n let nv = clamp(dot(surface.clearcoatNormal, view), 0.0, 1.0);\n\n return 1.0 - surface.clearcoat * schlick3(vec3<f32>(0.04), 1.0, nv).x;\n}\n\n/**\n * A point inside a volume, where light scatters by the medium's phase function instead of off a surface. Only the\n * integrator makes one: its normal faces back along the ray, its albedo is the medium's, its anisotropy the phase's.\n */\nconst KIND_VOLUME: u32 = 100u;\n\n/** How often each lobe is chosen, as (diffuse, specular, clearcoat): by how much of the reflection each accounts for. */\nfn lobeWeights(surface: Surface, view: vec3<f32>) -> vec3<f32> {\n let nv = max(dot(surface.normal, view), 1e-4);\n\n if (surface.kind == KIND_PHONG) {\n let diffuse = luminanceOf(surface.albedo) + 0.02;\n let specular = luminanceOf(surface.specularColor) * surface.specularStrength * (surface.shininess * 0.125 + 1.0) + 0.02;\n\n return vec3<f32>(diffuse, specular, 0.0) / (diffuse + specular);\n }\n\n if ((surface.flags & MATERIAL_PBR) == 0u) {\n return vec3<f32>(1.0, 0.0, 0.0);\n }\n\n let base = coatTransmittance(surface, view);\n // The floors keep every lobe reachable: the diffuse one also carries the sheen and the multiple scattering term.\n let diffuse = (luminanceOf(surface.albedo * ((1.0 - surface.metalness) * (1.0 - surface.subsurface)))\n + max3(surface.sheenColor)) * base + 0.02;\n let specular = luminanceOf(schlick3(surface.specularColor, surface.specularF90, nv)\n * (1.0 - surface.metalness) + surface.albedo * surface.metalness) * base + 0.05;\n let coat = select(0.0, (1.0 - base) + 0.02, surface.clearcoat > 0.0);\n let total = diffuse + specular + coat;\n\n return vec3<f32>(diffuse, specular, coat) / total;\n}\n\n/** Three's physical direct lighting for one light direction, times the cosine. */\nfn physicalValue(surface: Surface, view: vec3<f32>, light: vec3<f32>) -> vec3<f32> {\n let normal = surface.normal;\n let nl = dot(normal, light);\n let nv = max(dot(normal, view), 1e-4);\n var value = vec3<f32>(0.0);\n\n if (nl > 0.0) {\n let basis = specularBasis(surface);\n let alphas = specularAlphas(surface);\n let half = normalize(light + view);\n let vh = clamp(dot(view, half), 0.0, 1.0);\n let f0 = surfaceF0(surface);\n var fresnel = schlick3(f0, surface.specularF90, vh);\n\n if (surface.iridescence > 0.0) {\n fresnel = mix(fresnel, surface.iridescenceFresnel, surface.iridescence);\n }\n\n let localLight = vec3<f32>(dot(light, basis[0]), dot(light, basis[1]), nl);\n let localView = vec3<f32>(dot(view, basis[0]), dot(view, basis[1]), nv);\n let localHalf = vec3<f32>(dot(half, basis[0]), dot(half, basis[1]), max(dot(half, normal), 0.0));\n let single = fresnel * (ggxVisibilityAnisotropic(localLight, localView, alphas) * ggxAnisotropic(localHalf, alphas));\n\n // Three's BRDF_GGX_Multiscatter: the energy single scattering loses at high roughness, returned.\n let dfgV = dfgApprox(surface.roughness, nv);\n let dfgL = dfgApprox(surface.roughness, nl);\n let essV = f0 * dfgV.x + surface.specularF90 * dfgV.y;\n let essL = f0 * dfgL.x + surface.specularF90 * dfgL.y;\n let emsV = 1.0 - (dfgV.x + dfgV.y);\n let emsL = 1.0 - (dfgL.x + dfgL.y);\n let average = f0 + (vec3<f32>(1.0) - f0) * 0.047619;\n let multiple = essV * essL * average / (vec3<f32>(1.0) - emsV * emsL * average + 1e-7) * (emsV * emsL);\n\n // What scatters inside the material leaves it elsewhere, by the random walk, not from this point.\n var diffuse = surface.albedo * ((1.0 - surface.metalness) * (1.0 - surface.subsurface)) / PI;\n var specular = single + multiple;\n\n // Three's sheen: its lobe sits on top and takes back the energy it reflects from the layers below.\n if (any(surface.sheenColor > vec3<f32>(0.0))) {\n let energy = 1.0 - max3(surface.sheenColor)\n * max(sheenAlbedo(nv, surface.sheenRoughness), sheenAlbedo(nl, surface.sheenRoughness));\n\n diffuse = diffuse * energy;\n specular = specular * energy\n + surface.sheenColor * sheenLobe(surface.sheenRoughness, clamp(dot(normal, half), 0.0, 1.0), nv, nl);\n }\n\n value = (diffuse + specular) * nl;\n }\n\n if (surface.clearcoat > 0.0) {\n let coatNormal = surface.clearcoatNormal;\n value = value * coatTransmittance(surface, view);\n\n let nlCoat = dot(coatNormal, light);\n let nvCoat = max(dot(coatNormal, view), 1e-4);\n\n if (nlCoat > 0.0) {\n let half = normalize(light + view);\n let alpha = surface.clearcoatRoughness * surface.clearcoatRoughness;\n let alpha2 = alpha * alpha;\n let fresnel = schlick3(vec3<f32>(0.04), 1.0, clamp(dot(view, half), 0.0, 1.0)).x;\n let lobe = fresnel * ggxVisibility(alpha2, nlCoat, nvCoat) * ggxDistribution(alpha2, max(dot(coatNormal, half), 0.0));\n\n value = value + vec3<f32>(surface.clearcoat * lobe * nlCoat);\n }\n }\n\n return value;\n}\n\n/** Three's D_BlinnPhong times its implicit visibility of a quarter: the Phong highlight's distribution. */\nfn blinnPhong(shininess: f32, nh: f32) -> f32 {\n return 0.25 * (shininess * 0.5 + 1.0) / PI * pow(max(nh, 0.0), shininess);\n}\n\n/** Density of the Blinn-Phong lobe's sampling, per solid angle of the light direction. */\nfn blinnPhongPdf(shininess: f32, nh: f32, vh: f32) -> f32 {\n return (shininess + 1.0) / (2.0 * PI) * pow(max(nh, 0.0), shininess) / max(4.0 * vh, 1e-6);\n}\n\n/** Density with which the GGX lobe (VNDF) would have produced this light direction, in the lobe's frame. */\nfn ggxPdf(localLight: vec3<f32>, localView: vec3<f32>, alphas: vec2<f32>) -> f32 {\n let half = normalize(localLight + localView);\n\n if (half.z <= 0.0 || localView.z <= 0.0) {\n return 0.0;\n }\n\n return ggxMaskingAnisotropic(localView, alphas) * ggxAnisotropic(half, alphas) / (4.0 * localView.z);\n}\n\n/** The mixture density of every lobe this surface samples with. */\nfn bsdfPdf(surface: Surface, view: vec3<f32>, light: vec3<f32>) -> f32 {\n let normal = surface.normal;\n let nl = dot(normal, light);\n let weights = lobeWeights(surface, view);\n var pdf = weights.x * max(nl, 0.0) / PI;\n\n if (surface.kind == KIND_PHONG) {\n let half = normalize(light + view);\n\n return pdf + weights.y * blinnPhongPdf(surface.shininess, dot(normal, half), max(dot(view, half), 0.0));\n }\n\n if ((surface.flags & MATERIAL_PBR) == 0u) {\n return pdf;\n }\n\n let basis = specularBasis(surface);\n let alphas = specularAlphas(surface);\n\n pdf = pdf + weights.y * ggxPdf(\n vec3<f32>(dot(light, basis[0]), dot(light, basis[1]), nl),\n vec3<f32>(dot(view, basis[0]), dot(view, basis[1]), dot(view, normal)),\n alphas);\n\n if (weights.z > 0.0) {\n let coatBasis = orthonormalBasis(surface.clearcoatNormal);\n let alpha = max(surface.clearcoatRoughness * surface.clearcoatRoughness, 1e-4);\n\n pdf = pdf + weights.z * ggxPdf(\n vec3<f32>(dot(light, coatBasis[0]), dot(light, coatBasis[1]), dot(light, surface.clearcoatNormal)),\n vec3<f32>(dot(view, coatBasis[0]), dot(view, coatBasis[1]), dot(view, surface.clearcoatNormal)),\n vec2<f32>(alpha));\n }\n\n return pdf;\n}\n\n/**\n * What the surface sends towards the view direction, and the density of that direction. A Lambert material keeps\n * Three's Lambert term alone, which is all its own shading has; a toon material reads its ramp in place of the cosine.\n */\nfn evaluateBsdf(surface: Surface, view: vec3<f32>, light: vec3<f32>) -> BsdfEval {\n let normal = surface.normal;\n var result: BsdfEval;\n result.value = vec3<f32>(0.0);\n result.pdf = 0.0;\n\n let nl = dot(normal, light);\n let nv = dot(normal, view);\n\n // In a medium every direction is open: the phase function stands for the lobes, and samples itself exactly.\n if (surface.kind == KIND_VOLUME) {\n let phase = henyeyGreenstein(dot(-view, light), surface.anisotropy);\n\n result.value = surface.albedo * phase;\n result.pdf = phase;\n\n return result;\n }\n\n if (nv <= 0.0) {\n return result;\n }\n\n if (surface.kind == KIND_TOON) {\n // Three's toon lighting reads its ramp across the whole sphere of directions, the side facing away included.\n result.value = surface.albedo / PI * toonRamp(surface.gradientMap, nl);\n result.pdf = max(nl, 0.0) / PI;\n\n return result;\n }\n\n // A clearcoat may face a light its base turns away from, so only a surface without one stops here.\n if (nl <= 0.0 && surface.clearcoat <= 0.0) {\n return result;\n }\n\n if ((surface.flags & MATERIAL_PBR) != 0u) {\n result.value = physicalValue(surface, view, light);\n } else if (surface.kind == KIND_PHONG) {\n let half = normalize(light + view);\n let fresnel = schlick3(surface.specularColor, 1.0, clamp(dot(view, half), 0.0, 1.0));\n let specular = fresnel * blinnPhong(surface.shininess, dot(normal, half)) * surface.specularStrength;\n\n result.value = (surface.albedo / PI + specular) * max(nl, 0.0);\n } else {\n result.value = surface.albedo / PI * max(nl, 0.0);\n }\n\n result.pdf = bsdfPdf(surface, view, light);\n\n return result;\n}\n\n/**\n * Reflectance of a smooth dielectric interface, from both polarisations rather than Schlick's fit: refraction needs the\n * exact cut-off past which nothing gets through. eta is the index the ray leaves over the index it enters.\n */\nfn fresnelDielectric(cosine: f32, eta: f32) -> f32 {\n let c = clamp(cosine, 0.0, 1.0);\n let sin2 = eta * eta * (1.0 - c * c);\n\n if (sin2 >= 1.0) {\n return 1.0;\n }\n\n let t = sqrt(1.0 - sin2);\n let s = (eta * c - t) / (eta * c + t);\n let p = (c - eta * t) / (c + eta * t);\n\n return 0.5 * (s * s + p * p);\n}\n\n/** Where a transmissive surface sends the path: off it, or through it. */\nstruct DielectricSample {\n direction: vec3<f32>,\n weight: vec3<f32>,\n // The path went through the surface instead of reflecting off it.\n crossed: bool,\n // It went through without bending, so the density that found the next hit is still the one before this surface.\n straight: bool,\n valid: bool,\n};\n\n/**\n * The transmissive share of a physical material. Reflection and refraction are chosen in proportion to the Fresnel\n * reflectance on a microfacet drawn from the visible normals, which leaves only the masking of the outgoing direction\n * in the weight. Light is tinted by the base colour once, on the way in, which is where Three applies it.\n *\n * A thin wall (zero thickness, Three's default) bends nothing: what is not reflected carries straight on, exactly as a\n * shadow ray crossing it does in thinCrossing, so the two estimators agree on a window. ior is the index this path\n * sees, which dispersion makes depend on the colour the path carries.\n */\nfn sampleDielectric(surface: Surface, view: vec3<f32>, ior: f32, lobe: f32, u: vec2<f32>) -> DielectricSample {\n let normal = surface.normal;\n var result: DielectricSample;\n result.valid = false;\n result.crossed = false;\n result.straight = false;\n result.weight = vec3<f32>(0.0);\n\n let nv = dot(normal, view);\n\n if (nv <= 0.0) {\n return result;\n }\n\n let alpha = max(surface.roughness * surface.roughness, 1e-4);\n let alpha2 = alpha * alpha;\n let basis = orthonormalBasis(normal);\n let localView = vec3<f32>(dot(view, basis[0]), dot(view, basis[1]), nv);\n let localHalf = sampleVisibleNormal(localView, vec2<f32>(alpha), u);\n let half = basis[0] * localHalf.x + basis[1] * localHalf.y + normal * localHalf.z;\n\n if (surface.thickness <= 0.0) {\n let reflectance = fresnelDielectric(abs(dot(surface.facing, view)), 1.0 / ior);\n\n if (lobe >= reflectance) {\n result.direction = -view;\n result.weight = surface.albedo;\n result.crossed = true;\n result.straight = true;\n result.valid = true;\n\n return result;\n }\n\n result.direction = reflect(-view, half);\n } else {\n let eta = select(ior, 1.0 / ior, surface.front);\n let refracted = refract(-view, half, eta);\n // Past the critical angle refract() returns nothing, and everything reflects.\n let reflectance = select(fresnelDielectric(dot(view, half), eta), 1.0, all(refracted == vec3<f32>(0.0)));\n\n if (lobe >= reflectance) {\n result.direction = normalize(refracted);\n\n let no = -dot(normal, result.direction);\n\n if (no <= 0.0) {\n return result;\n }\n\n result.weight = vec3<f32>(ggxMasking(alpha2, no)) * select(vec3<f32>(1.0), surface.albedo, surface.front);\n result.crossed = true;\n result.valid = true;\n\n return result;\n }\n\n result.direction = reflect(-view, half);\n }\n\n let nl = dot(normal, result.direction);\n\n if (nl <= 0.0) {\n return result;\n }\n\n result.weight = vec3<f32>(ggxMasking(alpha2, nl));\n result.valid = true;\n\n return result;\n}\n\n/** A half vector around the normal distributed as cos^s, which is the Blinn-Phong lobe's own shape. */\nfn sampleBlinnPhongHalf(normal: vec3<f32>, shininess: f32, u: vec2<f32>) -> vec3<f32> {\n let cosine = pow(u.x, 1.0 / (shininess + 1.0));\n let sine = sqrt(max(0.0, 1.0 - cosine * cosine));\n let angle = 2.0 * PI * u.y;\n\n return normalize(orthonormalBasis(normal) * vec3<f32>(sine * cos(angle), sine * sin(angle), cosine));\n}\n\n/** Which way the path carries on, and what its throughput is multiplied by. */\nfn sampleBsdf(surface: Surface, view: vec3<f32>, lobe: f32, u: vec2<f32>) -> BsdfSample {\n let normal = surface.normal;\n var result: BsdfSample;\n result.valid = false;\n result.weight = vec3<f32>(0.0);\n result.pdf = 0.0;\n result.diffuse = true;\n\n if (surface.kind == KIND_VOLUME) {\n result.direction = sampleHenyeyGreenstein(-view, surface.anisotropy, u);\n result.weight = surface.albedo;\n result.pdf = henyeyGreenstein(dot(-view, result.direction), surface.anisotropy);\n result.valid = true;\n\n return result;\n }\n\n if (dot(normal, view) <= 0.0) {\n return result;\n }\n\n // Lambert, and the bounce of a toon surface: Three lights a toon surface's indirect light with a plain Lambert term.\n if ((surface.flags & MATERIAL_PBR) == 0u && surface.kind != KIND_PHONG) {\n result.direction = cosineDirection(normal, u);\n // The cosine weight cancels the Lambert cosine exactly, which leaves the albedo alone.\n result.weight = surface.albedo;\n result.pdf = max(dot(normal, result.direction), 0.0) / PI;\n result.valid = result.pdf > 0.0;\n\n return result;\n }\n\n let weights = lobeWeights(surface, view);\n\n result.diffuse = lobe < weights.x;\n\n if (lobe < weights.x) {\n result.direction = cosineDirection(normal, u);\n } else if (surface.kind == KIND_PHONG) {\n result.direction = reflect(-view, sampleBlinnPhongHalf(normal, surface.shininess, u));\n } else if (lobe < weights.x + weights.y) {\n let basis = specularBasis(surface);\n // The lobe is drawn in its own frame, so the view direction goes into that frame and the result comes back out.\n let localView = vec3<f32>(dot(view, basis[0]), dot(view, basis[1]), dot(view, normal));\n let localHalf = sampleVisibleNormal(localView, specularAlphas(surface), u);\n let half = basis * localHalf;\n\n result.direction = reflect(-view, half);\n } else {\n let coatNormal = surface.clearcoatNormal;\n let basis = orthonormalBasis(coatNormal);\n let alpha = max(surface.clearcoatRoughness * surface.clearcoatRoughness, 1e-4);\n let localView = vec3<f32>(dot(view, basis[0]), dot(view, basis[1]), dot(view, coatNormal));\n let half = basis * sampleVisibleNormal(localView, vec2<f32>(alpha), u);\n\n result.direction = reflect(-view, half);\n }\n\n let evaluated = evaluateBsdf(surface, view, result.direction);\n\n if (evaluated.pdf <= 0.0 || all(evaluated.value <= vec3<f32>(0.0))) {\n return result;\n }\n\n result.pdf = evaluated.pdf;\n result.weight = evaluated.value / evaluated.pdf;\n result.valid = true;\n\n return result;\n}\n\n/**\n * Only the diffuse part of evaluateBsdf, times the cosine: what of the light from this direction the denoiser counts\n * as diffuse. The rest of the value is specular.\n */\nfn diffuseValue(surface: Surface, view: vec3<f32>, light: vec3<f32>) -> vec3<f32> {\n let normal = surface.normal;\n let nl = dot(normal, light);\n let nv = max(dot(normal, view), 1e-4);\n\n if (surface.kind == KIND_TOON) {\n return surface.albedo / PI * toonRamp(surface.gradientMap, nl);\n }\n\n // Light scattered in a medium is all diffuse, as the denoiser sees it.\n if (surface.kind == KIND_VOLUME) {\n return surface.albedo * henyeyGreenstein(dot(-view, light), surface.anisotropy);\n }\n\n if (nl <= 0.0) {\n return vec3<f32>(0.0);\n }\n\n if ((surface.flags & MATERIAL_PBR) == 0u) {\n return surface.albedo / PI * nl;\n }\n\n var diffuse = surface.albedo * ((1.0 - surface.metalness) * (1.0 - surface.subsurface)) / PI;\n\n if (any(surface.sheenColor > vec3<f32>(0.0))) {\n diffuse = diffuse * (1.0 - max3(surface.sheenColor)\n * max(sheenAlbedo(nv, surface.sheenRoughness), sheenAlbedo(nl, surface.sheenRoughness)));\n }\n\n return diffuse * nl * coatTransmittance(surface, view);\n}\n\n/** How much of the light a surface's specular lobes reflect in all, seen from this view: what that signal is divided by. */\nfn specularAlbedo(surface: Surface, view: vec3<f32>) -> vec3<f32> {\n let nv = clamp(dot(surface.normal, view), 0.0, 1.0);\n\n if (surface.kind == KIND_PHONG) {\n return surface.specularColor * surface.specularStrength;\n }\n\n if ((surface.flags & MATERIAL_PBR) == 0u) {\n return vec3<f32>(0.0);\n }\n\n let dfg = dfgApprox(surface.roughness, nv);\n var albedo = surfaceF0(surface) * dfg.x + vec3<f32>(surface.specularF90 * dfg.y);\n\n if (surface.clearcoat > 0.0) {\n let coatDfg = dfgApprox(surface.clearcoatRoughness, clamp(dot(surface.clearcoatNormal, view), 0.0, 1.0));\n albedo = albedo * coatTransmittance(surface, view) + vec3<f32>(surface.clearcoat * (0.04 * coatDfg.x + coatDfg.y));\n }\n\n // What crosses a transmissive surface is the specular signal too, and it is not filtered by any colour of the surface.\n return mix(albedo, vec3<f32>(1.0), clamp(surface.transmission, 0.0, 1.0));\n}\n";
|
|
12
|
+
export declare const BSDF_WGSL = "\n/** How a surface answers a direction: what it reflects, and how likely sampling was to have chosen it. */\nstruct BsdfEval {\n // The bidirectional distribution times the cosine at the surface, which is what a contribution is multiplied by.\n value: vec3<f32>,\n // Solid angle density of this direction under this renderer's own sampling, for the power heuristic.\n pdf: f32,\n};\n\nstruct BsdfSample {\n direction: vec3<f32>,\n // The distribution over its own density: what the path's throughput is multiplied by.\n weight: vec3<f32>,\n pdf: f32,\n valid: bool,\n // The diffuse lobe chose the direction, rather than a specular one: which of the denoiser's two signals it feeds.\n diffuse: bool,\n};\n\nfn luminanceOf(color: vec3<f32>) -> f32 {\n return dot(color, vec3<f32>(0.2126, 0.7152, 0.0722));\n}\n\nfn max3(color: vec3<f32>) -> f32 {\n return max(color.r, max(color.g, color.b));\n}\n\n/** Schlick's approximation, as in Three: the reflectance always reaches one at a grazing angle. */\nfn fresnelSchlick(f0: vec3<f32>, cosine: f32) -> vec3<f32> {\n return schlick3(f0, 1.0, cosine);\n}\n\n/** Reflectance at normal incidence: the dielectric's own, turned towards the base colour as the surface turns metal. */\nfn surfaceF0(surface: Surface) -> vec3<f32> {\n return mix(surface.specularColor, surface.albedo, surface.metalness);\n}\n\n/** GGX, with alpha the square of the roughness, as Three parameterises it. */\nfn ggxDistribution(alpha2: f32, nh: f32) -> f32 {\n let denominator = nh * nh * (alpha2 - 1.0) + 1.0;\n\n return alpha2 / (PI * denominator * denominator);\n}\n\n/** Smith's height correlated visibility, which already carries the 1/(4 nl nv) the lobe would otherwise need. */\nfn ggxVisibility(alpha2: f32, nl: f32, nv: f32) -> f32 {\n return 0.5 / (nl * sqrt(nv * nv * (1.0 - alpha2) + alpha2) + nv * sqrt(nl * nl * (1.0 - alpha2) + alpha2) + 1e-7);\n}\n\n/** The separable masking term, which is the one the visible normal sampling is built on. */\nfn ggxMasking(alpha2: f32, nv: f32) -> f32 {\n return 2.0 * nv / (nv + sqrt(alpha2 + (1.0 - alpha2) * nv * nv));\n}\n\n/** Karis' analytic fit of the GGX directional albedo (Three's DFGApprox): the scale and bias applied to F0 and F90. */\nfn dfgApprox(roughness: f32, nv: f32) -> vec2<f32> {\n let r = roughness * vec4<f32>(-1.0, -0.0275, -0.572, 0.022) + vec4<f32>(1.0, 0.0425, 1.04, -0.04);\n let a004 = min(r.x * r.x, exp2(-9.28 * nv)) * r.x + r.y;\n\n return vec2<f32>(-1.04, 1.04) * a004 + r.zw;\n}\n\n/** Three's IBLSheenBRDF: the Charlie sheen lobe integrated over the hemisphere. */\nfn sheenAlbedo(cosine: f32, roughness: f32) -> f32 {\n let r2 = roughness * roughness;\n let inverse = 1.0 / (roughness + 0.1);\n let a = -1.9362 + 1.0678 * roughness + 0.4573 * r2 - 0.8469 * inverse;\n let b = -0.6014 + 0.5538 * roughness - 0.4670 * r2 - 0.1255 * inverse;\n\n return clamp(exp(a * clamp(cosine, 0.0, 1.0) + b), 0.0, 1.0);\n}\n\n/** Three's D_Charlie times V_Neubelt. */\nfn sheenLobe(roughness: f32, nh: f32, nv: f32, nl: f32) -> f32 {\n let inverse = 1.0 / (roughness * roughness);\n let sin2h = max(1.0 - nh * nh, 0.0078125);\n let distribution = (2.0 + inverse) * pow(sin2h, inverse * 0.5) / (2.0 * PI);\n\n return distribution * clamp(1.0 / (4.0 * (nl + nv - nl * nv)), 0.0, 1.0);\n}\n\n/** The frame the specular lobe is defined in: Three's anisotropy direction when there is one, any frame otherwise. */\nfn specularBasis(surface: Surface) -> mat3x3<f32> {\n let normal = surface.normal;\n\n if (surface.anisotropy > 0.0) {\n let t = surface.anisotropyT - normal * dot(normal, surface.anisotropyT);\n let tangent = normalize(t);\n\n if (all(tangent == tangent) && dot(t, t) > 1e-12) {\n return mat3x3<f32>(tangent, cross(normal, tangent), normal);\n }\n }\n\n return orthonormalBasis(normal);\n}\n\n/** The GGX roughness along the frame's two axes: Three's alphaT along the anisotropy, alpha across it. */\nfn specularAlphas(surface: Surface) -> vec2<f32> {\n let alpha = surface.roughness * surface.roughness;\n\n if (surface.anisotropy > 0.0) {\n return vec2<f32>(max(surface.alphaT, 1e-4), max(alpha, 1e-4));\n }\n\n return vec2<f32>(max(alpha, 1e-4));\n}\n\n/** Anisotropic GGX in the lobe's own frame; with equal alphas it is exactly the isotropic distribution. */\nfn ggxAnisotropic(h: vec3<f32>, alphas: vec2<f32>) -> f32 {\n let x = h.x / alphas.x;\n let y = h.y / alphas.y;\n let d = x * x + y * y + h.z * h.z;\n\n return 1.0 / (PI * alphas.x * alphas.y * d * d);\n}\n\n/** Smith's masking of one direction, in the lobe's frame. */\nfn ggxMaskingAnisotropic(v: vec3<f32>, alphas: vec2<f32>) -> f32 {\n let projected = alphas.x * alphas.x * v.x * v.x + alphas.y * alphas.y * v.y * v.y;\n\n return 2.0 * v.z / (v.z + sqrt(v.z * v.z + projected));\n}\n\n/** Three's V_GGX_SmithCorrelated_Anisotropic, in the lobe's frame. */\nfn ggxVisibilityAnisotropic(l: vec3<f32>, v: vec3<f32>, alphas: vec2<f32>) -> f32 {\n let gv = l.z * length(vec3<f32>(alphas.x * v.x, alphas.y * v.y, v.z));\n let gl = v.z * length(vec3<f32>(alphas.x * l.x, alphas.y * l.y, l.z));\n\n return 0.5 / max(gv + gl, 1e-7);\n}\n\n/**\n * A half vector drawn from the distribution of normals the view direction can actually see (Heitz 2018), which is what\n * keeps the specular lobe from wasting samples on microfacets facing away. The view is in the lobe's frame.\n */\nfn sampleVisibleNormal(view: vec3<f32>, alphas: vec2<f32>, u: vec2<f32>) -> vec3<f32> {\n let stretched = normalize(vec3<f32>(alphas.x * view.x, alphas.y * view.y, view.z));\n let lengthSquared = stretched.x * stretched.x + stretched.y * stretched.y;\n let t1 = select(\n vec3<f32>(1.0, 0.0, 0.0),\n vec3<f32>(-stretched.y, stretched.x, 0.0) * inverseSqrt(max(lengthSquared, 1e-20)),\n lengthSquared > 1e-20);\n let t2 = cross(stretched, t1);\n let radius = sqrt(u.x);\n let angle = 2.0 * PI * u.y;\n let px = radius * cos(angle);\n let raw = radius * sin(angle);\n let lift = 0.5 * (1.0 + stretched.z);\n let py = (1.0 - lift) * sqrt(max(0.0, 1.0 - px * px)) + lift * raw;\n let normal = t1 * px + t2 * py + stretched * sqrt(max(0.0, 1.0 - px * px - py * py));\n\n return normalize(vec3<f32>(alphas.x * normal.x, alphas.y * normal.y, max(normal.z, 1e-6)));\n}\n\n/** What the clearcoat takes back from everything under it, seen from this view: Three's (1 - clearcoat * Fcc). */\nfn coatTransmittance(surface: Surface, view: vec3<f32>) -> f32 {\n if (surface.clearcoat <= 0.0) {\n return 1.0;\n }\n\n let nv = clamp(dot(surface.clearcoatNormal, view), 0.0, 1.0);\n\n return 1.0 - surface.clearcoat * schlick3(vec3<f32>(0.04), 1.0, nv).x;\n}\n\n/**\n * A point inside a volume, where light scatters by the medium's phase function instead of off a surface. Only the\n * integrator makes one: its normal faces back along the ray, its albedo is the medium's, its anisotropy the phase's.\n */\nconst KIND_VOLUME: u32 = 100u;\n\n/**\n * Share of the diffuse lobe's directions drawn on the far side of a surface that lets light through it diffusely, as a\n * grass blade does: by how much of the diffuse light each side accounts for.\n */\nfn translucentShare(surface: Surface) -> f32 {\n if (!GRASS) {\n return 0.0;\n }\n\n let through = luminanceOf(surface.translucent);\n\n if (through <= 0.0) {\n return 0.0;\n }\n\n let off = luminanceOf(surface.albedo * ((1.0 - surface.metalness) * (1.0 - surface.subsurface)));\n\n return through / max(through + off, 1e-6);\n}\n\n/** How often each lobe is chosen, as (diffuse, specular, clearcoat): by how much of the reflection each accounts for. */\nfn lobeWeights(surface: Surface, view: vec3<f32>) -> vec3<f32> {\n let nv = max(dot(surface.normal, view), 1e-4);\n\n if (surface.kind == KIND_PHONG) {\n let diffuse = luminanceOf(surface.albedo) + 0.02;\n let specular = luminanceOf(surface.specularColor) * surface.specularStrength * (surface.shininess * 0.125 + 1.0) + 0.02;\n\n return vec3<f32>(diffuse, specular, 0.0) / (diffuse + specular);\n }\n\n if ((surface.flags & MATERIAL_PBR) == 0u) {\n return vec3<f32>(1.0, 0.0, 0.0);\n }\n\n let base = coatTransmittance(surface, view);\n // The floors keep every lobe reachable: the diffuse one also carries the sheen and the multiple scattering term.\n let diffuse = (luminanceOf(surface.albedo * ((1.0 - surface.metalness) * (1.0 - surface.subsurface)))\n + max3(surface.sheenColor) + select(0.0, luminanceOf(surface.translucent), GRASS)) * base + 0.02;\n let specular = luminanceOf(schlick3(surface.specularColor, surface.specularF90, nv)\n * (1.0 - surface.metalness) + surface.albedo * surface.metalness) * base + 0.05;\n let coat = select(0.0, (1.0 - base) + 0.02, surface.clearcoat > 0.0);\n let total = diffuse + specular + coat;\n\n return vec3<f32>(diffuse, specular, coat) / total;\n}\n\n/** Three's physical direct lighting for one light direction, times the cosine. */\nfn physicalValue(surface: Surface, view: vec3<f32>, light: vec3<f32>) -> vec3<f32> {\n let normal = surface.normal;\n let nl = dot(normal, light);\n let nv = max(dot(normal, view), 1e-4);\n var value = vec3<f32>(0.0);\n\n if (nl > 0.0) {\n let basis = specularBasis(surface);\n let alphas = specularAlphas(surface);\n let half = normalize(light + view);\n let vh = clamp(dot(view, half), 0.0, 1.0);\n let f0 = surfaceF0(surface);\n var fresnel = schlick3(f0, surface.specularF90, vh);\n\n if (surface.iridescence > 0.0) {\n fresnel = mix(fresnel, surface.iridescenceFresnel, surface.iridescence);\n }\n\n let localLight = vec3<f32>(dot(light, basis[0]), dot(light, basis[1]), nl);\n let localView = vec3<f32>(dot(view, basis[0]), dot(view, basis[1]), nv);\n let localHalf = vec3<f32>(dot(half, basis[0]), dot(half, basis[1]), max(dot(half, normal), 0.0));\n let single = fresnel * (ggxVisibilityAnisotropic(localLight, localView, alphas) * ggxAnisotropic(localHalf, alphas));\n\n // Three's BRDF_GGX_Multiscatter: the energy single scattering loses at high roughness, returned.\n let dfgV = dfgApprox(surface.roughness, nv);\n let dfgL = dfgApprox(surface.roughness, nl);\n let essV = f0 * dfgV.x + surface.specularF90 * dfgV.y;\n let essL = f0 * dfgL.x + surface.specularF90 * dfgL.y;\n let emsV = 1.0 - (dfgV.x + dfgV.y);\n let emsL = 1.0 - (dfgL.x + dfgL.y);\n let average = f0 + (vec3<f32>(1.0) - f0) * 0.047619;\n let multiple = essV * essL * average / (vec3<f32>(1.0) - emsV * emsL * average + 1e-7) * (emsV * emsL);\n\n // What scatters inside the material leaves it elsewhere, by the random walk, not from this point.\n var diffuse = surface.albedo * ((1.0 - surface.metalness) * (1.0 - surface.subsurface)) / PI;\n var specular = single + multiple;\n\n // Three's sheen: its lobe sits on top and takes back the energy it reflects from the layers below.\n if (any(surface.sheenColor > vec3<f32>(0.0))) {\n let energy = 1.0 - max3(surface.sheenColor)\n * max(sheenAlbedo(nv, surface.sheenRoughness), sheenAlbedo(nl, surface.sheenRoughness));\n\n diffuse = diffuse * energy;\n specular = specular * energy\n + surface.sheenColor * sheenLobe(surface.sheenRoughness, clamp(dot(normal, half), 0.0, 1.0), nv, nl);\n }\n\n value = (diffuse + specular) * nl;\n }\n\n if (surface.clearcoat > 0.0) {\n let coatNormal = surface.clearcoatNormal;\n value = value * coatTransmittance(surface, view);\n\n let nlCoat = dot(coatNormal, light);\n let nvCoat = max(dot(coatNormal, view), 1e-4);\n\n if (nlCoat > 0.0) {\n let half = normalize(light + view);\n let alpha = surface.clearcoatRoughness * surface.clearcoatRoughness;\n let alpha2 = alpha * alpha;\n let fresnel = schlick3(vec3<f32>(0.04), 1.0, clamp(dot(view, half), 0.0, 1.0)).x;\n let lobe = fresnel * ggxVisibility(alpha2, nlCoat, nvCoat) * ggxDistribution(alpha2, max(dot(coatNormal, half), 0.0));\n\n value = value + vec3<f32>(surface.clearcoat * lobe * nlCoat);\n }\n }\n\n // Light through a translucent surface, from its far side.\n if (GRASS && nl < 0.0) {\n value = value + surface.translucent / PI * (-nl);\n }\n\n return value;\n}\n\n/** Three's D_BlinnPhong times its implicit visibility of a quarter: the Phong highlight's distribution. */\nfn blinnPhong(shininess: f32, nh: f32) -> f32 {\n return 0.25 * (shininess * 0.5 + 1.0) / PI * pow(max(nh, 0.0), shininess);\n}\n\n/** Density of the Blinn-Phong lobe's sampling, per solid angle of the light direction. */\nfn blinnPhongPdf(shininess: f32, nh: f32, vh: f32) -> f32 {\n return (shininess + 1.0) / (2.0 * PI) * pow(max(nh, 0.0), shininess) / max(4.0 * vh, 1e-6);\n}\n\n/** Density with which the GGX lobe (VNDF) would have produced this light direction, in the lobe's frame. */\nfn ggxPdf(localLight: vec3<f32>, localView: vec3<f32>, alphas: vec2<f32>) -> f32 {\n let half = normalize(localLight + localView);\n\n if (half.z <= 0.0 || localView.z <= 0.0) {\n return 0.0;\n }\n\n return ggxMaskingAnisotropic(localView, alphas) * ggxAnisotropic(half, alphas) / (4.0 * localView.z);\n}\n\n/** The mixture density of every lobe this surface samples with. */\nfn bsdfPdf(surface: Surface, view: vec3<f32>, light: vec3<f32>) -> f32 {\n let normal = surface.normal;\n let nl = dot(normal, light);\n let weights = lobeWeights(surface, view);\n var pdf = weights.x * max(nl, 0.0) / PI;\n\n if (GRASS) {\n pdf = weights.x * mix(max(nl, 0.0), max(-nl, 0.0), translucentShare(surface)) / PI;\n }\n\n if (surface.kind == KIND_PHONG) {\n let half = normalize(light + view);\n\n return pdf + weights.y * blinnPhongPdf(surface.shininess, dot(normal, half), max(dot(view, half), 0.0));\n }\n\n if ((surface.flags & MATERIAL_PBR) == 0u) {\n return pdf;\n }\n\n let basis = specularBasis(surface);\n let alphas = specularAlphas(surface);\n\n pdf = pdf + weights.y * ggxPdf(\n vec3<f32>(dot(light, basis[0]), dot(light, basis[1]), nl),\n vec3<f32>(dot(view, basis[0]), dot(view, basis[1]), dot(view, normal)),\n alphas);\n\n if (weights.z > 0.0) {\n let coatBasis = orthonormalBasis(surface.clearcoatNormal);\n let alpha = max(surface.clearcoatRoughness * surface.clearcoatRoughness, 1e-4);\n\n pdf = pdf + weights.z * ggxPdf(\n vec3<f32>(dot(light, coatBasis[0]), dot(light, coatBasis[1]), dot(light, surface.clearcoatNormal)),\n vec3<f32>(dot(view, coatBasis[0]), dot(view, coatBasis[1]), dot(view, surface.clearcoatNormal)),\n vec2<f32>(alpha));\n }\n\n return pdf;\n}\n\n/**\n * What the surface sends towards the view direction, and the density of that direction. A Lambert material keeps\n * Three's Lambert term alone, which is all its own shading has; a toon material reads its ramp in place of the cosine.\n */\nfn evaluateBsdf(surface: Surface, view: vec3<f32>, light: vec3<f32>) -> BsdfEval {\n let normal = surface.normal;\n var result: BsdfEval;\n result.value = vec3<f32>(0.0);\n result.pdf = 0.0;\n\n let nl = dot(normal, light);\n let nv = dot(normal, view);\n\n // In a medium every direction is open: the phase function stands for the lobes, and samples itself exactly.\n if (surface.kind == KIND_VOLUME) {\n let phase = henyeyGreenstein(dot(-view, light), surface.anisotropy);\n\n result.value = surface.albedo * phase;\n result.pdf = phase;\n\n return result;\n }\n\n if (nv <= 0.0) {\n return result;\n }\n\n if (surface.kind == KIND_TOON) {\n // Three's toon lighting reads its ramp across the whole sphere of directions, the side facing away included.\n result.value = surface.albedo / PI * toonRamp(surface.gradientMap, nl);\n result.pdf = max(nl, 0.0) / PI;\n\n return result;\n }\n\n // A clearcoat may face a light its base turns away from, so only a surface without one stops here.\n if (nl <= 0.0 && surface.clearcoat <= 0.0 && !(GRASS && any(surface.translucent > vec3<f32>(0.0)))) {\n return result;\n }\n\n if ((surface.flags & MATERIAL_PBR) != 0u) {\n result.value = physicalValue(surface, view, light);\n } else if (surface.kind == KIND_PHONG) {\n let half = normalize(light + view);\n let fresnel = schlick3(surface.specularColor, 1.0, clamp(dot(view, half), 0.0, 1.0));\n let specular = fresnel * blinnPhong(surface.shininess, dot(normal, half)) * surface.specularStrength;\n\n result.value = (surface.albedo / PI + specular) * max(nl, 0.0);\n } else {\n result.value = surface.albedo / PI * max(nl, 0.0);\n }\n\n result.pdf = bsdfPdf(surface, view, light);\n\n return result;\n}\n\n/**\n * Reflectance of a smooth dielectric interface, from both polarisations rather than Schlick's fit: refraction needs the\n * exact cut-off past which nothing gets through. eta is the index the ray leaves over the index it enters.\n */\nfn fresnelDielectric(cosine: f32, eta: f32) -> f32 {\n let c = clamp(cosine, 0.0, 1.0);\n let sin2 = eta * eta * (1.0 - c * c);\n\n if (sin2 >= 1.0) {\n return 1.0;\n }\n\n let t = sqrt(1.0 - sin2);\n let s = (eta * c - t) / (eta * c + t);\n let p = (c - eta * t) / (c + eta * t);\n\n return 0.5 * (s * s + p * p);\n}\n\n/** Where a transmissive surface sends the path: off it, or through it. */\nstruct DielectricSample {\n direction: vec3<f32>,\n weight: vec3<f32>,\n // The path went through the surface instead of reflecting off it.\n crossed: bool,\n // It went through without bending, so the density that found the next hit is still the one before this surface.\n straight: bool,\n valid: bool,\n};\n\n/**\n * The transmissive share of a physical material. Reflection and refraction are chosen in proportion to the Fresnel\n * reflectance on a microfacet drawn from the visible normals, which leaves only the masking of the outgoing direction\n * in the weight. Light is tinted by the base colour once, on the way in, which is where Three applies it.\n *\n * A thin wall (zero thickness, Three's default) bends nothing: what is not reflected carries straight on, exactly as a\n * shadow ray crossing it does in thinCrossing, so the two estimators agree on a window. ior is the index this path\n * sees, which dispersion makes depend on the colour the path carries.\n */\nfn sampleDielectric(surface: Surface, view: vec3<f32>, ior: f32, lobe: f32, u: vec2<f32>) -> DielectricSample {\n let normal = surface.normal;\n var result: DielectricSample;\n result.valid = false;\n result.crossed = false;\n result.straight = false;\n result.weight = vec3<f32>(0.0);\n\n let nv = dot(normal, view);\n\n if (nv <= 0.0) {\n return result;\n }\n\n let alpha = max(surface.roughness * surface.roughness, 1e-4);\n let alpha2 = alpha * alpha;\n let basis = orthonormalBasis(normal);\n let localView = vec3<f32>(dot(view, basis[0]), dot(view, basis[1]), nv);\n let localHalf = sampleVisibleNormal(localView, vec2<f32>(alpha), u);\n let half = basis[0] * localHalf.x + basis[1] * localHalf.y + normal * localHalf.z;\n\n if (surface.thickness <= 0.0) {\n let reflectance = fresnelDielectric(abs(dot(surface.facing, view)), 1.0 / ior);\n\n if (lobe >= reflectance) {\n result.direction = -view;\n result.weight = surface.albedo;\n result.crossed = true;\n result.straight = true;\n result.valid = true;\n\n return result;\n }\n\n result.direction = reflect(-view, half);\n } else {\n let eta = select(ior, 1.0 / ior, surface.front);\n let refracted = refract(-view, half, eta);\n // Past the critical angle refract() returns nothing, and everything reflects.\n let reflectance = select(fresnelDielectric(dot(view, half), eta), 1.0, all(refracted == vec3<f32>(0.0)));\n\n if (lobe >= reflectance) {\n result.direction = normalize(refracted);\n\n let no = -dot(normal, result.direction);\n\n if (no <= 0.0) {\n return result;\n }\n\n result.weight = vec3<f32>(ggxMasking(alpha2, no)) * select(vec3<f32>(1.0), surface.albedo, surface.front);\n result.crossed = true;\n result.valid = true;\n\n return result;\n }\n\n result.direction = reflect(-view, half);\n }\n\n let nl = dot(normal, result.direction);\n\n if (nl <= 0.0) {\n return result;\n }\n\n result.weight = vec3<f32>(ggxMasking(alpha2, nl));\n result.valid = true;\n\n return result;\n}\n\n/** A half vector around the normal distributed as cos^s, which is the Blinn-Phong lobe's own shape. */\nfn sampleBlinnPhongHalf(normal: vec3<f32>, shininess: f32, u: vec2<f32>) -> vec3<f32> {\n let cosine = pow(u.x, 1.0 / (shininess + 1.0));\n let sine = sqrt(max(0.0, 1.0 - cosine * cosine));\n let angle = 2.0 * PI * u.y;\n\n return normalize(orthonormalBasis(normal) * vec3<f32>(sine * cos(angle), sine * sin(angle), cosine));\n}\n\n/** Which way the path carries on, and what its throughput is multiplied by. */\nfn sampleBsdf(surface: Surface, view: vec3<f32>, lobe: f32, u: vec2<f32>) -> BsdfSample {\n let normal = surface.normal;\n var result: BsdfSample;\n result.valid = false;\n result.weight = vec3<f32>(0.0);\n result.pdf = 0.0;\n result.diffuse = true;\n\n if (surface.kind == KIND_VOLUME) {\n result.direction = sampleHenyeyGreenstein(-view, surface.anisotropy, u);\n result.weight = surface.albedo;\n result.pdf = henyeyGreenstein(dot(-view, result.direction), surface.anisotropy);\n result.valid = true;\n\n return result;\n }\n\n if (dot(normal, view) <= 0.0) {\n return result;\n }\n\n // Lambert, and the bounce of a toon surface: Three lights a toon surface's indirect light with a plain Lambert term.\n if ((surface.flags & MATERIAL_PBR) == 0u && surface.kind != KIND_PHONG) {\n result.direction = cosineDirection(normal, u);\n // The cosine weight cancels the Lambert cosine exactly, which leaves the albedo alone.\n result.weight = surface.albedo;\n result.pdf = max(dot(normal, result.direction), 0.0) / PI;\n result.valid = result.pdf > 0.0;\n\n return result;\n }\n\n let weights = lobeWeights(surface, view);\n\n result.diffuse = lobe < weights.x;\n\n if (lobe < weights.x) {\n // A translucent surface sends that share of its diffuse light through, to the far side.\n let through = GRASS && lobe < weights.x * translucentShare(surface);\n\n result.direction = cosineDirection(select(normal, -normal, through), u);\n } else if (surface.kind == KIND_PHONG) {\n result.direction = reflect(-view, sampleBlinnPhongHalf(normal, surface.shininess, u));\n } else if (lobe < weights.x + weights.y) {\n let basis = specularBasis(surface);\n // The lobe is drawn in its own frame, so the view direction goes into that frame and the result comes back out.\n let localView = vec3<f32>(dot(view, basis[0]), dot(view, basis[1]), dot(view, normal));\n let localHalf = sampleVisibleNormal(localView, specularAlphas(surface), u);\n let half = basis * localHalf;\n\n result.direction = reflect(-view, half);\n } else {\n let coatNormal = surface.clearcoatNormal;\n let basis = orthonormalBasis(coatNormal);\n let alpha = max(surface.clearcoatRoughness * surface.clearcoatRoughness, 1e-4);\n let localView = vec3<f32>(dot(view, basis[0]), dot(view, basis[1]), dot(view, coatNormal));\n let half = basis * sampleVisibleNormal(localView, vec2<f32>(alpha), u);\n\n result.direction = reflect(-view, half);\n }\n\n let evaluated = evaluateBsdf(surface, view, result.direction);\n\n if (evaluated.pdf <= 0.0 || all(evaluated.value <= vec3<f32>(0.0))) {\n return result;\n }\n\n result.pdf = evaluated.pdf;\n result.weight = evaluated.value / evaluated.pdf;\n result.valid = true;\n\n return result;\n}\n\n/**\n * Only the diffuse part of evaluateBsdf, times the cosine: what of the light from this direction the denoiser counts\n * as diffuse. The rest of the value is specular.\n */\nfn diffuseValue(surface: Surface, view: vec3<f32>, light: vec3<f32>) -> vec3<f32> {\n let normal = surface.normal;\n let nl = dot(normal, light);\n let nv = max(dot(normal, view), 1e-4);\n\n if (surface.kind == KIND_TOON) {\n return surface.albedo / PI * toonRamp(surface.gradientMap, nl);\n }\n\n // Light scattered in a medium is all diffuse, as the denoiser sees it.\n if (surface.kind == KIND_VOLUME) {\n return surface.albedo * henyeyGreenstein(dot(-view, light), surface.anisotropy);\n }\n\n if (GRASS && nl < 0.0) {\n return surface.translucent / PI * (-nl);\n }\n\n if (nl <= 0.0) {\n return vec3<f32>(0.0);\n }\n\n if ((surface.flags & MATERIAL_PBR) == 0u) {\n return surface.albedo / PI * nl;\n }\n\n var diffuse = surface.albedo * ((1.0 - surface.metalness) * (1.0 - surface.subsurface)) / PI;\n\n if (any(surface.sheenColor > vec3<f32>(0.0))) {\n diffuse = diffuse * (1.0 - max3(surface.sheenColor)\n * max(sheenAlbedo(nv, surface.sheenRoughness), sheenAlbedo(nl, surface.sheenRoughness)));\n }\n\n return diffuse * nl * coatTransmittance(surface, view);\n}\n\n/** How much of the light a surface's specular lobes reflect in all, seen from this view: what that signal is divided by. */\nfn specularAlbedo(surface: Surface, view: vec3<f32>) -> vec3<f32> {\n let nv = clamp(dot(surface.normal, view), 0.0, 1.0);\n\n if (surface.kind == KIND_PHONG) {\n return surface.specularColor * surface.specularStrength;\n }\n\n if ((surface.flags & MATERIAL_PBR) == 0u) {\n return vec3<f32>(0.0);\n }\n\n let dfg = dfgApprox(surface.roughness, nv);\n var albedo = surfaceF0(surface) * dfg.x + vec3<f32>(surface.specularF90 * dfg.y);\n\n if (surface.clearcoat > 0.0) {\n let coatDfg = dfgApprox(surface.clearcoatRoughness, clamp(dot(surface.clearcoatNormal, view), 0.0, 1.0));\n albedo = albedo * coatTransmittance(surface, view) + vec3<f32>(surface.clearcoat * (0.04 * coatDfg.x + coatDfg.y));\n }\n\n // What crosses a transmissive surface is the specular signal too, and it is not filtered by any colour of the surface.\n return mix(albedo, vec3<f32>(1.0), clamp(surface.transmission, 0.0, 1.0));\n}\n";
|
|
13
13
|
//# sourceMappingURL=bsdf.wgsl.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bsdf.wgsl.d.ts","sourceRoot":"","sources":["../../src/wgsl/bsdf.wgsl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS
|
|
1
|
+
{"version":3,"file":"bsdf.wgsl.d.ts","sourceRoot":"","sources":["../../src/wgsl/bsdf.wgsl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,u5yBAkqBrB,CAAC"}
|
package/dist/wgsl/bsdf.wgsl.js
CHANGED
|
@@ -181,6 +181,26 @@ fn coatTransmittance(surface: Surface, view: vec3<f32>) -> f32 {
|
|
|
181
181
|
*/
|
|
182
182
|
const KIND_VOLUME: u32 = 100u;
|
|
183
183
|
|
|
184
|
+
/**
|
|
185
|
+
* Share of the diffuse lobe's directions drawn on the far side of a surface that lets light through it diffusely, as a
|
|
186
|
+
* grass blade does: by how much of the diffuse light each side accounts for.
|
|
187
|
+
*/
|
|
188
|
+
fn translucentShare(surface: Surface) -> f32 {
|
|
189
|
+
if (!GRASS) {
|
|
190
|
+
return 0.0;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
let through = luminanceOf(surface.translucent);
|
|
194
|
+
|
|
195
|
+
if (through <= 0.0) {
|
|
196
|
+
return 0.0;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
let off = luminanceOf(surface.albedo * ((1.0 - surface.metalness) * (1.0 - surface.subsurface)));
|
|
200
|
+
|
|
201
|
+
return through / max(through + off, 1e-6);
|
|
202
|
+
}
|
|
203
|
+
|
|
184
204
|
/** How often each lobe is chosen, as (diffuse, specular, clearcoat): by how much of the reflection each accounts for. */
|
|
185
205
|
fn lobeWeights(surface: Surface, view: vec3<f32>) -> vec3<f32> {
|
|
186
206
|
let nv = max(dot(surface.normal, view), 1e-4);
|
|
@@ -199,7 +219,7 @@ fn lobeWeights(surface: Surface, view: vec3<f32>) -> vec3<f32> {
|
|
|
199
219
|
let base = coatTransmittance(surface, view);
|
|
200
220
|
// The floors keep every lobe reachable: the diffuse one also carries the sheen and the multiple scattering term.
|
|
201
221
|
let diffuse = (luminanceOf(surface.albedo * ((1.0 - surface.metalness) * (1.0 - surface.subsurface)))
|
|
202
|
-
+ max3(surface.sheenColor)) * base + 0.02;
|
|
222
|
+
+ max3(surface.sheenColor) + select(0.0, luminanceOf(surface.translucent), GRASS)) * base + 0.02;
|
|
203
223
|
let specular = luminanceOf(schlick3(surface.specularColor, surface.specularF90, nv)
|
|
204
224
|
* (1.0 - surface.metalness) + surface.albedo * surface.metalness) * base + 0.05;
|
|
205
225
|
let coat = select(0.0, (1.0 - base) + 0.02, surface.clearcoat > 0.0);
|
|
@@ -277,6 +297,11 @@ fn physicalValue(surface: Surface, view: vec3<f32>, light: vec3<f32>) -> vec3<f3
|
|
|
277
297
|
}
|
|
278
298
|
}
|
|
279
299
|
|
|
300
|
+
// Light through a translucent surface, from its far side.
|
|
301
|
+
if (GRASS && nl < 0.0) {
|
|
302
|
+
value = value + surface.translucent / PI * (-nl);
|
|
303
|
+
}
|
|
304
|
+
|
|
280
305
|
return value;
|
|
281
306
|
}
|
|
282
307
|
|
|
@@ -308,6 +333,10 @@ fn bsdfPdf(surface: Surface, view: vec3<f32>, light: vec3<f32>) -> f32 {
|
|
|
308
333
|
let weights = lobeWeights(surface, view);
|
|
309
334
|
var pdf = weights.x * max(nl, 0.0) / PI;
|
|
310
335
|
|
|
336
|
+
if (GRASS) {
|
|
337
|
+
pdf = weights.x * mix(max(nl, 0.0), max(-nl, 0.0), translucentShare(surface)) / PI;
|
|
338
|
+
}
|
|
339
|
+
|
|
311
340
|
if (surface.kind == KIND_PHONG) {
|
|
312
341
|
let half = normalize(light + view);
|
|
313
342
|
|
|
@@ -375,7 +404,7 @@ fn evaluateBsdf(surface: Surface, view: vec3<f32>, light: vec3<f32>) -> BsdfEval
|
|
|
375
404
|
}
|
|
376
405
|
|
|
377
406
|
// A clearcoat may face a light its base turns away from, so only a surface without one stops here.
|
|
378
|
-
if (nl <= 0.0 && surface.clearcoat <= 0.0) {
|
|
407
|
+
if (nl <= 0.0 && surface.clearcoat <= 0.0 && !(GRASS && any(surface.translucent > vec3<f32>(0.0)))) {
|
|
379
408
|
return result;
|
|
380
409
|
}
|
|
381
410
|
|
|
@@ -554,7 +583,10 @@ fn sampleBsdf(surface: Surface, view: vec3<f32>, lobe: f32, u: vec2<f32>) -> Bsd
|
|
|
554
583
|
result.diffuse = lobe < weights.x;
|
|
555
584
|
|
|
556
585
|
if (lobe < weights.x) {
|
|
557
|
-
|
|
586
|
+
// A translucent surface sends that share of its diffuse light through, to the far side.
|
|
587
|
+
let through = GRASS && lobe < weights.x * translucentShare(surface);
|
|
588
|
+
|
|
589
|
+
result.direction = cosineDirection(select(normal, -normal, through), u);
|
|
558
590
|
} else if (surface.kind == KIND_PHONG) {
|
|
559
591
|
result.direction = reflect(-view, sampleBlinnPhongHalf(normal, surface.shininess, u));
|
|
560
592
|
} else if (lobe < weights.x + weights.y) {
|
|
@@ -606,6 +638,10 @@ fn diffuseValue(surface: Surface, view: vec3<f32>, light: vec3<f32>) -> vec3<f32
|
|
|
606
638
|
return surface.albedo * henyeyGreenstein(dot(-view, light), surface.anisotropy);
|
|
607
639
|
}
|
|
608
640
|
|
|
641
|
+
if (GRASS && nl < 0.0) {
|
|
642
|
+
return surface.translucent / PI * (-nl);
|
|
643
|
+
}
|
|
644
|
+
|
|
609
645
|
if (nl <= 0.0) {
|
|
610
646
|
return vec3<f32>(0.0);
|
|
611
647
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bsdf.wgsl.js","sourceRoot":"","sources":["../../src/wgsl/bsdf.wgsl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC
|
|
1
|
+
{"version":3,"file":"bsdf.wgsl.js","sourceRoot":"","sources":["../../src/wgsl/bsdf.wgsl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkqBnC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Grass grown on a material's surface: see grass.ts for the layout of what the texture buffer holds.
|
|
3
|
+
*
|
|
4
|
+
* A triangle that grows grass is a shell, its footprint on the ground times the height of the lawn above its plane, and
|
|
5
|
+
* the shells have a hierarchy of their own. Inside a shell the ray walks the world's tiles front to back, and in each
|
|
6
|
+
* one it is taken into the space of that tile's patch, where the plane is the ground and blades stand on it: a shear
|
|
7
|
+
* that keeps the ray's distances as they are. The search in a tile is held to the stretch of the ray over that tile and
|
|
8
|
+
* that triangle, so a blade that leans over a border is seen once, from the patch it is drawn in, and the first tile
|
|
9
|
+
* with a hit holds the closest one in the shell.
|
|
10
|
+
*/
|
|
11
|
+
export declare const GRASS_WGSL = "\nconst GRASS_NONE: u32 = 0xffffffffu;\nconst GRASS_MAX_TILES: u32 = 48u;\n// What a hit on a blade carries as its triangle, which no scene triangle can be.\nconst GRASS_TRIANGLE: u32 = 0xfffffffeu;\n\nstruct GrassHit {\n found: bool,\n distance: f32,\n // The lawn's record and the patch triangle hit, both as offsets into the texture buffer.\n record: u32,\n triangle: u32,\n u: f32,\n v: f32,\n // The ground plane's slope and where the tile starts, which take the patch back to the world.\n slope: vec2<f32>,\n tile: vec2<f32>,\n};\n\nfn noGrass(maxDistance: f32) -> GrassHit {\n var hit: GrassHit;\n hit.found = false;\n hit.distance = maxDistance;\n\n return hit;\n}\n\nfn grassNode(at: u32) -> BvhNode {\n var node: BvhNode;\n node.leftLow = vec3<f32>(extraFloat(at), extraFloat(at + 1u), extraFloat(at + 2u));\n node.leftLink = bitcast<i32>(textures[at + 3u]);\n node.leftHigh = vec3<f32>(extraFloat(at + 4u), extraFloat(at + 5u), extraFloat(at + 6u));\n node.leftCount = bitcast<i32>(textures[at + 7u]);\n node.rightLow = vec3<f32>(extraFloat(at + 8u), extraFloat(at + 9u), extraFloat(at + 10u));\n node.rightLink = bitcast<i32>(textures[at + 11u]);\n node.rightHigh = vec3<f32>(extraFloat(at + 12u), extraFloat(at + 13u), extraFloat(at + 14u));\n node.rightCount = bitcast<i32>(textures[at + 15u]);\n\n return node;\n}\n\nfn grassVec3(at: u32) -> vec3<f32> {\n return vec3<f32>(extraFloat(at), extraFloat(at + 1u), extraFloat(at + 2u));\n}\n\nfn grassHash(cell: vec2<i32>) -> u32 {\n return pcgHash((bitcast<u32>(cell.x) * 1597334677u) ^ pcgHash(bitcast<u32>(cell.y) * 3812015801u));\n}\n\n/** Smooth value noise in zero to one, for what changes across the lawn rather than from blade to blade. */\nfn grassNoise(p: vec2<f32>) -> f32 {\n let cell = floor(p);\n let f = p - cell;\n let s = f * f * (3.0 - 2.0 * f);\n let c = vec2<i32>(cell);\n let corner = vec4<f32>(\n f32(grassHash(c) >> 8u), f32(grassHash(c + vec2<i32>(1, 0)) >> 8u),\n f32(grassHash(c + vec2<i32>(0, 1)) >> 8u), f32(grassHash(c + vec2<i32>(1, 1)) >> 8u)) / 16777216.0;\n\n return mix(mix(corner.x, corner.y, s.x), mix(corner.z, corner.w, s.x), s.y);\n}\n\n/** Whether a blade grows where its root stands: the lawn thins out in patches, and each blade has its own number. */\nfn grassKeeps(record: u32, root: vec2<f32>, rand: f32) -> bool {\n let patchiness = extraFloat(record + 22u);\n\n if (patchiness <= 0.0) {\n return true;\n }\n\n let thin = smoothstep(0.3, 0.75, grassNoise(root * extraFloat(record + 23u) + vec2<f32>(31.7, 11.3)));\n\n return rand >= patchiness * thin;\n}\n\n/**\n * The closest blade of one patch along the ray, between near and the hit so far: origin and direction already in the\n * patch's space. Records the triangle in best and returns whether it found one.\n */\nfn tracePatch(record: u32, root: u32, tile: vec2<f32>, origin: vec3<f32>, direction: vec3<f32>, near: f32,\n far: f32, best: ptr<function, GrassHit>) -> bool {\n let triangles = textures[record + 3u];\n let blades = textures[record + 4u];\n let signs = select(vec3<f32>(-1.0), vec3<f32>(1.0), direction >= vec3<f32>(0.0));\n let inverse = signs / max(abs(direction), vec3<f32>(1e-20));\n var closest = far;\n var found = false;\n var stack: array<u32, 32>;\n var depth = 0u;\n var current = 0u;\n\n loop {\n let node = grassNode(root + current * 16u);\n let leftEnter = enterBox(node.leftLow, node.leftHigh, origin, inverse, closest);\n let rightEnter = enterBox(node.rightLow, node.rightHigh, origin, inverse, closest);\n var next = NO_NODE;\n\n for (var side = 0u; side < 2u; side = side + 1u) {\n let enter = select(leftEnter, rightEnter, side == 1u);\n let link = select(node.leftLink, node.rightLink, side == 1u);\n let count = select(node.leftCount, node.rightCount, side == 1u);\n\n if (enter >= 1e30) {\n continue;\n }\n\n if (link >= 0) {\n if (next == NO_NODE) {\n next = u32(link);\n } else if (depth < 32u) {\n stack[depth] = u32(link);\n depth = depth + 1u;\n }\n\n continue;\n }\n\n let start = u32(-1 - link);\n\n for (var i = 0u; i < u32(count); i = i + 1u) {\n let at = triangles + (start + i) * 16u;\n let a = grassVec3(at);\n let edge1 = grassVec3(at + 3u) - a;\n let edge2 = grassVec3(at + 6u) - a;\n let p = cross(direction, edge2);\n let determinant = dot(edge1, p);\n\n if (abs(determinant) < 1e-14) {\n continue;\n }\n\n let invDet = 1.0 / determinant;\n let offset = origin - a;\n let u = dot(offset, p) * invDet;\n let q = cross(offset, edge1);\n let v = dot(direction, q) * invDet;\n let t = dot(edge2, q) * invDet;\n\n if (u < 0.0 || v < 0.0 || u + v > 1.0 || t <= near || t >= closest) {\n continue;\n }\n\n let blade = blades + textures[at + 15u] * 4u;\n let rootAt = tile + vec2<f32>(extraFloat(blade), extraFloat(blade + 1u));\n\n if (!grassKeeps(record, rootAt, extraFloat(blade + 2u))) {\n continue;\n }\n\n closest = t;\n found = true;\n (*best).triangle = at;\n (*best).u = u;\n (*best).v = v;\n }\n }\n\n if (next == NO_NODE) {\n if (depth == 0u) {\n break;\n }\n\n depth = depth - 1u;\n next = stack[depth];\n }\n\n current = next;\n }\n\n if (found) {\n (*best).distance = closest;\n }\n\n return found;\n}\n\n/** Keeps the part of [range.x, range.y] where offset + rate t stays at or above zero. */\nfn grassClip(range: vec2<f32>, offset: f32, rate: f32) -> vec2<f32> {\n if (abs(rate) < 1e-20) {\n return select(range, vec2<f32>(1.0, 0.0), offset < 0.0);\n }\n\n let at = -offset / rate;\n\n return select(vec2<f32>(range.x, min(range.y, at)), vec2<f32>(max(range.x, at), range.y), rate > 0.0);\n}\n\n/** The edge from p to q of an anticlockwise footprint, as the ray crosses it on the ground: inside is on the left. */\nfn grassEdge(range: vec2<f32>, p: vec2<f32>, q: vec2<f32>, origin: vec2<f32>, direction: vec2<f32>) -> vec2<f32> {\n let e = q - p;\n\n return grassClip(range, e.x * (origin.y - p.y) - e.y * (origin.x - p.x), e.x * direction.y - e.y * direction.x);\n}\n\n/** The grass over one triangle, against the closest hit so far. */\nfn grassInShell(entry: u32, origin: vec3<f32>, direction: vec3<f32>, best: ptr<function, GrassHit>) {\n let record = textures[entry];\n let a = vec2<f32>(extraFloat(entry + 1u), extraFloat(entry + 2u));\n let b = vec2<f32>(extraFloat(entry + 3u), extraFloat(entry + 4u));\n let c = vec2<f32>(extraFloat(entry + 5u), extraFloat(entry + 6u));\n let p0 = extraFloat(entry + 7u);\n let slope = vec2<f32>(extraFloat(entry + 8u), extraFloat(entry + 9u));\n let tile = extraFloat(record);\n let top = extraFloat(record + 1u);\n // The ray's height over the plane, at its start and per unit of distance.\n let h0 = origin.y - p0 - slope.x * origin.x - slope.y * origin.z;\n let dh = direction.y - slope.x * direction.x - slope.y * direction.z;\n let ground = origin.xz;\n let along = direction.xz;\n var range = vec2<f32>(RAY_EPSILON, (*best).distance);\n\n range = grassClip(range, h0, dh);\n range = grassClip(range, top - h0, -dh);\n range = grassEdge(range, a, b, ground, along);\n range = grassEdge(range, b, c, ground, along);\n range = grassEdge(range, c, a, ground, along);\n\n if (range.x >= range.y) {\n return;\n }\n\n // Amanatides and Woo over the tiles of the ground.\n var cell = floor((ground + along * range.x) / tile);\n let stepping = select(vec2<f32>(-1.0), vec2<f32>(1.0), along >= vec2<f32>(0.0));\n let span = abs(vec2<f32>(tile) / select(along, vec2<f32>(1e-20), abs(along) < vec2<f32>(1e-20)));\n var crossing = vec2<f32>(1e30);\n\n if (abs(along.x) >= 1e-20) {\n crossing.x = ((cell.x + select(0.0, 1.0, along.x > 0.0)) * tile - ground.x) / along.x;\n }\n\n if (abs(along.y) >= 1e-20) {\n crossing.y = ((cell.y + select(0.0, 1.0, along.y > 0.0)) * tile - ground.y) / along.y;\n }\n\n var start = range.x;\n let variants = textures[record + 2u];\n\n for (var i = 0u; i < GRASS_MAX_TILES; i = i + 1u) {\n let end = min(min(crossing.x, crossing.y), range.y);\n let corner = cell * tile;\n let variant = grassHash(vec2<i32>(cell)) % max(variants, 1u);\n let patchOrigin = vec3<f32>(origin.x - corner.x, h0, origin.z - corner.y);\n let patchDirection = vec3<f32>(direction.x, dh, direction.z);\n\n if (end > start\n && tracePatch(record, textures[record + 5u + variant], corner, patchOrigin, patchDirection, start, end, best)) {\n (*best).found = true;\n (*best).record = record;\n (*best).slope = slope;\n (*best).tile = corner;\n\n return;\n }\n\n if (end >= range.y) {\n return;\n }\n\n if (crossing.x < crossing.y) {\n cell.x = cell.x + stepping.x;\n start = crossing.x;\n crossing.x = crossing.x + span.x;\n } else {\n cell.y = cell.y + stepping.y;\n start = crossing.y;\n crossing.y = crossing.y + span.y;\n }\n }\n}\n\n/** The closest blade along a ray before maxDistance, in any lawn of the scene. */\nfn traceGrass(origin: vec3<f32>, direction: vec3<f32>, maxDistance: f32) -> GrassHit {\n var best = noGrass(maxDistance);\n\n if (frame.grassShells == GRASS_NONE) {\n return best;\n }\n\n let signs = select(vec3<f32>(-1.0), vec3<f32>(1.0), direction >= vec3<f32>(0.0));\n let inverse = signs / max(abs(direction), vec3<f32>(1e-20));\n var stack: array<u32, 32>;\n var enters: array<f32, 32>;\n var depth = 0u;\n var current = 0u;\n\n loop {\n if (current == NO_NODE) {\n if (depth == 0u) {\n break;\n }\n\n depth = depth - 1u;\n\n if (enters[depth] > best.distance) {\n continue;\n }\n\n current = stack[depth];\n }\n\n let node = grassNode(frame.grassShells + current * 16u);\n let leftEnter = enterBox(node.leftLow, node.leftHigh, origin, inverse, best.distance);\n let rightEnter = enterBox(node.rightLow, node.rightHigh, origin, inverse, best.distance);\n let leftFirst = leftEnter <= rightEnter;\n\n current = NO_NODE;\n\n for (var k = 0u; k < 2u; k = k + 1u) {\n // The nearer child first; a leaf is searched at once, a node is visited next or waits.\n let left = (k == 0u) == leftFirst;\n let enter = select(rightEnter, leftEnter, left);\n let link = select(node.rightLink, node.leftLink, left);\n let count = select(node.rightCount, node.leftCount, left);\n\n if (enter >= best.distance) {\n continue;\n }\n\n if (link < 0) {\n let first = u32(-1 - link);\n\n for (var i = 0u; i < u32(count); i = i + 1u) {\n grassInShell(frame.grassEntries + (first + i) * 12u, origin, direction, &best);\n }\n } else if (current == NO_NODE) {\n current = u32(link);\n } else if (depth < 32u) {\n stack[depth] = u32(link);\n enters[depth] = enter;\n depth = depth + 1u;\n }\n }\n }\n\n return best;\n}\n\n/**\n * A blade as a surface: thin, waxy and translucent, a quarter of its light let through to the far side. The colour runs\n * from the root to the tip, changes from blade to blade and across the lawn, and some blades are dry.\n */\nfn grassSurface(hit: GrassHit, direction: vec3<f32>) -> Surface {\n let at = hit.triangle;\n let record = hit.record;\n let w = 1.0 - hit.u - hit.v;\n let height = w * extraFloat(at + 9u) + hit.u * extraFloat(at + 10u) + hit.v * extraFloat(at + 11u);\n let side = w * extraFloat(at + 12u) + hit.u * extraFloat(at + 13u) + hit.v * extraFloat(at + 14u);\n let blade = textures[record + 4u] + textures[at + 15u] * 4u;\n let root = hit.tile + vec2<f32>(extraFloat(blade), extraFloat(blade + 1u));\n let rand = extraFloat(blade + 2u);\n let yaw = extraFloat(blade + 3u);\n let a = grassVec3(at);\n let local = cross(grassVec3(at + 3u) - a, grassVec3(at + 6u) - a);\n // Normals go back through the inverse transpose of the shear.\n var normal = normalize(vec3<f32>(local.x - hit.slope.x * local.y, local.y, local.z - hit.slope.y * local.y));\n\n if (dot(normal, direction) > 0.0) {\n normal = -normal;\n }\n\n let across = normalize(vec3<f32>(cos(yaw), hit.slope.x * cos(yaw) + hit.slope.y * sin(yaw), sin(yaw)));\n // A blade is rounded across: its normal turns towards each edge.\n var shading = normalize(normal + across * (side * 0.55));\n\n if (dot(shading, direction) >= 0.0) {\n shading = normal;\n }\n\n let variation = extraFloat(record + 21u);\n let scale = extraFloat(record + 23u);\n let wide = grassNoise(root * scale);\n let fine = grassNoise(root * scale * 4.3 + vec2<f32>(5.2, 1.7));\n var albedo = mix(grassVec3(record + 9u), grassVec3(record + 12u), smoothstep(0.0, 1.0, pow(height, 0.75)));\n\n // Across the lawn, greener and yellower stretches; from blade to blade, lighter and darker.\n albedo = albedo * mix(vec3<f32>(1.0), vec3<f32>(1.12, 1.0, 0.7), variation * (wide - 0.4));\n albedo = albedo * (1.0 + variation * 0.6 * (fract(rand * 13.37) - 0.5));\n\n let dryness = extraFloat(record + 18u);\n let dry = grassVec3(record + 15u) * (0.85 + 0.3 * fract(rand * 7.77));\n\n if (fract(rand * 31.1) < dryness * (0.4 + 1.2 * fine)) {\n albedo = mix(dry * 0.8, dry, height);\n } else {\n // Tips dry first.\n albedo = mix(albedo, dry, smoothstep(0.82, 1.0, height) * dryness * 1.5);\n }\n\n // The sheath at the root is paler and duller.\n albedo = mix(albedo * 0.7 + vec3<f32>(0.03, 0.03, 0.01), albedo, smoothstep(0.0, 0.2, height));\n albedo = clamp(albedo, vec3<f32>(0.0), vec3<f32>(0.9));\n\n let translucency = extraFloat(record + 19u);\n var surface: Surface;\n\n surface.material = 0u;\n surface.flags = MATERIAL_LIT | MATERIAL_PBR;\n surface.kind = KIND_STANDARD;\n surface.blending = BLEND_NORMAL;\n surface.facing = normal;\n surface.front = true;\n surface.normal = shading;\n surface.albedo = albedo * (1.0 - 0.5 * translucency);\n // Light through a leaf is more saturated and yellower than off it.\n surface.translucent = min(albedo * translucency * vec3<f32>(1.05, 1.2, 0.6), vec3<f32>(0.9));\n surface.opacity = 1.0;\n surface.alpha = 1.0;\n surface.roughness = clamp(extraFloat(record + 20u), 0.0525, 1.0);\n surface.metalness = 0.0;\n surface.ior = 1.5;\n surface.specularColor = vec3<f32>(0.04);\n surface.specularF90 = 1.0;\n surface.specularStrength = 1.0;\n surface.envMap = NO_TEXTURE;\n surface.envMapIntensity = 1.0;\n surface.gradientMap = NO_TEXTURE;\n\n return surface;\n}\n";
|
|
12
|
+
/** What the kernel calls when no material grows grass: the same names, doing nothing. */
|
|
13
|
+
export declare const GRASS_STUB_WGSL = "\nconst GRASS_NONE: u32 = 0xffffffffu;\nconst GRASS_TRIANGLE: u32 = 0xfffffffeu;\n\nstruct GrassHit {\n found: bool,\n distance: f32,\n};\n\nfn traceGrass(origin: vec3<f32>, direction: vec3<f32>, maxDistance: f32) -> GrassHit {\n var hit: GrassHit;\n hit.found = false;\n hit.distance = maxDistance;\n\n return hit;\n}\n\nfn grassSurface(hit: GrassHit, direction: vec3<f32>) -> Surface {\n var surface: Surface;\n\n return surface;\n}\n";
|
|
14
|
+
//# sourceMappingURL=grass.wgsl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grass.wgsl.d.ts","sourceRoot":"","sources":["../../src/wgsl/grass.wgsl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU,i3cAoatB,CAAC;AAEF,yFAAyF;AACzF,eAAO,MAAM,eAAe,icAsB3B,CAAC"}
|