124 lines
2.7 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|