1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-02-06 08:15:34 +00:00

Remap FO76 shader types

This commit is contained in:
Alexei Kotov 2023-09-18 06:37:36 +03:00
parent 81441bc963
commit 4db994cda9
3 changed files with 32 additions and 16 deletions

View file

@ -299,7 +299,32 @@ namespace Nif
nif->skip(2); // Unknown
}
// TODO: consider separating this switch for pre-FO76 and FO76+
if (nif->getBethVersion() >= NIFFile::BethVersion::BETHVER_F76)
{
// Remap FO76+ shader types to FO4 system so that we can actually use them
// TODO: NifTools spec doesn't do anything about the misplaced EyeEnvmap. Bug or feature?
switch (static_cast<BSLightingShaderType>(mType))
{
case BSLightingShaderType::ShaderType_Parallax:
mType = static_cast<uint32_t>(BSLightingShaderType::ShaderType_FaceTint);
break;
case BSLightingShaderType::ShaderType_FaceTint:
mType = static_cast<uint32_t>(BSLightingShaderType::ShaderType_SkinTint);
break;
case BSLightingShaderType::ShaderType_SkinTint:
mType = static_cast<uint32_t>(BSLightingShaderType::ShaderType_HairTint);
break;
case BSLightingShaderType::ShaderType_TreeAnim:
mType = static_cast<uint32_t>(BSLightingShaderType::ShaderType_EyeEnvmap);
break;
case BSLightingShaderType::ShaderType_Cloud:
mType = static_cast<uint32_t>(BSLightingShaderType::ShaderType_Terrain);
break;
default:
break;
}
}
switch (static_cast<BSLightingShaderType>(mType))
{
case BSLightingShaderType::ShaderType_EnvMap:
@ -311,25 +336,14 @@ namespace Nif
nif->read(mWetnessUseSSR);
}
break;
case BSLightingShaderType::ShaderType_FaceTint:
// Skin tint shader in FO76+
if (nif->getBethVersion() >= NIFFile::BethVersion::BETHVER_F76)
nif->read(mSkinTintColor);
break;
case BSLightingShaderType::ShaderType_SkinTint:
if (nif->getBethVersion() >= NIFFile::BethVersion::BETHVER_F76)
nif->read(mHairTintColor);
else if (nif->getBethVersion() <= 130)
if (nif->getBethVersion() <= NIFFile::BethVersion::BETHVER_FO4)
mSkinTintColor = { nif->get<osg::Vec3f>(), 1.f };
else if (nif->getBethVersion() <= 139)
else
nif->read(mSkinTintColor);
// Hair tint shader in FO76+
else if (nif->getBethVersion() >= NIFFile::BethVersion::BETHVER_F76)
nif->read(mHairTintColor);
break;
case BSLightingShaderType::ShaderType_HairTint:
if (nif->getBethVersion() <= 139)
nif->read(mHairTintColor);
nif->read(mHairTintColor);
break;
case BSLightingShaderType::ShaderType_ParallaxOcc:
mParallax.read(nif);

View file

@ -190,7 +190,8 @@ namespace Nif
ShaderType_Cloud = 17,
ShaderType_LODNoise = 18,
ShaderType_MultitexLandLODBlend = 19,
ShaderType_Dismemberment = 20
ShaderType_Dismemberment = 20,
ShaderType_Terrain = 21, // FO76+, technically 17
};
enum BSLightingShaderFlags1

View file

@ -2103,6 +2103,7 @@ namespace NifOsg
case Nif::BSLightingShaderType::ShaderType_LODNoise:
case Nif::BSLightingShaderType::ShaderType_MultitexLandLODBlend:
case Nif::BSLightingShaderType::ShaderType_Dismemberment:
case Nif::BSLightingShaderType::ShaderType_Terrain:
Log(Debug::Warning) << "Unhandled BSLightingShaderType " << type << " in " << mFilename;
return "bs/default";
}