mirror of
https://github.com/Lime3DS/Lime3DS
synced 2024-12-26 09:02:44 -06:00
Merge pull request #2914 from wwylele/fresnel-fix
pica/lighting: only apply Fresnel factor for the last light
This commit is contained in:
commit
ff4941fb3a
2 changed files with 9 additions and 7 deletions
|
@ -751,7 +751,8 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) {
|
|||
}
|
||||
|
||||
// Fresnel
|
||||
if (lighting.lut_fr.enable &&
|
||||
// Note: only the last entry in the light slots applies the Fresnel factor
|
||||
if (light_index == lighting.src_num - 1 && lighting.lut_fr.enable &&
|
||||
LightingRegs::IsLightingSamplerSupported(lighting.config,
|
||||
LightingRegs::LightingSampler::Fresnel)) {
|
||||
// Lookup fresnel LUT value
|
||||
|
@ -760,17 +761,17 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) {
|
|||
lighting.lut_fr.type, lighting.lut_fr.abs_input);
|
||||
value = "(" + std::to_string(lighting.lut_fr.scale) + " * " + value + ")";
|
||||
|
||||
// Enabled for difffuse lighting alpha component
|
||||
// Enabled for diffuse lighting alpha component
|
||||
if (lighting.fresnel_selector == LightingRegs::LightingFresnelSelector::PrimaryAlpha ||
|
||||
lighting.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) {
|
||||
out += "diffuse_sum.a *= " + value + ";\n";
|
||||
out += "diffuse_sum.a = " + value + ";\n";
|
||||
}
|
||||
|
||||
// Enabled for the specular lighting alpha component
|
||||
if (lighting.fresnel_selector ==
|
||||
LightingRegs::LightingFresnelSelector::SecondaryAlpha ||
|
||||
lighting.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) {
|
||||
out += "specular_sum.a *= " + value + ";\n";
|
||||
out += "specular_sum.a = " + value + ";\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -230,7 +230,8 @@ std::tuple<Math::Vec4<u8>, Math::Vec4<u8>> ComputeFragmentsColors(
|
|||
d1_lut_value * refl_value * light_config.specular_1.ToVec3f();
|
||||
|
||||
// Fresnel
|
||||
if (lighting.config1.disable_lut_fr == 0 &&
|
||||
// Note: only the last entry in the light slots applies the Fresnel factor
|
||||
if (light_index == lighting.max_light_index && lighting.config1.disable_lut_fr == 0 &&
|
||||
LightingRegs::IsLightingSamplerSupported(lighting.config0.config,
|
||||
LightingRegs::LightingSampler::Fresnel)) {
|
||||
|
||||
|
@ -242,14 +243,14 @@ std::tuple<Math::Vec4<u8>, Math::Vec4<u8>> ComputeFragmentsColors(
|
|||
if (lighting.config0.fresnel_selector ==
|
||||
LightingRegs::LightingFresnelSelector::PrimaryAlpha ||
|
||||
lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) {
|
||||
diffuse_sum.a() *= lut_value;
|
||||
diffuse_sum.a() = lut_value;
|
||||
}
|
||||
|
||||
// Enabled for the specular lighting alpha component
|
||||
if (lighting.config0.fresnel_selector ==
|
||||
LightingRegs::LightingFresnelSelector::SecondaryAlpha ||
|
||||
lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) {
|
||||
specular_sum.a() *= lut_value;
|
||||
specular_sum.a() = lut_value;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue