Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 10 additions & 11 deletions package/Shaders/Lighting.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -3200,20 +3200,19 @@ PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace)
# if defined(ANISOTROPIC_ALPHA)
// Uniform alpha material settings
uint AlphaMaterialModel = ExtendedTranslucency::GetMaterialModelFromDescriptor(Permutation::ExtraFeatureDescriptor);
float AlphaMaterialReduction = 0.f;
float AlphaMaterialSoftness = 0.f;
float AlphaMaterialStrength = 0.f;
[branch] if (AlphaMaterialModel == ExtendedTranslucency::MaterialModel::Default) {
AlphaMaterialModel = SharedData::extendedTranslucencySettings.MaterialModel;
AlphaMaterialReduction = SharedData::extendedTranslucencySettings.Reduction;
AlphaMaterialSoftness = SharedData::extendedTranslucencySettings.Softness;
AlphaMaterialStrength = SharedData::extendedTranslucencySettings.Strength;
}

[branch] if (ExtendedTranslucency::IsValidMaterial(AlphaMaterialModel))
{
if (alpha >= 0.0156862754 && alpha < 1.0) {
float AlphaMaterialReduction = 0.f;
float AlphaMaterialSoftness = 0.f;
float AlphaMaterialStrength = 0.f;

if (AlphaMaterialModel == ExtendedTranslucency::MaterialModel::Default) {
AlphaMaterialModel = SharedData::extendedTranslucencySettings.MaterialModel;
AlphaMaterialReduction = SharedData::extendedTranslucencySettings.Reduction;
AlphaMaterialSoftness = SharedData::extendedTranslucencySettings.Softness;
AlphaMaterialStrength = SharedData::extendedTranslucencySettings.Strength;
}

float originalAlpha = alpha;
alpha = alpha * (1.0 - AlphaMaterialReduction);
[branch] if (AlphaMaterialModel == ExtendedTranslucency::MaterialModel::AnisotropicFabric)
Expand Down
11 changes: 10 additions & 1 deletion src/Features/ExtendedTranslucency.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,9 @@ void ExtendedTranslucency::BSLightingShader_SetupGeometry(RE::BSRenderPass* pass
// TODO: PERFORMANCE: Caching the feature descriptor in map<RE::BSGeometry*, uint> if this get more complex
auto& unknownProperty = pass->geometry->GetGeometryRuntimeData().properties[RE::BSGeometry::States::kProperty];
auto alphaProperty = unknownProperty && unknownProperty->GetRTTI() == globals::rtti::NiAlphaPropertyRTTI.get() ? static_cast<RE::NiAlphaProperty*>(unknownProperty.get()) : nullptr;
auto* feature = ExtendedTranslucency::GetSingleton();
// Check alpha property exists and blending is enabled
if (alphaProperty && alphaProperty->GetAlphaBlending()) {
if (alphaProperty && alphaProperty->GetAlphaBlending() && (pass->geometry->GetGeometryRuntimeData().skinInstance != nullptr || (feature && !feature->SkinnedOnly))) {
if (auto* data = pass->geometry->GetExtraData(NiExtraDataName_AnisotropicAlphaMaterial)) {
if (data->GetRTTI() == globals::rtti::NiIntegerExtraDataRTTI.get()) {
uint32_t material = static_cast<uint32_t>(static_cast<RE::NiIntegerExtraData*>(data)->value) & ExtraFeatureDescriptorMask;
Expand Down Expand Up @@ -94,6 +95,12 @@ void ExtendedTranslucency::DrawSettings()
" - Isotropic Fabric: Imaginary fabric weaved from threads in one direction, respect normal map.\n"
" - Anisotropic Fabric: Common fabric weaved from tangent and birnormal direction, ignores normal map.\n");
}
if (ImGui::Checkbox("Skinned Mesh Only", &SkinnedOnly)) {
changed = true;
}
if (auto _tt = Util::HoverTooltipWrapper()) {
ImGui::Text("Control if this effect should only apply to skinned mesh, check this option if your are seeing undesired effect on random objects.");
}

if (ImGui::SliderFloat("Transparency Increase", &settings.AlphaReduction, 0.f, 1.f)) {
changed = true;
Expand Down Expand Up @@ -125,11 +132,13 @@ void ExtendedTranslucency::DrawSettings()
void ExtendedTranslucency::LoadSettings(json& o_json)
{
settings = o_json;
SkinnedOnly = o_json.value("SkinnedOnly", true);
}

void ExtendedTranslucency::SaveSettings(json& o_json)
{
o_json = settings;
o_json["SkinnedOnly"] = SkinnedOnly;
}

void ExtendedTranslucency::RestoreDefaultSettings()
Expand Down
1 change: 1 addition & 0 deletions src/Features/ExtendedTranslucency.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ struct ExtendedTranslucency final : Feature
};

MaterialParams settings;
bool SkinnedOnly = true;

static const RE::BSFixedString NiExtraDataName_AnisotropicAlphaMaterial;
};