Files
2025-11-30 08:35:03 +02:00

124 lines
2.7 KiB
C#

using UnityEngine;
namespace UnityGLTF
{
public class MetalRough2StandardMap : StandardMap, IMetalRoughUniformMap
{
private Vector2 baseColorOffset = new Vector2(0, 0);
public MetalRough2StandardMap(int MaxLOD = 1000) : base("Standard", null, MaxLOD) { }
protected MetalRough2StandardMap(string shaderName, string shaderGuid, int MaxLOD = 1000) : base(shaderName, shaderGuid, MaxLOD) { }
protected MetalRough2StandardMap(Material m, int MaxLOD = 1000) : base(m, MaxLOD) { }
public virtual Texture BaseColorTexture
{
get { return _material.GetTexture("_MainTex"); }
set { _material.SetTexture("_MainTex", value); }
}
// not implemented by the Standard shader
public virtual int BaseColorTexCoord
{
get { return 0; }
set { return; }
}
public virtual Vector2 BaseColorXOffset
{
get { return baseColorOffset; }
set {
baseColorOffset = value;
_material.SetTextureOffset("_MainTex", value);
}
}
public virtual double BaseColorXRotation
{
get { return 0; }
set { return; }
}
public virtual Vector2 BaseColorXScale
{
get { return _material.GetTextureScale("_MainTex"); }
set {
_material.SetTextureScale("_MainTex", value);
BaseColorXOffset = baseColorOffset;
}
}
public virtual int BaseColorXTexCoord
{
get { return 0; }
set { return; }
}
public virtual Color BaseColorFactor
{
get { return _material.GetColor("_Color"); }
set { _material.SetColor("_Color", value); }
}
public virtual Texture MetallicRoughnessTexture
{
get { return null; }
set
{
// cap metalness at 0.5 to compensate for lack of texture
MetallicFactor = Mathf.Min(0.5f, (float)MetallicFactor);
}
}
// not implemented by the Standard shader
public virtual int MetallicRoughnessTexCoord
{
get { return 0; }
set { return; }
}
public virtual Vector2 MetallicRoughnessXOffset
{
get { return new Vector2(0, 0); }
set { return; }
}
public virtual double MetallicRoughnessXRotation
{
get { return 0; }
set { return; }
}
public virtual Vector2 MetallicRoughnessXScale
{
get { return new Vector2(1, 1); }
set { return; }
}
public virtual int MetallicRoughnessXTexCoord
{
get { return 0; }
set { return; }
}
public virtual double MetallicFactor
{
get { return _material.GetFloat("_Metallic"); }
set { _material.SetFloat("_Metallic", (float)value); }
}
// not supported by the Standard shader
public virtual double RoughnessFactor
{
get { return 0.5; }
set { return; }
}
public override IUniformMap Clone()
{
var copy = new MetalRough2StandardMap(new Material(_material));
base.Copy(copy);
return copy;
}
}
}