Initial commit: Minecraft 光追着色器包(从零实现的 path tracing)

This commit is contained in:
WpyQwq
2026-09-19 12:06:22 +08:00
commit 59e30822f8
314 changed files with 9259 additions and 0 deletions
@@ -0,0 +1,37 @@
// MinecraftPT — Block Light
// Maps vanilla block light level to physical light, with per-block colors.
#ifndef BLOCKLIGHT_GLSL
#define BLOCKLIGHT_GLSL
// Convert lightmap blocklight (0-1) to physical light intensity
float BlocklightFromLightmap(float blocklight){
return pow(blocklight, 2.0) * BLOCKLIGHT_BRIGHTNESS;
}
// Get the block light color for a material
vec3 BlocklightColor(float materialID){
// Warm torch color by default
vec3 color = pow(vec3(COLOR_TORCH_R, COLOR_TORCH_G, COLOR_TORCH_B), vec3(2.2));
if (materialID == MATID_SOULTORCH || materialID == MATID_COPPER_LANTERN){
color = pow(vec3(COLOR_SOULTORCH_R, COLOR_SOULTORCH_G, COLOR_SOULTORCH_B), vec3(2.2));
}else if (materialID == MATID_AMETHYST){
color = pow(vec3(COLOR_AMETHYST_R, COLOR_AMETHYST_G, COLOR_AMETHYST_B), vec3(2.2));
}else if (materialID == MATID_FIRE){
color = pow(vec3(COLOR_FIRE_R, COLOR_FIRE_G, COLOR_FIRE_B), vec3(2.2));
}else if (materialID == MATID_ENDROD){
color = pow(vec3(COLOR_ENDROD_R, COLOR_ENDROD_G, COLOR_ENDROD_B), vec3(2.2));
}
return color * BlocklightFromLightmap(0.5);
}
// Physical block light for a lightmap value
vec3 Blocklight(vec2 lightmap){
// Blocklight color temperature
vec3 warmColor = pow(vec3(COLOR_TORCH_R, COLOR_TORCH_G, COLOR_TORCH_B), vec3(2.2));
return warmColor * pow(lightmap.x, 2.0) * BLOCKLIGHT_BRIGHTNESS;
}
#endif