@ifc-lite/renderer 1.1.7 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/LICENSE +373 -0
  2. package/dist/bvh.d.ts +50 -0
  3. package/dist/bvh.d.ts.map +1 -0
  4. package/dist/bvh.js +177 -0
  5. package/dist/bvh.js.map +1 -0
  6. package/dist/camera.d.ts +17 -0
  7. package/dist/camera.d.ts.map +1 -1
  8. package/dist/camera.js +72 -6
  9. package/dist/camera.js.map +1 -1
  10. package/dist/index.d.ts +51 -4
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +587 -125
  13. package/dist/index.js.map +1 -1
  14. package/dist/math.d.ts +30 -0
  15. package/dist/math.d.ts.map +1 -1
  16. package/dist/math.js +103 -0
  17. package/dist/math.js.map +1 -1
  18. package/dist/picker.js +2 -2
  19. package/dist/picker.js.map +1 -1
  20. package/dist/pipeline.d.ts +17 -0
  21. package/dist/pipeline.d.ts.map +1 -1
  22. package/dist/pipeline.js +351 -49
  23. package/dist/pipeline.js.map +1 -1
  24. package/dist/raycaster.d.ts +67 -0
  25. package/dist/raycaster.d.ts.map +1 -0
  26. package/dist/raycaster.js +192 -0
  27. package/dist/raycaster.js.map +1 -0
  28. package/dist/scene.d.ts +56 -2
  29. package/dist/scene.d.ts.map +1 -1
  30. package/dist/scene.js +362 -26
  31. package/dist/scene.js.map +1 -1
  32. package/dist/section-plane.d.ts +14 -4
  33. package/dist/section-plane.d.ts.map +1 -1
  34. package/dist/section-plane.js +129 -53
  35. package/dist/section-plane.js.map +1 -1
  36. package/dist/snap-detector.d.ts +119 -0
  37. package/dist/snap-detector.d.ts.map +1 -0
  38. package/dist/snap-detector.js +706 -0
  39. package/dist/snap-detector.js.map +1 -0
  40. package/dist/types.d.ts +14 -1
  41. package/dist/types.d.ts.map +1 -1
  42. package/dist/zero-copy-uploader.d.ts +145 -0
  43. package/dist/zero-copy-uploader.d.ts.map +1 -0
  44. package/dist/zero-copy-uploader.js +146 -0
  45. package/dist/zero-copy-uploader.js.map +1 -0
  46. package/package.json +11 -10
package/dist/pipeline.js CHANGED
@@ -3,10 +3,17 @@
3
3
  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
4
  export class RenderPipeline {
5
5
  device;
6
+ webgpuDevice;
6
7
  pipeline;
7
8
  selectionPipeline; // Pipeline for selected meshes (renders on top)
9
+ transparentPipeline; // Pipeline for transparent meshes with alpha blending
8
10
  depthTexture;
9
11
  depthTextureView;
12
+ depthFormat = 'depth24plus';
13
+ colorFormat;
14
+ multisampleTexture = null;
15
+ multisampleTextureView = null;
16
+ sampleCount = 4; // MSAA sample count
10
17
  uniformBuffer;
11
18
  bindGroup;
12
19
  bindGroupLayout; // Explicit layout shared between pipelines
@@ -15,15 +22,31 @@ export class RenderPipeline {
15
22
  constructor(device, width = 1, height = 1) {
16
23
  this.currentWidth = width;
17
24
  this.currentHeight = height;
25
+ this.webgpuDevice = device;
18
26
  this.device = device.getDevice();
19
- const format = device.getFormat();
20
- // Create depth texture
27
+ this.colorFormat = device.getFormat();
28
+ // Check MSAA support and adjust sample count
29
+ // 4x MSAA provides good anti-aliasing for thin geometry
30
+ const maxSampleCount = this.device.limits?.maxSampleCount ?? 4;
31
+ this.sampleCount = Math.min(4, maxSampleCount);
32
+ // Create depth texture with MSAA support
21
33
  this.depthTexture = this.device.createTexture({
22
34
  size: { width, height },
23
35
  format: 'depth24plus',
24
36
  usage: GPUTextureUsage.RENDER_ATTACHMENT,
37
+ sampleCount: this.sampleCount > 1 ? this.sampleCount : 1,
25
38
  });
26
39
  this.depthTextureView = this.depthTexture.createView();
40
+ // Create multisample color texture for MSAA
41
+ if (this.sampleCount > 1) {
42
+ this.multisampleTexture = this.device.createTexture({
43
+ size: { width, height },
44
+ format: this.colorFormat,
45
+ usage: GPUTextureUsage.RENDER_ATTACHMENT,
46
+ sampleCount: this.sampleCount,
47
+ });
48
+ this.multisampleTextureView = this.multisampleTexture.createView();
49
+ }
27
50
  // Create uniform buffer for camera matrices, PBR material, and section plane
28
51
  // Layout: viewProj (64 bytes) + model (64 bytes) + baseColor (16 bytes) + metallicRoughness (8 bytes) +
29
52
  // sectionPlane (16 bytes: vec3 normal + float position) + flags (16 bytes: u32 isSelected + u32 sectionEnabled + padding) = 192 bytes
@@ -66,6 +89,7 @@ export class RenderPipeline {
66
89
  @location(0) worldPos: vec3<f32>,
67
90
  @location(1) normal: vec3<f32>,
68
91
  @location(2) @interpolate(flat) objectId: u32,
92
+ @location(3) viewPos: vec3<f32>, // For edge detection
69
93
  }
70
94
 
71
95
  @vertex
@@ -76,6 +100,8 @@ export class RenderPipeline {
76
100
  output.worldPos = worldPos.xyz;
77
101
  output.normal = normalize((uniforms.model * vec4<f32>(input.normal, 0.0)).xyz);
78
102
  output.objectId = instanceIndex;
103
+ // Store view-space position for edge detection
104
+ output.viewPos = (uniforms.viewProj * worldPos).xyz;
79
105
  return output;
80
106
  }
81
107
 
@@ -110,7 +136,8 @@ export class RenderPipeline {
110
136
 
111
137
  @fragment
112
138
  fn fs_main(input: VertexOutput) -> @location(0) vec4<f32> {
113
- // Section plane clipping
139
+ // Section plane clipping - discard fragments ABOVE the plane
140
+ // For Down axis (normal +Y), keeps everything below cut height (look down into building)
114
141
  if (uniforms.flags.y == 1u) {
115
142
  let planeNormal = uniforms.sectionPlane.xyz;
116
143
  let planeDistance = uniforms.sectionPlane.w;
@@ -121,34 +148,123 @@ export class RenderPipeline {
121
148
  }
122
149
 
123
150
  let N = normalize(input.normal);
124
- let L = normalize(vec3<f32>(0.5, 1.0, 0.3)); // Light direction
151
+
152
+ // Enhanced lighting with multiple sources
153
+ let sunLight = normalize(vec3<f32>(0.5, 1.0, 0.3)); // Main directional light
154
+ let fillLight = normalize(vec3<f32>(-0.5, 0.3, -0.3)); // Fill light
155
+ let rimLight = normalize(vec3<f32>(0.0, 0.2, -1.0)); // Rim light for edge definition
125
156
 
126
- let NdotL = max(dot(N, L), 0.0);
157
+ // Hemisphere ambient - reduced for less washed-out look
158
+ let skyColor = vec3<f32>(0.3, 0.35, 0.4); // Darker sky
159
+ let groundColor = vec3<f32>(0.15, 0.1, 0.08); // Darker ground
160
+ let hemisphereFactor = N.y * 0.5 + 0.5;
161
+ let ambient = mix(groundColor, skyColor, hemisphereFactor) * 0.25;
127
162
 
128
- var baseColor = uniforms.baseColor.rgb;
163
+ // Main sun light - reduced intensity, tighter wrap for more contrast
164
+ let NdotL = max(dot(N, sunLight), 0.0);
165
+ let wrap = 0.3; // Tighter wrap for more contrast
166
+ let diffuseSun = max((NdotL + wrap) / (1.0 + wrap), 0.0) * 0.55;
167
+
168
+ // Fill light - reduced
169
+ let NdotFill = max(dot(N, fillLight), 0.0);
170
+ let diffuseFill = NdotFill * 0.15;
129
171
 
130
- // Simple diffuse lighting with ambient
131
- let ambient = 0.3;
132
- let diffuse = NdotL * 0.7;
172
+ // Rim light for edge definition
173
+ let NdotRim = max(dot(N, rimLight), 0.0);
174
+ let rim = pow(NdotRim, 4.0) * 0.15;
133
175
 
134
- var color = baseColor * (ambient + diffuse);
176
+ var baseColor = uniforms.baseColor.rgb;
177
+
178
+ // Detect if the color is close to white/gray (low saturation)
179
+ let baseGray = dot(baseColor, vec3<f32>(0.299, 0.587, 0.114));
180
+ let baseSaturation = length(baseColor - vec3<f32>(baseGray)) / max(baseGray, 0.001);
181
+ let isWhiteish = 1.0 - smoothstep(0.0, 0.3, baseSaturation);
182
+
183
+ // Darken whites/grays more to reduce washed-out appearance
184
+ baseColor = mix(baseColor, baseColor * 0.7, isWhiteish * 0.4);
185
+
186
+ // Combine all lighting
187
+ var color = baseColor * (ambient + diffuseSun + diffuseFill + rim);
135
188
 
136
189
  // Selection highlight - add glow/fresnel effect
137
190
  if (uniforms.flags.x == 1u) {
138
- // Calculate view direction for fresnel effect
139
- let V = normalize(-input.worldPos); // Assuming camera at origin (simplified)
191
+ let V = normalize(-input.worldPos);
140
192
  let NdotV = max(dot(N, V), 0.0);
141
-
142
- // Fresnel-like edge highlight for selection
143
193
  let fresnel = pow(1.0 - NdotV, 2.0);
144
- let highlightColor = vec3<f32>(0.3, 0.6, 1.0); // Blue highlight
194
+ let highlightColor = vec3<f32>(0.3, 0.6, 1.0);
145
195
  color = mix(color, highlightColor, fresnel * 0.5 + 0.2);
146
196
  }
147
197
 
148
- // Gamma correction (IFC colors are typically in sRGB)
198
+ // Beautiful fresnel effect for transparent materials (glass)
199
+ var finalAlpha = uniforms.baseColor.a;
200
+ if (finalAlpha < 0.99) {
201
+ // Calculate view direction for fresnel
202
+ let V = normalize(-input.worldPos);
203
+ let NdotV = max(dot(N, V), 0.0);
204
+
205
+ // Enhanced fresnel effect - stronger at edges (grazing angles)
206
+ // Using Schlick's approximation for realistic glass reflection
207
+ let fresnelPower = 1.5; // Higher = softer edge reflections
208
+ let fresnel = pow(1.0 - NdotV, fresnelPower);
209
+
210
+ // Glass reflection tint (sky/environment reflection at edges)
211
+ let reflectionTint = vec3<f32>(0.92, 0.96, 1.0); // Cool sky reflection
212
+ let reflectionStrength = fresnel * 0.6; // Strong edge reflections
213
+
214
+ // Mix in reflection tint at edges
215
+ color = mix(color, color * reflectionTint, reflectionStrength);
216
+
217
+ // Add realistic glass shine - brighter at edges where light reflects
218
+ let glassShine = fresnel * 0.12;
219
+ color += glassShine;
220
+
221
+ // Slight desaturation at edges (glass reflects environment, not just color)
222
+ let edgeDesaturation = fresnel * 0.25;
223
+ let gray = dot(color, vec3<f32>(0.299, 0.587, 0.114));
224
+ color = mix(color, vec3<f32>(gray), edgeDesaturation);
225
+
226
+ // Make glass more transparent (reduce opacity by 30%)
227
+ finalAlpha = finalAlpha * 0.7;
228
+ }
229
+
230
+ // Exposure adjustment - darken overall
231
+ color *= 0.85;
232
+
233
+ // Contrast enhancement
234
+ color = (color - 0.5) * 1.15 + 0.5;
235
+ color = max(color, vec3<f32>(0.0));
236
+
237
+ // Saturation boost - stronger for colored surfaces, less for whites
238
+ let gray = dot(color, vec3<f32>(0.299, 0.587, 0.114));
239
+ let satBoost = mix(1.4, 1.1, isWhiteish); // More saturation for colored surfaces
240
+ color = mix(vec3<f32>(gray), color, satBoost);
241
+
242
+ // ACES filmic tone mapping
243
+ let a = 2.51;
244
+ let b = 0.03;
245
+ let c = 2.43;
246
+ let d = 0.59;
247
+ let e = 0.14;
248
+ color = clamp((color * (a * color + b)) / (color * (c * color + d) + e), vec3<f32>(0.0), vec3<f32>(1.0));
249
+
250
+ // Subtle edge enhancement using screen-space derivatives
251
+ let depthGradient = length(vec2<f32>(
252
+ dpdx(input.viewPos.z),
253
+ dpdy(input.viewPos.z)
254
+ ));
255
+ let normalGradient = length(vec2<f32>(
256
+ length(dpdx(input.normal)),
257
+ length(dpdy(input.normal))
258
+ ));
259
+
260
+ let edgeFactor = smoothstep(0.0, 0.1, depthGradient * 10.0 + normalGradient * 5.0);
261
+ let edgeDarken = mix(1.0, 0.92, edgeFactor * 0.4); // Slightly stronger edge darkening
262
+ color *= edgeDarken;
263
+
264
+ // Gamma correction
149
265
  color = pow(color, vec3<f32>(1.0 / 2.2));
150
266
 
151
- return vec4<f32>(color, uniforms.baseColor.a);
267
+ return vec4<f32>(color, finalAlpha);
152
268
  }
153
269
  `,
154
270
  });
@@ -156,8 +272,8 @@ export class RenderPipeline {
156
272
  const pipelineLayout = this.device.createPipelineLayout({
157
273
  bindGroupLayouts: [this.bindGroupLayout],
158
274
  });
159
- // Create render pipeline with explicit layout
160
- this.pipeline = this.device.createRenderPipeline({
275
+ // Create render pipeline descriptor
276
+ const pipelineDescriptor = {
161
277
  layout: pipelineLayout,
162
278
  vertex: {
163
279
  module: shaderModule,
@@ -175,22 +291,25 @@ export class RenderPipeline {
175
291
  fragment: {
176
292
  module: shaderModule,
177
293
  entryPoint: 'fs_main',
178
- targets: [{ format }],
294
+ targets: [{ format: this.colorFormat }],
179
295
  },
180
296
  primitive: {
181
297
  topology: 'triangle-list',
182
298
  cullMode: 'none', // Disable culling to debug - IFC winding order varies
183
299
  },
184
300
  depthStencil: {
185
- format: 'depth24plus',
301
+ format: this.depthFormat,
186
302
  depthWriteEnabled: true,
187
- depthCompare: 'less',
303
+ depthCompare: 'greater', // Reverse-Z: greater instead of less
188
304
  },
189
- });
190
- // Create selection pipeline with less-equal depth compare to render selected meshes on top
191
- // This allows selected meshes to overdraw at the same depth as batched meshes
192
- // IMPORTANT: Use explicit layout to share bind groups with main pipeline
193
- this.selectionPipeline = this.device.createRenderPipeline({
305
+ // MSAA configuration - must match render pass attachment sample count
306
+ multisample: {
307
+ count: this.sampleCount,
308
+ },
309
+ };
310
+ this.pipeline = this.device.createRenderPipeline(pipelineDescriptor);
311
+ // Create selection pipeline descriptor
312
+ const selectionPipelineDescriptor = {
194
313
  layout: pipelineLayout,
195
314
  vertex: {
196
315
  module: shaderModule,
@@ -208,20 +327,73 @@ export class RenderPipeline {
208
327
  fragment: {
209
328
  module: shaderModule,
210
329
  entryPoint: 'fs_main',
211
- targets: [{ format }],
330
+ targets: [{ format: this.colorFormat }],
212
331
  },
213
332
  primitive: {
214
333
  topology: 'triangle-list',
215
334
  cullMode: 'none',
216
335
  },
217
336
  depthStencil: {
218
- format: 'depth24plus',
219
- depthWriteEnabled: true,
220
- depthCompare: 'less-equal', // Allow overdraw at same depth
221
- depthBias: -1, // Small bias to ensure selection renders in front
222
- depthBiasSlopeScale: -1,
337
+ format: this.depthFormat,
338
+ depthWriteEnabled: false, // Don't overwrite depth - selected objects render on top of existing depth
339
+ depthCompare: 'greater-equal', // Allow rendering at same depth, but still respect objects in front
340
+ depthBias: 0,
341
+ depthBiasSlopeScale: 0,
223
342
  },
224
- });
343
+ // MSAA configuration - must match render pass attachment sample count
344
+ multisample: {
345
+ count: this.sampleCount,
346
+ },
347
+ };
348
+ this.selectionPipeline = this.device.createRenderPipeline(selectionPipelineDescriptor);
349
+ // Create transparent pipeline descriptor (same shader, but with alpha blending)
350
+ const transparentPipelineDescriptor = {
351
+ layout: pipelineLayout,
352
+ vertex: {
353
+ module: shaderModule,
354
+ entryPoint: 'vs_main',
355
+ buffers: [
356
+ {
357
+ arrayStride: 24,
358
+ attributes: [
359
+ { shaderLocation: 0, offset: 0, format: 'float32x3' },
360
+ { shaderLocation: 1, offset: 12, format: 'float32x3' },
361
+ ],
362
+ },
363
+ ],
364
+ },
365
+ fragment: {
366
+ module: shaderModule,
367
+ entryPoint: 'fs_main',
368
+ targets: [{
369
+ format: this.colorFormat,
370
+ blend: {
371
+ color: {
372
+ srcFactor: 'src-alpha',
373
+ dstFactor: 'one-minus-src-alpha',
374
+ },
375
+ alpha: {
376
+ srcFactor: 'one',
377
+ dstFactor: 'one-minus-src-alpha',
378
+ },
379
+ },
380
+ }],
381
+ },
382
+ primitive: {
383
+ topology: 'triangle-list',
384
+ cullMode: 'none',
385
+ },
386
+ depthStencil: {
387
+ format: this.depthFormat,
388
+ depthWriteEnabled: false, // Don't write depth for transparent objects
389
+ depthCompare: 'greater', // Still test depth to respect opaque objects
390
+ },
391
+ // MSAA configuration - must match render pass attachment sample count
392
+ multisample: {
393
+ count: this.sampleCount,
394
+ },
395
+ };
396
+ this.transparentPipeline = this.device.createRenderPipeline(transparentPipelineDescriptor);
225
397
  // Create bind group using the explicit bind group layout
226
398
  this.bindGroup = this.device.createBindGroup({
227
399
  layout: this.bindGroupLayout,
@@ -292,10 +464,28 @@ export class RenderPipeline {
292
464
  this.depthTexture.destroy();
293
465
  this.depthTexture = this.device.createTexture({
294
466
  size: { width, height },
295
- format: 'depth24plus',
467
+ format: this.depthFormat,
296
468
  usage: GPUTextureUsage.RENDER_ATTACHMENT,
469
+ sampleCount: this.sampleCount > 1 ? this.sampleCount : 1,
297
470
  });
298
471
  this.depthTextureView = this.depthTexture.createView();
472
+ // Recreate multisample texture
473
+ if (this.multisampleTexture) {
474
+ this.multisampleTexture.destroy();
475
+ }
476
+ if (this.sampleCount > 1) {
477
+ this.multisampleTexture = this.device.createTexture({
478
+ size: { width, height },
479
+ format: this.colorFormat,
480
+ usage: GPUTextureUsage.RENDER_ATTACHMENT,
481
+ sampleCount: this.sampleCount,
482
+ });
483
+ this.multisampleTextureView = this.multisampleTexture.createView();
484
+ }
485
+ else {
486
+ this.multisampleTexture = null;
487
+ this.multisampleTextureView = null;
488
+ }
299
489
  }
300
490
  getPipeline() {
301
491
  return this.pipeline;
@@ -303,9 +493,24 @@ export class RenderPipeline {
303
493
  getSelectionPipeline() {
304
494
  return this.selectionPipeline;
305
495
  }
496
+ getTransparentPipeline() {
497
+ return this.transparentPipeline;
498
+ }
306
499
  getDepthTextureView() {
307
500
  return this.depthTextureView;
308
501
  }
502
+ /**
503
+ * Get multisample texture view (for MSAA rendering)
504
+ */
505
+ getMultisampleTextureView() {
506
+ return this.multisampleTextureView;
507
+ }
508
+ /**
509
+ * Get sample count
510
+ */
511
+ getSampleCount() {
512
+ return this.sampleCount;
513
+ }
309
514
  getBindGroup() {
310
515
  return this.bindGroup;
311
516
  }
@@ -326,11 +531,12 @@ export class InstancedRenderPipeline {
326
531
  depthTexture;
327
532
  depthTextureView;
328
533
  uniformBuffer;
534
+ colorFormat;
329
535
  currentHeight;
330
536
  constructor(device, width = 1, height = 1) {
331
537
  this.currentHeight = height;
332
538
  this.device = device.getDevice();
333
- const format = device.getFormat();
539
+ this.colorFormat = device.getFormat();
334
540
  // Create depth texture
335
541
  this.depthTexture = this.device.createTexture({
336
542
  size: { width, height },
@@ -371,6 +577,7 @@ export class InstancedRenderPipeline {
371
577
  @location(1) normal: vec3<f32>,
372
578
  @location(2) color: vec4<f32>,
373
579
  @location(3) @interpolate(flat) instanceId: u32,
580
+ @location(4) viewPos: vec3<f32>, // For edge detection
374
581
  }
375
582
 
376
583
  // Z-up to Y-up conversion matrix (IFC uses Z-up, WebGPU/viewer uses Y-up)
@@ -400,12 +607,15 @@ export class InstancedRenderPipeline {
400
607
  output.normal = normalize(normalYUp);
401
608
  output.color = inst.color;
402
609
  output.instanceId = instanceIndex;
610
+ // Store view-space position for edge detection
611
+ output.viewPos = (uniforms.viewProj * worldPos).xyz;
403
612
  return output;
404
613
  }
405
614
 
406
615
  @fragment
407
616
  fn fs_main(input: VertexOutput) -> @location(0) vec4<f32> {
408
- // Section plane clipping
617
+ // Section plane clipping - discard fragments ABOVE the plane
618
+ // For Down axis (normal +Y), keeps everything below cut height (look down into building)
409
619
  if (uniforms.flags.x == 1u) {
410
620
  let planeNormal = uniforms.sectionPlane.xyz;
411
621
  let planeDistance = uniforms.sectionPlane.w;
@@ -416,22 +626,114 @@ export class InstancedRenderPipeline {
416
626
  }
417
627
 
418
628
  let N = normalize(input.normal);
419
- let L = normalize(vec3<f32>(0.5, 1.0, 0.3)); // Light direction
420
629
 
421
- let NdotL = max(dot(N, L), 0.0);
630
+ // Enhanced lighting with multiple sources
631
+ let sunLight = normalize(vec3<f32>(0.5, 1.0, 0.3)); // Main directional light
632
+ let fillLight = normalize(vec3<f32>(-0.5, 0.3, -0.3)); // Fill light
633
+ let rimLight = normalize(vec3<f32>(0.0, 0.2, -1.0)); // Rim light for edge definition
634
+
635
+ // Hemisphere ambient - reduced for less washed-out look
636
+ let skyColor = vec3<f32>(0.3, 0.35, 0.4); // Darker sky
637
+ let groundColor = vec3<f32>(0.15, 0.1, 0.08); // Darker ground
638
+ let hemisphereFactor = N.y * 0.5 + 0.5;
639
+ let ambient = mix(groundColor, skyColor, hemisphereFactor) * 0.25;
640
+
641
+ // Main sun light - reduced intensity, tighter wrap for more contrast
642
+ let NdotL = max(dot(N, sunLight), 0.0);
643
+ let wrap = 0.3; // Tighter wrap for more contrast
644
+ let diffuseSun = max((NdotL + wrap) / (1.0 + wrap), 0.0) * 0.55;
645
+
646
+ // Fill light - reduced
647
+ let NdotFill = max(dot(N, fillLight), 0.0);
648
+ let diffuseFill = NdotFill * 0.15;
649
+
650
+ // Rim light for edge definition
651
+ let NdotRim = max(dot(N, rimLight), 0.0);
652
+ let rim = pow(NdotRim, 4.0) * 0.15;
422
653
 
423
654
  var baseColor = input.color.rgb;
655
+
656
+ // Detect if the color is close to white/gray (low saturation)
657
+ let baseGray = dot(baseColor, vec3<f32>(0.299, 0.587, 0.114));
658
+ let baseSaturation = length(baseColor - vec3<f32>(baseGray)) / max(baseGray, 0.001);
659
+ let isWhiteish = 1.0 - smoothstep(0.0, 0.3, baseSaturation);
660
+
661
+ // Darken whites/grays more to reduce washed-out appearance
662
+ baseColor = mix(baseColor, baseColor * 0.7, isWhiteish * 0.4);
424
663
 
425
- // Simple diffuse lighting with ambient
426
- let ambient = 0.3;
427
- let diffuse = NdotL * 0.7;
664
+ // Combine all lighting
665
+ var color = baseColor * (ambient + diffuseSun + diffuseFill + rim);
428
666
 
429
- var color = baseColor * (ambient + diffuse);
667
+ // Beautiful fresnel effect for transparent materials (glass)
668
+ var finalAlpha = input.color.a;
669
+ if (finalAlpha < 0.99) {
670
+ // Calculate view direction for fresnel
671
+ let V = normalize(-input.worldPos);
672
+ let NdotV = max(dot(N, V), 0.0);
673
+
674
+ // Enhanced fresnel effect - stronger at edges (grazing angles)
675
+ // Using Schlick's approximation for realistic glass reflection
676
+ let fresnelPower = 1.5; // Higher = softer edge reflections
677
+ let fresnel = pow(1.0 - NdotV, fresnelPower);
678
+
679
+ // Glass reflection tint (sky/environment reflection at edges)
680
+ let reflectionTint = vec3<f32>(0.92, 0.96, 1.0); // Cool sky reflection
681
+ let reflectionStrength = fresnel * 0.6; // Strong edge reflections
682
+
683
+ // Mix in reflection tint at edges
684
+ color = mix(color, color * reflectionTint, reflectionStrength);
685
+
686
+ // Add realistic glass shine - brighter at edges where light reflects
687
+ let glassShine = fresnel * 0.12;
688
+ color += glassShine;
689
+
690
+ // Slight desaturation at edges (glass reflects environment, not just color)
691
+ let edgeDesaturation = fresnel * 0.25;
692
+ let gray = dot(color, vec3<f32>(0.299, 0.587, 0.114));
693
+ color = mix(color, vec3<f32>(gray), edgeDesaturation);
694
+
695
+ // Make glass more transparent (reduce opacity by 30%)
696
+ finalAlpha = finalAlpha * 0.7;
697
+ }
698
+
699
+ // Exposure adjustment - darken overall
700
+ color *= 0.85;
701
+
702
+ // Contrast enhancement
703
+ color = (color - 0.5) * 1.15 + 0.5;
704
+ color = max(color, vec3<f32>(0.0));
705
+
706
+ // Saturation boost - stronger for colored surfaces, less for whites
707
+ let gray = dot(color, vec3<f32>(0.299, 0.587, 0.114));
708
+ let satBoost = mix(1.4, 1.1, isWhiteish); // More saturation for colored surfaces
709
+ color = mix(vec3<f32>(gray), color, satBoost);
430
710
 
431
- // Gamma correction (IFC colors are typically in sRGB)
711
+ // ACES filmic tone mapping
712
+ let a = 2.51;
713
+ let b = 0.03;
714
+ let c = 2.43;
715
+ let d = 0.59;
716
+ let e = 0.14;
717
+ color = clamp((color * (a * color + b)) / (color * (c * color + d) + e), vec3<f32>(0.0), vec3<f32>(1.0));
718
+
719
+ // Subtle edge enhancement using screen-space derivatives
720
+ let depthGradient = length(vec2<f32>(
721
+ dpdx(input.viewPos.z),
722
+ dpdy(input.viewPos.z)
723
+ ));
724
+ let normalGradient = length(vec2<f32>(
725
+ length(dpdx(input.normal)),
726
+ length(dpdy(input.normal))
727
+ ));
728
+
729
+ let edgeFactor = smoothstep(0.0, 0.1, depthGradient * 10.0 + normalGradient * 5.0);
730
+ let edgeDarken = mix(1.0, 0.92, edgeFactor * 0.4); // Slightly stronger edge darkening
731
+ color *= edgeDarken;
732
+
733
+ // Gamma correction
432
734
  color = pow(color, vec3<f32>(1.0 / 2.2));
433
735
 
434
- return vec4<f32>(color, input.color.a);
736
+ return vec4<f32>(color, finalAlpha);
435
737
  }
436
738
  `,
437
739
  });
@@ -454,16 +756,16 @@ export class InstancedRenderPipeline {
454
756
  fragment: {
455
757
  module: shaderModule,
456
758
  entryPoint: 'fs_main',
457
- targets: [{ format }],
759
+ targets: [{ format: this.colorFormat }],
458
760
  },
459
761
  primitive: {
460
762
  topology: 'triangle-list',
461
763
  cullMode: 'none',
462
764
  },
463
765
  depthStencil: {
464
- format: 'depth24plus',
766
+ format: 'depth24plus', // Will be updated if reverse-Z is enabled
465
767
  depthWriteEnabled: true,
466
- depthCompare: 'less',
768
+ depthCompare: 'greater', // Reverse-Z: greater instead of less
467
769
  },
468
770
  });
469
771
  // Note: bind groups are created per-instanced-mesh via createInstanceBindGroup()
@@ -503,7 +805,7 @@ export class InstancedRenderPipeline {
503
805
  this.depthTexture.destroy();
504
806
  this.depthTexture = this.device.createTexture({
505
807
  size: { width, height },
506
- format: 'depth24plus',
808
+ format: 'depth24plus', // Default format for instanced pipeline
507
809
  usage: GPUTextureUsage.RENDER_ATTACHMENT,
508
810
  });
509
811
  this.depthTextureView = this.depthTexture.createView();
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}