Tweaking the blinn-phong function

master
MitchellHansen 7 years ago
parent 76189ef0b4
commit 242aaaa485

@ -68,24 +68,28 @@ float4 view_light(float4 in_color, float3 light, float4 light_color, float3 view
if (all(light == zeroed_float3))
return zeroed_float4;
float d = Distance(light) / 280.0f;
float d = Distance(light) / 120.0f;
d *= d;
float diffuse = max(dot(normalize(convert_float3(mask)), normalize(light)), 0.0f);
in_color += diffuse * light_color * 0.5f / d;
float diffuse = max(dot(normalize(convert_float3(mask)), normalize(light)), 0.1f);
float specular = 0.0f;
if (dot(light, normalize(convert_float3(mask))) > 0.0f)
if (diffuse > 0.0f)
{
// Small dots of light are caused by floating point error
// flipping bits on the face mask and screwing up this calculation
float3 halfwayVector = normalize(normalize(light) + normalize(view));
float specTmp = max(dot(normalize(convert_float3(mask)), halfwayVector), 0.0f);
in_color += pow(specTmp, 8.0f) * light_color * 0.5f / d;
}
if (in_color.w > 1.0f){
in_color.xyz *= in_color.w;
specular = pow(specTmp, 1.0f);
}
in_color += diffuse * light_color + specular * light_color / d;
//in_color = pow(in_color, (float4)(1.0/2.2));
// This creates that blown out color look
//in_color.xyz += in_color.w * 0.002f;
//in_color.w += 0.8f;
return in_color;
}
@ -367,7 +371,7 @@ __kernel void raycaster(
// Since we intersected face x, we know that we are at the face (1.0)
// I think the 1.001f rendering bug is the ray thinking it's within the voxel
// even though it's sitting on the very edge
face_position = (float3)(1.0001f, y_percent, z_percent);
face_position = (float3)(1.00001f, y_percent, z_percent);
tile_face_position = face_position.yz;
}
else if (face_mask.y == -1) {
@ -375,7 +379,7 @@ __kernel void raycaster(
sign.y *= -1.0;
float x_percent = (intersection_t.x - (intersection_t.y - delta_t.y)) / delta_t.x;
float z_percent = (intersection_t.z - (intersection_t.y - delta_t.y)) / delta_t.z;
face_position = (float3)(x_percent, 1.0001f, z_percent);
face_position = (float3)(x_percent, 1.00001f, z_percent);
tile_face_position = face_position.xz;
}
@ -384,7 +388,7 @@ __kernel void raycaster(
sign.z *= -1.0;
float x_percent = (intersection_t.x - (intersection_t.z - delta_t.z)) / delta_t.x;
float y_percent = (intersection_t.y - (intersection_t.z - delta_t.z)) / delta_t.y;
face_position = (float3)(x_percent, y_percent, 1.0001f);
face_position = (float3)(x_percent, y_percent, 1.00001f);
tile_face_position = face_position.xy;
}
@ -478,7 +482,7 @@ __kernel void raycaster(
// SHADOW RAY HIT
} else {
color_accumulator = 0;
color_accumulator.w = 0.1f;
break;
}
}

Loading…
Cancel
Save