Skip to content

Commit

Permalink
fixed 0 padding + ao pixel color fighting
Browse files Browse the repository at this point in the history
  • Loading branch information
4sval committed Dec 4, 2022
1 parent 7a9556e commit 617dfad
Show file tree
Hide file tree
Showing 6 changed files with 176 additions and 110 deletions.
30 changes: 13 additions & 17 deletions FModel/Resources/default.frag
@@ -1,4 +1,4 @@
#version 330 core
#version 330 core

#define PI 3.1415926535897932384626433832795
#define MAX_UV_COUNT 8
Expand All @@ -23,13 +23,13 @@ struct Boost
float Exponent;
};

struct Mask
struct AoParams
{
sampler2D Sampler;
Boost SkinBoost;

float AmbientOcclusion;
float Curvature;

Boost ColorBoost;
bool HasColorBoost;
};

struct Parameters
Expand All @@ -39,8 +39,8 @@ struct Parameters
Texture SpecularMasks[MAX_UV_COUNT];
Texture Emissive[MAX_UV_COUNT];

Mask M;
bool HasM;
AoParams Ao;
bool HasAo;

float Roughness;
float EmissiveMult;
Expand Down Expand Up @@ -172,19 +172,15 @@ void main()
vec4 diffuse = SamplerToVector(uParameters.Diffuse[layer].Sampler);
vec3 result = uParameters.Diffuse[layer].Color.rgb * diffuse.rgb;

if (uParameters.HasM)
if (uParameters.HasAo)
{
vec3 m = SamplerToVector(uParameters.M.Sampler).rgb;

float subsurface = clamp(1.0f, 0.0f, m.b * .04f);
if (subsurface > 0.0f && uParameters.M.SkinBoost.Exponent > 0.0f)
vec3 m = SamplerToVector(uParameters.Ao.Sampler).rgb;
if (uParameters.Ao.HasColorBoost)
{
vec3 color = uParameters.M.SkinBoost.Color * uParameters.M.SkinBoost.Exponent;
result *= clamp(vec3(1.0f), vec3(0.0f), color * m.b);
vec3 color = uParameters.Ao.ColorBoost.Color * uParameters.Ao.ColorBoost.Exponent;
result = mix(result, result * color, m.b);
}

if (m.r > 0.0f) result *= m.r * uParameters.M.AmbientOcclusion;
if (m.g > 0.0f) result += m.g * uParameters.M.Curvature;
result = mix(result * m.r * uParameters.Ao.AmbientOcclusion, result, m.g);
}

vec4 emissive = SamplerToVector(uParameters.Emissive[layer].Sampler);
Expand Down
2 changes: 1 addition & 1 deletion FModel/Views/SettingsView.xaml
Expand Up @@ -372,7 +372,7 @@
IsChecked="{Binding SaveMaterials, Source={x:Static local:Settings.UserSettings.Default}, Mode=TwoWay}"/>
</UniformGrid>

<TextBlock Grid.Row="6" Grid.Column="0" Text="Preview Static Meshes From Levels (.umap)" VerticalAlignment="Center" Margin="0 0 0 5" />
<TextBlock Grid.Row="6" Grid.Column="0" Text="Preview Levels (.umap)" VerticalAlignment="Center" Margin="0 0 0 5" />
<CheckBox Grid.Row="6" Grid.Column="2" Grid.ColumnSpan="3" Content="{Binding IsChecked, RelativeSource={RelativeSource Self}, Converter={x:Static converters:BoolToToggleConverter.Instance}}"
IsChecked="{Binding PreviewWorlds, Source={x:Static local:Settings.UserSettings.Default}, Mode=TwoWay}"
Style="{DynamicResource {x:Static adonisUi:Styles.ToggleSwitch}}" Margin="0 5 0 5"/>
Expand Down
61 changes: 33 additions & 28 deletions FModel/Views/Snooper/Material.cs
Expand Up @@ -28,8 +28,8 @@ public class Material : IDisposable
public Vector4[] DiffuseColor;
public Vector4[] EmissiveColor;

public Mask M;
public bool HasM;
public AoParams Ao;
public bool HasAo;

public float Roughness = 0.5f;
public float EmissiveMult = 1f;
Expand Down Expand Up @@ -89,12 +89,16 @@ public void Setup(Options options, int numTexCoords)
}

{ // scalars
if (Parameters.TryGetTexture2d(out var original, "M", "AEM") && options.TryGetTexture(original, false, out var transformed))
if (Parameters.TryGetTexture2d(out var original, "M", "PackedTexture", "AEM") &&
!original.Name.Equals("T_BlackMask") && options.TryGetTexture(original, false, out var transformed))
{
M = new Mask { Texture = transformed, AmbientOcclusion = 0.7f };
HasM = true;
HasAo = true;
Ao = new AoParams { Texture = transformed, AmbientOcclusion = 0.7f };
if (Parameters.TryGetLinearColor(out var l, "Skin Boost Color And Exponent"))
M.SkinBoost = new Boost { Color = new Vector3(l.R, l.G, l.B), Exponent = l.A };
{
Ao.HasColorBoost = true;
Ao.ColorBoost = new Boost { Color = new Vector3(l.R, l.G, l.B), Exponent = l.A };
}
}

if (Parameters.TryGetScalar(out var roughnessMin, "RoughnessMin", "SpecRoughnessMin") &&
Expand Down Expand Up @@ -197,13 +201,13 @@ public void Render(Shader shader)
Emissive[i]?.Bind(TextureUnit.Texture0 + unit++);
}

M.Texture?.Bind(TextureUnit.Texture31);
shader.SetUniform("uParameters.M.Sampler", 31);
shader.SetUniform("uParameters.M.SkinBoost.Color", M.SkinBoost.Color);
shader.SetUniform("uParameters.M.SkinBoost.Exponent", M.SkinBoost.Exponent);
shader.SetUniform("uParameters.M.AmbientOcclusion", M.AmbientOcclusion);
shader.SetUniform("uParameters.M.Curvature", M.Curvature);
shader.SetUniform("uParameters.HasM", HasM);
Ao.Texture?.Bind(TextureUnit.Texture31);
shader.SetUniform("uParameters.Ao.Sampler", 31);
shader.SetUniform("uParameters.Ao.HasColorBoost", Ao.HasColorBoost);
shader.SetUniform("uParameters.Ao.ColorBoost.Color", Ao.ColorBoost.Color);
shader.SetUniform("uParameters.Ao.ColorBoost.Exponent", Ao.ColorBoost.Exponent);
shader.SetUniform("uParameters.Ao.AmbientOcclusion", Ao.AmbientOcclusion);
shader.SetUniform("uParameters.HasAo", HasAo);

shader.SetUniform("uParameters.Roughness", Roughness);
shader.SetUniform("uParameters.EmissiveMult", EmissiveMult);
Expand All @@ -227,17 +231,18 @@ public void ImGuiParameters()
ImGui.DragFloat("", ref UVScale, _step, _zero, _infinite, _mult, _clamp);
ImGui.PopID();

if (HasM)
if (HasAo)
{
SnimGui.Layout("Ambient Occlusion");ImGui.PushID(4);
ImGui.DragFloat("", ref M.AmbientOcclusion, _step, _zero, 1.0f, _mult, _clamp);
ImGui.PopID();SnimGui.Layout("Curvature");ImGui.PushID(5);
ImGui.DragFloat("", ref M.Curvature, _step, _zero, 1.0f, _mult, _clamp);
ImGui.PopID();SnimGui.Layout("Color Boost");ImGui.PushID(6);
ImGui.ColorEdit3("", ref M.SkinBoost.Color);
ImGui.PopID();SnimGui.Layout("Color Boost Exponent");ImGui.PushID(7);
ImGui.DragFloat("", ref M.SkinBoost.Exponent, _step, _zero, _infinite, _mult, _clamp);
ImGui.PopID();
ImGui.DragFloat("", ref Ao.AmbientOcclusion, _step, _zero, 1.0f, _mult, _clamp);ImGui.PopID();
if (Ao.HasColorBoost)
{
SnimGui.Layout("Color Boost");ImGui.PushID(5);
ImGui.ColorEdit3("", ref Ao.ColorBoost.Color);ImGui.PopID();
SnimGui.Layout("Color Boost Exponent");ImGui.PushID(6);
ImGui.DragFloat("", ref Ao.ColorBoost.Exponent, _step, _zero, _infinite, _mult, _clamp);
ImGui.PopID();
}
}
ImGui.EndTable();
}
Expand Down Expand Up @@ -308,7 +313,7 @@ public void ImGuiTextures(Dictionary<string, Texture> icons, Model model)
0 => Diffuse[SelectedChannel]?.GetPointer(),
1 => Normals[SelectedChannel]?.GetPointer(),
2 => SpecularMasks[SelectedChannel]?.GetPointer(),
3 => M.Texture?.GetPointer(),
3 => Ao.Texture?.GetPointer(),
4 => Emissive[SelectedChannel]?.GetPointer(),
_ => null
};
Expand All @@ -332,18 +337,18 @@ public void Dispose()
{
Emissive[i]?.Dispose();
}
M.Texture?.Dispose();
Ao.Texture?.Dispose();
GL.DeleteProgram(_handle);
}
}

public struct Mask
public struct AoParams
{
public Texture Texture;
public Boost SkinBoost;

public float AmbientOcclusion;
public float Curvature;

public Boost ColorBoost;
public bool HasColorBoost;
}

public struct Boost
Expand Down

0 comments on commit 617dfad

Please sign in to comment.