@@ -27,59 +27,56 @@ export const MarchResult = d.struct({
2727 position : d . vec3f ,
2828} ) ;
2929
30- export const march = tgpu [ '~unstable' ]
31- . fn ( [
32- d . ptrFn ( ShapeContext ) ,
33- d . u32 ,
34- d . ptrFn ( MarchResult ) ,
35- ] ) ( `(ctx: ptr<function, ShapeContext>, limit: u32, out: ptr<function, MarchResult>) {
36- var pos = (*ctx).rayPos;
37- var prev_dist = -1.;
38- var min_dist: f32 = MarchParams.farPlane;
39-
40- var step = 0u;
41- var progress = 0.;
42-
43- for (; step <= limit; step++) {
44- pos = (*ctx).rayPos + (*ctx).rayDir * progress;
45- min_dist = MarchParams.sampleSdf(pos);
46-
47- // Inside volume?
48- if (min_dist <= 0.) {
49- // No need to check more objects.
50- break;
51- }
52-
53- if (min_dist < MarchParams.getSurfaceThreshold(*ctx) && min_dist < prev_dist) {
54- // No need to check more objects.
55- break;
56- }
57-
58- // march forward safely
59- progress += min_dist;
60- (*ctx).rayDistance += min_dist;
61-
62- if (progress > MarchParams.farPlane) {
63- // Stop checking.
64- break;
65- }
66-
67- prev_dist = min_dist;
30+ export const march = tgpu [ '~unstable' ] . fn ( {
31+ ctx : d . ptrFn ( ShapeContext ) ,
32+ limit : d . u32 ,
33+ out : d . ptrFn ( MarchResult ) ,
34+ } ) `{
35+ var pos = (*ctx).rayPos;
36+ var prev_dist = -1.;
37+ var min_dist: f32 = MarchParams.farPlane;
38+
39+ var step = 0u;
40+ var progress = 0.;
41+
42+ for (; step <= limit; step++) {
43+ pos = (*ctx).rayPos + (*ctx).rayDir * progress;
44+ min_dist = MarchParams.sampleSdf(pos);
45+
46+ // Inside volume?
47+ if (min_dist <= 0.) {
48+ // No need to check more objects.
49+ break;
6850 }
6951
70- (*out).position = pos;
52+ if (min_dist < MarchParams.getSurfaceThreshold(*ctx) && min_dist < prev_dist) {
53+ // No need to check more objects.
54+ break;
55+ }
56+
57+ // march forward safely
58+ progress += min_dist;
59+ (*ctx).rayDistance += min_dist;
7160
72- // Not near surface or distance rising?
73- if (min_dist > MarchParams.getSurfaceThreshold(*ctx) * 2. || min_dist > prev_dist) {
74- // Sky
75- (*out).steps = MarchParams.maxSteps + 1u;
76- return;
61+ if (progress > MarchParams.farPlane) {
62+ // Stop checking.
63+ break;
7764 }
7865
79- (*out).steps = step;
80- }` )
81- . $uses ( {
82- ShapeContext,
83- MarchResult,
84- MarchParams,
85- } ) ;
66+ prev_dist = min_dist;
67+ }
68+
69+ (*out).position = pos;
70+
71+ // Not near surface or distance rising?
72+ if (min_dist > MarchParams.getSurfaceThreshold(*ctx) * 2. || min_dist > prev_dist) {
73+ // Sky
74+ (*out).steps = MarchParams.maxSteps + 1u;
75+ return;
76+ }
77+
78+ (*out).steps = step;
79+ }
80+ ` . $uses ( {
81+ MarchParams,
82+ } ) ;
0 commit comments