diff --git a/kernels/ray_caster_kernel.cl b/kernels/ray_caster_kernel.cl index f906c10..2cdd4ed 100644 --- a/kernels/ray_caster_kernel.cl +++ b/kernels/ray_caster_kernel.cl @@ -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; } }