@ifc-lite/renderer 4.2.0 → 5.0.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.
- package/dist/edge-params.d.ts +43 -0
- package/dist/edge-params.d.ts.map +1 -0
- package/dist/edge-params.js +63 -0
- package/dist/edge-params.js.map +1 -0
- package/dist/edge-pass.d.ts +38 -0
- package/dist/edge-pass.d.ts.map +1 -0
- package/dist/edge-pass.js +111 -0
- package/dist/edge-pass.js.map +1 -0
- package/dist/index.d.ts +29 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +56 -34
- package/dist/index.js.map +1 -1
- package/dist/instanced-render.d.ts +3 -3
- package/dist/instanced-render.js +3 -3
- package/dist/mesh-material.d.ts +26 -0
- package/dist/mesh-material.d.ts.map +1 -0
- package/dist/mesh-material.js +52 -0
- package/dist/mesh-material.js.map +1 -0
- package/dist/mesh-rte-uniforms.d.ts +1 -0
- package/dist/mesh-rte-uniforms.d.ts.map +1 -1
- package/dist/mesh-rte-uniforms.js +1 -0
- package/dist/mesh-rte-uniforms.js.map +1 -1
- package/dist/overlay-theme-uniforms.d.ts +54 -0
- package/dist/overlay-theme-uniforms.d.ts.map +1 -0
- package/dist/overlay-theme-uniforms.js +89 -0
- package/dist/overlay-theme-uniforms.js.map +1 -0
- package/dist/overlay-theme.d.ts +73 -0
- package/dist/overlay-theme.d.ts.map +1 -0
- package/dist/overlay-theme.js +24 -0
- package/dist/overlay-theme.js.map +1 -0
- package/dist/pipeline.d.ts +2 -0
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +10 -11
- package/dist/pipeline.js.map +1 -1
- package/dist/post-pass-chain.d.ts +1 -1
- package/dist/post-pass-chain.d.ts.map +1 -1
- package/dist/post-pass-chain.js +19 -13
- package/dist/post-pass-chain.js.map +1 -1
- package/dist/renderer-overlays.d.ts +8 -7
- package/dist/renderer-overlays.d.ts.map +1 -1
- package/dist/renderer-overlays.js +11 -14
- package/dist/renderer-overlays.js.map +1 -1
- package/dist/scene.d.ts +10 -1
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js.map +1 -1
- package/dist/section-plane.d.ts +3 -0
- package/dist/section-plane.d.ts.map +1 -1
- package/dist/section-plane.js +15 -24
- package/dist/section-plane.js.map +1 -1
- package/dist/shaders/color-transfer.wgsl.d.ts +5 -3
- package/dist/shaders/color-transfer.wgsl.d.ts.map +1 -1
- package/dist/shaders/color-transfer.wgsl.js +5 -3
- package/dist/shaders/color-transfer.wgsl.js.map +1 -1
- package/dist/shaders/edges.wgsl.d.ts +2 -0
- package/dist/shaders/edges.wgsl.d.ts.map +1 -0
- package/dist/shaders/edges.wgsl.js +158 -0
- package/dist/shaders/edges.wgsl.js.map +1 -0
- package/dist/shaders/main.wgsl.d.ts +1 -1
- package/dist/shaders/main.wgsl.d.ts.map +1 -1
- package/dist/shaders/main.wgsl.js +81 -77
- package/dist/shaders/main.wgsl.js.map +1 -1
- package/dist/shaders/specular.wgsl.d.ts +34 -0
- package/dist/shaders/specular.wgsl.d.ts.map +1 -0
- package/dist/shaders/specular.wgsl.js +134 -0
- package/dist/shaders/specular.wgsl.js.map +1 -0
- package/dist/visual-enhancement.d.ts +10 -3
- package/dist/visual-enhancement.d.ts.map +1 -1
- package/dist/visual-enhancement.js +9 -3
- package/dist/visual-enhancement.js.map +1 -1
- package/package.json +2 -2
- package/dist/post-processor.d.ts +0 -46
- package/dist/post-processor.d.ts.map +0 -1
- package/dist/post-processor.js +0 -295
- package/dist/post-processor.js.map +0 -1
package/dist/post-processor.js
DELETED
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
-
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
-
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
-
export class PostProcessor {
|
|
5
|
-
_device;
|
|
6
|
-
colorFormat;
|
|
7
|
-
isMultisampled;
|
|
8
|
-
uniformBuffer;
|
|
9
|
-
uniformStaging;
|
|
10
|
-
uniformF32;
|
|
11
|
-
uniformU32;
|
|
12
|
-
bindGroupLayout;
|
|
13
|
-
pipeline;
|
|
14
|
-
cachedBindGroup = null;
|
|
15
|
-
cachedDepthView = null;
|
|
16
|
-
cachedObjectIdView = null;
|
|
17
|
-
constructor(device, sampleCount) {
|
|
18
|
-
this._device = device.getDevice();
|
|
19
|
-
this.colorFormat = device.getFormat();
|
|
20
|
-
this.isMultisampled = sampleCount > 1;
|
|
21
|
-
this.uniformStaging = new ArrayBuffer(16);
|
|
22
|
-
this.uniformF32 = new Float32Array(this.uniformStaging);
|
|
23
|
-
this.uniformU32 = new Uint32Array(this.uniformStaging);
|
|
24
|
-
this.uniformBuffer = this._device.createBuffer({
|
|
25
|
-
size: 16,
|
|
26
|
-
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
27
|
-
});
|
|
28
|
-
this.bindGroupLayout = this._device.createBindGroupLayout({
|
|
29
|
-
entries: [
|
|
30
|
-
{
|
|
31
|
-
binding: 0,
|
|
32
|
-
visibility: GPUShaderStage.FRAGMENT,
|
|
33
|
-
texture: { sampleType: 'depth', viewDimension: '2d', multisampled: this.isMultisampled },
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
binding: 1,
|
|
37
|
-
visibility: GPUShaderStage.FRAGMENT,
|
|
38
|
-
texture: { sampleType: 'unfilterable-float', viewDimension: '2d', multisampled: this.isMultisampled },
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
binding: 2,
|
|
42
|
-
visibility: GPUShaderStage.FRAGMENT,
|
|
43
|
-
buffer: { type: 'uniform' },
|
|
44
|
-
},
|
|
45
|
-
],
|
|
46
|
-
});
|
|
47
|
-
const depthTexDecl = this.isMultisampled
|
|
48
|
-
? '@group(0) @binding(0) var depthTex: texture_depth_multisampled_2d;'
|
|
49
|
-
: '@group(0) @binding(0) var depthTex: texture_depth_2d;';
|
|
50
|
-
const idTexDecl = this.isMultisampled
|
|
51
|
-
? '@group(0) @binding(1) var idTex: texture_multisampled_2d<f32>;'
|
|
52
|
-
: '@group(0) @binding(1) var idTex: texture_2d<f32>;';
|
|
53
|
-
const depthLoadExpr = this.isMultisampled
|
|
54
|
-
? 'textureLoad(depthTex, c, 0u)'
|
|
55
|
-
: 'textureLoad(depthTex, c, 0)';
|
|
56
|
-
const idLoadExpr = this.isMultisampled
|
|
57
|
-
? 'textureLoad(idTex, c, 0u)'
|
|
58
|
-
: 'textureLoad(idTex, c, 0)';
|
|
59
|
-
const shader = this._device.createShaderModule({
|
|
60
|
-
code: `
|
|
61
|
-
struct Params {
|
|
62
|
-
seamRadiusPx: f32,
|
|
63
|
-
seamIntensity: f32,
|
|
64
|
-
highQuality: u32,
|
|
65
|
-
_pad: u32,
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
${depthTexDecl}
|
|
69
|
-
${idTexDecl}
|
|
70
|
-
@group(0) @binding(2) var<uniform> params: Params;
|
|
71
|
-
|
|
72
|
-
struct VsOut {
|
|
73
|
-
@builtin(position) pos: vec4<f32>,
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
@vertex
|
|
77
|
-
fn vs_main(@builtin(vertex_index) v: u32) -> VsOut {
|
|
78
|
-
var o: VsOut;
|
|
79
|
-
var p = array<vec2<f32>, 3>(
|
|
80
|
-
vec2<f32>(-1.0, -3.0),
|
|
81
|
-
vec2<f32>(-1.0, 1.0),
|
|
82
|
-
vec2<f32>( 3.0, 1.0)
|
|
83
|
-
);
|
|
84
|
-
o.pos = vec4<f32>(p[v], 0.0, 1.0);
|
|
85
|
-
return o;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
fn sampleDepthClamped(ip: vec2<i32>, dims: vec2<i32>) -> f32 {
|
|
89
|
-
let c = vec2<i32>(clamp(ip.x, 0, dims.x - 1), clamp(ip.y, 0, dims.y - 1));
|
|
90
|
-
return ${depthLoadExpr};
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
fn decodeId24(encoded: vec4<f32>) -> u32 {
|
|
94
|
-
let r = u32(round(encoded.r * 255.0)) & 255u;
|
|
95
|
-
let g = u32(round(encoded.g * 255.0)) & 255u;
|
|
96
|
-
let b = u32(round(encoded.b * 255.0)) & 255u;
|
|
97
|
-
return (r << 16u) | (g << 8u) | b;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
fn sampleIdClamped(ip: vec2<i32>, dims: vec2<i32>) -> u32 {
|
|
101
|
-
let c = vec2<i32>(clamp(ip.x, 0, dims.x - 1), clamp(ip.y, 0, dims.y - 1));
|
|
102
|
-
return decodeId24(${idLoadExpr});
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
@fragment
|
|
106
|
-
fn fs_main(@builtin(position) fragPos: vec4<f32>) -> @location(0) vec4<f32> {
|
|
107
|
-
let dimsU = textureDimensions(depthTex);
|
|
108
|
-
let dims = vec2<i32>(i32(dimsU.x), i32(dimsU.y));
|
|
109
|
-
let p = vec2<i32>(i32(fragPos.x), i32(fragPos.y));
|
|
110
|
-
|
|
111
|
-
let center = sampleDepthClamped(p, dims);
|
|
112
|
-
if (center <= 0.00001) {
|
|
113
|
-
return vec4<f32>(0.0, 0.0, 0.0, 0.0);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
var seam = 0.0;
|
|
117
|
-
{
|
|
118
|
-
let idCenter = sampleIdClamped(p, dims);
|
|
119
|
-
if (idCenter != 0u) {
|
|
120
|
-
let rs = max(1, i32(params.seamRadiusPx));
|
|
121
|
-
let idX1 = sampleIdClamped(p + vec2<i32>( rs, 0), dims);
|
|
122
|
-
let idX0 = sampleIdClamped(p + vec2<i32>(-rs, 0), dims);
|
|
123
|
-
let idY1 = sampleIdClamped(p + vec2<i32>(0, rs), dims);
|
|
124
|
-
let idY0 = sampleIdClamped(p + vec2<i32>(0, -rs), dims);
|
|
125
|
-
|
|
126
|
-
// Sample depths at same positions to filter coplanar entity boundaries.
|
|
127
|
-
// Coplanar surfaces from different entities only differ by the z-hash
|
|
128
|
-
// anti-z-fighting offset (~2.5e-4 relative). Two complementary gates:
|
|
129
|
-
// - slope-aware first difference: depth-DISCONTINUOUS edges
|
|
130
|
-
// (silhouettes, one surface occluding another).
|
|
131
|
-
// - per-axis second difference > 3e-4: depth-CONTINUOUS creases
|
|
132
|
-
// (wall/wall and floor/wall corners). At a corner the depth slope
|
|
133
|
-
// changes across the seam, so |d(+r) + d(-r) - 2*center| measures
|
|
134
|
-
// the slope mismatch; it stays at the z-hash offset (<= 2.55e-4)
|
|
135
|
-
// for coplanar continuations. The old first-difference-only gate
|
|
136
|
-
// flickered around its threshold along corners -> DASHED lines.
|
|
137
|
-
// Known accepted edges of this gate: a coplanar feature narrower than
|
|
138
|
-
// 2*rs px puts BOTH taps on the other entity (sum of two hash offsets,
|
|
139
|
-
// up to 5.1e-4, can fire) — narrow inter-entity features deserve a seam
|
|
140
|
-
// line anyway. In ortho the z-hash offset shrinks with the scene-fitted
|
|
141
|
-
// far-near range, so large ortho views fall back to the 5e-4 gate.
|
|
142
|
-
let sX1 = sampleDepthClamped(p + vec2<i32>( rs, 0), dims);
|
|
143
|
-
let sX0 = sampleDepthClamped(p + vec2<i32>(-rs, 0), dims);
|
|
144
|
-
let sY1 = sampleDepthClamped(p + vec2<i32>(0, rs), dims);
|
|
145
|
-
let sY0 = sampleDepthClamped(p + vec2<i32>(0, -rs), dims);
|
|
146
|
-
let depthRef = max(center, 0.0001);
|
|
147
|
-
let depthRelThreshold = 5e-4;
|
|
148
|
-
let creaseRelThreshold = 3e-4;
|
|
149
|
-
let creaseX = abs(sX1 + sX0 - 2.0 * center) / depthRef > creaseRelThreshold;
|
|
150
|
-
let creaseY = abs(sY1 + sY0 - 2.0 * center) / depthRef > creaseRelThreshold;
|
|
151
|
-
|
|
152
|
-
// Discontinuity gate, slope-aware: a depth jump only counts as an
|
|
153
|
-
// occlusion edge when it clearly exceeds the in-plane slope measured
|
|
154
|
-
// on the OPPOSITE side of the pixel (2x asymmetry) on top of the
|
|
155
|
-
// absolute floor. A flush coplanar joint viewed at a grazing angle
|
|
156
|
-
// carries a huge per-pixel slope that used to trip the absolute
|
|
157
|
-
// threshold and draw noisy dashed lines across floors/walls; its
|
|
158
|
-
// jumps are symmetric, so the asymmetry test suppresses it. Genuine
|
|
159
|
-
// silhouettes jump far beyond the opposite-side slope. Features whose
|
|
160
|
-
// depth step shrinks below the local slope are sub-pixel at that
|
|
161
|
-
// angle anyway, so fading their line out is the correct behaviour.
|
|
162
|
-
let jX1 = abs(sX1 - center) / depthRef;
|
|
163
|
-
let jX0 = abs(sX0 - center) / depthRef;
|
|
164
|
-
let jY1 = abs(sY1 - center) / depthRef;
|
|
165
|
-
let jY0 = abs(sY0 - center) / depthRef;
|
|
166
|
-
let discX1 = jX1 > max(depthRelThreshold, 2.0 * jX0);
|
|
167
|
-
let discX0 = jX0 > max(depthRelThreshold, 2.0 * jX1);
|
|
168
|
-
let discY1 = jY1 > max(depthRelThreshold, 2.0 * jY0);
|
|
169
|
-
let discY0 = jY0 > max(depthRelThreshold, 2.0 * jY1);
|
|
170
|
-
|
|
171
|
-
let edge4Count =
|
|
172
|
-
f32(idX1 != idCenter && idX1 != 0u && (creaseX || discX1)) +
|
|
173
|
-
f32(idX0 != idCenter && idX0 != 0u && (creaseX || discX0)) +
|
|
174
|
-
f32(idY1 != idCenter && idY1 != 0u && (creaseY || discY1)) +
|
|
175
|
-
f32(idY0 != idCenter && idY0 != 0u && (creaseY || discY0));
|
|
176
|
-
seam = edge4Count * 0.25;
|
|
177
|
-
|
|
178
|
-
if (params.highQuality == 1u) {
|
|
179
|
-
let idD1 = sampleIdClamped(p + vec2<i32>( rs, rs), dims);
|
|
180
|
-
let idD2 = sampleIdClamped(p + vec2<i32>(-rs, rs), dims);
|
|
181
|
-
let idD3 = sampleIdClamped(p + vec2<i32>( rs, -rs), dims);
|
|
182
|
-
let idD4 = sampleIdClamped(p + vec2<i32>(-rs, -rs), dims);
|
|
183
|
-
let sD1 = sampleDepthClamped(p + vec2<i32>( rs, rs), dims);
|
|
184
|
-
let sD2 = sampleDepthClamped(p + vec2<i32>(-rs, rs), dims);
|
|
185
|
-
let sD3 = sampleDepthClamped(p + vec2<i32>( rs, -rs), dims);
|
|
186
|
-
let sD4 = sampleDepthClamped(p + vec2<i32>(-rs, -rs), dims);
|
|
187
|
-
// Same crease + slope-aware discontinuity gates along the diagonals.
|
|
188
|
-
let creaseD1 = abs(sD1 + sD4 - 2.0 * center) / depthRef > creaseRelThreshold;
|
|
189
|
-
let creaseD2 = abs(sD2 + sD3 - 2.0 * center) / depthRef > creaseRelThreshold;
|
|
190
|
-
let jD1 = abs(sD1 - center) / depthRef;
|
|
191
|
-
let jD2 = abs(sD2 - center) / depthRef;
|
|
192
|
-
let jD3 = abs(sD3 - center) / depthRef;
|
|
193
|
-
let jD4 = abs(sD4 - center) / depthRef;
|
|
194
|
-
let discD1 = jD1 > max(depthRelThreshold, 2.0 * jD4);
|
|
195
|
-
let discD4 = jD4 > max(depthRelThreshold, 2.0 * jD1);
|
|
196
|
-
let discD2 = jD2 > max(depthRelThreshold, 2.0 * jD3);
|
|
197
|
-
let discD3 = jD3 > max(depthRelThreshold, 2.0 * jD2);
|
|
198
|
-
let edgeDiagCount =
|
|
199
|
-
f32(idD1 != idCenter && idD1 != 0u && (creaseD1 || discD1)) +
|
|
200
|
-
f32(idD2 != idCenter && idD2 != 0u && (creaseD2 || discD2)) +
|
|
201
|
-
f32(idD3 != idCenter && idD3 != 0u && (creaseD2 || discD3)) +
|
|
202
|
-
f32(idD4 != idCenter && idD4 != 0u && (creaseD1 || discD4));
|
|
203
|
-
let edgeDiag = edgeDiagCount * 0.25;
|
|
204
|
-
seam = max(seam, (seam + edgeDiag) * 0.5);
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
let seamDarken = clamp(seam * params.seamIntensity, 0.0, 0.35);
|
|
210
|
-
return vec4<f32>(0.0, 0.0, 0.0, seamDarken);
|
|
211
|
-
}
|
|
212
|
-
`,
|
|
213
|
-
});
|
|
214
|
-
this.pipeline = this._device.createRenderPipeline({
|
|
215
|
-
layout: this._device.createPipelineLayout({ bindGroupLayouts: [this.bindGroupLayout] }),
|
|
216
|
-
vertex: {
|
|
217
|
-
module: shader,
|
|
218
|
-
entryPoint: 'vs_main',
|
|
219
|
-
},
|
|
220
|
-
fragment: {
|
|
221
|
-
module: shader,
|
|
222
|
-
entryPoint: 'fs_main',
|
|
223
|
-
targets: [{
|
|
224
|
-
format: this.colorFormat,
|
|
225
|
-
blend: {
|
|
226
|
-
color: {
|
|
227
|
-
srcFactor: 'zero',
|
|
228
|
-
dstFactor: 'one-minus-src-alpha',
|
|
229
|
-
},
|
|
230
|
-
alpha: {
|
|
231
|
-
srcFactor: 'zero',
|
|
232
|
-
dstFactor: 'one',
|
|
233
|
-
},
|
|
234
|
-
},
|
|
235
|
-
}],
|
|
236
|
-
},
|
|
237
|
-
primitive: {
|
|
238
|
-
topology: 'triangle-list',
|
|
239
|
-
cullMode: 'none',
|
|
240
|
-
},
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
/**
|
|
244
|
-
* Draw the separation lines over `targetView` in a fullscreen overlay pass.
|
|
245
|
-
*/
|
|
246
|
-
apply(commandEncoder, options) {
|
|
247
|
-
if (this.destroyed)
|
|
248
|
-
return;
|
|
249
|
-
const highQuality = options.quality === 'high';
|
|
250
|
-
this.uniformF32[0] = highQuality ? options.radius : 1.0;
|
|
251
|
-
this.uniformF32[1] = options.intensity;
|
|
252
|
-
this.uniformU32[2] = highQuality ? 1 : 0;
|
|
253
|
-
this.uniformU32[3] = 0;
|
|
254
|
-
this._device.queue.writeBuffer(this.uniformBuffer, 0, this.uniformStaging);
|
|
255
|
-
if (this.cachedDepthView !== options.depthView || this.cachedObjectIdView !== options.objectIdView || this.cachedBindGroup === null) {
|
|
256
|
-
this.cachedBindGroup = this._device.createBindGroup({
|
|
257
|
-
layout: this.bindGroupLayout,
|
|
258
|
-
entries: [
|
|
259
|
-
{ binding: 0, resource: options.depthView },
|
|
260
|
-
{ binding: 1, resource: options.objectIdView },
|
|
261
|
-
{ binding: 2, resource: { buffer: this.uniformBuffer } },
|
|
262
|
-
],
|
|
263
|
-
});
|
|
264
|
-
this.cachedDepthView = options.depthView;
|
|
265
|
-
this.cachedObjectIdView = options.objectIdView;
|
|
266
|
-
}
|
|
267
|
-
const pass = commandEncoder.beginRenderPass({
|
|
268
|
-
colorAttachments: [{
|
|
269
|
-
view: options.targetView,
|
|
270
|
-
loadOp: 'load',
|
|
271
|
-
storeOp: 'store',
|
|
272
|
-
}],
|
|
273
|
-
});
|
|
274
|
-
pass.setPipeline(this.pipeline);
|
|
275
|
-
pass.setBindGroup(0, this.cachedBindGroup);
|
|
276
|
-
pass.draw(3, 1, 0, 0);
|
|
277
|
-
pass.end();
|
|
278
|
-
}
|
|
279
|
-
destroyed = false;
|
|
280
|
-
/**
|
|
281
|
-
* Destroy all GPU resources held by this post-processor.
|
|
282
|
-
* After calling this method the post-processor is no longer usable.
|
|
283
|
-
* Safe to call multiple times.
|
|
284
|
-
*/
|
|
285
|
-
destroy() {
|
|
286
|
-
if (this.destroyed)
|
|
287
|
-
return;
|
|
288
|
-
this.destroyed = true;
|
|
289
|
-
this.uniformBuffer.destroy();
|
|
290
|
-
this.cachedBindGroup = null;
|
|
291
|
-
this.cachedDepthView = null;
|
|
292
|
-
this.cachedObjectIdView = null;
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
//# sourceMappingURL=post-processor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"post-processor.js","sourceRoot":"","sources":["../src/post-processor.ts"],"names":[],"mappings":"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"}
|