0031275: Visualization, TKOpenGl - handle normal-map texture with Path-Tracing
[occt.git] / src / Shaders / Shaders_RaytraceRender_fs.pxx
CommitLineData
ee5befae 1// This file has been automatically generated from resource file src/Shaders/RaytraceRender.fs
2
3static const char Shaders_RaytraceRender_fs[] =
4 "out vec4 OutColor;\n"
5 "\n"
6 "// Seed for random number generator (generated on CPU).\n"
7 "uniform int uFrameRndSeed;\n"
8 "\n"
9 "//! Enables/disables using of single RNG seed for 16x16 image\n"
10 "//! blocks. Increases performance up to 4x, but the noise has\n"
11 "//! become structured. Can be used fo final rendering.\n"
12 "uniform int uBlockedRngEnabled;\n"
13 "\n"
4eaaf9d8 14 "//! Number of previously rendered frames (used in non-ISS mode).\n"
15 "uniform int uAccumSamples;\n"
16 "\n"
ee5befae 17 "#ifndef ADAPTIVE_SAMPLING\n"
383c6c9f 18 " //! Input image with previously accumulated samples.\n"
ee5befae 19 " uniform sampler2D uAccumTexture;\n"
20 "#endif\n"
21 "\n"
b09447ed 22 "//! Maximum radiance that can be added to the pixel.\n"
23 "//! Decreases noise level, but introduces some bias.\n"
24 "uniform float uMaxRadiance = 50.f;\n"
ee5befae 25 "\n"
e084dbbc 26 "#ifdef ADAPTIVE_SAMPLING\n"
27 "//! Wrapper over imageLoad()+imageStore() having similar syntax as imageAtomicAdd().\n"
28 "//! Modifies one component of 3Wx2H uRenderImage:\n"
29 "//! |RGL| Red, Green, Luminance\n"
30 "//! |SBH| Samples, Blue, Hit time transformed into OpenGL NDC space\n"
31 "//! Returns previous value of the component.\n"
32 "float addRenderImageComp (in ivec2 theFrag, in ivec2 theComp, in float theVal)\n"
33 "{\n"
34 " ivec2 aCoord = ivec2 (3 * theFrag.x + theComp.x,\n"
35 " 2 * theFrag.y + theComp.y);\n"
36 "#ifdef ADAPTIVE_SAMPLING_ATOMIC\n"
37 " return imageAtomicAdd (uRenderImage, aCoord, theVal);\n"
38 "#else\n"
39 " float aVal = imageLoad (uRenderImage, aCoord).x;\n"
40 " imageStore (uRenderImage, aCoord, vec4 (aVal + theVal));\n"
41 " return aVal;\n"
42 "#endif\n"
43 "}\n"
44 "#endif\n"
45 "\n"
ee5befae 46 "// =======================================================================\n"
47 "// function : main\n"
48 "// purpose :\n"
49 "// =======================================================================\n"
50 "void main (void)\n"
51 "{\n"
52 " SeedRand (uFrameRndSeed, uWinSizeX, uBlockedRngEnabled == 0 ? 1 : 16);\n"
53 "\n"
54 "#ifndef PATH_TRACING\n"
55 "\n"
56 " SRay aRay = GenerateRay (vPixel);\n"
57 "\n"
58 "#else\n"
59 "\n"
60 " ivec2 aFragCoord = ivec2 (gl_FragCoord.xy);\n"
61 "\n"
62 "#ifdef ADAPTIVE_SAMPLING\n"
63 "\n"
e084dbbc 64 "#ifdef ADAPTIVE_SAMPLING_ATOMIC\n"
66d1cdc6 65 " ivec2 aTileXY = imageLoad (uOffsetImage, aFragCoord / uTileSize).xy * uTileSize;\n"
66 " if (aTileXY.x < 0) { discard; }\n"
ee5befae 67 "\n"
66d1cdc6 68 " ivec2 aRealBlockSize = ivec2 (min (uWinSizeX - aTileXY.x, uTileSize.x),\n"
69 " min (uWinSizeY - aTileXY.y, uTileSize.y));\n"
ee5befae 70 "\n"
71 " aFragCoord.x = aTileXY.x + (aFragCoord.x % aRealBlockSize.x);\n"
72 " aFragCoord.y = aTileXY.y + (aFragCoord.y % aRealBlockSize.y);\n"
e084dbbc 73 "#else\n"
74 " int aNbTileSamples = imageAtomicAdd (uTilesImage, aFragCoord / uTileSize, int(-1));\n"
75 " if (aNbTileSamples <= 0)\n"
76 " {\n"
77 " discard;\n"
78 " }\n"
79 "#endif\n"
ee5befae 80 "\n"
81 "#endif // ADAPTIVE_SAMPLING\n"
82 "\n"
83 " vec2 aPnt = vec2 (aFragCoord.x + RandFloat(),\n"
84 " aFragCoord.y + RandFloat());\n"
85 "\n"
86 " SRay aRay = GenerateRay (aPnt / vec2 (uWinSizeX, uWinSizeY));\n"
87 "\n"
88 "#endif // PATH_TRACING\n"
89 "\n"
90 " vec3 aInvDirect = InverseDirection (aRay.Direct);\n"
91 "\n"
92 "#ifdef PATH_TRACING\n"
93 "\n"
4eaaf9d8 94 "#ifndef ADAPTIVE_SAMPLING\n"
95 "\n"
96 " vec4 aColor = PathTrace (aRay, aInvDirect, uAccumSamples);\n"
97 "\n"
98 "#else\n"
99 "\n"
e084dbbc 100 " float aNbSamples = addRenderImageComp (aFragCoord, ivec2 (0, 1), 1.0);\n"
4eaaf9d8 101 " vec4 aColor = PathTrace (aRay, aInvDirect, int (aNbSamples));\n"
102 "\n"
103 "#endif\n"
ee5befae 104 "\n"
105 " if (any (isnan (aColor.rgb)))\n"
106 " {\n"
107 " aColor.rgb = ZERO;\n"
108 " }\n"
109 "\n"
b09447ed 110 " aColor.rgb = min (aColor.rgb, vec3 (uMaxRadiance));\n"
ee5befae 111 "\n"
112 "#ifdef ADAPTIVE_SAMPLING\n"
113 "\n"
114 " // accumulate RGB color and depth\n"
e084dbbc 115 " addRenderImageComp (aFragCoord, ivec2 (0, 0), aColor.r);\n"
116 " addRenderImageComp (aFragCoord, ivec2 (1, 0), aColor.g);\n"
117 " addRenderImageComp (aFragCoord, ivec2 (1, 1), aColor.b);\n"
118 " addRenderImageComp (aFragCoord, ivec2 (2, 1), aColor.w);\n"
ee5befae 119 "\n"
ee5befae 120 " if (int (aNbSamples) % 2 == 0) // accumulate luminance for even samples only\n"
121 " {\n"
e084dbbc 122 " addRenderImageComp (aFragCoord, ivec2 (2, 0), dot (LUMA, aColor.rgb));\n"
ee5befae 123 " }\n"
124 "\n"
ee5befae 125 "#else\n"
126 "\n"
383c6c9f 127 " if (uAccumSamples == 0)\n"
ee5befae 128 " {\n"
129 " OutColor = aColor;\n"
130 " }\n"
131 " else\n"
132 " {\n"
2a0522b1 133 " OutColor = mix (texture (uAccumTexture, vPixel), aColor, 1.f / (uAccumSamples + 1));\n"
ee5befae 134 " }\n"
135 "\n"
136 "#endif // ADAPTIVE_SAMPLING\n"
137 "\n"
138 "#else\n"
139 "\n"
140 " OutColor = clamp (Radiance (aRay, aInvDirect), 0.f, 1.f);\n"
141 "\n"
142 "#endif // PATH_TRACING\n"
143 "}\n";