@@ -41,7 +41,6 @@ namespace GLSLPT
41
41
, outputFBO(0 )
42
42
, pathTraceShader(nullptr )
43
43
, pathTraceShaderLowRes(nullptr )
44
- , accumShader(nullptr )
45
44
, outputShader(nullptr )
46
45
, tonemapShader(nullptr )
47
46
, pathTraceTexture(0 )
@@ -50,8 +49,8 @@ namespace GLSLPT
50
49
, tileOutputTexture()
51
50
, tileX(-1 )
52
51
, tileY(-1 )
53
- , numTilesX(- 1 )
54
- , numTilesY(- 1 )
52
+ , numTilesX(5 )
53
+ , numTilesY(5 )
55
54
, currentBuffer(0 )
56
55
, sampleCounter(0 )
57
56
{
@@ -85,8 +84,7 @@ namespace GLSLPT
85
84
86
85
ShaderInclude::ShaderSource vertexShaderSrcObj = ShaderInclude::load (shadersDirectory + " common/vertex.glsl" );
87
86
ShaderInclude::ShaderSource pathTraceShaderSrcObj = ShaderInclude::load (shadersDirectory + " tiled.glsl" );
88
- ShaderInclude::ShaderSource pathTraceShaderLowResSrcObj = ShaderInclude::load (shadersDirectory + " progressive.glsl" );
89
- ShaderInclude::ShaderSource accumShaderSrcObj = ShaderInclude::load (shadersDirectory + " accumulation.glsl" );
87
+ ShaderInclude::ShaderSource pathTraceShaderLowResSrcObj = ShaderInclude::load (shadersDirectory + " preview.glsl" );
90
88
ShaderInclude::ShaderSource outputShaderSrcObj = ShaderInclude::load (shadersDirectory + " output.glsl" );
91
89
ShaderInclude::ShaderSource tonemapShaderSrcObj = ShaderInclude::load (shadersDirectory + " tonemap.glsl" );
92
90
@@ -123,16 +121,16 @@ namespace GLSLPT
123
121
124
122
pathTraceShader = LoadShaders (vertexShaderSrcObj, pathTraceShaderSrcObj);
125
123
pathTraceShaderLowRes = LoadShaders (vertexShaderSrcObj, pathTraceShaderLowResSrcObj);
126
- accumShader = LoadShaders (vertexShaderSrcObj, accumShaderSrcObj);
127
124
outputShader = LoadShaders (vertexShaderSrcObj, outputShaderSrcObj);
128
125
tonemapShader = LoadShaders (vertexShaderSrcObj, tonemapShaderSrcObj);
129
126
130
- printf (" Debug sizes : %d %d - %d %d\n " , tileWidth, tileHeight, screenSize.x , screenSize.y );
127
+ printf (" Screen Resolution : %d %d\n " , screenSize.x , screenSize.y );
128
+ printf (" Preview Resolution : %d %d\n " , tileWidth, tileHeight);
131
129
// ----------------------------------------------------------
132
130
// FBO Setup
133
131
// ----------------------------------------------------------
134
132
// Create FBOs for path trace shader (Tiled)
135
- printf (" Buffer pathTraceFBO\n " );
133
+ printf (" Creating pathTraceFBO\n " );
136
134
glGenFramebuffers (1 , &pathTraceFBO);
137
135
glBindFramebuffer (GL_FRAMEBUFFER, pathTraceFBO);
138
136
@@ -145,8 +143,8 @@ namespace GLSLPT
145
143
glBindTexture (GL_TEXTURE_2D, 0 );
146
144
glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, pathTraceTexture, 0 );
147
145
148
- // Create FBOs for path trace shader (Progressive)
149
- printf (" Buffer pathTraceFBOLowRes\n " );
146
+ // Create FBOs for low res preview shader
147
+ printf (" Creating pathTraceFBOLowRes\n " );
150
148
glGenFramebuffers (1 , &pathTraceFBOLowRes);
151
149
glBindFramebuffer (GL_FRAMEBUFFER, pathTraceFBOLowRes);
152
150
@@ -162,7 +160,7 @@ namespace GLSLPT
162
160
glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, pathTraceTextureLowRes, 0 );
163
161
164
162
// Create FBOs for accum buffer
165
- printf (" Buffer accumFBO\n " );
163
+ printf (" Creating accumFBO\n " );
166
164
glGenFramebuffers (1 , &accumFBO);
167
165
glBindFramebuffer (GL_FRAMEBUFFER, accumFBO);
168
166
@@ -176,7 +174,7 @@ namespace GLSLPT
176
174
glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, accumTexture, 0 );
177
175
178
176
// Create FBOs for tile output shader
179
- printf (" Buffer outputFBO\n " );
177
+ printf (" Creating outputFBO\n " );
180
178
glGenFramebuffers (1 , &outputFBO);
181
179
glBindFramebuffer (GL_FRAMEBUFFER, outputFBO);
182
180
@@ -300,7 +298,6 @@ namespace GLSLPT
300
298
301
299
delete pathTraceShader;
302
300
delete pathTraceShaderLowRes;
303
- delete accumShader;
304
301
delete outputShader;
305
302
delete tonemapShader;
306
303
@@ -319,74 +316,55 @@ namespace GLSLPT
319
316
}
320
317
321
318
glActiveTexture (GL_TEXTURE0);
322
- glBindTexture (GL_TEXTURE_2D, accumTexture);
323
-
324
- if (!scene->camera ->isMoving )
319
+
320
+ if (scene->camera ->isMoving || scene->instancesModified )
321
+ {
322
+ glBindFramebuffer (GL_FRAMEBUFFER, pathTraceFBOLowRes);
323
+ glViewport (0 , 0 , screenSize.x * pixelRatio, screenSize.y * pixelRatio);
324
+ quad->Draw (pathTraceShaderLowRes);
325
+ scene->instancesModified = false ;
326
+ }
327
+ else
325
328
{
326
- // If instances are moved then render to low res buffer once to avoid ghosting from previous frame
327
- if (scene->instancesModified )
328
- {
329
- glBindFramebuffer (GL_FRAMEBUFFER, pathTraceFBOLowRes);
330
- glViewport (0 , 0 , screenSize.x * pixelRatio, screenSize.y * pixelRatio);
331
- quad->Draw (pathTraceShaderLowRes);
332
- scene->instancesModified = false ;
333
- }
334
-
335
- GLuint shaderObject;
336
- pathTraceShader->Use ();
337
-
338
- shaderObject = pathTraceShader->getObject ();
339
- glUniform1i (glGetUniformLocation (shaderObject, " tileX" ), tileX);
340
- glUniform1i (glGetUniformLocation (shaderObject, " tileY" ), tileY);
341
- pathTraceShader->StopUsing ();
342
-
343
329
glBindFramebuffer (GL_FRAMEBUFFER, pathTraceFBO);
344
330
glViewport (0 , 0 , tileWidth, tileHeight);
331
+ glBindTexture (GL_TEXTURE_2D, accumTexture);
345
332
quad->Draw (pathTraceShader);
346
333
347
334
glBindFramebuffer (GL_FRAMEBUFFER, accumFBO);
348
335
glViewport (tileWidth * tileX, tileHeight * tileY, tileWidth, tileHeight);
349
- glActiveTexture (GL_TEXTURE0);
350
336
glBindTexture (GL_TEXTURE_2D, pathTraceTexture);
351
- quad->Draw (accumShader );
337
+ quad->Draw (outputShader );
352
338
353
339
glBindFramebuffer (GL_FRAMEBUFFER, outputFBO);
354
340
glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tileOutputTexture[currentBuffer], 0 );
355
341
glViewport (0 , 0 , screenSize.x , screenSize.y );
356
- glActiveTexture (GL_TEXTURE0);
357
342
glBindTexture (GL_TEXTURE_2D, accumTexture);
358
343
quad->Draw (tonemapShader);
359
344
}
360
- else
361
- {
362
- glBindFramebuffer (GL_FRAMEBUFFER, pathTraceFBOLowRes);
363
- glViewport (0 , 0 , screenSize.x * pixelRatio, screenSize.y * pixelRatio);
364
- quad->Draw (pathTraceShaderLowRes);
365
- }
366
345
}
367
346
368
347
void TiledRenderer::Present () const
369
348
{
370
349
if (!initialized)
371
350
return ;
372
351
373
- if (!scene->camera ->isMoving )
374
- {
375
- glActiveTexture (GL_TEXTURE0);
352
+ glActiveTexture (GL_TEXTURE0);
376
353
354
+ if (scene->camera ->isMoving || sampleCounter == 1 )
355
+ {
356
+ glBindTexture (GL_TEXTURE_2D, pathTraceTextureLowRes);
357
+ quad->Draw (tonemapShader);
358
+ }
359
+ else
360
+ {
377
361
if (scene->renderOptions .enableDenoiser && denoised)
378
362
glBindTexture (GL_TEXTURE_2D, denoisedTexture);
379
363
else
380
364
glBindTexture (GL_TEXTURE_2D, tileOutputTexture[1 - currentBuffer]);
381
-
365
+
382
366
quad->Draw (outputShader);
383
367
}
384
- else
385
- {
386
- glActiveTexture (GL_TEXTURE0);
387
- glBindTexture (GL_TEXTURE_2D, pathTraceTextureLowRes);
388
- quad->Draw (tonemapShader);
389
- }
390
368
}
391
369
392
370
float TiledRenderer::GetProgress () const
@@ -436,7 +414,7 @@ namespace GLSLPT
436
414
oidn::FilterRef filter = device.newFilter (" RT" ); // generic ray tracing filter
437
415
filter.setImage (" color" , denoiserInputFramePtr, oidn::Format::Float3, screenSize.x , screenSize.y );
438
416
filter.setImage (" output" , frameOutputPtr, oidn::Format::Float3, screenSize.x , screenSize.y );
439
- filter.set (" hdr" , false ); // image is HDR
417
+ filter.set (" hdr" , false );
440
418
filter.commit ();
441
419
442
420
// Filter the image
@@ -455,7 +433,6 @@ namespace GLSLPT
455
433
456
434
if (scene->camera ->isMoving || scene->instancesModified )
457
435
{
458
- r1 = r2 = r3 = 0 ;
459
436
tileX = -1 ;
460
437
tileY = numTilesY - 1 ;
461
438
sampleCounter = 1 ;
@@ -466,19 +443,6 @@ namespace GLSLPT
466
443
glViewport (0 , 0 , screenSize.x , screenSize.y );
467
444
glClear (GL_COLOR_BUFFER_BIT);
468
445
469
- glBindFramebuffer (GL_FRAMEBUFFER, outputFBO);
470
- glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tileOutputTexture[1 - currentBuffer], 0 );
471
- glViewport (0 , 0 , screenSize.x , screenSize.y );
472
- glActiveTexture (GL_TEXTURE0);
473
- glBindTexture (GL_TEXTURE_2D, pathTraceTextureLowRes);
474
- quad->Draw (tonemapShader);
475
-
476
- /* glBindFramebuffer(GL_FRAMEBUFFER, accumFBO);
477
- glViewport(0, 0, screenSize.x, screenSize.y);
478
- glActiveTexture(GL_TEXTURE0);
479
- glBindTexture(GL_TEXTURE_2D, pathTraceTextureLowRes);
480
- quad->Draw(accumShader);*/
481
-
482
446
glBindFramebuffer (GL_FRAMEBUFFER, 0 );
483
447
}
484
448
else
@@ -497,10 +461,6 @@ namespace GLSLPT
497
461
currentBuffer = 1 - currentBuffer;
498
462
}
499
463
}
500
-
501
- r1 = ((float )rand () / (RAND_MAX));
502
- r2 = ((float )rand () / (RAND_MAX));
503
- r3 = ((float )rand () / (RAND_MAX));
504
464
}
505
465
506
466
GLuint shaderObject;
@@ -514,13 +474,13 @@ namespace GLSLPT
514
474
glUniform1f (glGetUniformLocation (shaderObject, " camera.fov" ), scene->camera ->fov );
515
475
glUniform1f (glGetUniformLocation (shaderObject, " camera.focalDist" ), scene->camera ->focalDist );
516
476
glUniform1f (glGetUniformLocation (shaderObject, " camera.aperture" ), scene->camera ->aperture );
517
- glUniform3f (glGetUniformLocation (shaderObject, " randomVector" ), r1, r2, r3);
518
477
glUniform1i (glGetUniformLocation (shaderObject, " useEnvMap" ), scene->hdrData == nullptr ? false : scene->renderOptions .useEnvMap );
519
478
glUniform1f (glGetUniformLocation (shaderObject, " hdrMultiplier" ), scene->renderOptions .hdrMultiplier );
520
479
glUniform1i (glGetUniformLocation (shaderObject, " maxDepth" ), scene->renderOptions .maxDepth );
521
480
glUniform1i (glGetUniformLocation (shaderObject, " tileX" ), tileX);
522
481
glUniform1i (glGetUniformLocation (shaderObject, " tileY" ), tileY);
523
482
glUniform3f (glGetUniformLocation (shaderObject, " bgColor" ), scene->renderOptions .bgColor .x , scene->renderOptions .bgColor .y , scene->renderOptions .bgColor .z );
483
+ glUniform1i (glGetUniformLocation (shaderObject, " frame" ), frameCounter);
524
484
pathTraceShader->StopUsing ();
525
485
526
486
pathTraceShaderLowRes->Use ();
0 commit comments