From 06cf4da8b2f1bb236705bc9d1e203571524d367f Mon Sep 17 00:00:00 2001 From: MeltyPlayer Date: Sat, 21 Dec 2024 02:09:05 -0600 Subject: [PATCH] Finally supported bump maps for BMD models. --- .../material/GlFixedFunctionMaterialShader.cs | 9 ++ .../src/rendering/gl/util/GlUtil_Texture.cs | 30 +++--- .../Fin/Fin/src/image/BumpMapUtils.cs | 96 ++++++++++++++++++ .../FixedFunctionEquationsGlslPrinter.cs | 80 ++++++++++++--- .../Fin/Fin/src/model/MaterialInterfaces.cs | 12 ++- .../material/FixedFunctionMaterialImpl.cs | 12 +++ .../io/exporters/gltf/GltfMaterialManager.cs | 19 ++-- .../Fin/Fin/src/shaders/glsl/GlslUtil.cs | 2 + .../src/shaders/glsl/ShaderRequirements.cs | 19 +++- .../shaders/glsl/StandardShaderSourceGlsl.cs | 2 +- .../pikmin_2_BigFoot/output/IP2V_damaind3.png | Bin 6468 -> 8503 bytes .../output/ashi_mat.fragment.glsl | 10 ++ .../output/body_mat.fragment.glsl | 10 ++ .../goldens/pikmin_2_BigFoot/output/enemy.glb | Bin 662504 -> 662948 bytes .../pikmin_2_BigFoot/output/enemy_0.png | Bin 4699 -> 6025 bytes .../pikmin_2_BigFoot/output/enemy_1.png | Bin 11386 -> 4699 bytes .../pikmin_2_BigFoot/output/enemy_2.png | Bin 0 -> 8503 bytes .../pikmin_2_BigFoot/output/enemy_3.png | Bin 0 -> 11386 bytes .../output/ooashi_footind_h.png | Bin 4280 -> 6025 bytes .../output/tama_mat.fragment.glsl | 10 ++ .../JSystem/src/misc/GCN/BMD_VTX1Section.cs | 2 + .../Gx/src/impl/GxFixedFunctionMaterial.cs | 6 +- 22 files changed, 274 insertions(+), 45 deletions(-) create mode 100644 FinModelUtility/Fin/Fin/src/image/BumpMapUtils.cs create mode 100644 FinModelUtility/Formats/JSystem/JSystem Tests/goldens/pikmin_2_BigFoot/output/enemy_2.png create mode 100644 FinModelUtility/Formats/JSystem/JSystem Tests/goldens/pikmin_2_BigFoot/output/enemy_3.png diff --git a/FinModelUtility/Fin/Fin.Ui/src/rendering/gl/material/GlFixedFunctionMaterialShader.cs b/FinModelUtility/Fin/Fin.Ui/src/rendering/gl/material/GlFixedFunctionMaterialShader.cs index 735ef7ca6..6125a49db 100644 --- a/FinModelUtility/Fin/Fin.Ui/src/rendering/gl/material/GlFixedFunctionMaterialShader.cs +++ b/FinModelUtility/Fin/Fin.Ui/src/rendering/gl/material/GlFixedFunctionMaterialShader.cs @@ -1,8 +1,11 @@ using System.Numerics; +using Assimp.Unmanaged; + using fin.language.equations.fixedFunction; using fin.math; using fin.model; +using fin.util.enumerables; namespace fin.ui.rendering.gl.material; @@ -48,6 +51,12 @@ protected override void Setup( this.SetUpTexture($"texture{i}", i, finTexture, glTexture); } + var normalTexture = material.NormalTexture; + if (normalTexture != null) { + var glTexture = GlTexture.FromTexture(normalTexture); + this.SetUpTexture("normalTexture", MaterialConstants.MAX_TEXTURES, normalTexture, glTexture); + } + var colorRegisterToUniform = new Dictionary>(); var scalarRegisterToUniform diff --git a/FinModelUtility/Fin/Fin.Ui/src/rendering/gl/util/GlUtil_Texture.cs b/FinModelUtility/Fin/Fin.Ui/src/rendering/gl/util/GlUtil_Texture.cs index f7c8ecb13..1a4d4eedd 100644 --- a/FinModelUtility/Fin/Fin.Ui/src/rendering/gl/util/GlUtil_Texture.cs +++ b/FinModelUtility/Fin/Fin.Ui/src/rendering/gl/util/GlUtil_Texture.cs @@ -1,32 +1,36 @@ using System.Runtime.CompilerServices; +using fin.model; +using fin.shaders.glsl; + using OpenTK.Graphics.OpenGL; namespace fin.ui.rendering.gl; public partial class GlState { - public int ActiveTexture { get; set; }= -1; + public int ActiveTexture { get; set; } = -1; - public int[] CurrentTextureBindings { get; set; } = - [-1, -1, -1, -1, -1, -1, -1, -1]; + public int[] CurrentTextureBindings { get; } + = Enumerable.Repeat(-1, MaterialConstants.MAX_TEXTURES + 1).ToArray(); } public static partial class GlUtil { [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void BindTexture(int textureIndex, int value) { - if (currentState_.CurrentTextureBindings[textureIndex] == value) { - return; - } - - if (currentState_.ActiveTexture != textureIndex) { - GL.ActiveTexture(TextureUnit.Texture0 + - (currentState_.ActiveTexture = textureIndex)); - } + if (currentState_.CurrentTextureBindings[textureIndex] == value) { + return; + } - GL.BindTexture(TextureTarget.Texture2D, - currentState_.CurrentTextureBindings[textureIndex] = value); + if (currentState_.ActiveTexture != textureIndex) { + GL.ActiveTexture(TextureUnit.Texture0 + + (currentState_.ActiveTexture = textureIndex)); } + GL.BindTexture(TextureTarget.Texture2D, + currentState_.CurrentTextureBindings[textureIndex] + = value); + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void UnbindTexture(int textureIndex) => BindTexture(textureIndex, -1); diff --git a/FinModelUtility/Fin/Fin/src/image/BumpMapUtils.cs b/FinModelUtility/Fin/Fin/src/image/BumpMapUtils.cs new file mode 100644 index 000000000..2c199f210 --- /dev/null +++ b/FinModelUtility/Fin/Fin/src/image/BumpMapUtils.cs @@ -0,0 +1,96 @@ +using fin.image.formats; + +using SixLabors.ImageSharp.PixelFormats; + +namespace fin.image; + +public static class BumpMapUtils { + /// + /// Shamelessly stolen from: + /// https://stackoverflow.com/questions/10652797/whats-the-logic-behind-creating-a-normal-map-from-a-texture + /// + public static unsafe Rgb24Image ConvertBumpMapImageToNormalImage( + IReadOnlyImage image) { + var normalImage = + new Rgb24Image(PixelFormat.RGB888, image.Width, image.Height); + using var normalImageLock = normalImage.UnsafeLock(); + var normalImageScan0 = normalImageLock.pixelScan0; + + image.Access(bumpGetHandler => { + for (var y = 0; y < image.Height; ++y) { + for (var x = 0; x < image.Width; ++x) { + bumpGetHandler( + x, + y, + out var centerIntensity, + out _, + out _, + out _); + + byte leftIntensity; + if (x > 0) { + bumpGetHandler( + x - 1, + y, + out leftIntensity, + out _, + out _, + out _); + } else { + leftIntensity = centerIntensity; + } + + byte rightIntensity; + if (x < image.Width - 1) { + bumpGetHandler( + x + 1, + y, + out rightIntensity, + out _, + out _, + out _); + } else { + rightIntensity = centerIntensity; + } + + byte upIntensity; + if (y > 0) { + bumpGetHandler( + x, + y - 1, + out upIntensity, + out _, + out _, + out _); + } else { + upIntensity = centerIntensity; + } + + byte downIntensity; + if (y < image.Height - 1) { + bumpGetHandler( + x, + y + 1, + out downIntensity, + out _, + out _, + out _); + } else { + downIntensity = centerIntensity; + } + + var xIntensity + = ((leftIntensity / 255f - rightIntensity / 255f + 1) * .5f) * + 255; + var yIntensity + = ((upIntensity / 255f - downIntensity / 255f + 1) * .5f) * 255; + + normalImageScan0[y * image.Width + x] + = new Rgb24((byte) xIntensity, (byte) yIntensity, 255); + } + } + }); + + return normalImage; + } +} \ No newline at end of file diff --git a/FinModelUtility/Fin/Fin/src/language/equations/fixedFunction/FixedFunctionEquationsGlslPrinter.cs b/FinModelUtility/Fin/Fin/src/language/equations/fixedFunction/FixedFunctionEquationsGlslPrinter.cs index 8b999c34a..cdd1c7c96 100644 --- a/FinModelUtility/Fin/Fin/src/language/equations/fixedFunction/FixedFunctionEquationsGlslPrinter.cs +++ b/FinModelUtility/Fin/Fin/src/language/equations/fixedFunction/FixedFunctionEquationsGlslPrinter.cs @@ -29,6 +29,9 @@ public void Print( var registers = material.Registers; var textures = material.TextureSources; + var normalTexture = material.NormalTexture; + var hasNormalTexture = normalTexture != null; + sb.AppendLine($"#version {GlslConstants.FRAGMENT_SHADER_VERSION}"); sb.AppendLine(GlslConstants.FLOAT_PRECISION); sb.AppendLine(); @@ -92,6 +95,12 @@ public void Print( } } + if (hasNormalTexture) { + sb.AppendLine( + $"uniform {GlslUtil.GetTypeOfTexture(normalTexture, this.animations_)} normalTexture;"); + hadUniform = true; + } + foreach (var colorRegister in registers.ColorRegisters) { if (equations.DoOutputsDependOn(colorRegister)) { hadUniform = true; @@ -133,6 +142,14 @@ public void Print( AppendLineBetweenUniformsAndIns(); sb.AppendLine("in vec3 vertexPosition;"); sb.AppendLine("in vec3 vertexNormal;"); + + if (hasNormalTexture && + shaderRequirements.TangentType == TangentType.DEFINED) { + sb.AppendLine(""" + in vec3 tangent; + in vec3 binormal; + """); + } } var usedColors = shaderRequirements.UsedColors; @@ -177,12 +194,41 @@ public void Print( // Calculate lighting if (dependsOnLights) { - sb.AppendLine( - $""" - // Have to renormalize because the vertex normals can become distorted when interpolated. - vec3 fragNormal = normalize(vertexNormal); + if (!hasNormalTexture) { + sb.AppendLine( + """ + // Have to renormalize because the vertex normals can become distorted when interpolated. + vec3 fragNormal = normalize(vertexNormal); + + """); + } else { + sb.AppendLine( + $""" + // Have to renormalize because the vertex normals can become distorted when interpolated. + vec3 fragNormal = normalize(vertexNormal); + vec3 textureNormal = {GlslUtil.ReadColorFromTexture("normalTexture", $"{GlslConstants.IN_UV_NAME}{normalTexture?.UvIndex ?? 0}", normalTexture, this.animations_)}.xyz * 2.0 - 1.0; + fragNormal = normalize(mat3(tangent, binormal, fragNormal) * textureNormal); + + """); + + if (shaderRequirements.TangentType is TangentType.CALCULATED) { + // Shamelessly stolen from: + // https://community.khronos.org/t/computing-the-tangent-space-in-the-fragment-shader/52861 + var texCoordName + = $"{GlslConstants.IN_UV_NAME}{normalTexture.UvIndex}"; + sb.AppendLine( + $""" + vec3 Q1 = dFdx(vertexPosition); + vec3 Q2 = dFdy(vertexPosition); + vec2 st1 = dFdx({texCoordName}); + vec2 st2 = dFdy({texCoordName}); + vec3 tangent = normalize(Q1*st2.t - Q2*st1.t); + vec3 binormal = normalize(-Q1*st2.s + Q2*st1.s); + + """); + } + } - """); // TODO: Optimize this if the shader depends on merged lighting as well as individual lights for some reason. if (dependsOnAnIndividualLight) { sb.AppendLine( @@ -209,7 +255,7 @@ public void Print( vec4 mergedLightDiffuseColor = vec4(0); vec4 mergedLightSpecularColor = vec4(0); getMergedLightColors(vertexPosition, fragNormal, {GlslConstants.UNIFORM_SHININESS_NAME}, mergedLightDiffuseColor, mergedLightSpecularColor); - + """); } } @@ -322,14 +368,20 @@ private string GetAlphaCompareText_( string alphaAccessorText, float reference) => alphaCompareType switch { - AlphaCompareType.Never => "false", - AlphaCompareType.Less => $"{alphaAccessorText} < {reference:0.0###########}", - AlphaCompareType.Equal => $"{alphaAccessorText} == {reference:0.0###########}", - AlphaCompareType.LEqual => $"{alphaAccessorText} <= {reference:0.0###########}", - AlphaCompareType.Greater => $"{alphaAccessorText} > {reference:0.0###########}", - AlphaCompareType.NEqual => $"{alphaAccessorText} != {reference:0.0###########}", - AlphaCompareType.GEqual => $"{alphaAccessorText} >= {reference:0.0###########}", - AlphaCompareType.Always => "true", + AlphaCompareType.Never => "false", + AlphaCompareType.Less => + $"{alphaAccessorText} < {reference:0.0###########}", + AlphaCompareType.Equal => + $"{alphaAccessorText} == {reference:0.0###########}", + AlphaCompareType.LEqual => + $"{alphaAccessorText} <= {reference:0.0###########}", + AlphaCompareType.Greater => + $"{alphaAccessorText} > {reference:0.0###########}", + AlphaCompareType.NEqual => + $"{alphaAccessorText} != {reference:0.0###########}", + AlphaCompareType.GEqual => + $"{alphaAccessorText} >= {reference:0.0###########}", + AlphaCompareType.Always => "true", _ => throw new ArgumentOutOfRangeException( nameof(alphaCompareType), alphaCompareType, diff --git a/FinModelUtility/Fin/Fin/src/model/MaterialInterfaces.cs b/FinModelUtility/Fin/Fin/src/model/MaterialInterfaces.cs index d542aa2e0..f304e4d34 100644 --- a/FinModelUtility/Fin/Fin/src/model/MaterialInterfaces.cs +++ b/FinModelUtility/Fin/Fin/src/model/MaterialInterfaces.cs @@ -117,6 +117,13 @@ IMaterial SetBlendingSeparate( LogicOp logicOp); } + +[GenerateReadOnly] +public partial interface IMaterialWithNormalTexture : IMaterial { + IReadOnlyTexture? NormalTexture { get; set; } +} + + [GenerateReadOnly] public partial interface INullMaterial : IMaterial; @@ -135,10 +142,9 @@ public partial interface IColorMaterial : IMaterial { } [GenerateReadOnly] -public partial interface IStandardMaterial : IMaterial { +public partial interface IStandardMaterial : IMaterialWithNormalTexture { IReadOnlyTexture? DiffuseTexture { get; set; } IReadOnlyTexture? AmbientOcclusionTexture { get; set; } - IReadOnlyTexture? NormalTexture { get; set; } IReadOnlyTexture? EmissiveTexture { get; set; } IReadOnlyTexture? SpecularTexture { get; set; } } @@ -310,7 +316,7 @@ public enum FixedFunctionSource { } [GenerateReadOnly] -public partial interface IFixedFunctionMaterial : IMaterial { +public partial interface IFixedFunctionMaterial : IMaterialWithNormalTexture { IFixedFunctionEquations Equations { get; } IFixedFunctionRegisters Registers { get; } diff --git a/FinModelUtility/Fin/Fin/src/model/impl/material/FixedFunctionMaterialImpl.cs b/FinModelUtility/Fin/Fin/src/model/impl/material/FixedFunctionMaterialImpl.cs index 79e48f456..aea6664ab 100644 --- a/FinModelUtility/Fin/Fin/src/model/impl/material/FixedFunctionMaterialImpl.cs +++ b/FinModelUtility/Fin/Fin/src/model/impl/material/FixedFunctionMaterialImpl.cs @@ -82,5 +82,17 @@ public IFixedFunctionMaterial SetAlphaCompare( AlphaCompareType.Always; public float AlphaReference1 { get; private set; } + + private IReadOnlyTexture? normalTexture_; + + public IReadOnlyTexture? NormalTexture { + get => this.normalTexture_; + set { + this.normalTexture_ = value; + if (value != null) { + this.textures_.Add(value); + } + } + } } } \ No newline at end of file diff --git a/FinModelUtility/Fin/Fin/src/model/io/exporters/gltf/GltfMaterialManager.cs b/FinModelUtility/Fin/Fin/src/model/io/exporters/gltf/GltfMaterialManager.cs index 43a8500cb..e99e04ea1 100644 --- a/FinModelUtility/Fin/Fin/src/model/io/exporters/gltf/GltfMaterialManager.cs +++ b/FinModelUtility/Fin/Fin/src/model/io/exporters/gltf/GltfMaterialManager.cs @@ -95,14 +95,6 @@ var gltfMaterialBuilder gltfImageByFinImage[diffuseTexture.Image]); } - var normalTexture = standardMaterial.NormalTexture; - if (normalTexture != null) { - gltfMaterialBuilder.UseChannel(KnownChannel.Normal) - .UseTexture(normalTexture, - gltfImageByFinImage - [normalTexture.Image]); - } - var emissiveTexture = standardMaterial.EmissiveTexture; if (emissiveTexture != null) { gltfMaterialBuilder @@ -175,8 +167,7 @@ var usesDiffuse ]) .ToArray()); - KnownChannel - mainTextureChannel; + KnownChannel mainTextureChannel; if (usesSpecular) { // TODO: Get specular color gltfMaterialBuilder @@ -211,6 +202,14 @@ var texture .UseTexture(texture, gltfImageByFinImage[texture.Image]); } + var normalTexture = fixedFunctionMaterial.NormalTexture; + if (normalTexture != null) { + gltfMaterialBuilder + .UseChannel(KnownChannel.Normal) + .UseTexture(normalTexture, + gltfImageByFinImage[normalTexture.Image]); + } + break; } default: { diff --git a/FinModelUtility/Fin/Fin/src/shaders/glsl/GlslUtil.cs b/FinModelUtility/Fin/Fin/src/shaders/glsl/GlslUtil.cs index d88993f99..d9d36aa1a 100644 --- a/FinModelUtility/Fin/Fin/src/shaders/glsl/GlslUtil.cs +++ b/FinModelUtility/Fin/Fin/src/shaders/glsl/GlslUtil.cs @@ -80,8 +80,10 @@ public static string GetVertexSrc(IReadOnlyModel model, var modelRequirements = ModelRequirements.FromModel(model); var hasNormals = modelRequirements.HasNormals; + var hasTangents = modelRequirements.HasTangents; var hasBinormals = hasNormals && hasTangents; + var numBones = modelRequirements.NumBones; vertexSrc.AppendLine($$""" diff --git a/FinModelUtility/Fin/Fin/src/shaders/glsl/ShaderRequirements.cs b/FinModelUtility/Fin/Fin/src/shaders/glsl/ShaderRequirements.cs index 003c05166..73f03c8d6 100644 --- a/FinModelUtility/Fin/Fin/src/shaders/glsl/ShaderRequirements.cs +++ b/FinModelUtility/Fin/Fin/src/shaders/glsl/ShaderRequirements.cs @@ -6,12 +6,18 @@ namespace fin.shaders.glsl; +public enum TangentType { + NOT_PRESENT, + DEFINED, + CALCULATED, +} + public interface IShaderRequirements { public bool UsesSphericalReflectionMapping { get; } public bool UsesLinearReflectionMapping { get; } public bool HasNormals { get; } - public bool HasTangents { get; } + public TangentType TangentType { get; } public bool[] UsedUvs { get; } public bool[] UsedColors { get; } @@ -31,6 +37,7 @@ private ShaderRequirements(IReadOnlyModel model, this.UsesLinearReflectionMapping = material?.Textures.Any(t => t.UvType is UvType.LINEAR) ?? false; + this.TangentType = TangentType.NOT_PRESENT; foreach (var vertex in model.Skin.Meshes .SelectMany(mesh => mesh.Primitives) .Where(primitive @@ -41,7 +48,7 @@ private ShaderRequirements(IReadOnlyModel model, LocalNormal: not null, LocalTangent: not null }: { this.HasNormals = true; - this.HasTangents = true; + this.TangentType = TangentType.CALCULATED; break; } case IReadOnlyNormalVertex { LocalNormal: not null }: { @@ -51,6 +58,12 @@ private ShaderRequirements(IReadOnlyModel model, } } + if (this.TangentType is TangentType.NOT_PRESENT && + material is IFixedFunctionMaterial { NormalTexture: not null } + or IStandardMaterial { NormalTexture: not null }) { + this.TangentType = TangentType.CALCULATED; + } + this.UsedUvs = new bool[MaterialConstants.MAX_UVS]; if (material != null && material is not IFixedFunctionMaterial) { foreach (var texture in material.Textures) { @@ -105,7 +118,7 @@ or IStandardMaterial public bool UsesSphericalReflectionMapping { get; } public bool UsesLinearReflectionMapping { get; } public bool HasNormals { get; } - public bool HasTangents { get; } + public TangentType TangentType { get; } public bool[] UsedUvs { get; } public bool[] UsedColors { get; } } \ No newline at end of file diff --git a/FinModelUtility/Fin/Fin/src/shaders/glsl/StandardShaderSourceGlsl.cs b/FinModelUtility/Fin/Fin/src/shaders/glsl/StandardShaderSourceGlsl.cs index e3430b53e..a14694481 100644 --- a/FinModelUtility/Fin/Fin/src/shaders/glsl/StandardShaderSourceGlsl.cs +++ b/FinModelUtility/Fin/Fin/src/shaders/glsl/StandardShaderSourceGlsl.cs @@ -29,7 +29,7 @@ public StandardShaderSourceGlsl( var normalTexture = material.NormalTexture; var hasNormalTexture = normalTexture != null; var hasNormals = shaderRequirements.HasNormals; - var hasTangents = shaderRequirements.HasTangents; + var hasTangents = shaderRequirements.TangentType != TangentType.NOT_PRESENT; var hasBinormals = hasNormals && hasTangents; var ambientOcclusionTexture = material.AmbientOcclusionTexture; diff --git a/FinModelUtility/Formats/JSystem/JSystem Tests/goldens/pikmin_2_BigFoot/output/IP2V_damaind3.png b/FinModelUtility/Formats/JSystem/JSystem Tests/goldens/pikmin_2_BigFoot/output/IP2V_damaind3.png index 4260e473052c52ce0bb05b9fad3bd443ea35e849..f6a6da6321ba76e5597298bb5ef2d2e7b2cb9989 100644 GIT binary patch literal 8503 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 L*q(fzv(*OxCkcE{ delta 128 zcmZ3oTjRxc4Zif85H}_U28I{XTnqu{8~L{KF)|*UZher^Z2Gx_jK+)x)0qx2YJ=F0 z)4L8a%7Iuq({~c}CCe>(4VPGO`-h#?~sd%U@&!VkRJF24WT< TW(8t4AZ7<*j_vXnIa_@IsJJf7 diff --git a/FinModelUtility/Formats/JSystem/JSystem Tests/goldens/pikmin_2_BigFoot/output/enemy_0.png b/FinModelUtility/Formats/JSystem/JSystem Tests/goldens/pikmin_2_BigFoot/output/enemy_0.png index 1236dd3da221742b8e7bdc950c6885aedf033ae9..61c10af0ee89734079c556827e9d206cba0a8194 100644 GIT binary patch literal 6025 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 D|2u_C literal 4699 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 diff --git a/FinModelUtility/Formats/JSystem/JSystem Tests/goldens/pikmin_2_BigFoot/output/enemy_1.png b/FinModelUtility/Formats/JSystem/JSystem Tests/goldens/pikmin_2_BigFoot/output/enemy_1.png index 898bc864fad8054d2934b41c0b84ba0232cc4d72..1236dd3da221742b8e7bdc950c6885aedf033ae9 100644 GIT binary patch literal 4699 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 literal 11386 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 IM6N<$f^lH!T>t<8 diff --git a/FinModelUtility/Formats/JSystem/JSystem Tests/goldens/pikmin_2_BigFoot/output/enemy_2.png b/FinModelUtility/Formats/JSystem/JSystem Tests/goldens/pikmin_2_BigFoot/output/enemy_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f6a6da6321ba76e5597298bb5ef2d2e7b2cb9989 GIT binary patch literal 8503 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 IM6N<$f^lH!T>t<8 literal 0 HcmV?d00001 diff --git a/FinModelUtility/Formats/JSystem/JSystem Tests/goldens/pikmin_2_BigFoot/output/ooashi_footind_h.png b/FinModelUtility/Formats/JSystem/JSystem Tests/goldens/pikmin_2_BigFoot/output/ooashi_footind_h.png index 5d37e3120240d05dcc6dff888a4a633413330419..61c10af0ee89734079c556827e9d206cba0a8194 100644 GIT binary patch literal 6025 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 D|2u_C literal 4280 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 amh~4IM?LK7e{cK%0000(), wrapModeOverrides?.wrapModeS ?? gxTexture.WrapModeS, wrapModeOverrides?.wrapModeT ?? gxTexture.WrapModeT, gxTexture.MinTextureFilter, @@ -99,6 +101,8 @@ var wrapModeOverrides gxTexture, texCoordGen, texMatrix)]; + + material.NormalTexture = finIndirectTexture; } var colorConstants = new List();