Skip to content

Commit 2c79c4f

Browse files
committed
Rewrote march in TGSL
1 parent 0ee6b54 commit 2c79c4f

File tree

1 file changed

+25
-25
lines changed

1 file changed

+25
-25
lines changed
Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
import tgpu, { type TgpuFn } from 'typegpu';
22
import * as d from 'typegpu/data';
3+
import * as std from 'typegpu/std';
34
import { ShapeContext } from './types.ts';
45

5-
const sampleSdfShell = tgpu['~unstable'].fn([d.vec3f], d.f32);
66
type SampleSdf = TgpuFn<[d.Vec3f], d.F32>;
77

8-
const defaultGetSurfaceThreshold = tgpu['~unstable'].fn(
9-
[ShapeContext],
10-
d.f32,
11-
)((_ctx) => 0.001);
8+
const defaultGetSurfaceThreshold = tgpu['~unstable'].fn([ShapeContext], d.f32)(
9+
(_ctx) => 0.001,
10+
);
1211

1312
export const MarchParams = {
1413
maxSteps: tgpu['~unstable'].slot(500),
@@ -31,54 +30,55 @@ export const march = tgpu['~unstable'].fn([
3130
d.ptrFn(ShapeContext),
3231
d.u32,
3332
d.ptrFn(MarchResult),
34-
])`(ctx: ptr<function, ShapeContext>, limit: u32, out: ptr<function, MarchResult>) {
35-
var pos = (*ctx).rayPos;
36-
var prev_dist = -1.;
37-
var min_dist: f32 = MarchParams.farPlane;
33+
])((ctx, limit, out) => {
34+
let pos = d.vec3f(ctx.rayPos);
35+
let prev_dist = d.f32(-1);
36+
let min_dist = d.f32(MarchParams.farPlane.value);
3837

39-
var step = 0u;
40-
var progress = 0.;
38+
let step = d.u32(0);
39+
let progress = d.f32(0);
4140

4241
for (; step <= limit; step++) {
43-
pos = (*ctx).rayPos + (*ctx).rayDir * progress;
44-
min_dist = MarchParams.sampleSdf(pos);
42+
pos = std.add(ctx.rayPos, std.mul(ctx.rayDir, progress));
43+
min_dist = MarchParams.sampleSdf.value(pos);
4544

4645
// Inside volume?
4746
if (min_dist <= 0.) {
4847
// No need to check more objects.
4948
break;
5049
}
5150

52-
if (min_dist < MarchParams.getSurfaceThreshold(*ctx) && min_dist < prev_dist) {
51+
if (
52+
min_dist < MarchParams.getSurfaceThreshold.value(ctx) &&
53+
min_dist < prev_dist
54+
) {
5355
// No need to check more objects.
5456
break;
5557
}
5658

5759
// march forward safely
5860
progress += min_dist;
59-
(*ctx).rayDistance += min_dist;
61+
ctx.rayDistance += min_dist;
6062

61-
if (progress > MarchParams.farPlane) {
63+
if (progress > MarchParams.farPlane.value) {
6264
// Stop checking.
6365
break;
6466
}
6567

6668
prev_dist = min_dist;
6769
}
6870

69-
(*out).position = pos;
71+
out.position = pos;
7072

7173
// Not near surface or distance rising?
72-
if (min_dist > MarchParams.getSurfaceThreshold(*ctx) * 2. || min_dist > prev_dist) {
74+
if (
75+
min_dist > MarchParams.getSurfaceThreshold.value(ctx) * 2. ||
76+
min_dist > prev_dist
77+
) {
7378
// Sky
74-
(*out).steps = MarchParams.maxSteps + 1u;
79+
out.steps = MarchParams.maxSteps.value + 1;
7580
return;
7681
}
7782

78-
(*out).steps = step;
79-
}
80-
`.$uses({
81-
ShapeContext,
82-
MarchResult,
83-
MarchParams,
83+
out.steps = step;
8484
});

0 commit comments

Comments
 (0)