74 lines
2.4 KiB
C#
74 lines
2.4 KiB
C#
using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
|
|
namespace Unity.Rendering.Toon {
|
|
|
|
[System.Serializable]
|
|
internal class MaterialPropertyValue {
|
|
internal static MaterialPropertyValue FromMaterial(Material mat, int propIndex) {
|
|
MaterialPropertyValue value = new MaterialPropertyValue();
|
|
Shader shader = mat.shader;
|
|
string name = shader.GetPropertyName(propIndex);
|
|
ShaderPropertyType type = shader.GetPropertyType(propIndex);
|
|
value.type = type;
|
|
|
|
switch (type) {
|
|
case ShaderPropertyType.Color:
|
|
value.color = mat.GetColor(name);
|
|
break;
|
|
case ShaderPropertyType.Vector:
|
|
value.vector = mat.GetVector(name);
|
|
break;
|
|
case ShaderPropertyType.Float:
|
|
case ShaderPropertyType.Range:
|
|
value.floatValue = mat.GetFloat(name);
|
|
break;
|
|
case ShaderPropertyType.Texture:
|
|
value.texture = mat.GetTexture(name);
|
|
value.texOffset = mat.GetTextureOffset(name);
|
|
value.texScale = mat.GetTextureScale(name);
|
|
break;
|
|
}
|
|
|
|
return value;
|
|
}
|
|
|
|
internal void ApplyToMaterial(Material mat, string targetName) {
|
|
if (!mat.HasProperty(targetName)) {
|
|
Debug.LogWarning($"[UTS] material {mat.name} does not have property: {targetName}");
|
|
return;
|
|
}
|
|
|
|
switch (type) {
|
|
case ShaderPropertyType.Color:
|
|
mat.SetColor(targetName, color);
|
|
break;
|
|
case ShaderPropertyType.Vector:
|
|
mat.SetVector(targetName, vector);
|
|
break;
|
|
case ShaderPropertyType.Float:
|
|
case ShaderPropertyType.Range:
|
|
mat.SetFloat(targetName, floatValue);
|
|
break;
|
|
case ShaderPropertyType.Texture:
|
|
mat.SetTexture(targetName, texture);
|
|
mat.SetTextureOffset(targetName, texOffset);
|
|
mat.SetTextureScale(targetName, texScale);
|
|
break;
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------------------------------------------------------
|
|
|
|
internal ShaderPropertyType type;
|
|
internal Color color;
|
|
internal Vector4 vector;
|
|
internal float floatValue;
|
|
internal Texture texture;
|
|
internal Vector2 texOffset;
|
|
internal Vector2 texScale;
|
|
|
|
|
|
}
|
|
|
|
} //end namespace |