Project_WL/Assets/ThirdParty/Unity Chan Toon Shader - SD.../Runtime/Scripts/MaterialPropertyValue.cs

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