@tinypoly/gpu-renderer 0.2.0 → 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.
Files changed (64) hide show
  1. package/dist/frameLayout.d.ts.map +1 -1
  2. package/dist/frameLayout.js +2 -0
  3. package/dist/frameLayout.js.map +1 -1
  4. package/dist/grass.d.ts +106 -0
  5. package/dist/grass.d.ts.map +1 -0
  6. package/dist/grass.js +350 -0
  7. package/dist/grass.js.map +1 -0
  8. package/dist/index.d.ts +2 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +1 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/materialLayout.d.ts +6 -0
  13. package/dist/materialLayout.d.ts.map +1 -1
  14. package/dist/materialLayout.js +2 -0
  15. package/dist/materialLayout.js.map +1 -1
  16. package/dist/pathTracePass.d.ts +2 -2
  17. package/dist/pathTracePass.d.ts.map +1 -1
  18. package/dist/pathTracePass.js +11 -9
  19. package/dist/pathTracePass.js.map +1 -1
  20. package/dist/renderer.d.ts +4 -1
  21. package/dist/renderer.d.ts.map +1 -1
  22. package/dist/renderer.js +25 -4
  23. package/dist/renderer.js.map +1 -1
  24. package/dist/shaderProgram.d.ts.map +1 -1
  25. package/dist/shaderProgram.js +10 -1
  26. package/dist/shaderProgram.js.map +1 -1
  27. package/dist/subsurface.d.ts +2 -0
  28. package/dist/subsurface.d.ts.map +1 -1
  29. package/dist/subsurface.js +3 -2
  30. package/dist/subsurface.js.map +1 -1
  31. package/dist/wgsl/bsdf.wgsl.d.ts +1 -1
  32. package/dist/wgsl/bsdf.wgsl.d.ts.map +1 -1
  33. package/dist/wgsl/bsdf.wgsl.js +39 -3
  34. package/dist/wgsl/bsdf.wgsl.js.map +1 -1
  35. package/dist/wgsl/grass.wgsl.d.ts +14 -0
  36. package/dist/wgsl/grass.wgsl.d.ts.map +1 -0
  37. package/dist/wgsl/grass.wgsl.js +456 -0
  38. package/dist/wgsl/grass.wgsl.js.map +1 -0
  39. package/dist/wgsl/lights.wgsl.d.ts +1 -1
  40. package/dist/wgsl/lights.wgsl.d.ts.map +1 -1
  41. package/dist/wgsl/lights.wgsl.js +5 -0
  42. package/dist/wgsl/lights.wgsl.js.map +1 -1
  43. package/dist/wgsl/pathTrace.wgsl.d.ts +1 -1
  44. package/dist/wgsl/pathTrace.wgsl.d.ts.map +1 -1
  45. package/dist/wgsl/pathTrace.wgsl.js +34 -5
  46. package/dist/wgsl/pathTrace.wgsl.js.map +1 -1
  47. package/dist/wgsl/surface.wgsl.d.ts +1 -1
  48. package/dist/wgsl/surface.wgsl.d.ts.map +1 -1
  49. package/dist/wgsl/surface.wgsl.js +2 -0
  50. package/dist/wgsl/surface.wgsl.js.map +1 -1
  51. package/package.json +2 -2
  52. package/src/frameLayout.ts +2 -0
  53. package/src/grass.ts +523 -0
  54. package/src/index.ts +2 -0
  55. package/src/materialLayout.ts +7 -0
  56. package/src/pathTracePass.ts +11 -9
  57. package/src/renderer.ts +36 -7
  58. package/src/shaderProgram.ts +11 -1
  59. package/src/subsurface.ts +3 -2
  60. package/src/wgsl/bsdf.wgsl.ts +39 -3
  61. package/src/wgsl/grass.wgsl.ts +456 -0
  62. package/src/wgsl/lights.wgsl.ts +5 -0
  63. package/src/wgsl/pathTrace.wgsl.ts +34 -5
  64. package/src/wgsl/surface.wgsl.ts +2 -0
@@ -1 +1 @@
1
- {"version":3,"file":"frameLayout.d.ts","sourceRoot":"","sources":["../src/frameLayout.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,eAAO,MAAM,YAAY,0CA4EvB,CAAC;AAEH,eAAO,MAAM,WAAW,QAAqB,CAAC"}
1
+ {"version":3,"file":"frameLayout.d.ts","sourceRoot":"","sources":["../src/frameLayout.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,eAAO,MAAM,YAAY,0CA8EvB,CAAC;AAEH,eAAO,MAAM,WAAW,QAAqB,CAAC"}
@@ -75,6 +75,8 @@ export const FRAME_LAYOUT = layoutStruct("Frame", [
75
75
  { name: "atmosphereExtinction", type: "vec4f", doc: "rgb is how much of each colour the air takes per scene unit, w the haze." },
76
76
  { name: "atmosphereSun", type: "vec4f", doc: "xyz is the direction towards the brightest directional light." },
77
77
  { name: "atmosphereSunColor", type: "vec4f", doc: "rgb is that light's irradiance, which the air scatters." },
78
+ { name: "grassShells", type: "u32", doc: "Where the hierarchy of the triangles that grow grass starts in the texture buffer, or GRASS_NONE." },
79
+ { name: "grassEntries", type: "u32", doc: "Where those triangles' entries start in the texture buffer." },
78
80
  { name: "clipPlane", type: "vec4f", doc: "A plane the camera ray drops surfaces behind, for planar captures; w = 0 and xyz = 0 is none." },
79
81
  ]);
80
82
  export const FRAME_WORDS = FRAME_LAYOUT.words;
@@ -1 +1 @@
1
- {"version":3,"file":"frameLayout.js","sourceRoot":"","sources":["../src/frameLayout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frameLayout.js","sourceRoot":"","sources":["../src/frameLayout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ import type { PackedGeometry } from "./geometry.js";
2
+ import type { SerializedMaterial } from "./upstream.js";
3
+ /**
4
+ * A lawn grown on a material's surface, from `userData.cpuRenderer.grass`: only the path tracer draws it, and nothing
5
+ * of it is geometry the host holds. `true` takes every default.
6
+ *
7
+ * The blades are real triangles, in a periodic patch of lawn a few metres across that tiles the world on the horizontal
8
+ * plane and follows each triangle's slope by shearing, so the lawn costs the same whatever the size of the surface.
9
+ */
10
+ export type GrassInput = boolean | {
11
+ /** The tallest blade, in scene units. Defaults to `0.09`. */
12
+ height?: number;
13
+ /** Blades per square scene unit. Defaults to `6000`, a full lawn. */
14
+ density?: number;
15
+ /** The widest a blade gets, in scene units. Defaults to `0.005`. */
16
+ width?: number;
17
+ /** How far blades lean and curl over, `0` (upright) to `1`. Defaults to `0.35`. */
18
+ bend?: number;
19
+ /** Colour at the root, `#rrggbb` or linear rgb. */
20
+ color?: string | readonly number[];
21
+ /** Colour at the tip. */
22
+ tipColor?: string | readonly number[];
23
+ /** Colour of the dry blades. */
24
+ dryColor?: string | readonly number[];
25
+ /** Share of dry blades, `0` to `1`. Defaults to `0.12`. */
26
+ dryness?: number;
27
+ /** How much the colour changes from blade to blade and across the lawn, `0` to `1`. Defaults to `0.35`. */
28
+ variation?: number;
29
+ /** How much the lawn thins out in patches, `0` to `1`. Defaults to `0.2`. */
30
+ patchiness?: number;
31
+ /** Share of the light a blade lets through to its far side, `0` to `1`. Defaults to `0.45`. */
32
+ translucency?: number;
33
+ /** Roughness of the blade's waxy surface. Defaults to `0.5`. */
34
+ roughness?: number;
35
+ /** The steepest slope, in degrees, that still grows grass. Defaults to `50`. */
36
+ maxSlope?: number;
37
+ /** Changes the arrangement of the blades. */
38
+ seed?: number;
39
+ };
40
+ /** A lawn resolved to its defaults. */
41
+ export interface GrassField {
42
+ height: number;
43
+ density: number;
44
+ width: number;
45
+ bend: number;
46
+ color: [number, number, number];
47
+ tipColor: [number, number, number];
48
+ dryColor: [number, number, number];
49
+ dryness: number;
50
+ variation: number;
51
+ patchiness: number;
52
+ translucency: number;
53
+ roughness: number;
54
+ maxSlope: number;
55
+ seed: number;
56
+ }
57
+ /** A snapshot material that may carry a lawn, as `serializeLive` attaches it. */
58
+ export type GrassMaterial = SerializedMaterial & {
59
+ grass?: GrassInput;
60
+ };
61
+ /** The lawn an input describes, with its defaults, or `null` when it describes none. */
62
+ export declare function grassField(input: unknown): GrassField | null;
63
+ export declare function grassOf(material: SerializedMaterial | undefined): GrassField | null;
64
+ /** What the frame uniform says when no triangle grows grass. */
65
+ export declare const GRASS_NONE = 4294967295;
66
+ /** Words the kernel reads per patch triangle: its corners, the height along the blade and the side of each, the blade. */
67
+ export declare const GRASS_TRIANGLE_WORDS = 16;
68
+ /** Words per blade: its root, a random number of its own and the angle its width runs at. */
69
+ export declare const GRASS_BLADE_WORDS = 4;
70
+ /** Words per lawn: see writeRecord. */
71
+ export declare const GRASS_RECORD_WORDS = 32;
72
+ /** Words per triangle that grows grass: see writeEntry. */
73
+ export declare const GRASS_ENTRY_WORDS = 12;
74
+ /** One patch of lawn, every variant of it: triangles in patch space, with x and z across the tile and y up. */
75
+ export interface GrassPatch {
76
+ tile: number;
77
+ /** The tallest point of any blade. */
78
+ top: number;
79
+ /** Sixteen words a triangle, every variant one after the other in its own hierarchy's leaf order. */
80
+ triangles: Uint32Array;
81
+ blades: Uint32Array;
82
+ /** Each variant's hierarchy, its leaves pointing into `triangles`. */
83
+ nodes: Uint32Array[];
84
+ }
85
+ /**
86
+ * The patch of a lawn. The band along the tile's border, as wide as a blade reaches, is the same in every variant and
87
+ * wraps around, so any variant meets any other without a seam; inside it each variant grows its own blades.
88
+ */
89
+ export declare function grassPatch(field: GrassField): GrassPatch;
90
+ /** What packGrass adds to the texture buffer's extra words, and where its root is. */
91
+ export interface PackedGrass {
92
+ words: Uint32Array;
93
+ /** Where the hierarchy of the triangles that grow grass starts, in the texture buffer. */
94
+ shells: number;
95
+ /** Where their entries start. */
96
+ entries: number;
97
+ /** How many triangles grow grass. */
98
+ count: number;
99
+ }
100
+ /**
101
+ * The lawns of a packed scene, laid out to sit at `base` in the texture buffer: each lawn's record, patch triangles,
102
+ * blades and hierarchies, then one entry per triangle that grows grass and the hierarchy over those triangles. `null`
103
+ * when nothing grows any.
104
+ */
105
+ export declare function packGrass(geometry: PackedGeometry, base: number): PackedGrass | null;
106
+ //# sourceMappingURL=grass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grass.d.ts","sourceRoot":"","sources":["../src/grass.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG;IACjC,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mFAAmF;IACnF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACnC,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACtC,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACtC,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2GAA2G;IAC3G,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+FAA+F;IAC/F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,uCAAuC;AACvC,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,iFAAiF;AACjF,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG;IAAE,KAAK,CAAC,EAAE,UAAU,CAAA;CAAE,CAAC;AAiBxE,wFAAwF;AACxF,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CA0B5D;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,kBAAkB,GAAG,SAAS,GAAG,UAAU,GAAG,IAAI,CAEnF;AAED,gEAAgE;AAChE,eAAO,MAAM,UAAU,aAAa,CAAC;AAErC,0HAA0H;AAC1H,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,6FAA6F;AAC7F,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,uCAAuC;AACvC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,2DAA2D;AAC3D,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,+GAA+G;AAC/G,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,qGAAqG;IACrG,SAAS,EAAE,WAAW,CAAC;IACvB,MAAM,EAAE,WAAW,CAAC;IACpB,sEAAsE;IACtE,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AA2ID;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CA4FxD;AAeD,sFAAsF;AACtF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,WAAW,CAAC;IACnB,0FAA0F;IAC1F,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAqHpF"}
package/dist/grass.js ADDED
@@ -0,0 +1,350 @@
1
+ import { buildBvh, NODE_WORDS } from "./bvh.js";
2
+ import { linearAlbedo } from "./subsurface.js";
3
+ const DEFAULT_COLOR = "#365a1c";
4
+ const DEFAULT_TIP = "#739a42";
5
+ const DEFAULT_DRY = "#a8975a";
6
+ /** Blades one patch may hold, so a dense lawn cannot take the whole device. */
7
+ const MAX_PATCH_BLADES = 24000;
8
+ /** Different patches the tiles pick from, which keeps the repetition out of sight. */
9
+ const VARIANTS = 4;
10
+ const finite = (value, fallback) => typeof value === "number" && Number.isFinite(value) ? value : fallback;
11
+ const unit = (value, fallback) => Math.min(1, Math.max(0, finite(value, fallback)));
12
+ /** The lawn an input describes, with its defaults, or `null` when it describes none. */
13
+ export function grassField(input) {
14
+ if (input === true)
15
+ input = {};
16
+ if (!input || typeof input !== "object")
17
+ return null;
18
+ const value = input;
19
+ const height = finite(value.height, 0.09);
20
+ const density = finite(value.density, 6000);
21
+ if (!(height > 0) || !(density > 0))
22
+ return null;
23
+ return {
24
+ height,
25
+ density,
26
+ width: Math.max(1e-4, finite(value.width, 0.005)),
27
+ bend: unit(value.bend, 0.35),
28
+ color: linearAlbedo(value.color ?? DEFAULT_COLOR),
29
+ tipColor: linearAlbedo(value.tipColor ?? DEFAULT_TIP),
30
+ dryColor: linearAlbedo(value.dryColor ?? DEFAULT_DRY),
31
+ dryness: unit(value.dryness, 0.12),
32
+ variation: unit(value.variation, 0.35),
33
+ patchiness: unit(value.patchiness, 0.2),
34
+ translucency: unit(value.translucency, 0.45),
35
+ roughness: Math.min(1, Math.max(0.05, finite(value.roughness, 0.5))),
36
+ maxSlope: Math.min(89, Math.max(0, finite(value.maxSlope, 50))),
37
+ seed: Math.round(finite(value.seed, 0)),
38
+ };
39
+ }
40
+ export function grassOf(material) {
41
+ return grassField(material?.grass);
42
+ }
43
+ /** What the frame uniform says when no triangle grows grass. */
44
+ export const GRASS_NONE = 0xffffffff;
45
+ /** Words the kernel reads per patch triangle: its corners, the height along the blade and the side of each, the blade. */
46
+ export const GRASS_TRIANGLE_WORDS = 16;
47
+ /** Words per blade: its root, a random number of its own and the angle its width runs at. */
48
+ export const GRASS_BLADE_WORDS = 4;
49
+ /** Words per lawn: see writeRecord. */
50
+ export const GRASS_RECORD_WORDS = 32;
51
+ /** Words per triangle that grows grass: see writeEntry. */
52
+ export const GRASS_ENTRY_WORDS = 12;
53
+ /** Mulberry32: small, fast and the same everywhere, so a lawn grows the same way on every machine. */
54
+ function random(seed) {
55
+ let state = seed >>> 0;
56
+ return () => {
57
+ state = (state + 0x6d2b79f5) >>> 0;
58
+ let t = state;
59
+ t = Math.imul(t ^ (t >>> 15), t | 1);
60
+ t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
61
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
62
+ };
63
+ }
64
+ /** A normally distributed number, by Box and Muller. */
65
+ const gaussian = (next) => Math.sqrt(-2 * Math.log(1 - next())) * Math.cos(2 * Math.PI * next());
66
+ /** How far a blade's tip can get from its root, which the border shared by every variant has to cover. */
67
+ function bladeReach(field) {
68
+ return field.height * (0.15 + 1.1 * field.bend) + field.width * 2;
69
+ }
70
+ /**
71
+ * One blade: a spine curving away from its root as a quadratic, tapering to a point, with a slight twist. It leans away
72
+ * from the middle of its clump, as grass grows.
73
+ */
74
+ function makeBlade(field, next, x, z, lean) {
75
+ const height = field.height * (0.45 + 0.55 * Math.pow(next(), 0.6));
76
+ const width = field.width * (0.7 + 0.6 * next());
77
+ const amount = field.bend * (0.35 + 0.75 * next());
78
+ const twist = (next() - 0.5) * 0.9;
79
+ const facing = Math.atan2(lean[1], lean[0]) + Math.PI / 2 + (next() - 0.5) * 0.7;
80
+ const segments = height > 0.18 ? 6 : 4;
81
+ const corners = [];
82
+ const heights = [];
83
+ const sides = [];
84
+ const faces = [];
85
+ let reach = 0;
86
+ const spine = (v) => {
87
+ const out = amount * height * v * v;
88
+ // A blade that bends over loses height, roughly as an arc of the same length would.
89
+ const up = height * v * (1 - 0.4 * amount * v);
90
+ return [lean[0] * out, up, lean[1] * out];
91
+ };
92
+ for (let k = 0; k < segments; k++) {
93
+ const v = k / segments;
94
+ const point = spine(v);
95
+ // Widest a little above the root, closing to the tip.
96
+ const half = width * 0.5 * Math.pow(Math.max(0, 1 - Math.pow(v, 2.2)), 0.6) * (0.8 + 0.2 * Math.min(1, v / 0.15));
97
+ const angle = facing + twist * v;
98
+ const across = [Math.cos(angle) * half, Math.sin(angle) * half];
99
+ corners.push(point[0] - across[0], point[1], point[2] - across[1], point[0] + across[0], point[1], point[2] + across[1]);
100
+ heights.push(v, v);
101
+ sides.push(-1, 1);
102
+ reach = Math.max(reach, Math.hypot(point[0], point[2]) + half);
103
+ }
104
+ const tip = spine(1);
105
+ corners.push(tip[0], tip[1], tip[2]);
106
+ heights.push(1);
107
+ sides.push(0);
108
+ reach = Math.max(reach, Math.hypot(tip[0], tip[2]));
109
+ for (let k = 0; k < segments - 1; k++) {
110
+ const l0 = 2 * k, r0 = 2 * k + 1, l1 = 2 * k + 2, r1 = 2 * k + 3;
111
+ faces.push(l0, r0, r1, l0, r1, l1);
112
+ }
113
+ faces.push(2 * (segments - 1), 2 * (segments - 1) + 1, 2 * segments);
114
+ return { x, z, rand: next(), yaw: facing + twist * 0.5, corners, heights, sides, faces, reach };
115
+ }
116
+ /**
117
+ * Every blade of one arrangement over the tile: clumps on a jittered grid, each a handful of blades scattered around its
118
+ * middle, wrapped around the tile so the arrangement repeats without a seam.
119
+ */
120
+ function arrangement(field, tile, seed, count) {
121
+ const next = random(seed);
122
+ const spacing = Math.max(0.025, Math.min(0.12, field.height * 0.7));
123
+ const cells = Math.max(1, Math.round(tile / spacing));
124
+ const step = tile / cells;
125
+ const perClump = count / (cells * cells);
126
+ const blades = [];
127
+ for (let i = 0; i < cells; i++) {
128
+ for (let j = 0; j < cells; j++) {
129
+ const cx = (i + next()) * step;
130
+ const cz = (j + next()) * step;
131
+ // A whole number of blades on average, with the fraction drawn.
132
+ const whole = Math.floor(perClump);
133
+ const n = whole + (next() < perClump - whole ? 1 : 0);
134
+ for (let b = 0; b < n; b++) {
135
+ const dx = gaussian(next) * step * 0.4;
136
+ const dz = gaussian(next) * step * 0.4;
137
+ const away = Math.hypot(dx, dz);
138
+ const angle = next() * Math.PI * 2;
139
+ // Away from the middle of the clump, with some of every direction mixed in.
140
+ const mixX = (away > 1e-6 ? dx / away : 0) * 0.7 + Math.cos(angle) * 0.5;
141
+ const mixZ = (away > 1e-6 ? dz / away : 0) * 0.7 + Math.sin(angle) * 0.5;
142
+ const length = Math.hypot(mixX, mixZ) || 1;
143
+ const x = ((cx + dx) % tile + tile) % tile;
144
+ const z = ((cz + dz) % tile + tile) % tile;
145
+ blades.push(makeBlade(field, next, x, z, [mixX / length, mixZ / length]));
146
+ }
147
+ }
148
+ }
149
+ return blades;
150
+ }
151
+ /** The patches already built, by the parameters that shape them: a scene packed again reuses them. */
152
+ const patches = new Map();
153
+ /**
154
+ * The patch of a lawn. The band along the tile's border, as wide as a blade reaches, is the same in every variant and
155
+ * wraps around, so any variant meets any other without a seam; inside it each variant grows its own blades.
156
+ */
157
+ export function grassPatch(field) {
158
+ const key = JSON.stringify([field.height, field.density, field.width, field.bend, field.seed]);
159
+ const cached = patches.get(key);
160
+ if (cached)
161
+ return cached;
162
+ const reach = bladeReach(field);
163
+ const tile = Math.max(1, reach * 4);
164
+ const count = Math.min(MAX_PATCH_BLADES, Math.round(field.density * tile * tile));
165
+ const inBorder = (blade) => Math.min(blade.x, tile - blade.x, blade.z, tile - blade.z) < reach;
166
+ const border = arrangement(field, tile, field.seed * 7919 + 1, count).filter(inBorder);
167
+ const triangles = [];
168
+ const blades = [];
169
+ const floats = new Float32Array(1);
170
+ const words = new Uint32Array(floats.buffer);
171
+ const word = (value) => (floats[0] = value, words[0]);
172
+ const nodes = [];
173
+ let top = 0;
174
+ for (let variant = 0; variant < VARIANTS; variant++) {
175
+ const inner = arrangement(field, tile, field.seed * 7919 + 101 + variant * 31, count)
176
+ .filter(blade => !inBorder(blade));
177
+ // A blade over the border also shows, shifted by a whole tile, in the tiles on the other side of it.
178
+ const placed = [];
179
+ for (const blade of [...border, ...inner]) {
180
+ for (const ox of [-tile, 0, tile]) {
181
+ for (const oz of [-tile, 0, tile]) {
182
+ const x = blade.x + ox, z = blade.z + oz;
183
+ if (x + blade.reach < 0 || x - blade.reach > tile || z + blade.reach < 0 || z - blade.reach > tile)
184
+ continue;
185
+ placed.push({ blade, ox, oz });
186
+ }
187
+ }
188
+ }
189
+ const positions = [];
190
+ const records = [];
191
+ for (const { blade, ox, oz } of placed) {
192
+ const index = blades.length / GRASS_BLADE_WORDS;
193
+ const x = blade.x + ox, z = blade.z + oz;
194
+ blades.push(word(x), word(z), word(blade.rand), word(blade.yaw));
195
+ for (let f = 0; f < blade.faces.length; f += 3) {
196
+ const record = [];
197
+ for (let c = 0; c < 3; c++) {
198
+ const corner = blade.faces[f + c];
199
+ const px = blade.corners[corner * 3] + x;
200
+ const py = blade.corners[corner * 3 + 1];
201
+ const pz = blade.corners[corner * 3 + 2] + z;
202
+ positions.push(px, py, pz);
203
+ record.push(px, py, pz);
204
+ top = Math.max(top, py);
205
+ }
206
+ for (let c = 0; c < 3; c++)
207
+ record.push(blade.heights[blade.faces[f + c]]);
208
+ for (let c = 0; c < 3; c++)
209
+ record.push(blade.sides[blade.faces[f + c]]);
210
+ records.push([...record, index]);
211
+ }
212
+ }
213
+ const bvh = buildBvh(new Float32Array(positions), records.length);
214
+ const start = triangles.length / GRASS_TRIANGLE_WORDS;
215
+ for (let at = 0; at < bvh.order.length; at++) {
216
+ const record = records[bvh.order[at]];
217
+ for (let k = 0; k < 15; k++)
218
+ triangles.push(word(record[k]));
219
+ triangles.push(record[15]);
220
+ }
221
+ nodes.push(offsetLeaves(bvh.nodes, start));
222
+ }
223
+ const patch = {
224
+ tile,
225
+ top,
226
+ triangles: new Uint32Array(triangles),
227
+ blades: new Uint32Array(blades),
228
+ nodes,
229
+ };
230
+ patches.set(key, patch);
231
+ return patch;
232
+ }
233
+ /** A hierarchy's nodes with every leaf moved along by `start` entries, so several can share one list. */
234
+ function offsetLeaves(source, start) {
235
+ const nodes = new Int32Array(source.slice(0));
236
+ for (let at = 0; at < nodes.length; at += NODE_WORDS) {
237
+ for (const link of [3, 11]) {
238
+ if (nodes[at + link] < 0 && nodes[at + link + 4] > 0)
239
+ nodes[at + link] = -1 - (-1 - nodes[at + link] + start);
240
+ }
241
+ }
242
+ return new Uint32Array(nodes.buffer);
243
+ }
244
+ /**
245
+ * The lawns of a packed scene, laid out to sit at `base` in the texture buffer: each lawn's record, patch triangles,
246
+ * blades and hierarchies, then one entry per triangle that grows grass and the hierarchy over those triangles. `null`
247
+ * when nothing grows any.
248
+ */
249
+ export function packGrass(geometry, base) {
250
+ const fields = geometry.materialProperties.map(properties => properties.grass ?? null);
251
+ if (!fields.some(Boolean))
252
+ return null;
253
+ const words = [];
254
+ const floats = new Float32Array(1);
255
+ const view = new Uint32Array(floats.buffer);
256
+ const word = (value) => (floats[0] = value, view[0]);
257
+ const records = new Map();
258
+ fields.forEach((field, material) => {
259
+ if (!field)
260
+ return;
261
+ const patch = grassPatch(field);
262
+ const at = base + words.length;
263
+ const trianglesAt = at + GRASS_RECORD_WORDS;
264
+ const bladesAt = trianglesAt + patch.triangles.length;
265
+ let nodesAt = bladesAt + patch.blades.length;
266
+ const roots = [];
267
+ for (const nodes of patch.nodes) {
268
+ roots.push(nodesAt);
269
+ nodesAt += nodes.length;
270
+ }
271
+ const record = new Array(GRASS_RECORD_WORDS).fill(0);
272
+ record[0] = word(patch.tile);
273
+ record[1] = word(patch.top);
274
+ record[2] = patch.nodes.length;
275
+ record[3] = trianglesAt;
276
+ record[4] = bladesAt;
277
+ roots.forEach((root, k) => (record[5 + k] = root));
278
+ field.color.forEach((channel, k) => (record[9 + k] = word(channel)));
279
+ field.tipColor.forEach((channel, k) => (record[12 + k] = word(channel)));
280
+ field.dryColor.forEach((channel, k) => (record[15 + k] = word(channel)));
281
+ record[18] = word(field.dryness);
282
+ record[19] = word(field.translucency);
283
+ record[20] = word(field.roughness);
284
+ record[21] = word(field.variation);
285
+ record[22] = word(field.patchiness);
286
+ // The size of the patches the lawn thins out in and changes colour over, a few metres, larger for taller grass.
287
+ record[23] = word(1 / Math.max(1.5, field.height * 30));
288
+ words.push(...record);
289
+ pushAll(words, patch.triangles);
290
+ pushAll(words, patch.blades);
291
+ for (const nodes of patch.nodes)
292
+ pushAll(words, nodes);
293
+ records.set(material, { at, field, patch });
294
+ });
295
+ const entries = [];
296
+ const boxes = [];
297
+ const p = geometry.positions;
298
+ const n = geometry.normals;
299
+ for (let triangle = 0; triangle < geometry.triangleCount; triangle++) {
300
+ const lawn = records.get(geometry.materials[triangle]);
301
+ if (!lawn)
302
+ continue;
303
+ const at = triangle * 9;
304
+ const e1 = [p[at + 3] - p[at], p[at + 4] - p[at + 1], p[at + 5] - p[at + 2]];
305
+ const e2 = [p[at + 6] - p[at], p[at + 7] - p[at + 1], p[at + 8] - p[at + 2]];
306
+ const geometric = [e1[1] * e2[2] - e1[2] * e2[1], e1[2] * e2[0] - e1[0] * e2[2], e1[0] * e2[1] - e1[1] * e2[0]];
307
+ const length = Math.hypot(geometric[0], geometric[1], geometric[2]);
308
+ if (length < 1e-12)
309
+ continue;
310
+ // The side the surface faces: its vertex normals where it has them, which survive a winding turned around.
311
+ const authored = [0, 1, 2].map(axis => n[at + axis] + n[at + 3 + axis] + n[at + 6 + axis]);
312
+ const facing = Math.hypot(authored[0], authored[1], authored[2]) > 1e-6 ? authored[1] : geometric[1];
313
+ const up = Math.abs(geometric[1]) / length;
314
+ if (facing <= 0 || up < Math.cos(lawn.field.maxSlope * Math.PI / 180))
315
+ continue;
316
+ // The plane as a height over the ground: y = p0 + sx x + sz z.
317
+ const sx = -geometric[0] / geometric[1];
318
+ const sz = -geometric[2] / geometric[1];
319
+ const p0 = p[at + 1] - sx * p[at] - sz * p[at + 2];
320
+ const a = [p[at], p[at + 2]];
321
+ let b = [p[at + 3], p[at + 5]], c = [p[at + 6], p[at + 8]];
322
+ // Anticlockwise on the ground, which the kernel's edge test assumes.
323
+ if ((b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]) < 0)
324
+ [b, c] = [c, b];
325
+ entries.push([lawn.at, a[0], a[1], b[0], b[1], c[0], c[1], p0, sx, sz]);
326
+ const low = [Math.min(a[0], b[0], c[0]), Math.min(p[at + 1], p[at + 4], p[at + 7]), Math.min(a[1], b[1], c[1])];
327
+ const high = [Math.max(a[0], b[0], c[0]), Math.max(p[at + 1], p[at + 4], p[at + 7]) + lawn.patch.top,
328
+ Math.max(a[1], b[1], c[1])];
329
+ const middle = low.map((value, axis) => (value + high[axis]) / 2);
330
+ // A stand-in triangle with the shell's box as its bounds and its middle as its centroid.
331
+ boxes.push(...low, ...high, ...middle);
332
+ }
333
+ if (!entries.length)
334
+ return null;
335
+ const bvh = buildBvh(new Float32Array(boxes), entries.length);
336
+ const entriesAt = base + words.length;
337
+ for (let at = 0; at < bvh.order.length; at++) {
338
+ const entry = entries[bvh.order[at]];
339
+ words.push(entry[0], ...entry.slice(1).map(word), 0, 0);
340
+ }
341
+ const shells = base + words.length;
342
+ pushAll(words, new Uint32Array(bvh.nodes));
343
+ return { words: new Uint32Array(words), shells, entries: entriesAt, count: entries.length };
344
+ }
345
+ /** Appends a typed array without spreading it, which a large patch would overflow the stack with. */
346
+ function pushAll(target, source) {
347
+ for (let i = 0; i < source.length; i++)
348
+ target.push(source[i]);
349
+ }
350
+ //# sourceMappingURL=grass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grass.js","sourceRoot":"","sources":["../src/grass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AA8D/C,MAAM,aAAa,GAAG,SAAS,CAAC;AAChC,MAAM,WAAW,GAAG,SAAS,CAAC;AAC9B,MAAM,WAAW,GAAG,SAAS,CAAC;AAE9B,+EAA+E;AAC/E,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAE/B,sFAAsF;AACtF,MAAM,QAAQ,GAAG,CAAC,CAAC;AAEnB,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,MAAM,IAAI,GAAG,CAAC,KAAc,EAAE,QAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAErG,wFAAwF;AACxF,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,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,KAAqC,CAAC;IACpD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAE5C,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjD,OAAO;QACL,MAAM;QACN,OAAO;QACP,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACjD,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;QAC5B,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,IAAI,aAAa,CAAC;QACjD,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ,IAAI,WAAW,CAAC;QACrD,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ,IAAI,WAAW,CAAC;QACrD,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;QAClC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC;QACtC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC;QACvC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC;QAC5C,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;QACpE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/D,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;KACxC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,QAAwC;IAC9D,OAAO,UAAU,CAAE,QAAsC,EAAE,KAAK,CAAC,CAAC;AACpE,CAAC;AAED,gEAAgE;AAChE,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;AAErC,0HAA0H;AAC1H,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AACvC,6FAA6F;AAC7F,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,uCAAuC;AACvC,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,2DAA2D;AAC3D,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAcpC,sGAAsG;AACtG,SAAS,MAAM,CAAC,IAAY;IAC1B,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC;IAEvB,OAAO,GAAG,EAAE;QACV,KAAK,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG,KAAK,CAAC;QACd,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QAE1C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC;AAED,wDAAwD;AACxD,MAAM,QAAQ,GAAG,CAAC,IAAkB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAgB/G,0GAA0G;AAC1G,SAAS,UAAU,CAAC,KAAiB;IACnC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AACpE,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,KAAiB,EAAE,IAAkB,EAAE,CAAS,EAAE,CAAS,EAAE,IAAsB;IACpG,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACjF,MAAM,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE;QAC1B,MAAM,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,oFAAoF;QACpF,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;QAE/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,sDAAsD;QACtD,MAAM,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAClH,MAAM,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QAEhE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAC/D,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAErB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEjE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC;IAErE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,GAAG,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAClG,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,KAAiB,EAAE,IAAY,EAAE,IAAY,EAAE,KAAa;IAC/E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;IAC1B,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;IACzC,MAAM,MAAM,GAAY,EAAE,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;YAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;YAC/B,gEAAgE;YAChE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE,GAAG,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;gBACvC,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;gBACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAChC,MAAM,KAAK,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;gBACnC,4EAA4E;gBAC5E,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;gBACzE,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;gBACzE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;gBAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;gBAE3C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,GAAG,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,sGAAsG;AACtG,MAAM,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;AAE9C;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/F,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEhC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;IAClF,MAAM,QAAQ,GAAG,CAAC,KAAY,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IACtG,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvF,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,OAAO,GAAG,EAAE,EAAE,KAAK,CAAC;aAClF,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAErC,qGAAqG;QACrG,MAAM,MAAM,GAA+C,EAAE,CAAC;QAE9D,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;YAC1C,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;gBAClC,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;oBAClC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;oBAEzC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI;wBAAE,SAAS;oBAE7G,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAe,EAAE,CAAC;QAE/B,KAAK,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,MAAM,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,iBAAiB,CAAC;YAChD,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;YAEzC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAEjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/C,MAAM,MAAM,GAAa,EAAE,CAAC;gBAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAClC,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBACzC,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBACzC,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBAE7C,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC3B,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;oBACxB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC1B,CAAC;gBAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEzE,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,oBAAoB,CAAC;QAEtD,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;gBAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7D,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7B,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,KAAK,GAAe;QACxB,IAAI;QACJ,GAAG;QACH,SAAS,EAAE,IAAI,WAAW,CAAC,SAAS,CAAC;QACrC,MAAM,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC;QAC/B,KAAK;KACN,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAExB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,yGAAyG;AACzG,SAAS,YAAY,CAAC,MAAmB,EAAE,KAAa;IACtD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,UAAU,EAAE,CAAC;QACrD,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC;gBAAE,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAChH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAaD;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,QAAwB,EAAE,IAAY;IAC9D,MAAM,MAAM,GAAG,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;IAEvF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgE,CAAC;IAExF,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QACjC,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,EAAE,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;QAC/B,MAAM,WAAW,GAAG,EAAE,GAAG,kBAAkB,CAAC;QAC5C,MAAM,QAAQ,GAAG,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;QACtD,IAAI,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7C,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC;QAC1B,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,KAAK,CAAS,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE7D,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;QAC/B,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;QACxB,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;QACrB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACnD,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrE,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzE,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACtC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACpC,gHAAgH;QAChH,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;QAExD,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;QACtB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,KAAK;YAAE,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAEvD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC;IAC7B,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC;IAE3B,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,EAAE,CAAC;QACrE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEvD,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,MAAM,EAAE,GAAG,QAAQ,GAAG,CAAC,CAAC;QACxB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAChH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpE,IAAI,MAAM,GAAG,KAAK;YAAE,SAAS;QAE7B,2GAA2G;QAC3G,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC3F,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACrG,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QAE3C,IAAI,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;YAAE,SAAS;QAEhF,+DAA+D;QAC/D,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAE3D,qEAAqE;QACrE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEvF,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAExE,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhH,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG;YAClG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9B,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAElE,yFAAyF;QACzF,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEjC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;IAEtC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAErC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;IAEnC,OAAO,CAAC,KAAK,EAAE,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAE3C,OAAO,EAAE,KAAK,EAAE,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;AAC9F,CAAC;AAED,qGAAqG;AACrG,SAAS,OAAO,CAAC,MAAgB,EAAE,MAAmB;IACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC"}
package/dist/index.d.ts CHANGED
@@ -9,6 +9,8 @@ export type { DenoiserAlgorithm, DenoiserSettings } from "./denoise.js";
9
9
  export { DEFAULT_GPU_RENDER_SETTINGS, effectiveExposure, mergeGpuSettings, physicalExposure, whiteBalanceMatrix, } from "./settings.js";
10
10
  export type { GpuRenderSettings, GpuRenderSettingsInput } from "./settings.js";
11
11
  export { subsurfaceMedium } from "./subsurface.js";
12
+ export { grassField } from "./grass.js";
13
+ export type { GrassField, GrassInput, GrassMaterial } from "./grass.js";
12
14
  export type { SubsurfaceInput, SubsurfaceMaterial, SubsurfaceMedium } from "./subsurface.js";
13
15
  export type { Bucket, Listener } from "./upstream.js";
14
16
  export { packGeometry } from "./geometry.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC3F,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE1D,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,WAAW,EACX,YAAY,EACZ,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGxE,OAAO,EACL,2BAA2B,EAC3B,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE7F,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACnD,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACxG,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACrF,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5D,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAG1D,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,aAAa,EACb,cAAc,EACd,eAAe,EACf,cAAc,GACf,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,qBAAqB,GACtB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC3F,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE1D,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,WAAW,EACX,YAAY,EACZ,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGxE,OAAO,EACL,2BAA2B,EAC3B,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACxE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE7F,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACnD,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACxG,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACrF,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5D,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAG1D,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,aAAa,EACb,cAAc,EACd,eAAe,EACf,cAAc,GACf,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,qBAAqB,GACtB,MAAM,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -8,6 +8,7 @@ export { DEFAULT_OIDN_WEIGHTS } from "./oidnPass.js";
8
8
  // The settings only this renderer reads, beside the CPU renderer's, and the defaults it renders with.
9
9
  export { DEFAULT_GPU_RENDER_SETTINGS, effectiveExposure, mergeGpuSettings, physicalExposure, whiteBalanceMatrix, } from "./settings.js";
10
10
  export { subsurfaceMedium } from "./subsurface.js";
11
+ export { grassField } from "./grass.js";
11
12
  // Scene packing, published because the sizes it produces are what a host checks against a device's limits.
12
13
  export { packGeometry } from "./geometry.js";
13
14
  export { buildBvh, MAX_BVH_DEPTH } from "./bvh.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sHAAsH;AACtH,2EAA2E;AAE3E,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAG3F,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAY1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD,sGAAsG;AACtG,OAAO,EACL,2BAA2B,EAC3B,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAKnD,2GAA2G;AAC3G,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEnD,uGAAuG;AACvG,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAExG,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAErF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD,0FAA0F;AAC1F,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,aAAa,EACb,cAAc,EACd,eAAe,EACf,cAAc,GACf,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sHAAsH;AACtH,2EAA2E;AAE3E,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAG3F,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAY1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD,sGAAsG;AACtG,OAAO,EACL,2BAA2B,EAC3B,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAMxC,2GAA2G;AAC3G,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEnD,uGAAuG;AACvG,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAExG,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAErF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGnD,0FAA0F;AAC1F,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,aAAa,EACb,cAAc,EACd,eAAe,EACf,cAAc,GACf,MAAM,eAAe,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { type GrassField } from "./grass.js";
1
2
  import type { SerializedMaterial } from "./upstream.js";
2
3
  /**
3
4
  * What a surface is, reduced to what the integrator reads. Three's own defaults and its shading models are resolved
@@ -70,6 +71,11 @@ export interface MaterialProperties {
70
71
  volumeAnisotropy: number;
71
72
  /** The radius over which edges are rounded at shading time, in scene units; zero leaves them sharp. */
72
73
  bevel: number;
74
+ /**
75
+ * The lawn grown on the surface, from `userData.cpuRenderer.grass`. It lives in the texture buffer's extra words
76
+ * rather than in the struct: see grass.ts.
77
+ */
78
+ grass?: GrassField | null;
73
79
  /** An index into the texture table per slot, or `NO_TEXTURE`. */
74
80
  maps: Record<MaterialMap, number>;
75
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"materialLayout.d.ts","sourceRoot":"","sources":["../src/materialLayout.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,eAAe,CAAC;AAEtE;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,2GAA2G;IAC3G,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,sHAAsH;IACtH,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,oHAAoH;IACpH,SAAS,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,sFAAsF;IACtF,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,iFAAiF;IACjF,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oHAAoH;IACpH,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,uGAAuG;IACvG,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,wGAAwG;AACxG,MAAM,WAAW,iBAAiB;IAChC,gGAAgG;IAChG,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB;kCAC8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,6FAA6F;IAC7F,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,yFAAyF;IACzF,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,qZAI8D,CAAC;AAEzF,MAAM,MAAM,WAAW,GAAG,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAEvD,uFAAuF;AACvF,eAAO,MAAM,aAAa;;;;;;IAMxB,+CAA+C;;;IAG/C,oCAAoC;;;;IAIpC,wGAAwG;;CAEhG,CAAC;AAEX,yGAAyG;AACzG,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,kFAAkF;AAClF,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,wCAAwC;AACxC,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,2FAA2F;AAC3F,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,qFAAqF;AACrF,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,sFAAsF;AACtF,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,0HAA0H;AAC1H,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC;;;GAGG;AACH,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,QAAQ,CAAC;AAE1C,kEAAkE;AAClE,eAAO,MAAM,UAAU,aAAa,CAAC;AA2DrC,iEAAiE;AACjE,eAAO,MAAM,eAAe,0CAAmC,CAAC;AAEhE,eAAO,MAAM,cAAc,QAAwB,CAAC;AA8CpD,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,SAAS,GAAG,OAAO,CAEnF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,kBAAkB,GAAG,SAAS,EACxC,QAAQ,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAa,GAAG,kBAAkB,CA8FvE;AAED,qHAAqH;AACrH,eAAO,MAAM,YAAY,EAAE,iBAW1B,CAAC;AAEF,2DAA2D;AAC3D,wBAAgB,aAAa,CAC3B,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,SAAS,GAAE,iBAAgC,QA4DhH"}
1
+ {"version":3,"file":"materialLayout.d.ts","sourceRoot":"","sources":["../src/materialLayout.ts"],"names":[],"mappings":"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"}