[Add] All in one shader
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
|
||||
namespace AllIn13DShader
|
||||
{
|
||||
public class NormalMapEffectDrawer : AbstractEffectDrawer
|
||||
{
|
||||
private int mainTexPropertyIndex;
|
||||
private EffectProperty effectPropNormalMap;
|
||||
private EffectProperty effectPropNormalStrength;
|
||||
|
||||
private bool invertNormalMapDirection = false;
|
||||
private float normalCreateStrength = 2.0f;
|
||||
private float normalCreateSmooth = 1.0f;
|
||||
|
||||
public NormalMapEffectDrawer(AllIn13DShaderInspectorReferences references,
|
||||
PropertiesConfig propertiesConfig) : base(references, propertiesConfig)
|
||||
{
|
||||
drawerID = Constants.NORMAL_MAP_EFFECT_DRAWER_ID;
|
||||
|
||||
effectConfig = propertiesConfig.FindEffectConfigByID("NORMAL_MAP");
|
||||
|
||||
mainTexPropertyIndex = FindPropertyIndex("_MainTex");
|
||||
effectPropNormalMap = effectConfig.FindEffectPropertyByName("_NormalMap");
|
||||
effectPropNormalStrength = effectConfig.FindEffectPropertyByName("_NormalStrength");
|
||||
}
|
||||
|
||||
protected override void DrawProperties()
|
||||
{
|
||||
DrawProperty(effectPropNormalMap);
|
||||
DrawProperty(effectPropNormalStrength);
|
||||
|
||||
EditorUtils.DrawLine(Color.grey, 1, 3);
|
||||
EditorGUILayout.LabelField("Normal Map Creation", EditorStyles.boldLabel);
|
||||
|
||||
EditorUtils.TextureEditorFloatParameter("Strength", ref normalCreateStrength, 0.1f, 8.0f, 2.0f);
|
||||
EditorUtils.TextureEditorFloatParameter("Smooth", ref normalCreateSmooth, 0.0f, 5.0f, 1.0f);
|
||||
invertNormalMapDirection = EditorGUILayout.Toggle("Invert Normal Direction", invertNormalMapDirection);
|
||||
|
||||
GUILayout.Space(2);
|
||||
if(GUILayout.Button("Create Normal Map Texture")) CreateNormalMap();
|
||||
}
|
||||
|
||||
private void CreateNormalMap()
|
||||
{
|
||||
Texture2D sourceTexture = references.matProperties[mainTexPropertyIndex].textureValue as Texture2D;
|
||||
if(sourceTexture == null)
|
||||
{
|
||||
EditorUtility.DisplayDialog("Error", "No Main Tex found. Please assign it first", "OK");
|
||||
return;
|
||||
}
|
||||
EditorUtils.SetTextureReadWrite(AssetDatabase.GetAssetPath(sourceTexture), true);
|
||||
NormalMapCreatorTool normalMapCreatorTool = new NormalMapCreatorTool
|
||||
{
|
||||
targetNormalImage = sourceTexture,
|
||||
normalStrength = normalCreateStrength,
|
||||
normalSmoothing = Mathf.RoundToInt(normalCreateSmooth),
|
||||
isComputingNormals = 1
|
||||
};
|
||||
Texture2D normalMapToSave = normalMapCreatorTool.CreateNormalMap(invertNormalMapDirection);
|
||||
Texture savedTex = EditorUtils.SaveTextureAsPNG(GlobalConfiguration.instance.NormalMapSavePath, "NormalMap", "Normal Map", normalMapToSave, FilterMode.Bilinear, TextureImporterType.NormalMap, TextureWrapMode.Repeat);
|
||||
normalMapCreatorTool.isComputingNormals = 0;
|
||||
|
||||
references.matProperties[effectPropNormalMap.propertyIndex].textureValue = savedTex;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user