Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2019-05-02 15:32:12 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-05-02 15:32:41 +0300
commit7f366c048a538adc1a6972492e45df2c217f68ff (patch)
tree9eb47c5ba3ee370b654de35793803dff31acbcdd /source/blender/gpu
parenta914765221fb370244998c805f0750c2370fbfe4 (diff)
Fix T63435 Incorrect fresnel and normals for hair strands on EEVEE
Diffstat (limited to 'source/blender/gpu')
-rw-r--r--source/blender/gpu/intern/gpu_codegen.c6
-rw-r--r--source/blender/gpu/shaders/gpu_shader_material.glsl2
2 files changed, 7 insertions, 1 deletions
diff --git a/source/blender/gpu/intern/gpu_codegen.c b/source/blender/gpu/intern/gpu_codegen.c
index aef68333b6f..a77bba5ab86 100644
--- a/source/blender/gpu/intern/gpu_codegen.c
+++ b/source/blender/gpu/intern/gpu_codegen.c
@@ -892,7 +892,13 @@ static char *code_generate_fragment(GPUMaterial *material,
BLI_dynstr_append(ds, "\t#define invlocaltoviewmat ModelViewMatrixInverse\n");
}
if (builtins & GPU_VIEW_NORMAL) {
+ BLI_dynstr_append(ds, "#ifdef HAIR_SHADER\n");
+ BLI_dynstr_append(ds, "\tvec3 n;\n");
+ BLI_dynstr_append(ds, "\tworld_normals_get(n);\n");
+ BLI_dynstr_append(ds, "\tvec3 facingnormal = transform_direction(ViewMatrix, n);\n");
+ BLI_dynstr_append(ds, "#else\n");
BLI_dynstr_append(ds, "\tvec3 facingnormal = gl_FrontFacing? viewNormal: -viewNormal;\n");
+ BLI_dynstr_append(ds, "#endif\n");
}
if (builtins & GPU_VIEW_POSITION) {
BLI_dynstr_append(ds, "\t#define viewposition viewPosition\n");
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index c64623eeaf7..cf7a83e8a87 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -3407,7 +3407,7 @@ void world_normals_get(out vec3 N)
/* Shade as a cylinder. */
cos_theta = hairThickTime / hairThickness;
}
- float sin_theta = sqrt(max(0.0, 1.0f - cos_theta * cos_theta));
+ float sin_theta = sqrt(max(0.0, 1.0 - cos_theta * cos_theta));
N = normalize(worldNormal * sin_theta + B * cos_theta);
# else
N = gl_FrontFacing ? worldNormal : -worldNormal;