mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-10 18:51:21 +03:00
55 lines
1.5 KiB
GLSL
55 lines
1.5 KiB
GLSL
out vec4 OutColor;
|
|
|
|
// Seed for random number generator
|
|
uniform int uFrameRndSeed;
|
|
|
|
// Weight of current frame related to accumulated frames.
|
|
uniform float uSampleWeight;
|
|
|
|
//! Input accumulated image.
|
|
uniform sampler2D uAccumTexture;
|
|
|
|
//! Enabled/disbales using of single RNG seed for image 16x16 blocks.
|
|
//! Increases performance up to 4 times, but noise becomes structured.
|
|
uniform int uBlockedRngEnabled;
|
|
|
|
#define MAX_RADIANCE vec3 (10.f)
|
|
|
|
// =======================================================================
|
|
// function : main
|
|
// purpose :
|
|
// =======================================================================
|
|
void main (void)
|
|
{
|
|
#ifndef PATH_TRACING
|
|
SRay aRay = GenerateRay (vPixel);
|
|
#else
|
|
ivec2 aWinSize = textureSize (uAccumTexture, 0);
|
|
|
|
SeedRand (uFrameRndSeed, aWinSize.x, uBlockedRngEnabled == 0 ? 1 : 16);
|
|
|
|
SRay aRay = GenerateRay (vPixel +
|
|
vec2 (RandFloat() + 1.f, RandFloat() + 1.f) / vec2 (aWinSize));
|
|
#endif
|
|
|
|
vec3 aInvDirect = 1.f / max (abs (aRay.Direct), SMALL);
|
|
|
|
aInvDirect = vec3 (aRay.Direct.x < 0.f ? -aInvDirect.x : aInvDirect.x,
|
|
aRay.Direct.y < 0.f ? -aInvDirect.y : aInvDirect.y,
|
|
aRay.Direct.z < 0.f ? -aInvDirect.z : aInvDirect.z);
|
|
|
|
#ifdef PATH_TRACING
|
|
vec4 aColor = PathTrace (aRay, aInvDirect);
|
|
|
|
if (any (isnan (aColor.xyz)))
|
|
{
|
|
aColor.rgb = ZERO;
|
|
}
|
|
|
|
aColor.rgb = min (aColor.rgb, MAX_RADIANCE);
|
|
|
|
OutColor = mix (texture2D (uAccumTexture, vPixel), aColor, uSampleWeight);
|
|
#else
|
|
OutColor = clamp (Radiance (aRay, aInvDirect), 0.f, 1.f);
|
|
#endif
|
|
} |