@opsydyn/effect-three 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/LICENSE +21 -0
  3. package/README.md +189 -2
  4. package/dist/index-01kwfekm.js +5118 -0
  5. package/dist/index-01kwfekm.js.map +40 -0
  6. package/dist/index-4045wme0.js +129 -0
  7. package/dist/index-4045wme0.js.map +10 -0
  8. package/dist/index.d.ts +12 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +1361 -0
  11. package/dist/index.js.map +14 -0
  12. package/dist/kernel/animation.d.ts +14 -0
  13. package/dist/kernel/animation.d.ts.map +1 -0
  14. package/dist/kernel/behaviours.d.ts +16 -0
  15. package/dist/kernel/behaviours.d.ts.map +1 -0
  16. package/dist/kernel/bodies.d.ts +60 -0
  17. package/dist/kernel/bodies.d.ts.map +1 -0
  18. package/dist/kernel/bodySources.d.ts +47 -0
  19. package/dist/kernel/bodySources.d.ts.map +1 -0
  20. package/dist/kernel/build.d.ts +564 -0
  21. package/dist/kernel/build.d.ts.map +1 -0
  22. package/dist/kernel/cameraMotion.d.ts +39 -0
  23. package/dist/kernel/cameraMotion.d.ts.map +1 -0
  24. package/dist/kernel/clock.d.ts +17 -0
  25. package/dist/kernel/clock.d.ts.map +1 -0
  26. package/dist/kernel/contactShadowPasses.d.ts +47 -0
  27. package/dist/kernel/contactShadowPasses.d.ts.map +1 -0
  28. package/dist/kernel/description.d.ts +1120 -0
  29. package/dist/kernel/description.d.ts.map +1 -0
  30. package/dist/kernel/diff.d.ts +90 -0
  31. package/dist/kernel/diff.d.ts.map +1 -0
  32. package/dist/kernel/environmentPresets.d.ts +30 -0
  33. package/dist/kernel/environmentPresets.d.ts.map +1 -0
  34. package/dist/kernel/equality.d.ts +64 -0
  35. package/dist/kernel/equality.d.ts.map +1 -0
  36. package/dist/kernel/frames.d.ts +55 -0
  37. package/dist/kernel/frames.d.ts.map +1 -0
  38. package/dist/kernel/index.d.ts +37 -0
  39. package/dist/kernel/index.d.ts.map +1 -0
  40. package/dist/kernel/index.js +335 -0
  41. package/dist/kernel/index.js.map +9 -0
  42. package/dist/kernel/instances.d.ts +26 -0
  43. package/dist/kernel/instances.d.ts.map +1 -0
  44. package/dist/kernel/labels.d.ts +51 -0
  45. package/dist/kernel/labels.d.ts.map +1 -0
  46. package/dist/kernel/loop.d.ts +49 -0
  47. package/dist/kernel/loop.d.ts.map +1 -0
  48. package/dist/kernel/materials.d.ts +24 -0
  49. package/dist/kernel/materials.d.ts.map +1 -0
  50. package/dist/kernel/motion.d.ts +36 -0
  51. package/dist/kernel/motion.d.ts.map +1 -0
  52. package/dist/kernel/orbit.d.ts +127 -0
  53. package/dist/kernel/orbit.d.ts.map +1 -0
  54. package/dist/kernel/overlays.d.ts +16 -0
  55. package/dist/kernel/overlays.d.ts.map +1 -0
  56. package/dist/kernel/performance.d.ts +41 -0
  57. package/dist/kernel/performance.d.ts.map +1 -0
  58. package/dist/kernel/physics.d.ts +166 -0
  59. package/dist/kernel/physics.d.ts.map +1 -0
  60. package/dist/kernel/physicsDebug.d.ts +18 -0
  61. package/dist/kernel/physicsDebug.d.ts.map +1 -0
  62. package/dist/kernel/pointer.d.ts +357 -0
  63. package/dist/kernel/pointer.d.ts.map +1 -0
  64. package/dist/kernel/renderKit.d.ts +49 -0
  65. package/dist/kernel/renderKit.d.ts.map +1 -0
  66. package/dist/kernel/renderer.d.ts +83 -0
  67. package/dist/kernel/renderer.d.ts.map +1 -0
  68. package/dist/kernel/resources.d.ts +112 -0
  69. package/dist/kernel/resources.d.ts.map +1 -0
  70. package/dist/kernel/sceneGraph.d.ts +155 -0
  71. package/dist/kernel/sceneGraph.d.ts.map +1 -0
  72. package/dist/kernel/sceneIndex.d.ts +90 -0
  73. package/dist/kernel/sceneIndex.d.ts.map +1 -0
  74. package/dist/kernel/stage.d.ts +87 -0
  75. package/dist/kernel/stage.d.ts.map +1 -0
  76. package/dist/kernel/textLayout.d.ts +29 -0
  77. package/dist/kernel/textLayout.d.ts.map +1 -0
  78. package/dist/kernel/tween.d.ts +35 -0
  79. package/dist/kernel/tween.d.ts.map +1 -0
  80. package/dist/kernel/xrInput.d.ts +107 -0
  81. package/dist/kernel/xrInput.d.ts.map +1 -0
  82. package/dist/kernel/xrLocomotion.d.ts +38 -0
  83. package/dist/kernel/xrLocomotion.d.ts.map +1 -0
  84. package/dist/runtime/FrameSource.d.ts +29 -0
  85. package/dist/runtime/FrameSource.d.ts.map +1 -0
  86. package/dist/runtime/ResourceRegistry.d.ts +18 -0
  87. package/dist/runtime/ResourceRegistry.d.ts.map +1 -0
  88. package/dist/runtime/SceneRuntime.d.ts +68 -0
  89. package/dist/runtime/SceneRuntime.d.ts.map +1 -0
  90. package/dist/runtime/SceneSchema.d.ts +2536 -0
  91. package/dist/runtime/SceneSchema.d.ts.map +1 -0
  92. package/dist/runtime/errors.d.ts +19 -0
  93. package/dist/runtime/errors.d.ts.map +1 -0
  94. package/dist/runtime/index.d.ts +11 -0
  95. package/dist/runtime/index.d.ts.map +1 -0
  96. package/dist/webgl/contactShadows.d.ts +5 -0
  97. package/dist/webgl/contactShadows.d.ts.map +1 -0
  98. package/dist/webgl/index.d.ts +11 -0
  99. package/dist/webgl/index.d.ts.map +1 -0
  100. package/dist/webgl/index.js +239 -0
  101. package/dist/webgl/index.js.map +13 -0
  102. package/dist/webgl/shaderGrid.d.ts +27 -0
  103. package/dist/webgl/shaderGrid.d.ts.map +1 -0
  104. package/dist/webgl/sky.d.ts +4 -0
  105. package/dist/webgl/sky.d.ts.map +1 -0
  106. package/dist/webgpu/contactShadows.d.ts +5 -0
  107. package/dist/webgpu/contactShadows.d.ts.map +1 -0
  108. package/dist/webgpu/index.d.ts +10 -0
  109. package/dist/webgpu/index.d.ts.map +1 -0
  110. package/dist/webgpu/index.js +216 -0
  111. package/dist/webgpu/index.js.map +13 -0
  112. package/dist/webgpu/shaderGrid.d.ts +5 -0
  113. package/dist/webgpu/shaderGrid.d.ts.map +1 -0
  114. package/dist/webgpu/sky.d.ts +4 -0
  115. package/dist/webgpu/sky.d.ts.map +1 -0
  116. package/package.json +82 -4
  117. package/src/index.ts +11 -0
  118. package/src/kernel/animation.ts +24 -0
  119. package/src/kernel/behaviours.ts +36 -0
  120. package/src/kernel/bodies.ts +338 -0
  121. package/src/kernel/bodySources.ts +203 -0
  122. package/src/kernel/build.ts +1325 -0
  123. package/src/kernel/cameraMotion.ts +202 -0
  124. package/src/kernel/clock.ts +35 -0
  125. package/src/kernel/contactShadowPasses.ts +207 -0
  126. package/src/kernel/description.ts +1197 -0
  127. package/src/kernel/diff.ts +383 -0
  128. package/src/kernel/environmentPresets.ts +38 -0
  129. package/src/kernel/equality.ts +604 -0
  130. package/src/kernel/frames.ts +124 -0
  131. package/src/kernel/index.ts +274 -0
  132. package/src/kernel/instances.ts +97 -0
  133. package/src/kernel/labels.ts +54 -0
  134. package/src/kernel/loop.ts +248 -0
  135. package/src/kernel/materials.ts +258 -0
  136. package/src/kernel/motion.ts +75 -0
  137. package/src/kernel/orbit.ts +554 -0
  138. package/src/kernel/overlays.ts +130 -0
  139. package/src/kernel/performance.ts +101 -0
  140. package/src/kernel/physics.ts +361 -0
  141. package/src/kernel/physicsDebug.ts +68 -0
  142. package/src/kernel/pointer.ts +785 -0
  143. package/src/kernel/renderKit.ts +54 -0
  144. package/src/kernel/renderer.ts +136 -0
  145. package/src/kernel/resources.ts +504 -0
  146. package/src/kernel/sceneGraph.ts +1442 -0
  147. package/src/kernel/sceneIndex.ts +219 -0
  148. package/src/kernel/stage.ts +157 -0
  149. package/src/kernel/textLayout.ts +102 -0
  150. package/src/kernel/tween.ts +80 -0
  151. package/src/kernel/xrInput.ts +230 -0
  152. package/src/kernel/xrLocomotion.ts +72 -0
  153. package/src/runtime/FrameSource.ts +41 -0
  154. package/src/runtime/ResourceRegistry.ts +24 -0
  155. package/src/runtime/SceneRuntime.ts +229 -0
  156. package/src/runtime/SceneSchema.ts +983 -0
  157. package/src/runtime/errors.ts +18 -0
  158. package/src/runtime/index.ts +10 -0
  159. package/src/webgl/contactShadows.ts +67 -0
  160. package/src/webgl/index.ts +19 -0
  161. package/src/webgl/shaderGrid.ts +196 -0
  162. package/src/webgl/sky.ts +42 -0
  163. package/src/webgpu/contactShadows.ts +83 -0
  164. package/src/webgpu/index.ts +19 -0
  165. package/src/webgpu/shaderGrid.ts +158 -0
  166. package/src/webgpu/sky.ts +35 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SceneSchema.d.ts","sourceRoot":"","sources":["../../src/runtime/SceneSchema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { DescriptionError } from '../kernel/index.ts';
2
+ declare const InvalidScene_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
3
+ readonly _tag: "InvalidScene";
4
+ } & Readonly<A>;
5
+ /** A scene description was rejected. Nothing was applied. */
6
+ export declare class InvalidScene extends InvalidScene_base<{
7
+ readonly error: DescriptionError;
8
+ }> {
9
+ }
10
+ declare const RendererUnavailable_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
11
+ readonly _tag: "RendererUnavailable";
12
+ } & Readonly<A>;
13
+ /** The renderer backend could not be created (for example, no WebGL2 context). */
14
+ export declare class RendererUnavailable extends RendererUnavailable_base<{
15
+ readonly cause: unknown;
16
+ }> {
17
+ }
18
+ export {};
19
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;;;;AAE3D,6DAA6D;AAC7D,qBAAa,YAAa,SAAQ,kBAAiC;IACjE,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;CAClC,CAAC;CAAG;;;;AAEL,kFAAkF;AAClF,qBAAa,mBAAoB,SAAQ,yBAAwC;IAC/E,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB,CAAC;CAAG"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The Effect runtime: lifetimes, services and typed errors around the kernel.
3
+ *
4
+ * @module
5
+ */
6
+ export { InvalidScene, RendererUnavailable } from './errors.ts';
7
+ export * as FrameSource from './FrameSource.ts';
8
+ export * as ResourceRegistry from './ResourceRegistry.ts';
9
+ export * as SceneRuntime from './SceneRuntime.ts';
10
+ export * as SceneSchema from './SceneSchema.ts';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { SceneRenderer } from '../kernel/renderer.ts';
2
+ import type { ContactShadowPasses, ShadowedScene } from '../kernel/renderKit.ts';
3
+ /** Creates the contact shadow passes for one scene graph and renderer, in GLSL. */
4
+ export declare const createContactShadows: (graph: ShadowedScene, renderer: SceneRenderer) => ContactShadowPasses;
5
+ //# sourceMappingURL=contactShadows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contactShadows.d.ts","sourceRoot":"","sources":["../../src/webgl/contactShadows.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AA6CjF,mFAAmF;AACnF,eAAO,MAAM,oBAAoB,UACxB,aAAa,YACV,aAAa,KACtB,mBAAuF,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The WebGL render kit: the scene parts written in GLSL (the sky, the shader grid,
3
+ * contact shadows), for renderers drawing with three.js's `WebGLRenderer`. The Foldkit
4
+ * adapter's `webglRendererFactory` carries it; pass it to `createSceneGraph({ kit })`
5
+ * when using the kernel directly.
6
+ *
7
+ * @module
8
+ */
9
+ import type { RenderKit } from '../kernel/renderKit.ts';
10
+ export declare const webglKit: RenderKit;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/webgl/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAKxD,eAAO,MAAM,QAAQ,EAAE,SAKtB,CAAC"}
@@ -0,0 +1,239 @@
1
+ import {
2
+ createContactShadowPasses
3
+ } from "../index-4045wme0.js";
4
+
5
+ // src/webgl/contactShadows.ts
6
+ import { MeshDepthMaterial, ShaderMaterial } from "three";
7
+ import { HorizontalBlurShader } from "three/addons/shaders/HorizontalBlurShader.js";
8
+ import { VerticalBlurShader } from "three/addons/shaders/VerticalBlurShader.js";
9
+ var shadowShader = {
10
+ depthOutput: "gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );",
11
+ shadowOutput: "gl_FragColor = vec4( shadowColor * fragCoordZ * 2.0, 1.0 - fragCoordZ );"
12
+ };
13
+ var depth = (color) => {
14
+ const material = new MeshDepthMaterial;
15
+ material.depthTest = false;
16
+ material.depthWrite = false;
17
+ material.onBeforeCompile = (shader) => {
18
+ shader.uniforms["shadowColor"] = { value: color };
19
+ shader.fragmentShader = `uniform vec3 shadowColor;
20
+ ${shader.fragmentShader.replace(shadowShader.depthOutput, shadowShader.shadowOutput)}`;
21
+ };
22
+ return material;
23
+ };
24
+ var blurShaders = {
25
+ horizontal: { shader: HorizontalBlurShader, step: "h" },
26
+ vertical: { shader: VerticalBlurShader, step: "v" }
27
+ };
28
+ var blur = (direction) => {
29
+ const { shader, step } = blurShaders[direction];
30
+ const material = new ShaderMaterial({ ...shader, depthTest: false });
31
+ return {
32
+ material,
33
+ set: (source, amount) => {
34
+ Reflect.set(material.uniforms["tDiffuse"] ?? {}, "value", source);
35
+ Reflect.set(material.uniforms[step] ?? {}, "value", amount);
36
+ }
37
+ };
38
+ };
39
+ var webglShadowMaterials = { depth, blur, flippedTargets: false };
40
+ var createContactShadows = (graph, renderer) => createContactShadowPasses(graph, renderer, webglShadowMaterials);
41
+
42
+ // src/webgl/shaderGrid.ts
43
+ import {
44
+ BackSide,
45
+ Color,
46
+ DoubleSide,
47
+ FrontSide,
48
+ Mesh,
49
+ Plane,
50
+ PlaneGeometry,
51
+ ShaderMaterial as ShaderMaterial2,
52
+ Vector3
53
+ } from "three";
54
+ var sides = { front: FrontSide, back: BackSide, double: DoubleSide };
55
+ var vertexShader = `
56
+ uniform vec3 cameraOnPlane;
57
+ uniform vec3 planeOrigin;
58
+ uniform float fadeDistance;
59
+ uniform bool infiniteGrid;
60
+ uniform bool followCamera;
61
+
62
+ varying vec3 gridPosition;
63
+ varying vec4 worldPosition;
64
+
65
+ void main() {
66
+ // The plane geometry lies in XY; the grid lies in XZ.
67
+ gridPosition = position.xzy;
68
+ if (infiniteGrid) gridPosition *= 1.0 + fadeDistance;
69
+ worldPosition = modelMatrix * vec4(gridPosition, 1.0);
70
+ if (followCamera) {
71
+ worldPosition.xyz += cameraOnPlane - planeOrigin;
72
+ gridPosition = (inverse(modelMatrix) * worldPosition).xyz;
73
+ }
74
+ gl_Position = projectionMatrix * viewMatrix * worldPosition;
75
+ }
76
+ `;
77
+ var fragmentShader = `
78
+ uniform vec3 cameraOnPlane;
79
+ uniform float cellSize;
80
+ uniform float cellThickness;
81
+ uniform vec3 cellColor;
82
+ uniform float sectionSize;
83
+ uniform float sectionThickness;
84
+ uniform vec3 sectionColor;
85
+ uniform float fadeDistance;
86
+ uniform float fadeStrength;
87
+ uniform float fadeFrom;
88
+
89
+ varying vec3 gridPosition;
90
+ varying vec4 worldPosition;
91
+
92
+ // 1 on a line of a grid with this spacing, 0 between, antialiased over a pixel.
93
+ float lines(float spacing, float thickness) {
94
+ vec2 at = gridPosition.xz / spacing;
95
+ vec2 away = abs(fract(at - 0.5) - 0.5) / fwidth(at);
96
+ return 1.0 - min(min(away.x, away.y) + 1.0 - thickness, 1.0);
97
+ }
98
+
99
+ void main() {
100
+ float cell = lines(cellSize, cellThickness);
101
+ float section = lines(sectionSize, sectionThickness);
102
+ float distanceAway = distance(cameraOnPlane * fadeFrom, worldPosition.xyz);
103
+ float fade = pow(1.0 - min(distanceAway / fadeDistance, 1.0), fadeStrength);
104
+ vec3 color = mix(cellColor, sectionColor, min(1.0, sectionThickness * section));
105
+ float alpha = (cell + section) * fade;
106
+ alpha = mix(0.75 * alpha, alpha, section);
107
+ if (alpha <= 0.0) discard;
108
+ gl_FragColor = vec4(color, alpha);
109
+ #include <tonemapping_fragment>
110
+ #include <colorspace_fragment>
111
+ }
112
+ `;
113
+ var up = new Vector3(0, 1, 0);
114
+ var origin = new Vector3;
115
+ var plane = new Plane;
116
+ var cameraPosition = new Vector3;
117
+ var writeUniforms = (material, node) => {
118
+ const { uniforms } = material;
119
+ const set = (name, value) => {
120
+ const uniform = uniforms[name];
121
+ if (uniform !== undefined)
122
+ uniform.value = value;
123
+ };
124
+ set("cellSize", node.cellSize);
125
+ set("cellThickness", node.cellThickness);
126
+ set("sectionSize", node.sectionSize);
127
+ set("sectionThickness", node.sectionThickness);
128
+ set("fadeDistance", node.fadeDistance);
129
+ set("fadeStrength", node.fadeStrength);
130
+ set("fadeFrom", node.fadeFrom);
131
+ set("infiniteGrid", node.infinite);
132
+ set("followCamera", node.followCamera);
133
+ uniforms["cellColor"]?.value.setHex(node.cellColor);
134
+ uniforms["sectionColor"]?.value.setHex(node.sectionColor);
135
+ material.side = sides[node.side];
136
+ };
137
+ var writePlacement = (mesh, node) => {
138
+ mesh.position.fromArray(node.position);
139
+ mesh.rotation.fromArray([...node.rotation]);
140
+ };
141
+ var createShaderGrid = (node) => {
142
+ const material = new ShaderMaterial2({
143
+ uniforms: {
144
+ cellSize: { value: 0 },
145
+ cellThickness: { value: 0 },
146
+ cellColor: { value: new Color },
147
+ sectionSize: { value: 0 },
148
+ sectionThickness: { value: 0 },
149
+ sectionColor: { value: new Color },
150
+ fadeDistance: { value: 0 },
151
+ fadeStrength: { value: 0 },
152
+ fadeFrom: { value: 0 },
153
+ infiniteGrid: { value: false },
154
+ followCamera: { value: false },
155
+ cameraOnPlane: { value: new Vector3 },
156
+ planeOrigin: { value: new Vector3 }
157
+ },
158
+ vertexShader,
159
+ fragmentShader,
160
+ transparent: true
161
+ });
162
+ writeUniforms(material, node);
163
+ const mesh = new Mesh(new PlaneGeometry(...node.size), material);
164
+ mesh.frustumCulled = false;
165
+ writePlacement(mesh, node);
166
+ mesh.onBeforeRender = (_renderer, _scene, camera) => {
167
+ plane.setFromNormalAndCoplanarPoint(up, origin).applyMatrix4(mesh.matrixWorld);
168
+ plane.projectPoint(cameraPosition.setFromMatrixPosition(camera.matrixWorld), material.uniforms["cameraOnPlane"]?.value);
169
+ material.uniforms["planeOrigin"]?.value.set(0, 0, 0).applyMatrix4(mesh.matrixWorld);
170
+ };
171
+ return mesh;
172
+ };
173
+ var updateShaderGrid = (mesh, previous, next) => {
174
+ if (previous.size[0] !== next.size[0] || previous.size[1] !== next.size[1]) {
175
+ mesh.geometry.dispose();
176
+ mesh.geometry = new PlaneGeometry(...next.size);
177
+ }
178
+ writeUniforms(mesh.material, next);
179
+ writePlacement(mesh, next);
180
+ };
181
+ var disposeShaderGrid = (mesh) => {
182
+ mesh.geometry.dispose();
183
+ mesh.material.dispose();
184
+ };
185
+ var hostShaderGrid = (node) => {
186
+ const mesh = createShaderGrid(node);
187
+ return {
188
+ object: mesh,
189
+ update: (previous, next) => updateShaderGrid(mesh, previous, next),
190
+ dispose: () => disposeShaderGrid(mesh)
191
+ };
192
+ };
193
+
194
+ // src/webgl/sky.ts
195
+ import { Vector3 as Vector32 } from "three";
196
+ import { Sky as SkyMesh } from "three/addons/objects/Sky.js";
197
+ var writeSky = (mesh, description) => {
198
+ const { uniforms } = mesh.material;
199
+ const set = (name, value) => {
200
+ const uniform = uniforms[name];
201
+ if (uniform !== undefined)
202
+ uniform.value = value;
203
+ };
204
+ set("turbidity", description.turbidity);
205
+ set("rayleigh", description.rayleigh);
206
+ set("mieCoefficient", description.mieCoefficient);
207
+ set("mieDirectionalG", description.mieDirectionalG);
208
+ set("cloudCoverage", description.clouds);
209
+ set("sunPosition", new Vector32().fromArray(description.sunPosition));
210
+ mesh.scale.setScalar(description.distance);
211
+ };
212
+ var hostSky = () => {
213
+ const mesh = new SkyMesh;
214
+ mesh.raycast = () => {
215
+ return;
216
+ };
217
+ return {
218
+ object: mesh,
219
+ update: (description) => writeSky(mesh, description),
220
+ dispose: () => {
221
+ mesh.geometry.dispose();
222
+ mesh.material.dispose();
223
+ }
224
+ };
225
+ };
226
+
227
+ // src/webgl/index.ts
228
+ var webglKit = {
229
+ shading: "webgl",
230
+ sky: hostSky,
231
+ shaderGrid: hostShaderGrid,
232
+ contactShadows: createContactShadows
233
+ };
234
+ export {
235
+ webglKit
236
+ };
237
+
238
+ //# debugId=E10747A03E7930B464756E2164756E21
239
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,13 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/webgl/contactShadows.ts", "../src/webgl/shaderGrid.ts", "../src/webgl/sky.ts", "../src/webgl/index.ts"],
4
+ "sourcesContent": [
5
+ "/**\n * The WebGL kit's contact shadow materials: three's depth material with its output\n * replaced by the shadow (as Drei's `ContactShadows`, `bf6f4ad`), and three's horizontal\n * and vertical blur shaders. The passes themselves are the kernel's.\n *\n * @module\n */\nimport { type Color, MeshDepthMaterial, ShaderMaterial } from 'three';\nimport { HorizontalBlurShader } from 'three/addons/shaders/HorizontalBlurShader.js';\nimport { VerticalBlurShader } from 'three/addons/shaders/VerticalBlurShader.js';\n\nimport {\n type BlurPass,\n createContactShadowPasses,\n type ShadowMaterials,\n} from '../kernel/contactShadowPasses.ts';\nimport type { SceneRenderer } from '../kernel/renderer.ts';\nimport type { ContactShadowPasses, ShadowedScene } from '../kernel/renderKit.ts';\n\n/**\n * The shadow pass's edit to three's depth shader: its basic-packing output, and the\n * shadow written instead (darkest where an object touches the plane).\n */\nconst shadowShader = {\n depthOutput: 'gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );',\n shadowOutput: 'gl_FragColor = vec4( shadowColor * fragCoordZ * 2.0, 1.0 - fragCoordZ );',\n} as const;\n\nconst depth = (color: Color): MeshDepthMaterial => {\n const material = new MeshDepthMaterial();\n material.depthTest = false;\n material.depthWrite = false;\n material.onBeforeCompile = (shader) => {\n shader.uniforms['shadowColor'] = { value: color };\n shader.fragmentShader = `uniform vec3 shadowColor;\\n${shader.fragmentShader.replace(\n shadowShader.depthOutput,\n shadowShader.shadowOutput,\n )}`;\n };\n return material;\n};\n\n/** three's blur shaders: `h` (horizontal) or `v` (vertical) is the step, `tDiffuse` the source. */\nconst blurShaders = {\n horizontal: { shader: HorizontalBlurShader, step: 'h' },\n vertical: { shader: VerticalBlurShader, step: 'v' },\n} as const;\n\nconst blur = (direction: 'horizontal' | 'vertical'): BlurPass => {\n const { shader, step } = blurShaders[direction];\n const material = new ShaderMaterial({ ...shader, depthTest: false });\n return {\n material,\n set: (source, amount) => {\n Reflect.set(material.uniforms['tDiffuse'] ?? {}, 'value', source);\n Reflect.set(material.uniforms[step] ?? {}, 'value', amount);\n },\n };\n};\n\nconst webglShadowMaterials: ShadowMaterials = { depth, blur, flippedTargets: false };\n\n/** Creates the contact shadow passes for one scene graph and renderer, in GLSL. */\nexport const createContactShadows = (\n graph: ShadowedScene,\n renderer: SceneRenderer,\n): ContactShadowPasses => createContactShadowPasses(graph, renderer, webglShadowMaterials);\n",
6
+ "/**\n * Drei's `Grid` (`src/core/Grid.tsx` at `bf6f4ad`, MIT; itself after Fyrestar's\n * `THREE.InfiniteGridHelper` and threlte's `Grid`): a plane whose shader draws thin cell\n * lines and thicker section lines from screen-space derivatives, fading with distance\n * from the camera's foot on the plane. An infinite grid stretches the plane by the fade\n * distance; one that follows the camera slides under it.\n *\n * Each frame the material needs the camera drawing it projected onto the grid's plane.\n * Drei sets that in `useFrame`; here `onBeforeRender` does it, so every view (and each\n * eye in XR) gets its own camera.\n *\n * @module\n */\nimport {\n BackSide,\n Color,\n DoubleSide,\n FrontSide,\n Mesh,\n Plane,\n PlaneGeometry,\n ShaderMaterial,\n type Side,\n Vector3,\n} from 'three';\n\nimport type { MaterialSide, ShaderGridNode } from '../kernel/description.ts';\nimport type { HostedShaderGrid } from '../kernel/renderKit.ts';\n\n/** The mesh a shader grid is hosted as. */\nexport type HostShaderGrid = Mesh<PlaneGeometry, ShaderMaterial>;\n\nconst sides = { front: FrontSide, back: BackSide, double: DoubleSide } satisfies Record<\n MaterialSide,\n Side\n>;\n\nconst vertexShader = /* glsl */ `\n uniform vec3 cameraOnPlane;\n uniform vec3 planeOrigin;\n uniform float fadeDistance;\n uniform bool infiniteGrid;\n uniform bool followCamera;\n\n varying vec3 gridPosition;\n varying vec4 worldPosition;\n\n void main() {\n // The plane geometry lies in XY; the grid lies in XZ.\n gridPosition = position.xzy;\n if (infiniteGrid) gridPosition *= 1.0 + fadeDistance;\n worldPosition = modelMatrix * vec4(gridPosition, 1.0);\n if (followCamera) {\n worldPosition.xyz += cameraOnPlane - planeOrigin;\n gridPosition = (inverse(modelMatrix) * worldPosition).xyz;\n }\n gl_Position = projectionMatrix * viewMatrix * worldPosition;\n }\n`;\n\nconst fragmentShader = /* glsl */ `\n uniform vec3 cameraOnPlane;\n uniform float cellSize;\n uniform float cellThickness;\n uniform vec3 cellColor;\n uniform float sectionSize;\n uniform float sectionThickness;\n uniform vec3 sectionColor;\n uniform float fadeDistance;\n uniform float fadeStrength;\n uniform float fadeFrom;\n\n varying vec3 gridPosition;\n varying vec4 worldPosition;\n\n // 1 on a line of a grid with this spacing, 0 between, antialiased over a pixel.\n float lines(float spacing, float thickness) {\n vec2 at = gridPosition.xz / spacing;\n vec2 away = abs(fract(at - 0.5) - 0.5) / fwidth(at);\n return 1.0 - min(min(away.x, away.y) + 1.0 - thickness, 1.0);\n }\n\n void main() {\n float cell = lines(cellSize, cellThickness);\n float section = lines(sectionSize, sectionThickness);\n float distanceAway = distance(cameraOnPlane * fadeFrom, worldPosition.xyz);\n float fade = pow(1.0 - min(distanceAway / fadeDistance, 1.0), fadeStrength);\n vec3 color = mix(cellColor, sectionColor, min(1.0, sectionThickness * section));\n float alpha = (cell + section) * fade;\n alpha = mix(0.75 * alpha, alpha, section);\n if (alpha <= 0.0) discard;\n gl_FragColor = vec4(color, alpha);\n #include <tonemapping_fragment>\n #include <colorspace_fragment>\n }\n`;\n\nconst up = new Vector3(0, 1, 0);\nconst origin = new Vector3();\nconst plane = new Plane();\nconst cameraPosition = new Vector3();\n\n/** Writes a node's settings into its material's uniforms. */\nconst writeUniforms = (material: ShaderMaterial, node: ShaderGridNode): void => {\n const { uniforms } = material;\n const set = (name: string, value: unknown): void => {\n const uniform = uniforms[name];\n if (uniform !== undefined) uniform.value = value;\n };\n set('cellSize', node.cellSize);\n set('cellThickness', node.cellThickness);\n set('sectionSize', node.sectionSize);\n set('sectionThickness', node.sectionThickness);\n set('fadeDistance', node.fadeDistance);\n set('fadeStrength', node.fadeStrength);\n set('fadeFrom', node.fadeFrom);\n set('infiniteGrid', node.infinite);\n set('followCamera', node.followCamera);\n uniforms['cellColor']?.value.setHex(node.cellColor);\n uniforms['sectionColor']?.value.setHex(node.sectionColor);\n material.side = sides[node.side];\n};\n\n/** Places the grid and its plane from its description. */\nconst writePlacement = (mesh: HostShaderGrid, node: ShaderGridNode): void => {\n mesh.position.fromArray(node.position);\n mesh.rotation.fromArray([...node.rotation]);\n};\n\n/** Creates the grid mesh for a node. */\nexport const createShaderGrid = (node: ShaderGridNode): HostShaderGrid => {\n const material = new ShaderMaterial({\n uniforms: {\n cellSize: { value: 0 },\n cellThickness: { value: 0 },\n cellColor: { value: new Color() },\n sectionSize: { value: 0 },\n sectionThickness: { value: 0 },\n sectionColor: { value: new Color() },\n fadeDistance: { value: 0 },\n fadeStrength: { value: 0 },\n fadeFrom: { value: 0 },\n infiniteGrid: { value: false },\n followCamera: { value: false },\n cameraOnPlane: { value: new Vector3() },\n planeOrigin: { value: new Vector3() },\n },\n vertexShader,\n fragmentShader,\n transparent: true,\n });\n writeUniforms(material, node);\n const mesh: HostShaderGrid = new Mesh(new PlaneGeometry(...node.size), material);\n // The shader moves vertices (infinite, following): the plane's own bounds mean nothing.\n mesh.frustumCulled = false;\n writePlacement(mesh, node);\n mesh.onBeforeRender = (_renderer, _scene, camera) => {\n plane.setFromNormalAndCoplanarPoint(up, origin).applyMatrix4(mesh.matrixWorld);\n plane.projectPoint(\n cameraPosition.setFromMatrixPosition(camera.matrixWorld),\n material.uniforms['cameraOnPlane']?.value,\n );\n material.uniforms['planeOrigin']?.value.set(0, 0, 0).applyMatrix4(mesh.matrixWorld);\n };\n return mesh;\n};\n\n/** Applies a new description to a grid mesh. */\nexport const updateShaderGrid = (\n mesh: HostShaderGrid,\n previous: ShaderGridNode,\n next: ShaderGridNode,\n): void => {\n if (previous.size[0] !== next.size[0] || previous.size[1] !== next.size[1]) {\n mesh.geometry.dispose();\n mesh.geometry = new PlaneGeometry(...next.size);\n }\n writeUniforms(mesh.material, next);\n writePlacement(mesh, next);\n};\n\n/** Frees the grid's geometry and material, which are its own. */\nexport const disposeShaderGrid = (mesh: HostShaderGrid): void => {\n mesh.geometry.dispose();\n mesh.material.dispose();\n};\n\n/** The WebGL kit's shader grid: the mesh, updated in place and freed with it. */\nexport const hostShaderGrid = (node: ShaderGridNode): HostedShaderGrid => {\n const mesh = createShaderGrid(node);\n return {\n object: mesh,\n update: (previous, next) => updateShaderGrid(mesh, previous, next),\n dispose: () => disposeShaderGrid(mesh),\n };\n};\n",
7
+ "/**\n * The WebGL kit's sky: three.js's `Sky` (Preetham, `addons/objects/Sky.js` at 0.186.1),\n * as Drei's `Sky` draws it (`bf6f4ad`, `src/core/Sky.tsx`): a box scaled to `distance`\n * whose shader paints the daylight sky for a sun position. Never picked.\n *\n * @module\n */\nimport { Vector3 } from 'three';\nimport { Sky as SkyMesh } from 'three/addons/objects/Sky.js';\n\nimport type { Sky } from '../kernel/description.ts';\nimport type { HostedSky } from '../kernel/renderKit.ts';\n\n/** Writes a sky's description into the mesh's uniforms and scale. */\nconst writeSky = (mesh: SkyMesh, description: Sky): void => {\n const { uniforms } = mesh.material;\n const set = (name: string, value: unknown): void => {\n const uniform = uniforms[name];\n if (uniform !== undefined) uniform.value = value;\n };\n set('turbidity', description.turbidity);\n set('rayleigh', description.rayleigh);\n set('mieCoefficient', description.mieCoefficient);\n set('mieDirectionalG', description.mieDirectionalG);\n set('cloudCoverage', description.clouds);\n set('sunPosition', new Vector3().fromArray(description.sunPosition));\n mesh.scale.setScalar(description.distance);\n};\n\n/** Creates the sky mesh; the scene graph adds it and writes its description. */\nexport const hostSky = (): HostedSky => {\n const mesh = new SkyMesh();\n mesh.raycast = () => undefined;\n return {\n object: mesh,\n update: (description) => writeSky(mesh, description),\n dispose: () => {\n mesh.geometry.dispose();\n mesh.material.dispose();\n },\n };\n};\n",
8
+ "/**\n * The WebGL render kit: the scene parts written in GLSL (the sky, the shader grid,\n * contact shadows), for renderers drawing with three.js's `WebGLRenderer`. The Foldkit\n * adapter's `webglRendererFactory` carries it; pass it to `createSceneGraph({ kit })`\n * when using the kernel directly.\n *\n * @module\n */\nimport type { RenderKit } from '../kernel/renderKit.ts';\nimport { createContactShadows } from './contactShadows.ts';\nimport { hostShaderGrid } from './shaderGrid.ts';\nimport { hostSky } from './sky.ts';\n\nexport const webglKit: RenderKit = {\n shading: 'webgl',\n sky: hostSky,\n shaderGrid: hostShaderGrid,\n contactShadows: createContactShadows,\n};\n"
9
+ ],
10
+ "mappings": "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",
11
+ "debugId": "E10747A03E7930B464756E2164756E21",
12
+ "names": []
13
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Drei's `Grid` (`src/core/Grid.tsx` at `bf6f4ad`, MIT; itself after Fyrestar's
3
+ * `THREE.InfiniteGridHelper` and threlte's `Grid`): a plane whose shader draws thin cell
4
+ * lines and thicker section lines from screen-space derivatives, fading with distance
5
+ * from the camera's foot on the plane. An infinite grid stretches the plane by the fade
6
+ * distance; one that follows the camera slides under it.
7
+ *
8
+ * Each frame the material needs the camera drawing it projected onto the grid's plane.
9
+ * Drei sets that in `useFrame`; here `onBeforeRender` does it, so every view (and each
10
+ * eye in XR) gets its own camera.
11
+ *
12
+ * @module
13
+ */
14
+ import { Mesh, PlaneGeometry, ShaderMaterial } from 'three';
15
+ import type { ShaderGridNode } from '../kernel/description.ts';
16
+ import type { HostedShaderGrid } from '../kernel/renderKit.ts';
17
+ /** The mesh a shader grid is hosted as. */
18
+ export type HostShaderGrid = Mesh<PlaneGeometry, ShaderMaterial>;
19
+ /** Creates the grid mesh for a node. */
20
+ export declare const createShaderGrid: (node: ShaderGridNode) => HostShaderGrid;
21
+ /** Applies a new description to a grid mesh. */
22
+ export declare const updateShaderGrid: (mesh: HostShaderGrid, previous: ShaderGridNode, next: ShaderGridNode) => void;
23
+ /** Frees the grid's geometry and material, which are its own. */
24
+ export declare const disposeShaderGrid: (mesh: HostShaderGrid) => void;
25
+ /** The WebGL kit's shader grid: the mesh, updated in place and freed with it. */
26
+ export declare const hostShaderGrid: (node: ShaderGridNode) => HostedShaderGrid;
27
+ //# sourceMappingURL=shaderGrid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shaderGrid.d.ts","sourceRoot":"","sources":["../../src/webgl/shaderGrid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAKL,IAAI,EAEJ,aAAa,EACb,cAAc,EAGf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,2CAA2C;AAC3C,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AAmGjE,wCAAwC;AACxC,eAAO,MAAM,gBAAgB,SAAU,cAAc,KAAG,cAmCvD,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,gBAAgB,SACrB,cAAc,YACV,cAAc,QAClB,cAAc,KACnB,IAOF,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,iBAAiB,SAAU,cAAc,KAAG,IAGxD,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,cAAc,SAAU,cAAc,KAAG,gBAOrD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { HostedSky } from '../kernel/renderKit.ts';
2
+ /** Creates the sky mesh; the scene graph adds it and writes its description. */
3
+ export declare const hostSky: () => HostedSky;
4
+ //# sourceMappingURL=sky.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sky.d.ts","sourceRoot":"","sources":["../../src/webgl/sky.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAkBxD,gFAAgF;AAChF,eAAO,MAAM,OAAO,QAAO,SAW1B,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { SceneRenderer } from '../kernel/renderer.ts';
2
+ import type { ContactShadowPasses, ShadowedScene } from '../kernel/renderKit.ts';
3
+ /** Creates the contact shadow passes for one scene graph and renderer, in TSL. */
4
+ export declare const createContactShadows: (graph: ShadowedScene, renderer: SceneRenderer) => ContactShadowPasses;
5
+ //# sourceMappingURL=contactShadows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contactShadows.d.ts","sourceRoot":"","sources":["../../src/webgpu/contactShadows.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AA4DjF,kFAAkF;AAClF,eAAO,MAAM,oBAAoB,UACxB,aAAa,YACV,aAAa,KACtB,mBAAwF,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * The WebGPU render kit: the scene's shaded parts (the sky, the shader grid, contact
3
+ * shadows) written in TSL, for three.js's `WebGPURenderer` on either of its backends.
4
+ * The Foldkit adapter's `webgpuRendererFactory` carries it.
5
+ *
6
+ * @module
7
+ */
8
+ import type { RenderKit } from '../kernel/renderKit.ts';
9
+ export declare const webgpuKit: RenderKit;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/webgpu/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAKxD,eAAO,MAAM,SAAS,EAAE,SAMvB,CAAC"}
@@ -0,0 +1,216 @@
1
+ import {
2
+ createContactShadowPasses
3
+ } from "../index-4045wme0.js";
4
+
5
+ // src/webgpu/contactShadows.ts
6
+ import { NoBlending, Texture } from "three";
7
+ import { depth, float, texture, uniform, uv, vec2 } from "three/tsl";
8
+ import { MeshBasicNodeMaterial } from "three/webgpu";
9
+ var plainMaterial = () => {
10
+ const material = new MeshBasicNodeMaterial;
11
+ material.transparent = true;
12
+ material.blending = NoBlending;
13
+ material.depthTest = false;
14
+ material.depthWrite = false;
15
+ material.toneMapped = false;
16
+ return material;
17
+ };
18
+ var depthMaterial = (color) => {
19
+ const material = plainMaterial();
20
+ material.colorNode = uniform(color).mul(depth).mul(2);
21
+ material.opacityNode = float(1).sub(depth);
22
+ return material;
23
+ };
24
+ var taps = [
25
+ [-4, 0.051],
26
+ [-3, 0.0918],
27
+ [-2, 0.12245],
28
+ [-1, 0.1531],
29
+ [0, 0.1633],
30
+ [1, 0.1531],
31
+ [2, 0.12245],
32
+ [3, 0.0918],
33
+ [4, 0.051]
34
+ ];
35
+ var blur = (direction) => {
36
+ const source = texture(new Texture);
37
+ const step = uniform(0);
38
+ const along = direction === "horizontal" ? vec2(step, 0) : vec2(0, step);
39
+ const [first, ...rest] = taps.map(([offset, weight]) => source.sample(uv().add(along.mul(offset))).mul(weight));
40
+ const sum = rest.reduce((total, tap) => total.add(tap), first ?? source);
41
+ const material = plainMaterial();
42
+ material.colorNode = sum.rgb;
43
+ material.opacityNode = sum.a;
44
+ return {
45
+ material,
46
+ set: (map, amount) => {
47
+ source.value = map;
48
+ step.value = amount;
49
+ }
50
+ };
51
+ };
52
+ var webgpuShadowMaterials = {
53
+ depth: depthMaterial,
54
+ blur,
55
+ flippedTargets: true
56
+ };
57
+ var createContactShadows = (graph, renderer) => createContactShadowPasses(graph, renderer, webgpuShadowMaterials);
58
+
59
+ // src/webgpu/shaderGrid.ts
60
+ import {
61
+ BackSide,
62
+ Color,
63
+ DoubleSide,
64
+ FrontSide,
65
+ Mesh,
66
+ Plane,
67
+ PlaneGeometry,
68
+ Vector3
69
+ } from "three";
70
+ import {
71
+ abs,
72
+ distance,
73
+ float as float2,
74
+ fract,
75
+ fwidth,
76
+ min,
77
+ mix,
78
+ modelWorldMatrix,
79
+ modelWorldMatrixInverse,
80
+ positionGeometry,
81
+ pow,
82
+ select,
83
+ uniform as uniform2,
84
+ varying,
85
+ vec4
86
+ } from "three/tsl";
87
+ import { MeshBasicNodeMaterial as MeshBasicNodeMaterial2 } from "three/webgpu";
88
+ var sides = { front: FrontSide, back: BackSide, double: DoubleSide };
89
+ var createUniforms = () => ({
90
+ cellSize: uniform2(0.5),
91
+ cellThickness: uniform2(0.5),
92
+ cellColor: uniform2(new Color),
93
+ sectionSize: uniform2(1),
94
+ sectionThickness: uniform2(1),
95
+ sectionColor: uniform2(new Color),
96
+ fadeDistance: uniform2(100),
97
+ fadeStrength: uniform2(1),
98
+ fadeFrom: uniform2(1),
99
+ infinite: uniform2(0),
100
+ followCamera: uniform2(0),
101
+ cameraOnPlane: uniform2(new Vector3),
102
+ planeOrigin: uniform2(new Vector3)
103
+ });
104
+ var gridMaterial = (u) => {
105
+ const material = new MeshBasicNodeMaterial2({ transparent: true });
106
+ const lifted = positionGeometry.xzy.mul(select(u.infinite.greaterThan(0.5), u.fadeDistance.add(1), 1));
107
+ const shift = modelWorldMatrixInverse.mul(vec4(u.cameraOnPlane.sub(u.planeOrigin), 0)).xyz;
108
+ const local = select(u.followCamera.greaterThan(0.5), lifted.add(shift), lifted);
109
+ material.positionNode = local;
110
+ const gridPosition = varying(local);
111
+ const worldPosition = varying(modelWorldMatrix.mul(vec4(local, 1)).xyz);
112
+ const lines = (spacing, thickness) => {
113
+ const at = gridPosition.xz.div(spacing);
114
+ const away = abs(fract(at.sub(0.5)).sub(0.5)).div(fwidth(at));
115
+ return float2(1).sub(min(min(away.x, away.y).add(1).sub(thickness), 1));
116
+ };
117
+ const cell = lines(u.cellSize, u.cellThickness);
118
+ const section = lines(u.sectionSize, u.sectionThickness);
119
+ const away = distance(u.cameraOnPlane.mul(u.fadeFrom), worldPosition);
120
+ const fade = pow(float2(1).sub(min(away.div(u.fadeDistance), 1)), u.fadeStrength);
121
+ const alpha = cell.add(section).mul(fade);
122
+ material.colorNode = mix(u.cellColor, u.sectionColor, min(1, u.sectionThickness.mul(section)));
123
+ material.opacityNode = mix(alpha.mul(0.75), alpha, section);
124
+ material.alphaTest = 0.0001;
125
+ return material;
126
+ };
127
+ var writeUniforms = (u, material, node) => {
128
+ u.cellSize.value = node.cellSize;
129
+ u.cellThickness.value = node.cellThickness;
130
+ u.cellColor.value.setHex(node.cellColor);
131
+ u.sectionSize.value = node.sectionSize;
132
+ u.sectionThickness.value = node.sectionThickness;
133
+ u.sectionColor.value.setHex(node.sectionColor);
134
+ u.fadeDistance.value = node.fadeDistance;
135
+ u.fadeStrength.value = node.fadeStrength;
136
+ u.fadeFrom.value = node.fadeFrom;
137
+ u.infinite.value = node.infinite ? 1 : 0;
138
+ u.followCamera.value = node.followCamera ? 1 : 0;
139
+ material.side = sides[node.side];
140
+ };
141
+ var up = new Vector3(0, 1, 0);
142
+ var origin = new Vector3;
143
+ var plane = new Plane;
144
+ var cameraPosition = new Vector3;
145
+ var hostShaderGrid = (node) => {
146
+ const u = createUniforms();
147
+ const material = gridMaterial(u);
148
+ writeUniforms(u, material, node);
149
+ const mesh = new Mesh(new PlaneGeometry(...node.size), material);
150
+ mesh.frustumCulled = false;
151
+ const place = (next) => {
152
+ mesh.position.fromArray(next.position);
153
+ mesh.rotation.fromArray([...next.rotation]);
154
+ };
155
+ place(node);
156
+ mesh.onBeforeRender = (_renderer, _scene, camera) => {
157
+ plane.setFromNormalAndCoplanarPoint(up, origin).applyMatrix4(mesh.matrixWorld);
158
+ plane.projectPoint(cameraPosition.setFromMatrixPosition(camera.matrixWorld), u.cameraOnPlane.value);
159
+ u.planeOrigin.value.set(0, 0, 0).applyMatrix4(mesh.matrixWorld);
160
+ };
161
+ return {
162
+ object: mesh,
163
+ update: (previous, next) => {
164
+ if (previous.size[0] !== next.size[0] || previous.size[1] !== next.size[1]) {
165
+ mesh.geometry.dispose();
166
+ mesh.geometry = new PlaneGeometry(...next.size);
167
+ }
168
+ writeUniforms(u, material, next);
169
+ place(next);
170
+ },
171
+ dispose: () => {
172
+ mesh.geometry.dispose();
173
+ material.dispose();
174
+ }
175
+ };
176
+ };
177
+
178
+ // src/webgpu/sky.ts
179
+ import { SkyMesh } from "three/addons/objects/SkyMesh.js";
180
+ var writeSky = (mesh, description) => {
181
+ mesh.turbidity.value = description.turbidity;
182
+ mesh.rayleigh.value = description.rayleigh;
183
+ mesh.mieCoefficient.value = description.mieCoefficient;
184
+ mesh.mieDirectionalG.value = description.mieDirectionalG;
185
+ mesh.cloudCoverage.value = description.clouds;
186
+ mesh.sunPosition.value.fromArray(description.sunPosition);
187
+ mesh.scale.setScalar(description.distance);
188
+ };
189
+ var hostSky = () => {
190
+ const mesh = new SkyMesh;
191
+ mesh.raycast = () => {
192
+ return;
193
+ };
194
+ return {
195
+ object: mesh,
196
+ update: (description) => writeSky(mesh, description),
197
+ dispose: () => {
198
+ mesh.geometry.dispose();
199
+ mesh.material.dispose();
200
+ }
201
+ };
202
+ };
203
+
204
+ // src/webgpu/index.ts
205
+ var webgpuKit = {
206
+ shading: "tsl",
207
+ sky: hostSky,
208
+ shaderGrid: hostShaderGrid,
209
+ contactShadows: createContactShadows
210
+ };
211
+ export {
212
+ webgpuKit
213
+ };
214
+
215
+ //# debugId=3D261B4594F0512A64756E2164756E21
216
+ //# sourceMappingURL=index.js.map