Skip to content

Commit

Permalink
Add basic empty shader generation
Browse files Browse the repository at this point in the history
  • Loading branch information
Delt06 committed Jul 6, 2022
1 parent 3aed7a5 commit 123e3c3
Show file tree
Hide file tree
Showing 16 changed files with 431 additions and 5 deletions.
8 changes: 8 additions & 0 deletions Assets/Custom.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 16 additions & 0 deletions Assets/Custom/My Toon Shader.asset
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 9d6cd861481d4b55b3652478146d0b38, type: 3}
m_Name: My Toon Shader
m_EditorClassIdentifier:
SourceShader: {fileID: 4800000, guid: 849dc4ff793a3f943ad21a3b6ee26456, type: 3}
Shader: {fileID: 4800000, guid: 2e0a54ed13173b14898a9bf0e10092da, type: 3}
8 changes: 8 additions & 0 deletions Assets/Custom/My Toon Shader.asset.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

261 changes: 261 additions & 0 deletions Assets/Custom/My Toon Shader.shader
Original file line number Diff line number Diff line change
@@ -0,0 +1,261 @@
Shader "DELTation/Custom/My Toon Shader"
{
Properties
{
[MainTexture]
_BaseMap ("Texture", 2D) = "white" {}
[MainColor]
_BaseColor ("Tint", Color) = (1.0, 1.0, 1.0)
_ShadowTint ("Shadow Tint", Color) = (0.0, 0.0, 0.0, 1.0)
[Toggle(_PURE_SHADOW_COLOR)]
_PureShadowColor ("Pure Shadow Color", Float) = 0

[Toggle(_RAMP_MAP)]
_UseRampMap("Use Ramp Texture", Float) = 0
[NoScaleOffset]
_RampMap ("Ramp Texture", 2D) = "white" {}
[Toggle(_RAMP_TRIPLE)] _RampTriple ("Triple Ramp", Float) = 0
_Ramp0 ("Ramp Threshold 0", Range(-1, 1)) = 0
_Ramp1 ("Ramp Threshold 1", Range(-1, 1)) = 0.5
_RampSmoothness ("Ramp Smoothness", Range(0, 2)) = 0.005

[NoScaleOffset]
_BumpMap("Normal Map", 2D) = "bump" {}

[Toggle(_EMISSION)] _Emission ("Emission", Float) = 0
[HDR] _EmissionColor ("Emission Color", Color) = (0.0, 0.0, 0.0, 0.0)

[Toggle(_FRESNEL)] _Fresnel ("Rim", Float) = 0
_FresnelThickness ("Rim Thickness", Range(0, 1)) = 0.45
_FresnelSmoothness ("Rim Smoothness", Range(0, 1)) = 0.1
[HDR] _FresnelColor ("Rim Color", Color) = (1.0, 1.0, 1.0, 1.0)

[Toggle(_SPECULAR)] _Specular ("Specular", Float) = 0
[Toggle(_ANISO_SPECULAR)] _AnisoSpecular("Anisotropic Specular", Float) = 0
_SpecularThreshold ("Specular Threshold", Range(0, 1)) = 0.8
_SpecularExponent ("Specular Exponent", Range(0, 1000)) = 200
_SpecularSmoothness ("Specular Smoothness", Range(0, 1)) = 0.025
[HDR] _SpecularColor ("Specular Color", Color) = (1.0, 1.0, 1.0, 1.0)

[Toggle(_FOG)] _Fog ("Fog", Float) = 1
[Toggle(_ADDITIONAL_LIGHTS_ENABLED)] _AdditionalLights ("Additonal Lights", Float) = 1
[Toggle(_ADDITIONAL_LIGHTS_SPECULAR)] _AdditionalLightsSpecular ("Additonal Lights Specular", Float) = 0
[Toggle(_ENVIRONMENT_LIGHTING_ENABLED)] _EnvironmentLightingEnabled ("Environment Lighting", Float) = 1
[Toggle(_SHADOW_MASK)] _ShadowMask ("Baked Shadows", Float) = 0
[Toggle(_VERTEX_COLOR)] _VertexColor ("Vertex Color", Float) = 0

[Slider(0, 1)]
_Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5

// Blending state
[Toggle] _ZWrite("Z Write", Float) = 1.0
[Enum(UnityEngine.Rendering.CullMode)] _Cull("Culling", Float) = 0

[HideInInspector] _Surface("__surface", Float) = 0.0
[HideInInspector] _Blend("__blend", Float) = 0.0
[HideInInspector] _SrcBlend("__src", Float) = 1.0
[HideInInspector] _DstBlend("__dst", Float) = 0.0
[Toggle] _AlphaClip("Alpha Clipping", Float) = 0.0

// Editmode props
[HideInInspector] _QueueOffset("Queue Offset", Float) = 0.0

[Toggle(_REFLECTIONS)] _Reflections("Reflections", Float) = 0.0
[Toggle(_REFLECTION_PROBES)] _ReflectionProbes("Reflection Probes", Float) = 0.0
_ReflectionSmoothness ("Smoothness", Range(0, 1)) = 0.5
_ReflectionBlend ("Blend", Range(0, 1)) = 0.5

}
SubShader
{
Tags{"RenderType" = "Opaque" "RenderPipeline" = "UniversalRenderPipeline" "IgnoreProjector" = "True"}
LOD 300

Pass
{
Name "ForwardLit"
Tags{"LightMode" = "UniversalForward"}

Blend[_SrcBlend][_DstBlend]
ZWrite[_ZWrite]
Cull[_Cull]

HLSLPROGRAM

#pragma vertex vert
#pragma fragment frag

#pragma shader_feature_local _NORMALMAP
#pragma shader_feature_local _FOG
#pragma shader_feature_local _VERTEX_COLOR
#pragma shader_feature_local _ADDITIONAL_LIGHTS_ENABLED
#pragma shader_feature_local _SPECULAR
#pragma shader_feature_local _ANISO_SPECULAR
#pragma shader_feature_local _ADDITIONAL_LIGHTS_SPECULAR
#pragma shader_feature_local _ENVIRONMENT_LIGHTING_ENABLED
#pragma shader_feature_local _SHADOW_MASK

#pragma shader_feature_local_fragment _FRESNEL
#pragma shader_feature_local_fragment _EMISSION
#pragma shader_feature_local_fragment _RAMP_TRIPLE
#pragma shader_feature_local_fragment _RAMP_MAP
#pragma shader_feature_local_fragment _PURE_SHADOW_COLOR

#pragma shader_feature_local_fragment _ALPHATEST_ON
#pragma shader_feature_local_fragment _ALPHAPREMULTIPLY_ON

#pragma shader_feature_local_fragment _REFLECTIONS
#pragma shader_feature_local_fragment _REFLECTION_PROBES

#pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
#pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS
#pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS
#pragma multi_compile_fragment _ _SHADOWS_SOFT
#pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION
#pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING
#pragma multi_compile_fragment _ _REFLECTION_PROBE_BOX_PROJECTION

#pragma multi_compile _ LIGHTMAP_SHADOW_MIXING
#pragma multi_compile _ SHADOWS_SHADOWMASK


// Unity
#pragma multi_compile _ DIRLIGHTMAP_COMBINED
#pragma multi_compile _ LIGHTMAP_ON
#pragma multi_compile_fog

#pragma multi_compile_instancing


#if defined(_ADDITIONAL_LIGHTS) && defined(_ADDITIONAL_LIGHTS_ENABLED)
#define TOON_ADDITIONAL_LIGHTS
#endif

#if defined(_ADDITIONAL_LIGHTS_VERTEX) && defined(_ADDITIONAL_LIGHTS_ENABLED)
#define TOON_ADDITIONAL_LIGHTS_VERTEX
#endif

#if defined(_ADDITIONAL_LIGHTS_SPECULAR) && defined(_SPECULAR)
#define TOON_ADDITIONAL_LIGHTS_SPECULAR
#endif

#include "Packages/com.deltation.toon-shader/Assets/DELTation/ToonShader/Shaders/ToonShaderInput.hlsl"
#include "Packages/com.deltation.toon-shader/Assets/DELTation/ToonShader/Shaders/ToonShaderForwardPass_AppData.hlsl"
#include "Packages/com.deltation.toon-shader/Assets/DELTation/ToonShader/Shaders/ToonShaderForwardPass.hlsl"

ENDHLSL
}

Pass
{
Name "ShadowCaster"
Tags{"LightMode" = "ShadowCaster"}

ZWrite On
ZTest LEqual
ColorMask 0
Cull[_Cull]

HLSLPROGRAM
#pragma target 2.0

#pragma shader_feature_local_fragment _ALPHATEST_ON

#pragma vertex ShadowPassVertex
#pragma fragment ShadowPassFragment

#pragma multi_compile_instancing

#include "Packages/com.deltation.toon-shader/Assets/DELTation/ToonShader/Shaders/ToonShaderInput.hlsl"
#include "Packages/com.deltation.toon-shader/Assets/DELTation/ToonShader/Shaders/ToonShaderShadowCasterPass.hlsl"

ENDHLSL
}

Pass
{
Name "Meta"
Tags{"LightMode" = "Meta"}

Cull Off

HLSLPROGRAM

#pragma vertex MetaPassVertex
#pragma fragment MetaPassFragment

#pragma shader_feature_local _NORMALMAP
#pragma shader_feature_local _VERTEX_COLOR
#pragma shader_feature_local _ADDITIONAL_LIGHTS_ENABLED
#pragma shader_feature_local _SPECULAR
#pragma shader_feature_local _ANISO_SPECULAR
#pragma shader_feature_local _ADDITIONAL_LIGHTS_SPECULAR
#pragma shader_feature_local _ENVIRONMENT_LIGHTING_ENABLED

#pragma shader_feature_local_fragment _SURFACE_TYPE_TRANSPARENT
#pragma shader_feature_local_fragment _FRESNEL
#pragma shader_feature_local_fragment _EMISSION
#pragma shader_feature_local_fragment _RAMP_TRIPLE
#pragma multi_compile_local_fragment _ _RAMP_MAP _PURE_SHADOW_COLOR

#pragma shader_feature_local_fragment _ALPHATEST_ON

#include "Packages/com.deltation.toon-shader/Assets/DELTation/ToonShader/Shaders/ToonShaderInput.hlsl"
#include "Packages/com.deltation.toon-shader/Assets/DELTation/ToonShader/Shaders/ToonShaderMetaPass.hlsl"

ENDHLSL
}

Pass
{
Name "DepthOnly"
Tags{"LightMode" = "DepthOnly"}

ZWrite On
ColorMask 0
Cull[_Cull]

HLSLPROGRAM

#pragma target 2.0

#pragma shader_feature_local_fragment _ALPHATEST_ON

#pragma vertex DepthOnlyVertex
#pragma fragment DepthOnlyFragment

#pragma multi_compile_instancing


#include "Packages/com.deltation.toon-shader/Assets/DELTation/ToonShader/Shaders/ToonShaderInput.hlsl"
#include "Packages/com.deltation.toon-shader/Assets/DELTation/ToonShader/Shaders/ToonShaderDepthOnlyPass.hlsl"

ENDHLSL
}

Pass
{
Name "DepthNormals"
Tags{"LightMode" = "DepthNormals"}

ZWrite On
Cull[_Cull]

HLSLPROGRAM
#pragma target 2.0

#pragma shader_feature_local_fragment _ALPHATEST_ON

#pragma vertex DepthNormalsVertex
#pragma fragment DepthNormalsFragment

#pragma multi_compile_instancing

#include "Packages/com.deltation.toon-shader/Assets/DELTation/ToonShader/Shaders/ToonShaderInput.hlsl"
#include "Packages/com.deltation.toon-shader/Assets/DELTation/ToonShader/Shaders/ToonShaderDepthNormalsPass.hlsl"
ENDHLSL
}
}

CustomEditor "DELTation.ToonShader.Editor.ToonShaderEditor"
}
10 changes: 10 additions & 0 deletions Assets/Custom/My Toon Shader.shader.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
using System;
using System.IO;
using DELTation.ToonShader.Custom;
using UnityEditor;
using UnityEngine;

namespace DELTation.ToonShader.Editor.Custom
{
[CustomEditor(typeof(CustomToonShader))]
public class CustomToonShaderEditor : UnityEditor.Editor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI();

var customToonShader = (CustomToonShader)target;

EditorGUI.BeginDisabledGroup(true);
EditorGUILayout.ObjectField(nameof(customToonShader.Shader), customToonShader.Shader, typeof(Shader), false
);
EditorGUI.EndDisabledGroup();


if (GUILayout.Button("Generate"))
GenerateShaderFile(customToonShader);
}

private void GenerateShaderFile(CustomToonShader customToonShader)
{
var path = AssetDatabase.GetAssetPath(customToonShader);
var assetName = Path.GetFileNameWithoutExtension(path);
var directoryName = Path.GetDirectoryName(path)!;

var sourceShaderCode =
GenerateShaderSource(customToonShader, assetName);
var shaderAssetPath = customToonShader.Shader != null
? AssetDatabase.GetAssetPath(customToonShader.Shader)
: Path.Combine(directoryName, assetName + ".shader");
File.WriteAllText(Path.GetFullPath(shaderAssetPath), sourceShaderCode);
AssetDatabase.ImportAsset(shaderAssetPath);

var newShader = AssetDatabase.LoadAssetAtPath<Shader>(shaderAssetPath);
customToonShader.Shader = newShader;
EditorUtility.SetDirty(newShader);
EditorUtility.SetDirty(customToonShader);
AssetDatabase.SaveAssets();
}

private static string GenerateShaderSource(CustomToonShader customToonShader, string assetName)
{
var sourceShaderCodeLines = GetSourceShaderCode(customToonShader.SourceShader);
sourceShaderCodeLines[0] = $"Shader \"DELTation/Custom/{assetName}\"";
var sourceShaderCode = string.Join(Environment.NewLine, sourceShaderCodeLines);
return sourceShaderCode;
}

private static string[] GetSourceShaderCode(Shader sourceShader)
{
var path = AssetDatabase.GetAssetPath(sourceShader);
var fullPath = Path.GetFullPath(path);
return File.ReadAllLines(fullPath);
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
{
"name": "DELTation.ToonShader.Editor",
"rootNamespace": "",
"references": [],
"references": [
"GUID:ec5e0ba576b362a4e8e2dfc93e5426fc"
],
"includePlatforms": [
"Editor"
],
Expand Down
Loading

0 comments on commit 123e3c3

Please sign in to comment.