diff options
author | RĂ©mi Verschelde <remi@verschelde.fr> | 2021-05-14 11:33:22 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-14 11:33:22 +0200 |
commit | 99626d5b57fa123877c9d6bd07d83460d42d355c (patch) | |
tree | 2153d93c31e751253757c20f43a2e074ef886853 /scene/resources | |
parent | 5c81fbdc19903cfcb55a30a17262c1fd7eb915c6 (diff) | |
parent | 31f2d946ad6abcfe82ff54bb36e84d20ac6c62a9 (diff) |
Merge pull request #48478 from brennengreen/normal-mapping-unpacked-fix
Fix refraction offset by manually unpacking normal mappings
Diffstat (limited to 'scene/resources')
-rw-r--r-- | scene/resources/material.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp index 86c7bda2b3..75dd417f7f 100644 --- a/scene/resources/material.cpp +++ b/scene/resources/material.cpp @@ -1032,7 +1032,10 @@ void BaseMaterial3D::_update_shader() { if (features[FEATURE_REFRACTION]) { if (features[FEATURE_NORMAL_MAPPING]) { - code += "\tvec3 ref_normal = normalize( mix(NORMAL,TANGENT * NORMAL_MAP.x + BINORMAL * NORMAL_MAP.y + NORMAL * NORMAL_MAP.z,NORMAL_MAP_DEPTH) );\n"; + code += "\tvec3 unpacked_normal = NORMAL_MAP;\n"; + code += "\tunpacked_normal.xy = unpacked_normal.xy * 2.0 - 1.0;\n"; + code += "\tunpacked_normal.z = sqrt(max(0.0, 1.0 - dot(unpacked_normal.xy, unpacked_normal.xy)));\n"; + code += "\tvec3 ref_normal = normalize( mix(NORMAL,TANGENT * unpacked_normal.x + BINORMAL * unpacked_normal.y + NORMAL * unpacked_normal.z,NORMAL_MAP_DEPTH) );\n"; } else { code += "\tvec3 ref_normal = NORMAL;\n"; } |