Skip to content
This repository has been archived by the owner on Jan 7, 2024. It is now read-only.

Commit

Permalink
Add GUI
Browse files Browse the repository at this point in the history
- Add custom GUI
- Add single pass instancing (SPI) support
- Workaround "shadow flickering" in maps without a directional light, in some system setups.
- Limit to Additional Lights Blending in Alpha Transparent, as Premultiplied Alpha wants ADD mode and incorrectly darkened when lit by Point/Spot lights only.
  • Loading branch information
ACIIL committed Aug 8, 2020
1 parent c681a18 commit 5b5a913
Show file tree
Hide file tree
Showing 9 changed files with 822 additions and 107 deletions.
43 changes: 32 additions & 11 deletions Assets/shaders/aciil/ACLS/ACLS_CORE.cginc
Original file line number Diff line number Diff line change
Expand Up @@ -166,24 +166,28 @@
float4 tangent : TANGENT;
float2 uv : TEXCOORD0;
float4 color : COLOR;
UNITY_VERTEX_INPUT_INSTANCE_ID
};

//// test "_centroid" for MSAA workarounds
struct VertexOutput {
float4 color : COLOR0;
float4 pos : SV_POSITION;
float4 color : COLOR0;
float4 center : TEXCOORD0;
float4 worldPos : TEXCOORD1;
float3 worldPos : TEXCOORD1;
float3 wNormal : TEXCOORD2;
float4 tangent : TEXCOORD3;
float3 bitTangent : TEXCOORD4;
float3 vertexLighting : TEXCOORD5;
float3 dirGI : TEXCOORD7;
float2 uv : TEXCOORD8;
float4 screenPos : TEXCOORD9;
float3 vertTo0 : TEXCOORD10;
float3 dirGI : TEXCOORD6;
float2 uv : TEXCOORD7;
float4 screenPos : TEXCOORD8;
float3 vertTo0 : TEXCOORD9;
UNITY_FOG_COORDS(10)
UNITY_SHADOW_COORDS(11)
UNITY_FOG_COORDS(12)
// LIGHTING_COORDS(11,12)
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};


Expand All @@ -194,18 +198,24 @@
//// vert
VertexOutput vert (VertexInput v)
{
VertexOutput o = (VertexOutput)0;
o.pos = UnityObjectToClipPos( v.vertex );
UNITY_SETUP_INSTANCE_ID(v);
VertexOutput o;
// VertexOutput o = (VertexOutput)0;
UNITY_INITIALIZE_OUTPUT(VertexOutput, o);
UNITY_TRANSFER_INSTANCE_ID(v, o);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
o.worldPos = mul( unity_ObjectToWorld, v.vertex);
o.center = mul( unity_ObjectToWorld, float4(0,0,0,1));
o.wNormal = UnityObjectToWorldNormal( v.normal);
o.tangent = ( float4(UnityObjectToWorldDir(v.tangent.xyz), v.tangent.w));
o.bitTangent = ( cross( o.wNormal, o.tangent.xyz ) * v.tangent.w);
o.uv = v.uv;
o.screenPos = ComputeScreenPos(o.pos);
o.color = v.color;
// TRANSFER_VERTEX_TO_FRAGMENT(o);
UNITY_TRANSFER_SHADOW(o, 0); // o.uv1 used for lightmap variants (dont exist)
UNITY_TRANSFER_FOG(o, o.pos);
UNITY_TRANSFER_SHADOW(o, o.uv);

#ifdef VERTEXLIGHT_ON
o.vertexLighting = softShade4PointLights_Atten(
Expand Down Expand Up @@ -265,6 +275,9 @@
VertexOutput i
, bool frontFace : SV_IsFrontFace ) : SV_TARGET
{
// UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
UNITY_SETUP_INSTANCE_ID(i);

int isBackFace = !frontFace;
i.wNormal = normalize( i.wNormal);
if(isBackFace) { //// flip normal for back faces.
Expand Down Expand Up @@ -450,11 +463,19 @@
//// Light attenuation (falloff and shadows), used for mixing in shadows and effects that react to shadow
#ifdef DIRECTIONAL
//// directional lights handle UNITY_LIGHT_ATTENUATION() differently. I want to split attenuation and shadows, but both concepts fuse in directional lights
// float lightAtten = LIGHT_ATTENUATION(i);
// UNITY_LIGHT_ATTENUATION(lightAtten, i, i.worldPos.xyz);
UNITY_LIGHT_ATTENUATION_NOSHADOW(lightAtten, i, i.worldPos.xyz);
if ( !(any(_LightColor0.rgb))) /// lightAtten is random in scenes without directional lights. Using this raw is unstable so we correct when lacking light color.
{
lightAtten = 1;
}
float shadowFullTrue = lightAtten;
lightAtten = smoothstep(0, 0.6, lightAtten);
float shadowAtten = lightAtten;
#else
// float lightAtten = LIGHT_ATTENUATION(i);
// UNITY_LIGHT_ATTENUATION(lightAtten, i, i.worldPos.xyz);
UNITY_LIGHT_ATTENUATION_NOSHADOW(lightAtten, i, i.worldPos.xyz);
float shadowAtten = UNITY_SHADOW_ATTENUATION(i, i.worldPos.xyz);
float shadowFullTrue = shadowAtten;
Expand Down
17 changes: 13 additions & 4 deletions Assets/shaders/aciil/ACLS/ACLS_SHADOWCASTER.cginc
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,15 @@
float4 vertex : POSITION;
float3 normal : NORMAL;
float2 texcoord0 : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};

struct VertexOutput {
// V2F_SHADOW_CASTER;
float2 uv0 : TEXCOORD0;
float4 worldPos : TEXCOORD1;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};


Expand All @@ -47,6 +50,11 @@
out float4 opos : SV_POSITION
)
{
o = (VertexOutput)0;
UNITY_SETUP_INSTANCE_ID(v);
// UNITY_INITIALIZE_OUTPUT(VertexOutput, o);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);

o.uv0 = v.texcoord0;
opos = UnityObjectToClipPos(v.vertex);
o.worldPos = mul( unity_ObjectToWorld, v.vertex);
Expand All @@ -62,6 +70,7 @@

float4 frag(VertexOutput i, UNITY_VPOS_TYPE screenPos : VPOS) : SV_TARGET
{
UNITY_SETUP_INSTANCE_ID(i);
#ifndef NotAlpha
float2 Set_UV0 = i.uv0;
float4 clippingMaskTex = tex2D(_ClippingMask,TRANSFORM_TEX(Set_UV0, _ClippingMask));
Expand All @@ -81,11 +90,11 @@
#else //// Dither
clip(clipTest);
#endif //// Dither
return 0;
// SHADOW_CASTER_FRAGMENT(i)
// return 0;
SHADOW_CASTER_FRAGMENT(i)
#else //// NotAlpha
return 0;
// SHADOW_CASTER_FRAGMENT(i)
// return 0;
SHADOW_CASTER_FRAGMENT(i)
#endif //// NotAlpha
}
#endif // ACLS_SHADOWCASTER
51 changes: 28 additions & 23 deletions Assets/shaders/aciil/ACLS/ACLS_base_cutout.shader
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ Shader "ACiiL/toon/ACLS_Toon_Cutout" {
[Enum(OFF,0,FRONT,1,BACK,2)] _CullMode("Cull Mode", int) = 2 //OFF/FRONT/BACK
[HDR] _backFaceColorTint("Backface Color Tint",Color) = (1,1,1,1)

[Header(Testing)]
// [Header(Testing)]
// _AO_shadePosFront_Offset("Front Offset", Range(-1,1)) = 0
// _AO_shadePosBack_Offset("Back Offset", Range(-1,1)) = 0

[Header(Toon ramp)]
// [Header(Toon ramp)]
_MainTex("Main Tex", 2D) = "white" {}
[Enum(Self,0,MainTex,1)] _Use_BaseAs1st("1st shade source", Int) = 1
[NoScaleOffset] _1st_ShadeMap("--1st shade Tex", 2D) = "white" {}
[Enum(Self,0,Shade1,1,MainTex,2)] _Use_1stAs2nd("2st shade source", Int) = 1
[Enum(Self,0,Shade1,1,MainTex,2)] _Use_1stAs2nd("2nd shade source", Int) = 1
[NoScaleOffset] _2nd_ShadeMap("--2nd shade Tex", 2D) = "white" {}
[HDR] _Color("Base color", Color) = (1,1,1,1)
[HDR] _0_ShadeColor("--Foward color", Color) = (0.97,0.97,0.97,1)
Expand All @@ -26,36 +26,36 @@ Shader "ACiiL/toon/ACLS_Toon_Cutout" {
_1st2nd_Shades_Feather("--Feather: back", Range(0.0001, 1)) = 0.001
[Enum(All Light,0,Natural ambient,1)] _ToonRampLightSourceType_Backwards("Toon ramp Backface light source type:",Int) = 0
// _Set_SystemShadowsToBase("shadows mix core tone mix",Range(0,1)) = 0
[Space(18)]
// [Space(18)]
[Enum(Off,0,On,1)] _Diff_GSF_01("Toon ramp GSF effect", Int) = 0
_DiffGSF_Offset("--Offset",Range(0,2)) = 1
_DiffGSF_Feather("--Feather",Range(0.0001,2)) = 0.2

[Header(Specular Shine)]
// [Header(Specular Shine)]
[Toggle(_)] _UseSpecularSystem("Use specular effects",Int) = 0
[Enum(Unity Specular Setup,0,Add,1)] _Is_BlendAddToHiColor("Specular Blend mode", Int ) = 1
[Enum(On,0,Off,1)] _Is_BlendAddToHiColor("Energy conservation", Int ) = 1
[HDR] _SpecColor("Specular Primary Color",Color) = (.5,.5,.5,1)
_Glossiness("Smoothness",Range(0,1)) = .3
_HighColor_Tex("--Specular Setup Tex: (RGB):Tint, (A):Smoothness", 2D) = "white" {}
_highColTexSource("----Multiply with albedo", Range(0,1)) = 0
_SpecularMaskHSV("--Adjest (H)ue (S)sat (V)alue (I)ntensity",Float) = (0,0,0,1)
[HDR] _HighColor("Spec col 01", Color) = (1,1,1,1)
[Enum(Sharp,0,Soft,1,Unity,2)] _Is_SpecularToHighColor("Specular mode", Int ) = 0
_TweakHighColorOnShadow("Spec shadow mask", Range(0, 1)) = 1
_TweakHighColorOnShadow("Spec shadow mask", Range(0, 1)) = 0.5

[Header(Reflection)]
// [Header(Reflection)]
[Enum(None,0,Standard,1,Override,2)] _ENVMmode("Reflection Setup:",Int) = 0
_ENVMix("--Reflection mix",Range(0,1)) = 1
_envRoughness("--Reflection smoothness", Range(0, 1)) = 0.34
[Enum(Off,0,Smart,1,Replace,2)] _CubemapFallbackMode("Fallback mix mode:",Int) = 0
[NoScaleOffset] _CubemapFallback("--Fallback Cubemap",Cube) = "black" {}
[Space(18)]
// [Space(18)]
[Enum(Off,0,On,1)] _EnvGrazeMix("Graze Natural mix",Int) = 1
[Enum(Off,0,On,1)] _EnvGrazeRimMix("Graze RimLights Mask mix",Int) = 0
_envOnRim("Mask on rimLights", Range(0,1)) = 0.25
_envOnRimColorize("--Colorize rim lights", Range(0,1)) = 0

[Header(Rimlights)]
// [Header(Rimlights)]
[Enum(Off,0,Add,1)] _RimLight("RimLight blend",Int) = 1
[Enum(Off,0,Add,1)] _Add_Antipodean_RimLight("Ap RimLight blend",Int) = 1
_rimAlbedoMix("Mix Albedo",Range(0,1)) = 0
Expand All @@ -69,8 +69,8 @@ Shader "ACiiL/toon/ACLS_Toon_Cutout" {
[Toggle(_)] _LightDirection_MaskOn("Use light direction",Int) = 1
_Tweak_LightDirection_MaskLevel("--Mask: Light direction",Range(0, 1)) = 0

[Header(Matcap)]
[Enum(Off,0,On,1)] _MatCap("Use MatCap", Int ) = 0
// [Header(Matcap)]
[Toggle(_)] _MatCap("Use MatCap", Int ) = 0
[HDR] _MatCapColMult ("Diffuse color", Color) = (1,1,1,1)
[NoScaleOffset] _MatCapTexMult ("Diffuse matcap", 2D) = "black" {}
[HDR] _MatCapColAdd ("Specular color", Color) = (1,1,1,1)
Expand All @@ -79,28 +79,28 @@ Shader "ACiiL/toon/ACLS_Toon_Cutout" {
[NoScaleOffset] _MatCapTexEmis ("Emissive matcap", 2D) = "black" {}
[Toggle(_)] _Is_NormalMapForMatCap("Use matcap normalMap ", Float ) = 0
_NormalMapForMatCap("--MatCap normalMap", 2D) = "bump" {}
[Space(9)]
// [Space(9)]
_Tweak_MatCapUV("Zoom matCap", Range(-0.5, 0.5)) = 0
_Rotate_MatCapUV("Rotate matCap", Range(-1, 1)) = 0
_Rotate_NormalMapForMatCapUV("Rotate normalMap matCap", Range(-1, 1)) = 0
_TweakMatCapOnShadow("Specular shadow mask", Range(0, 1)) = 0
_Set_MatcapMask("Diffuse matcap mask (G)", 2D) = "white" {}
_Tweak_MatcapMaskLevel("--Tweak mask", Range(-1, 1)) = 0

[Header(Emission)]
// [Header(Emission)]
[HDR] _Emissive_Color("Emissive color", Color) = (0,0,0,1)
[HDR] _EmissiveProportional_Color("Emissive Proportional color", Color) = (0,0,0,1)
_Emissive_Tex("Emissive mask (G)", 2D) = "white" {}
_EmissionColorTex("--Emissive color (RGB)", 2D) = "white" {}

[Header(Lighting Behaviour)]
// [Header(Lighting Behaviour)]
_directLightIntensity("Direct light intensity",Range(0,1)) = 1
[Enum(HDR,0,Limit,1)] _forceLightClamp("Force scene Lights Clamp",Int) = 0
[Enum(Real ADD,0,Safe MAX,4)] _BlendOp("Additional lights blending", Float) = 4
_shadowCastMin_black("Dynamic Shadow Removal",Range(0.0,1.0)) = 0.1
[NoScaleOffset] _DynamicShadowMask("Dynamic Shadow mask",2D) = "black" {}

[Header(Light Map Shift Masks)]
// [Header(Light Map Shift Masks)]
[Enum(Off,0,On,1,Use Vertex Color Red,2)] _UseLightMap("Light Map mode", Int) = 0
_LightMap("Light map mask (G)", 2D) = "gray" {}
_lightMap_remapArr("--Range: (Z):LOW, (W):HIGH", Vector) = (-1,-1,0,1)
Expand All @@ -110,13 +110,13 @@ Shader "ACiiL/toon/ACLS_Toon_Cutout" {
[NoScaleOffset] _Set_1st_ShadePosition("Forward Toon Shadows (G)", 2D) = "white" {}
[NoScaleOffset] _Set_2nd_ShadePosition("Backward Toon Shadow (G)", 2D) = "white" {}

[Header(Ambient Occlusion Maps)]
// [Header(Ambient Occlusion Maps)]
_Set_HighColorMask("Specular Mask (G)", 2D) = "white" {}
_Tweak_HighColorMaskLevel("--Tweak Mask", Range(-1, 1)) = 0
_Set_RimLightMask("RimLight Mask (G)", 2D) = "white" {}
_Tweak_RimLightMaskLevel("--Tweak Mask", Range(-1, 1)) = 0

[Header(Normal map)]
// [Header(Normal map)]
_NormalMap("NormalMap", 2D) = "bump" {}
_DetailNormalMapScale01("--Detail scale", Range(0,1)) = 0
_NormalMapDetail("----Detail Normal map", 2d) = "bump" {}
Expand All @@ -126,20 +126,20 @@ Shader "ACiiL/toon/ACLS_Toon_Cutout" {
[Toggle(_)] _Is_NormalMapToRimLight("On Rims",Int) = 1
[Toggle(_)] _Is_NormaMapToEnv("On Reflection",Int) = 1

[Header(Alpha mask)]
[Space(18)]
// [Header(Alpha mask)]
// [Space(18)]
// [Enum(Off,0,On,1)] _ZWrite("Z Write Depth sorting (Recommend off)",Int) = 1
[Enum(Clipping Mask,0,Main Texture,1)] _IsBaseMapAlphaAsClippingMask("Alpha mask source",Int) = 1
_ClippingMask("--Clipping mask (G)",2D) = "white" {}
[Toggle(_)] _Inverse_Clipping("Inverse clipping", Float ) = 0
_Clipping_Level("Clipping level", Range(0, 1)) = 0.5
_Tweak_transparency("--Tweak transparency", Range(-1, 1)) = 0
[Space(18)]
// [Space(18)]
// [Toggle(_)] _UseSpecAlpha("Use specular Alpha",Float) = 0
[Toggle(_)] _DetachShadowClipping("Separate Shadow Clipping Level",Int) = 0
_Clipping_Level_Shadow("--Shadow Clip", Range(0, 1)) = 1

[Header(Stencil Helpers. Requires Queue Order Edits)]
// [Header(Stencil Helpers. Requires Queue Order Edits)]
_Stencil("Stencil ID [0;255]", Range(0,255)) = 0
[Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp("--Comparison", Int) = 0
[Enum(UnityEngine.Rendering.StencilOp)] _StencilOp("--Pass", Int) = 0
Expand Down Expand Up @@ -182,7 +182,9 @@ Shader "ACiiL/toon/ACLS_Toon_Cutout" {
#include "UnityCG.cginc"
#include "AutoLight.cginc"
#include "Lighting.cginc"
#pragma multi_compile_fwdbase_fullshadows
// #pragma multi_compile_fwdbase_fullshadows
#pragma multi_compile_fwdbase
#pragma multi_compile_instancing
#pragma multi_compile_fog
#pragma multi_compile UNITY_PASS_FORWARDBASE
#pragma multi_compile _ UNITY_HDR_ON
Expand Down Expand Up @@ -218,6 +220,7 @@ Shader "ACiiL/toon/ACLS_Toon_Cutout" {
#include "AutoLight.cginc"
#include "Lighting.cginc"
#pragma multi_compile_fwdadd_fullshadows
#pragma multi_compile_instancing
#pragma multi_compile_fog
#pragma multi_compile UNITY_PASS_FORWARDADD
#pragma multi_compile _ UNITY_HDR_ON
Expand All @@ -243,10 +246,12 @@ Shader "ACiiL/toon/ACLS_Toon_Cutout" {
#include "UnityCG.cginc"
#include "Lighting.cginc"
#pragma multi_compile_shadowcaster
#pragma multi_compile_instancing
#define IsClip
#include "ACLS_ShadowCaster.cginc"
ENDCG
}
}
FallBack "Legacy Shaders/VertexLit"
CustomEditor "ACLSInspector"
}
Loading

0 comments on commit 5b5a913

Please sign in to comment.