|
@@ -634,7 +634,11 @@ void fragment_shader(in SceneData scene_data) {
|
|
|
|
|
|
//lay out everything, whatever is unused is optimized away anyway
|
|
|
vec3 vertex = vertex_interp;
|
|
|
+#ifdef USE_MULTIVIEW
|
|
|
+ vec3 view = -normalize(vertex_interp - scene_data.eye_offset[ViewIndex].xyz);
|
|
|
+#else
|
|
|
vec3 view = -normalize(vertex_interp);
|
|
|
+#endif
|
|
|
vec3 albedo = vec3(1.0);
|
|
|
vec3 backlight = vec3(0.0);
|
|
|
vec4 transmittance_color = vec4(0.0, 0.0, 0.0, 1.0);
|
|
@@ -1191,7 +1195,7 @@ void fragment_shader(in SceneData scene_data) {
|
|
|
if (sc_use_forward_gi && bool(instances.data[instance_index].flags & INSTANCE_FLAGS_USE_VOXEL_GI)) { // process voxel_gi_instances
|
|
|
|
|
|
uint index1 = instances.data[instance_index].gi_offset & 0xFFFF;
|
|
|
- vec3 ref_vec = normalize(reflect(normalize(vertex), normal));
|
|
|
+ vec3 ref_vec = normalize(reflect(-view, normal));
|
|
|
//find arbitrary tangent and bitangent, then build a matrix
|
|
|
vec3 v0 = abs(normal.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(0.0, 1.0, 0.0);
|
|
|
vec3 tangent = normalize(cross(v0, normal));
|
|
@@ -1309,7 +1313,7 @@ void fragment_shader(in SceneData scene_data) {
|
|
|
#else
|
|
|
vec3 bent_normal = normal;
|
|
|
#endif
|
|
|
- reflection_process(reflection_index, vertex, bent_normal, roughness, ambient_light, specular_light, ambient_accum, reflection_accum);
|
|
|
+ reflection_process(reflection_index, view, vertex, bent_normal, roughness, ambient_light, specular_light, ambient_accum, reflection_accum);
|
|
|
}
|
|
|
}
|
|
|
|