Skip to content

Commit e4f7610

Browse files
committed
material: Use lerp vertex shader when material requires it.
1 parent 104328e commit e4f7610

File tree

1 file changed

+24
-9
lines changed

1 file changed

+24
-9
lines changed

Runtime/MaterialConverter.cs

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
using UnityEngine;
2424
using VisualPinball.Engine.VPT;
2525
using VisualPinball.Unity;
26+
using Material = UnityEngine.Material;
2627

2728
namespace VisualPinball.Engine.Unity.Hdrp
2829
{
@@ -35,35 +36,49 @@ public class MaterialConverter : IMaterialConverter
3536
private static readonly int Smoothness = Shader.PropertyToID("_Smoothness");
3637
private static readonly int BaseColorMap = Shader.PropertyToID("_BaseColorMap");
3738
private static readonly int NormalMap = Shader.PropertyToID("_NormalMap");
39+
private static readonly int UVChannelSelect = Shader.PropertyToID("_UVChannelSelect");
3840

3941
#endregion
4042

41-
private static Shader GetShader()
43+
public Shader GetShader()
4244
{
4345
return Shader.Find("HDRP/Lit");
4446
}
4547

46-
public static UnityEngine.Material GetDefaultMaterial(BlendMode blendMode)
48+
private Shader GetShader(PbrMaterial vpxMaterial)
49+
{
50+
return vpxMaterial.VertexLerpWithUvEnabled
51+
? Shader.Find("Visual Pinball/Hdrp/LerpVertex")
52+
: GetShader();
53+
}
54+
55+
public static Material GetDefaultMaterial(BlendMode blendMode)
4756
{
4857
switch (blendMode)
4958
{
5059
case BlendMode.Opaque:
51-
return UnityEngine.Resources.Load<UnityEngine.Material>("Materials/TableOpaque");
60+
return UnityEngine.Resources.Load<Material>("Materials/TableOpaque");
5261
case BlendMode.Cutout:
53-
return UnityEngine.Resources.Load<UnityEngine.Material>("Materials/TableCutout");
62+
return UnityEngine.Resources.Load<Material>("Materials/TableCutout");
5463
case BlendMode.Translucent:
55-
return UnityEngine.Resources.Load<UnityEngine.Material>("Materials/TableTranslucent");
64+
return UnityEngine.Resources.Load<Material>("Materials/TableTranslucent");
5665
default:
5766
throw new ArgumentOutOfRangeException( "Undefined blend mode " + blendMode);
5867
}
59-
6068
}
6169

62-
public UnityEngine.Material CreateMaterial(PbrMaterial vpxMaterial, TableAuthoring table, Type objectType, StringBuilder debug = null)
70+
public Material CreateMaterial(PbrMaterial vpxMaterial, TableAuthoring table, Type objectType, StringBuilder debug = null)
6371
{
64-
UnityEngine.Material defaultMaterial = GetDefaultMaterial(vpxMaterial.MapBlendMode);
72+
Material defaultMaterial = GetDefaultMaterial(vpxMaterial.MapBlendMode);
6573

66-
var unityMaterial = new UnityEngine.Material(GetShader());
74+
var unityMaterial = new Material(GetShader(vpxMaterial))
75+
{
76+
name = vpxMaterial.Id
77+
};
78+
79+
if (vpxMaterial.VertexLerpWithUvEnabled) {
80+
unityMaterial.SetFloat(UVChannelSelect, 2);
81+
}
6782
unityMaterial.CopyPropertiesFromMaterial( defaultMaterial);
6883
unityMaterial.name = vpxMaterial.Id;
6984

0 commit comments

Comments
 (0)