mirror of
https://github.com/OpenMW/openmw.git
synced 2025-06-19 14:41:34 +00:00
Remap FO76 shader types
This commit is contained in:
parent
81441bc963
commit
4db994cda9
3 changed files with 32 additions and 16 deletions
|
@ -299,7 +299,32 @@ namespace Nif
|
||||||
nif->skip(2); // Unknown
|
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))
|
switch (static_cast<BSLightingShaderType>(mType))
|
||||||
{
|
{
|
||||||
case BSLightingShaderType::ShaderType_EnvMap:
|
case BSLightingShaderType::ShaderType_EnvMap:
|
||||||
|
@ -311,24 +336,13 @@ namespace Nif
|
||||||
nif->read(mWetnessUseSSR);
|
nif->read(mWetnessUseSSR);
|
||||||
}
|
}
|
||||||
break;
|
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:
|
case BSLightingShaderType::ShaderType_SkinTint:
|
||||||
if (nif->getBethVersion() >= NIFFile::BethVersion::BETHVER_F76)
|
if (nif->getBethVersion() <= NIFFile::BethVersion::BETHVER_FO4)
|
||||||
nif->read(mHairTintColor);
|
|
||||||
else if (nif->getBethVersion() <= 130)
|
|
||||||
mSkinTintColor = { nif->get<osg::Vec3f>(), 1.f };
|
mSkinTintColor = { nif->get<osg::Vec3f>(), 1.f };
|
||||||
else if (nif->getBethVersion() <= 139)
|
else
|
||||||
nif->read(mSkinTintColor);
|
nif->read(mSkinTintColor);
|
||||||
// Hair tint shader in FO76+
|
|
||||||
else if (nif->getBethVersion() >= NIFFile::BethVersion::BETHVER_F76)
|
|
||||||
nif->read(mHairTintColor);
|
|
||||||
break;
|
break;
|
||||||
case BSLightingShaderType::ShaderType_HairTint:
|
case BSLightingShaderType::ShaderType_HairTint:
|
||||||
if (nif->getBethVersion() <= 139)
|
|
||||||
nif->read(mHairTintColor);
|
nif->read(mHairTintColor);
|
||||||
break;
|
break;
|
||||||
case BSLightingShaderType::ShaderType_ParallaxOcc:
|
case BSLightingShaderType::ShaderType_ParallaxOcc:
|
||||||
|
|
|
@ -190,7 +190,8 @@ namespace Nif
|
||||||
ShaderType_Cloud = 17,
|
ShaderType_Cloud = 17,
|
||||||
ShaderType_LODNoise = 18,
|
ShaderType_LODNoise = 18,
|
||||||
ShaderType_MultitexLandLODBlend = 19,
|
ShaderType_MultitexLandLODBlend = 19,
|
||||||
ShaderType_Dismemberment = 20
|
ShaderType_Dismemberment = 20,
|
||||||
|
ShaderType_Terrain = 21, // FO76+, technically 17
|
||||||
};
|
};
|
||||||
|
|
||||||
enum BSLightingShaderFlags1
|
enum BSLightingShaderFlags1
|
||||||
|
|
|
@ -2103,6 +2103,7 @@ namespace NifOsg
|
||||||
case Nif::BSLightingShaderType::ShaderType_LODNoise:
|
case Nif::BSLightingShaderType::ShaderType_LODNoise:
|
||||||
case Nif::BSLightingShaderType::ShaderType_MultitexLandLODBlend:
|
case Nif::BSLightingShaderType::ShaderType_MultitexLandLODBlend:
|
||||||
case Nif::BSLightingShaderType::ShaderType_Dismemberment:
|
case Nif::BSLightingShaderType::ShaderType_Dismemberment:
|
||||||
|
case Nif::BSLightingShaderType::ShaderType_Terrain:
|
||||||
Log(Debug::Warning) << "Unhandled BSLightingShaderType " << type << " in " << mFilename;
|
Log(Debug::Warning) << "Unhandled BSLightingShaderType " << type << " in " << mFilename;
|
||||||
return "bs/default";
|
return "bs/default";
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue