37 lines
1.1 KiB
GLSL
37 lines
1.1 KiB
GLSL
// MinecraftPT — Held Light
|
|
// Torch in hand / flashlight illumination.
|
|
|
|
#ifndef HELDLIGHT_GLSL
|
|
#define HELDLIGHT_GLSL
|
|
|
|
// Physical held light: torches held in hand or flashlight
|
|
vec3 GetHeldLight(vec3 worldPos, vec3 worldNormal, out float heldLightShadow){
|
|
vec3 result = vec3(0.0);
|
|
heldLightShadow = 1.0;
|
|
|
|
#ifdef HELDLIGHT_MODE
|
|
#if HELDLIGHT_MODE >= 1
|
|
// Torch in hand position (roughly 0.4, -0.4, 0.6 relative to camera)
|
|
vec3 heldPos = gbufferModelViewInverse[3].xyz + cameraPosition;
|
|
vec3 toLight = heldPos - worldPos;
|
|
float dist = length(toLight);
|
|
vec3 dir = toLight / max(dist, 1e-4);
|
|
|
|
float intensity = exp(-dist * dist * HELDLIGHT_FALLOFF) * HELDLIGHT_BRIGHTNESS;
|
|
float NdotL = max(dot(worldNormal, dir), 0.0);
|
|
|
|
vec3 color = pow(vec3(COLOR_TORCH_R, COLOR_TORCH_G, COLOR_TORCH_B), vec3(2.2));
|
|
|
|
result = color * intensity * NdotL;
|
|
|
|
#ifdef HELDLIGHT_SHADOW
|
|
// Simple ray shadow for held light (short distance)
|
|
heldLightShadow = SimpleShadowTracing(WorldToVoxel(worldPos + worldNormal * 0.1), dir);
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
return result;
|
|
}
|
|
|
|
#endif |