diff --git a/Runtime/MaterialConverter.cs b/Runtime/MaterialConverter.cs index 196a252..6f36800 100644 --- a/Runtime/MaterialConverter.cs +++ b/Runtime/MaterialConverter.cs @@ -22,14 +22,17 @@ using System.Text; using UnityEngine; using VisualPinball.Engine.VPT; +using Material = UnityEngine.Material; using Mesh = VisualPinball.Engine.VPT.Mesh; namespace VisualPinball.Unity.Urp { public class MaterialConverter : IMaterialConverter { - public UnityEngine.Material DotMatrixDisplay => UnityEngine.Resources.Load("Materials/DotMatrixDisplay"); - public UnityEngine.Material SegmentDisplay => UnityEngine.Resources.Load("Materials/SegmentDisplay"); + public Material DotMatrixDisplay => UnityEngine.Resources.Load("Materials/DotMatrixDisplay"); + public Material SegmentDisplay => UnityEngine.Resources.Load("Materials/SegmentDisplay"); + + public int NormalMapProperty => NormalMap; #region Shader Properties @@ -55,27 +58,27 @@ private Shader GetShader(PbrMaterial vpxMaterial) : GetShader(); } - public static UnityEngine.Material GetDefaultMaterial(BlendMode blendMode) + public static Material GetDefaultMaterial(BlendMode blendMode) { switch (blendMode) { case BlendMode.Opaque: - return UnityEngine.Resources.Load("Materials/TableOpaque"); + return UnityEngine.Resources.Load("Materials/TableOpaque"); case BlendMode.Cutout: - return UnityEngine.Resources.Load("Materials/TableCutout"); + return UnityEngine.Resources.Load("Materials/TableCutout"); case BlendMode.Translucent: - return UnityEngine.Resources.Load("Materials/TableTranslucent"); + return UnityEngine.Resources.Load("Materials/TableTranslucent"); default: throw new ArgumentOutOfRangeException("Undefined blend mode " + blendMode); } - } - public UnityEngine.Material CreateMaterial(PbrMaterial vpxMaterial, TableAuthoring table, Type objectType, StringBuilder debug = null) + public Material CreateMaterial(PbrMaterial vpxMaterial, ITextureProvider textureProvider, Type objectType, + StringBuilder debug = null) { - UnityEngine.Material defaultMaterial = GetDefaultMaterial(vpxMaterial.MapBlendMode); + Material defaultMaterial = GetDefaultMaterial(vpxMaterial.MapBlendMode); - var unityMaterial = new UnityEngine.Material(GetShader(vpxMaterial)); + var unityMaterial = new Material(GetShader(vpxMaterial)); unityMaterial.CopyPropertiesFromMaterial(defaultMaterial); unityMaterial.name = vpxMaterial.Id; @@ -119,18 +122,16 @@ public UnityEngine.Material CreateMaterial(PbrMaterial vpxMaterial, TableAuthori unityMaterial.SetFloat(Smoothness, vpxMaterial.Roughness); // map - if (table != null && vpxMaterial.HasMap) - { - unityMaterial.SetTexture(BaseMap, table.GetTexture(vpxMaterial.Map.Name)); + if (vpxMaterial.HasMap) { + unityMaterial.SetTexture(BaseMap, textureProvider.GetTexture(vpxMaterial.Map.Name)); } // normal map - if (table != null && vpxMaterial.HasNormalMap) - { + if (vpxMaterial.HasNormalMap) { unityMaterial.EnableKeyword("_NORMALMAP"); unityMaterial.EnableKeyword("_NORMALMAP_TANGENT_SPACE"); - unityMaterial.SetTexture(NormalMap, table.GetTexture(vpxMaterial.NormalMap.Name)); + unityMaterial.SetTexture(NormalMap, textureProvider.GetTexture(vpxMaterial.NormalMap.Name)); } return unityMaterial;