Initial commit: Minecraft 光追着色器包(从零实现的 path tracing)
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
// MinecraftPT — RTWSM Collapse Importance
|
||||
// Collapses the 2D importance map into a 1D cumulative curve per row.
|
||||
|
||||
#include "/Lib/Settings.glsl"
|
||||
#include "/Lib/Utilities.glsl"
|
||||
|
||||
const ivec3 workGroups = ivec3(RTW_RESOLUTION, 1, 1);
|
||||
layout (local_size_x = 1) in;
|
||||
|
||||
layout (r32f) uniform writeonly image2D img_rtwImportance2D;
|
||||
layout (rg16) uniform writeonly image2D img_rtwWarp1D;
|
||||
|
||||
uniform sampler2D rtwImportance2D;
|
||||
|
||||
void main(){
|
||||
int y = int(gl_GlobalInvocationID.y);
|
||||
|
||||
// Sum importance across rows -> 1D profile
|
||||
float sum = 0.0;
|
||||
for (int x = 0; x < RTW_RESOLUTION; x++){
|
||||
sum += textureLod(rtwImportance2D, vec2(float(x) / float(RTW_RESOLUTION), float(y) / float(RTW_RESOLUTION_Y)), 0.0).r;
|
||||
}
|
||||
|
||||
// Build cumulative distribution
|
||||
float cumulative = 0.0;
|
||||
for (int x = 0; x < RTW_RESOLUTION; x++){
|
||||
float imp = textureLod(rtwImportance2D, vec2(float(x) / float(RTW_RESOLUTION), float(y) / float(RTW_RESOLUTION_Y)), 0.0).r;
|
||||
cumulative += imp;
|
||||
float normalized = sum > 0.0 ? cumulative / sum : float(x) / float(RTW_RESOLUTION);
|
||||
|
||||
imageStore(img_rtwWarp1D, ivec2(x, y), vec4(normalized, 1.0 - normalized, 0.0, 0.0));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user