Skip to content

Commit c8a5df8

Browse files
improve readability
1 parent 264bac3 commit c8a5df8

File tree

6 files changed

+48
-50
lines changed

6 files changed

+48
-50
lines changed

examples_tests/22.RaytracedAO/closestHit.comp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,16 @@ void main()
5353
{
5454
const uint triangleID = intersection.primid;
5555
const nbl_glsl_ext_Mitsuba_Loader_instance_data_t batchInstanceData = InstData.data[batchInstanceGUID];
56+
57+
// obtain ray incoming direction
58+
normalizedV = -normalize(ray.direction);
5659
// clear the hit success flag
5760
intersections[vertex_depth_mod_2].data[gl_GlobalInvocationID.x].shapeid = -1;
61+
5862
const uvec3 indices = get_triangle_indices(batchInstanceGUID,triangleID);
5963

60-
// obtain ray incoming direction
61-
normalizedV = -mat3(batchInstanceData.normalMatrixRow0,batchInstanceData.normalMatrixRow1,batchInstanceData.normalMatrixRow2)*ray.direction;
62-
normalizedV = normalize(normalizedV); // doesn't non-uniform scale screw up BxDF eval and generation?
63-
6464
// positions
65-
const vec3 last_vx_pos = load_positions(indices,batchInstanceGUID);
65+
const vec3 last_vx_pos = load_positions(indices,batchInstanceData);
6666
const vec3 geomNormal = cross(dPdBary[0],dPdBary[1]);
6767
const bool frontfacing = dot(geomNormal,normalizedV)>0.f;
6868

@@ -76,7 +76,7 @@ void main()
7676
// if we ever support spatially varying emissive, we'll need to hoist barycentric computation and UV fetching to the position fetching
7777
const vec2 compactBary = intersection.uvwt.xy;
7878

79-
const nbl_glsl_xoroshiro64star_state_t scramble_start_state = load_aux_vertex_attrs(compactBary,indices,batchInstanceGUID,material,outPixelLocation,vertex_depth
79+
const nbl_glsl_xoroshiro64star_state_t scramble_start_state = load_aux_vertex_attrs(compactBary,indices,batchInstanceData,material,outPixelLocation,vertex_depth
8080
#ifdef TEX_PREFETCH_STREAM
8181
,mat2(0.0) // TODO: Covariance Rendering
8282
#endif
@@ -85,8 +85,8 @@ void main()
8585
const vec3 hitWorldPos = dPdBary*compactBary.xy+last_vx_pos;
8686

8787
generate_next_rays(
88-
MAX_RAYS_GENERATED,batchInstanceData,material,frontfacing,vertex_depth,
89-
scramble_start_state,sampleID,outPixelLocation,hitWorldPos,geomNormal,throughput
88+
MAX_RAYS_GENERATED,material,frontfacing,vertex_depth,scramble_start_state,
89+
sampleID,outPixelLocation,hitWorldPos,geomNormal,throughput
9090
);
9191
}
9292
}

examples_tests/22.RaytracedAO/fillVisBuffer.frag

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ layout(location = 2) flat in uint BackfacingBit_BatchInstanceGUID;
1414
layout(location = 3) flat in uint drawCmdFirstIndex;
1515

1616
uint nbl_glsl_barycentric_frag_getDrawID() {return BackfacingBit_BatchInstanceGUID&0x7fffffffu;}
17-
vec3 nbl_glsl_barycentric_frag_getVertexPos(in uint drawID, in uint primID, in uint primsVx)
17+
vec3 nbl_glsl_barycentric_frag_getVertexPos(in uint batchInstanceGUID, in uint primID, in uint primsVx)
1818
{
1919
const uint ix = nbl_glsl_VG_fetchTriangleVertexIndex(primID*3u+drawCmdFirstIndex,primsVx);
20-
return nbl_glsl_fetchVtxPos(ix,drawID);
20+
return nbl_glsl_fetchVtxPos(ix,InstData.data[batchInstanceGUID]);
2121
}
2222

2323

examples_tests/22.RaytracedAO/fillVisBuffer.vert

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ void main()
2727

2828
const uint batchInstanceGUID = self.backfacingBit_batchInstanceGUID&0x7fffffffu;
2929

30-
const vec3 modelPos = nbl_glsl_fetchVtxPos(gl_VertexIndex,batchInstanceGUID);
30+
const vec3 modelPos = nbl_glsl_fetchVtxPos(gl_VertexIndex,InstData.data[batchInstanceGUID]);
3131
nbl_glsl_barycentric_vert_set(modelPos);
3232
gl_Position = nbl_glsl_pseudoMul4x4with3x1(self.MVP,modelPos);
3333
}

examples_tests/22.RaytracedAO/raygen.comp

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,15 @@ void main()
3737
const uvec4 visBuffer = texelFetch(frontFacingTriangleIDDrawID_unorm16Bary_dBarydScreenHalf2x2,ivec2(outPixelLocation),0);
3838

3939
// unproject (TODO: redo)
40-
vec3 hitWorldPos,V;
40+
vec3 hitWorldPos;
4141
{
4242
const vec3 NDC = vec3(vec2(outPixelLocation)*staticViewData.rcpPixelSize+staticViewData.rcpHalfPixelSize,1.0-revdepth);
4343

4444
const vec4 tmp = nbl_glsl_pseudoMul4x4with3x1(pc.cummon.inverseMVP,NDC);
4545
hitWorldPos = tmp.xyz/tmp.w;
4646

47-
V = nbl_glsl_pseudoMul3x4with3x1(pc.cummon.ndcToV,NDC);
47+
const vec3 V = nbl_glsl_pseudoMul3x4with3x1(pc.cummon.ndcToV,NDC);
48+
normalizedV = normalize(V);
4849
}
4950

5051
// vis buffer decode
@@ -57,24 +58,18 @@ void main()
5758
const mat2 dBarydScreen = mat2(unpackHalf2x16(visBuffer[2]),unpackHalf2x16(visBuffer[3]));
5859
#endif
5960

61+
//
6062
const nbl_glsl_ext_Mitsuba_Loader_instance_data_t batchInstanceData = InstData.data[batchInstanceGUID];
6163
const uvec3 indices = get_triangle_indices(batchInstanceGUID,triangleID);
62-
63-
// TODO: redo
64-
{
65-
const mat3 batchScaleRotInv = mat3(batchInstanceData.normalMatrixRow0,batchInstanceData.normalMatrixRow1,batchInstanceData.normalMatrixRow2);
66-
hitWorldPos = batchScaleRotInv*(hitWorldPos-batchInstanceData.tform[3]);
67-
normalizedV = normalize(batchScaleRotInv*V); // doesn't non-uniform scale screw up BxDF eval and generation?
68-
}
6964

7065
// get material while waiting for indices
7166
const nbl_glsl_MC_oriented_material_t material = nbl_glsl_MC_material_data_t_getOriented(batchInstanceData.material,frontfacing);
7267
emissive = nbl_glsl_MC_oriented_material_t_getEmissive(material);
7368

7469
const uint vertex_depth_mod_2 = 0x1u;
7570
// load vertex data
76-
load_positions(indices,batchInstanceGUID);
77-
const nbl_glsl_xoroshiro64star_state_t scramble_start_state = load_aux_vertex_attrs(compactBary,indices,batchInstanceGUID,material,outPixelLocation,vertex_depth_mod_2
71+
load_positions(indices,batchInstanceData);
72+
const nbl_glsl_xoroshiro64star_state_t scramble_start_state = load_aux_vertex_attrs(compactBary,indices,batchInstanceData,material,outPixelLocation,vertex_depth_mod_2
7873
#ifdef TEX_PREFETCH_STREAM
7974
,dBarydScreen
8075
#endif
@@ -85,7 +80,7 @@ void main()
8580
const vec3 geomNormal = cross(dPdBary[0],dPdBary[1]);
8681
const uint vertex_depth = 1u;
8782
generate_next_rays(
88-
staticViewData.samplesPerPixelPerDispatch,batchInstanceData,material,frontfacing,vertex_depth,
83+
staticViewData.samplesPerPixelPerDispatch,material,frontfacing,vertex_depth,
8984
scramble_start_state,sampleID,outPixelLocation,hitWorldPos,geomNormal,vec3(1.0)
9085
);
9186
}

examples_tests/22.RaytracedAO/raytraceCommon.glsl

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -117,15 +117,17 @@ vec3 nbl_glsl_MC_getNormalizedWorldSpaceN()
117117

118118
#include <nbl/builtin/glsl/barycentric/utils.glsl>
119119
mat2x3 dPdBary;
120-
vec3 load_positions(in uvec3 indices, in uint batchInstanceGUID)
120+
vec3 load_positions(in uvec3 indices, in nbl_glsl_ext_Mitsuba_Loader_instance_data_t batchInstanceData)
121121
{
122-
const mat3 positions = mat3(
123-
nbl_glsl_fetchVtxPos(indices[0],batchInstanceGUID),
124-
nbl_glsl_fetchVtxPos(indices[1],batchInstanceGUID),
125-
nbl_glsl_fetchVtxPos(indices[2],batchInstanceGUID)
122+
mat3 positions = mat3(
123+
nbl_glsl_fetchVtxPos(indices[0],batchInstanceData),
124+
nbl_glsl_fetchVtxPos(indices[1],batchInstanceData),
125+
nbl_glsl_fetchVtxPos(indices[2],batchInstanceData)
126126
);
127+
const mat4x3 tform = batchInstanceData.tform;
128+
positions = mat3(tform)*positions;
127129
dPdBary = mat2x3(positions[0]-positions[2],positions[1]-positions[2]);
128-
return positions[2];
130+
return positions[2]+tform[3];
129131
}
130132
#ifdef TEX_PREFETCH_STREAM
131133
mat2x3 nbl_glsl_perturbNormal_dPdSomething()
@@ -161,13 +163,13 @@ void gen_sample_ray(
161163

162164
float pdf;
163165
nbl_glsl_LightSample s;
164-
throughput = nbl_glsl_MC_runGenerateAndRemainderStream(precomp, gcs, rnps, rand, pdf, s);
166+
throughput = nbl_glsl_MC_runGenerateAndRemainderStream(precomp,gcs,rnps,rand,pdf,s);
165167

166168
direction = s.L;
167169
}
168170

169171
nbl_glsl_xoroshiro64star_state_t load_aux_vertex_attrs(
170-
in vec2 compactBary, in uvec3 indices, in uint batchInstanceGUID,
172+
in vec2 compactBary, in uvec3 indices, in nbl_glsl_ext_Mitsuba_Loader_instance_data_t batchInstanceData,
171173
in nbl_glsl_MC_oriented_material_t material,
172174
in uvec2 outPixelLocation, in uint vertex_depth_mod_2
173175
#ifdef TEX_PREFETCH_STREAM
@@ -178,19 +180,19 @@ nbl_glsl_xoroshiro64star_state_t load_aux_vertex_attrs(
178180
// if we ever support spatially varying emissive, we'll need to hoist barycentric computation and UV fetching to the position fetching
179181
#ifdef TEX_PREFETCH_STREAM
180182
const mat3x2 uvs = mat3x2(
181-
nbl_glsl_fetchVtxUV(indices[0],batchInstanceGUID),
182-
nbl_glsl_fetchVtxUV(indices[1],batchInstanceGUID),
183-
nbl_glsl_fetchVtxUV(indices[2],batchInstanceGUID)
183+
nbl_glsl_fetchVtxUV(indices[0],batchInstanceData),
184+
nbl_glsl_fetchVtxUV(indices[1],batchInstanceData),
185+
nbl_glsl_fetchVtxUV(indices[2],batchInstanceData)
184186
);
185187
const nbl_glsl_MC_instr_stream_t tps = nbl_glsl_MC_oriented_material_t_getTexPrefetchStream(material);
186188
#endif
187189
// only needed for continuing
188190
const mat3 normals = mat3(
189-
nbl_glsl_fetchVtxNormal(indices[0],batchInstanceGUID),
190-
nbl_glsl_fetchVtxNormal(indices[1],batchInstanceGUID),
191-
nbl_glsl_fetchVtxNormal(indices[2],batchInstanceGUID)
191+
nbl_glsl_fetchVtxNormal(indices[0],batchInstanceData),
192+
nbl_glsl_fetchVtxNormal(indices[1],batchInstanceData),
193+
nbl_glsl_fetchVtxNormal(indices[2],batchInstanceData)
192194
);
193-
195+
194196
#ifdef TEX_PREFETCH_STREAM
195197
dUVdBary = mat2(uvs[0]-uvs[2],uvs[1]-uvs[2]);
196198
const vec2 UV = dUVdBary*compactBary+uvs[2];
@@ -204,16 +206,18 @@ nbl_glsl_xoroshiro64star_state_t load_aux_vertex_attrs(
204206
const nbl_glsl_xoroshiro64star_state_t scramble_start_state = imageLoad(scramblebuf,ivec3(outPixelLocation,vertex_depth_mod_2)).rg;
205207

206208
// while waiting for the scramble state
209+
normalizedN.x = dot(batchInstanceData.normalMatrixRow0,normal);
210+
normalizedN.y = dot(batchInstanceData.normalMatrixRow1,normal);
211+
normalizedN.z = dot(batchInstanceData.normalMatrixRow2,normal);
207212
normalizedN = normalize(normal);
208213

209214
return scramble_start_state;
210215
}
211216

212217
void generate_next_rays(
213-
in uint maxRaysToGen, in nbl_glsl_ext_Mitsuba_Loader_instance_data_t batchInstanceData,
214-
in nbl_glsl_MC_oriented_material_t material, in bool frontfacing, in uint vertex_depth,
218+
in uint maxRaysToGen, in nbl_glsl_MC_oriented_material_t material, in bool frontfacing, in uint vertex_depth,
215219
in nbl_glsl_xoroshiro64star_state_t scramble_start_state, in uint sampleID, in uvec2 outPixelLocation,
216-
in vec3 pos, vec3 geomNormal, in vec3 prevThroughput)
220+
in vec3 origin, vec3 geomNormal, in vec3 prevThroughput)
217221
{
218222
// get material streams as well
219223
const nbl_glsl_MC_instr_stream_t gcs = nbl_glsl_MC_oriented_material_t_getGenChoiceStream(material);
@@ -257,17 +261,16 @@ for (uint i=1u; i!=vertex_depth; i++)
257261
// set up dispatch indirect
258262
atomicMax(traceIndirect[vertex_depth_mod_2_inv].params.num_groups_x,(baseOutputID+raysToAllocate-1u)/WORKGROUP_SIZE+1u);
259263

260-
const mat4x3 batchWorldTform = batchInstanceData.tform;
261264
uint offset = 0u;
262265
for (uint i=0u; i<maxRaysToGen; i++)
263266
if (maxT[i]!=0.f)
264267
{
265268
nbl_glsl_ext_RadeonRays_ray newRay;
266269
// TODO: improve ray offsets
267270
const float err = 1.f/96.f;
268-
newRay.origin = mat3(batchWorldTform)*(pos+/*geomNormal/max(max(geomNormal.x,geomNormal.y),geomNormal.z)*sign(dot(geomNormal,direction[i]))*/direction[i]*err)+batchWorldTform[3];
271+
newRay.origin = origin+/*geomNormal/max(max(geomNormal.x,geomNormal.y),geomNormal.z)*sign(dot(geomNormal,direction[i]))*/direction[i]*err;
269272
newRay.maxT = maxT[i];
270-
newRay.direction = mat3(batchWorldTform)*direction[i]; // normalize after ? (doesn't non-uniform scale screw up BxDF eval and generation?)
273+
newRay.direction = direction[i]; // normalize after ? (doesn't non-uniform scale screw up BxDF eval and generation?)
271274
newRay.time = packOutPixelLocation(outPixelLocation);
272275
newRay.mask = -1;
273276
newRay._active = 1;

examples_tests/22.RaytracedAO/virtualGeometry.glsl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,21 @@
2020
#include <nbl/builtin/glsl/ext/MitsubaLoader/instance_data_descriptor.glsl>
2121

2222

23-
vec3 nbl_glsl_fetchVtxPos(in uint vtxID, in uint drawGUID)
23+
vec3 nbl_glsl_fetchVtxPos(in uint vtxID, in nbl_glsl_ext_Mitsuba_Loader_instance_data_t batchInstanceData)
2424
{
25-
nbl_glsl_VG_VirtualAttributePacked_t va = InstData.data[drawGUID].padding0;
25+
nbl_glsl_VG_VirtualAttributePacked_t va = batchInstanceData.padding0;
2626
return nbl_glsl_VG_attribFetch_RGB32_SFLOAT(va,vtxID);
2727
}
2828

29-
vec3 nbl_glsl_fetchVtxNormal(in uint vtxID, in uint drawGUID)
29+
vec3 nbl_glsl_fetchVtxNormal(in uint vtxID, in nbl_glsl_ext_Mitsuba_Loader_instance_data_t batchInstanceData)
3030
{
31-
nbl_glsl_VG_VirtualAttributePacked_t va = InstData.data[drawGUID].padding1;
31+
nbl_glsl_VG_VirtualAttributePacked_t va = batchInstanceData.padding1;
3232
return normalize(nbl_glsl_VG_attribFetch_RGB10A2_SNORM(va,vtxID).xyz);
3333
}
3434

35-
vec2 nbl_glsl_fetchVtxUV(in uint vtxID, in uint drawGUID)
35+
vec2 nbl_glsl_fetchVtxUV(in uint vtxID, in nbl_glsl_ext_Mitsuba_Loader_instance_data_t batchInstanceData)
3636
{
37-
nbl_glsl_VG_VirtualAttributePacked_t va = InstData.data[drawGUID].determinantSignBit;
37+
nbl_glsl_VG_VirtualAttributePacked_t va = batchInstanceData.determinantSignBit;
3838
return nbl_glsl_VG_attribFetch_RG32_SFLOAT(va,vtxID);
3939
}
4040

0 commit comments

Comments
 (0)