Skip to content

Instantly share code, notes, and snippets.

@andreiagmu
Last active August 13, 2020 02:19
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save andreiagmu/3d5f0488185a510bc021b2b2298642e5 to your computer and use it in GitHub Desktop.
Material color conversion inspector options for Unity - RealToon version
// Material color conversion inspector options for Unity - RealToon version
// by Andy Miira (Andrei Müller), January 2020
//
//
// [INSTRUCTIONS]
// 0) Add this script inside an "Editor" folder in your project.
// You must create this folder if it doesn't already exist.
//
// 1) Select ONE OR MORE Materials in your project,
// then click on the small gear icon at the top-right corner of the material(s)'s Inspector.
// Or simply right-click the top area of the material(s)'s Inspector
// (where is located the material's name, the shader selection dropdown, etc.).
//
// 2) In the dropdown menu, there should be two new options, "Convert Colors to Linear" and "Convert Colors to Gamma".
// Select one of the options to make the respective color conversion. That's it!
//
// Usage example:
// https://twitter.com/andymiira/status/1220811118236643328
//
//
// TIP: You can add more shader color properties to convert, other than those already defined in the code below.
// Example: To add a property called _MainColor, just add the following lines in their respective places in the code,
// after the existing properties.
//
// private static readonly int MainColor = Shader.PropertyToID("_MainColor");
// ConvertGammaToLinear(mat, MainColor);
// ConvertLinearToGamma(mat, MainColor);
//
//
// TIP: To remove a property that you don't need, just comment out or delete its respective lines in the code.
//
//
// Check out more Unity scripts and utilities at:
// https://gist.github.com/andreiagmu
using UnityEditor;
using UnityEngine;
namespace MirrorMirai
{
public class MaterialColorConverterInspector_RealToon : MonoBehaviour
{
//private static readonly int Color = Shader.PropertyToID("_Color");
private static readonly int MainColor = Shader.PropertyToID("_MainColor");
private static readonly int HighlightColor = Shader.PropertyToID("_HighlightColor");
private static readonly int OutlineColor = Shader.PropertyToID("_OutlineColor");
private static readonly int SelfLitColor = Shader.PropertyToID("_SelfLitColor");
private static readonly int GlossColor = Shader.PropertyToID("_GlossColor");
private static readonly int OverallShadowColor = Shader.PropertyToID("_OverallShadowColor");
private static readonly int SelfShadowRealTimeShadowColor =
Shader.PropertyToID("_SelfShadowRealTimeShadowColor");
private static readonly int ShadowTColor = Shader.PropertyToID("_ShadowTColor");
private static readonly int RimLightColor = Shader.PropertyToID("_RimLightColor");
[MenuItem("CONTEXT/Material/Convert Colors to Linear (RealToon)", false, 2050)]
private static void ConvertColorsToLinear(MenuCommand menuCommand)
{
var mat = menuCommand.context as Material;
if (mat == null)
return;
//ConvertGammaToLinear(mat, Color);
ConvertGammaToLinear(mat, MainColor);
ConvertGammaToLinear(mat, HighlightColor);
ConvertGammaToLinear(mat, OutlineColor);
ConvertGammaToLinear(mat, SelfLitColor);
ConvertGammaToLinear(mat, GlossColor);
ConvertGammaToLinear(mat, OverallShadowColor);
ConvertGammaToLinear(mat, SelfShadowRealTimeShadowColor);
ConvertGammaToLinear(mat, ShadowTColor);
ConvertGammaToLinear(mat, RimLightColor);
}
[MenuItem("CONTEXT/Material/Convert Colors to Gamma (RealToon)", false, 2050)]
private static void ConvertColorsToGamma(MenuCommand menuCommand)
{
var mat = menuCommand.context as Material;
if (mat == null)
return;
//ConvertLinearToGamma(mat, Color);
ConvertLinearToGamma(mat, MainColor);
ConvertLinearToGamma(mat, HighlightColor);
ConvertLinearToGamma(mat, OutlineColor);
ConvertLinearToGamma(mat, SelfLitColor);
ConvertLinearToGamma(mat, GlossColor);
ConvertLinearToGamma(mat, OverallShadowColor);
ConvertLinearToGamma(mat, SelfShadowRealTimeShadowColor);
ConvertLinearToGamma(mat, ShadowTColor);
ConvertLinearToGamma(mat, RimLightColor);
}
private static void ConvertGammaToLinear(Material mat, int propertyId)
{
var color = mat.GetColor(propertyId);
mat.SetColor(propertyId, new Color(
Mathf.Pow(color.r, 2.2f),
Mathf.Pow(color.g, 2.2f),
Mathf.Pow(color.b, 2.2f)));
}
private static void ConvertLinearToGamma(Material mat, int propertyId)
{
var color = mat.GetColor(propertyId);
mat.SetColor(propertyId, new Color(
Mathf.Pow(color.r, 1/2.2f),
Mathf.Pow(color.g, 1/2.2f),
Mathf.Pow(color.b, 1/2.2f)));
}
}
}
@andreiagmu
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment