文件结构优化
This commit is contained in:
114
Assets/VFX/Simple Toon/Shaders/STCore.cginc
Normal file
114
Assets/VFX/Simple Toon/Shaders/STCore.cginc
Normal file
@@ -0,0 +1,114 @@
|
||||
#ifndef STCORE_INCLUDED
|
||||
#define STCORE_INCLUDED
|
||||
|
||||
#include "STFunctions.cginc"
|
||||
|
||||
sampler2D _MainTex;
|
||||
float4 _MainTex_ST;
|
||||
|
||||
float4 _Color;
|
||||
float4 _DarkColor;
|
||||
float _AmbientCol;
|
||||
float _ColIntense;
|
||||
float _ColBright;
|
||||
|
||||
bool _Segmented;
|
||||
float _Steps;
|
||||
float _StpSmooth;
|
||||
float _Offset;
|
||||
|
||||
bool _Clipped;
|
||||
float _MinLight;
|
||||
float _MaxLight;
|
||||
float _Lumin;
|
||||
|
||||
float _MaxAtten;
|
||||
|
||||
float4 _ShnColor;
|
||||
bool _ShnOverlap;
|
||||
float _ShnIntense;
|
||||
float _ShnRange;
|
||||
float _ShnSmooth;
|
||||
|
||||
float Toon (float dot, fixed atten)
|
||||
{
|
||||
float offset = clamp(_Offset, -1, 1);
|
||||
float delta = _MaxLight - _MinLight;
|
||||
|
||||
//intense
|
||||
float ints_pls = dot + offset;
|
||||
float ints_max = 1.0 + offset;
|
||||
float intense = clamp01(ints_pls / ints_max);
|
||||
|
||||
//lit
|
||||
float step = 1.0 / floor(_Steps);
|
||||
int lit_num = ceil(intense / step);
|
||||
float lit = lit_num * step;
|
||||
|
||||
//smooth
|
||||
float reduce_v = _Offset - 1.0;
|
||||
float reduce_res = 1.0 - clamp01(reduce_v / 0.1); //!v offset plus
|
||||
float reduce = lit_num == 1 ? reduce_res : 1;
|
||||
|
||||
float smth_start = lit - step;
|
||||
float smth_end = smth_start + step * _StpSmooth;
|
||||
|
||||
float smth_lrp = invLerp01(smth_end, smth_start, intense);
|
||||
float smth_stp = smoothstep(smth_end, smth_start, intense, 0.);
|
||||
|
||||
float smooth_v = smoothlerp(smth_stp, smth_lrp, _StpSmooth);
|
||||
float smooth = clamp01(lit - smooth_v * reduce * step);
|
||||
|
||||
//shadow
|
||||
float atten_inv = clamp(atten, 1.0 - _MaxAtten, 1);
|
||||
float dimLit = smooth * atten_inv;
|
||||
float dim_dlt = dimLit - _MinLight;
|
||||
|
||||
//luminocity
|
||||
float lumLight = _MaxLight + _Lumin;
|
||||
float lum_dlt = lumLight - _MinLight;
|
||||
|
||||
//clipped
|
||||
float litd_clmp = clamp01(dim_dlt);
|
||||
float clip_cf = litd_clmp / delta;
|
||||
|
||||
float clip_uncl = _MinLight + clip_cf * lum_dlt;
|
||||
float clip_v = clamp(clip_uncl, _MinLight, lumLight);
|
||||
|
||||
//relative limits
|
||||
float lerp_v = lum_dlt * dimLit;
|
||||
float relate_v = _MinLight + lerp_v;
|
||||
|
||||
//result
|
||||
float result = _Clipped * clip_v;
|
||||
result += !_Clipped * relate_v;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
//post effects
|
||||
|
||||
void PostShine (inout float4 col, float dot, float atten)
|
||||
{
|
||||
float pos = abs(dot - 1.0);
|
||||
float len = _ShnRange * 2;
|
||||
|
||||
float smth_inv = 1.0 - _ShnSmooth;
|
||||
float smth_end = len * smth_inv;
|
||||
|
||||
float shine = posz(len - pos);
|
||||
float smooth = smoothstep(len, smth_end, pos, 1.);
|
||||
float dim = 1.0 - _MaxAtten * rev(atten) * rev(_ShnOverlap);
|
||||
|
||||
float blend = _ShnIntense * shine * smooth * dim;
|
||||
col = ColorBlend(col, _ShnColor, blend);
|
||||
}
|
||||
|
||||
float4 PostEffects (float4 col, float toon, float atten, float NdotL, float NdotH, float VdotN, float FdotV)
|
||||
{
|
||||
PostShine(col, NdotL, atten);
|
||||
|
||||
return col;
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user