Initial commit: Minecraft 光追着色器包(从零实现的 path tracing)
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user