@@ -76,7 +76,6 @@ float linearizeZBufferVal(in float nonLinearZBufferVal)
76
76
return 1.0/(pc.cummon.depthLinearizationConstant*nonLinearZBufferVal+1.0);
77
77
}
78
78
79
-
80
79
/*
81
80
float maxAbs1(in float val)
82
81
{
@@ -124,7 +123,7 @@ struct SamplingData_t
124
123
bool gen_sample_ray(out float maxT, out vec3 direction, out vec3 throughput, in SamplingData_t samplingData)
125
124
{
126
125
maxT = FLT_MAX;
127
- direction = normalize(vec3(0.5,0.5,0.5) );
126
+ direction = -nbl_glsl_MC_getNormalizedWorldSpaceV( );
128
127
throughput = vec3(1.0);
129
128
return true;
130
129
}
@@ -232,20 +231,28 @@ void main()
232
231
233
232
// unproject
234
233
{
235
- const mat4x3 frustumCorners = pc.cummon.frustumCorners ;
234
+ const mat4x3 frustumCornersToCamera = pc.cummon.frustumCornersToCamera ;
236
235
const vec2 NDC = vec2(outputLocation)*staticViewData.rcpPixelSize+staticViewData.rcpHalfPixelSize;
237
-
238
- const vec3 viewDir = mix(frustumCorners[0 ]*NDC.x+frustumCorners[1],frustumCorners[2 ]*NDC.x+frustumCorners[3 ],NDC.yyy);
239
- worldPosition = viewDir*linearizeZBufferVal(revdepth)+ pc.cummon.normalMatrixAndCameraPos[3];
240
- normalizedV = normalize(viewDir );
236
+
237
+ const vec3 V = mix(frustumCornersToCamera[1 ]*NDC.x+frustumCornersToCamera[0],frustumCornersToCamera[3 ]*NDC.x+frustumCornersToCamera[2 ],NDC.yyy); // could maybe compute this more precisely
238
+ worldPosition = pc.cummon.normalMatrixAndCameraPos[3]-V*linearizeZBufferVal(revdepth) ;
239
+ normalizedV = normalize(V );
241
240
}
242
241
243
242
// decode vis buffer
244
243
bool frontfacing;
244
+ vec3 emissive;
245
245
{
246
246
frontfacing = visBuffer[0]<0x80000000u;
247
247
const uint objectID = visBuffer[0]&0x7fffffffu;
248
248
const uint triangleID = visBuffer[1];
249
+
250
+ //
251
+ precomputed = nbl_glsl_MC_precomputeData(frontfacing);
252
+ material = nbl_glsl_MC_material_data_t_getOriented(InstData.data[objectID].material,precomputed.frontface);
253
+
254
+ //
255
+ emissive = vec3(float(objectID),float(triangleID),0.0);//nbl_glsl_MC_oriented_material_t_getEmissive(material);
249
256
}
250
257
251
258
// normally we'd use MeshPackerV2's vertex attribute data for this, but now we read from temporary GBuffer
@@ -254,11 +261,6 @@ void main()
254
261
}
255
262
256
263
//
257
- precomputed = nbl_glsl_MC_precomputeData(frontfacing);
258
- //material = nbl_glsl_MC_material_data_t_getOriented(InstData.data[objectID].material,precomputed.frontface);
259
-
260
- //
261
- const vec3 emissive = vec3(0.0,1.0,0.0);//nbl_glsl_MC_oriented_material_t_getEmissive(material);
262
264
vec3 acc;
263
265
if (pc.cummon.rcpFramesDispatched<1.0)
264
266
acc = fetchAccumulation(pixelCoord)+emissive/float(pc.cummon.framesDispatched-1u);
@@ -293,9 +295,10 @@ void main()
293
295
{
294
296
throughput /= float(staticViewData.samplesPerPixelPerDispatch);
295
297
296
- rays[realOutputID].origin = nbl_glsl_MC_getWorldSpacePosition();/*+newray.direction*err?; TODO */
297
- rays[realOutputID].maxT = FLT_MAX;
298
- rays[realOutputID].direction = direction;
298
+ const float tt = 1.0;
299
+ rays[realOutputID].origin = nbl_glsl_MC_getWorldSpacePosition()+nbl_glsl_MC_getNormalizedWorldSpaceV()*tt;//-direction*0.5*maxT;/*+newray.direction*err?; TODO */
300
+ rays[realOutputID].maxT = tt*2.0;
301
+ rays[realOutputID].direction = -nbl_glsl_MC_getNormalizedWorldSpaceV()*tt;
299
302
rays[realOutputID].mask = -1;
300
303
rays[realOutputID]._active = 1;
301
304
rays[realOutputID].backfaceCulling = int(packHalf2x16(throughput.ab));
0 commit comments