246 lines
9.2 KiB
HLSL
246 lines
9.2 KiB
HLSL
#ifndef LIL_PASS_FORWARD_LITE_INCLUDED
|
|
#define LIL_PASS_FORWARD_LITE_INCLUDED
|
|
|
|
#include "lil_common.hlsl"
|
|
#include "lil_common_appdata.hlsl"
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// Structure
|
|
#if !defined(LIL_CUSTOM_V2F_MEMBER)
|
|
#define LIL_CUSTOM_V2F_MEMBER(id0,id1,id2,id3,id4,id5,id6,id7)
|
|
#endif
|
|
|
|
#if defined(LIL_OUTLINE)
|
|
#define LIL_V2F_POSITION_CS
|
|
#define LIL_V2F_PACKED_TEXCOORD01
|
|
#define LIL_V2F_PACKED_TEXCOORD23
|
|
#if defined(LIL_V2F_FORCE_POSITION_WS) || defined(LIL_PASS_FORWARDADD) || !defined(LIL_BRP) || defined(LIL_USE_LPPV)
|
|
#define LIL_V2F_POSITION_WS
|
|
#endif
|
|
#if defined(LIL_V2F_FORCE_NORMAL) || defined(LIL_USE_LIGHTMAP) && defined(LIL_LIGHTMODE_SUBTRACTIVE) || defined(LIL_HDRP)
|
|
#define LIL_V2F_NORMAL_WS
|
|
#endif
|
|
#if !defined(LIL_PASS_FORWARDADD)
|
|
#define LIL_V2F_LIGHTCOLOR
|
|
#endif
|
|
#define LIL_V2F_VERTEXLIGHT_FOG
|
|
|
|
struct v2f
|
|
{
|
|
float4 positionCS : SV_POSITION;
|
|
float4 uv01 : TEXCOORD0;
|
|
float4 uv23 : TEXCOORD1;
|
|
#if defined(LIL_V2F_POSITION_WS)
|
|
float3 positionWS : TEXCOORD2;
|
|
#endif
|
|
#if defined(LIL_V2F_NORMAL_WS)
|
|
LIL_VECTOR_INTERPOLATION float3 normalWS : TEXCOORD3;
|
|
#endif
|
|
LIL_LIGHTCOLOR_COORDS(4)
|
|
LIL_VERTEXLIGHT_FOG_COORDS(5)
|
|
LIL_CUSTOM_V2F_MEMBER(6,7,8,9,10,11,12,13)
|
|
LIL_VERTEX_INPUT_INSTANCE_ID
|
|
LIL_VERTEX_OUTPUT_STEREO
|
|
};
|
|
#else
|
|
#define LIL_V2F_POSITION_WS
|
|
#define LIL_V2F_POSITION_CS
|
|
#define LIL_V2F_PACKED_TEXCOORD01
|
|
#define LIL_V2F_PACKED_TEXCOORD23
|
|
#define LIL_V2F_NORMAL_WS
|
|
#define LIL_V2F_UVMAT
|
|
#if !defined(LIL_PASS_FORWARDADD)
|
|
#define LIL_V2F_LIGHTCOLOR
|
|
#define LIL_V2F_LIGHTDIRECTION
|
|
#define LIL_V2F_INDLIGHTCOLOR
|
|
#endif
|
|
#define LIL_V2F_VERTEXLIGHT_FOG
|
|
|
|
struct v2f
|
|
{
|
|
float4 positionCS : SV_POSITION;
|
|
float4 uv01 : TEXCOORD0;
|
|
float4 uv23 : TEXCOORD1;
|
|
float2 uvMat : TEXCOORD2;
|
|
LIL_VECTOR_INTERPOLATION float3 normalWS : TEXCOORD3;
|
|
float3 positionWS : TEXCOORD4;
|
|
LIL_LIGHTCOLOR_COORDS(5)
|
|
LIL_LIGHTDIRECTION_COORDS(6)
|
|
LIL_INDLIGHTCOLOR_COORDS(7)
|
|
LIL_VERTEXLIGHT_FOG_COORDS(8)
|
|
LIL_CUSTOM_V2F_MEMBER(9,10,11,12,13,14,15,16)
|
|
LIL_VERTEX_INPUT_INSTANCE_ID
|
|
LIL_VERTEX_OUTPUT_STEREO
|
|
};
|
|
#endif
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// Shader
|
|
#include "lil_common_vert.hlsl"
|
|
#include "lil_common_frag.hlsl"
|
|
|
|
float4 frag(v2f input LIL_VFACE(facing)) : SV_Target
|
|
{
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// Initialize
|
|
LIL_SETUP_INSTANCE_ID(input);
|
|
LIL_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
|
|
lilFragData fd = lilInitFragData();
|
|
|
|
BEFORE_UNPACK_V2F
|
|
OVERRIDE_UNPACK_V2F
|
|
LIL_COPY_VFACE(fd.facing);
|
|
LIL_GET_HDRPDATA(input,fd);
|
|
#if defined(LIL_V2F_SHADOW) || defined(LIL_PASS_FORWARDADD)
|
|
LIL_LIGHT_ATTENUATION(fd.attenuation, input);
|
|
#endif
|
|
LIL_GET_LIGHTING_DATA(input,fd);
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// View Direction
|
|
#if defined(LIL_V2F_POSITION_WS)
|
|
LIL_GET_POSITION_WS_DATA(input,fd);
|
|
#endif
|
|
#if defined(LIL_V2F_NORMAL_WS) && defined(LIL_V2F_TANGENT_WS)
|
|
LIL_GET_TBN_DATA(input,fd);
|
|
#endif
|
|
#if defined(LIL_V2F_NORMAL_WS) && defined(LIL_V2F_TANGENT_WS) && defined(LIL_V2F_POSITION_WS)
|
|
LIL_GET_PARALLAX_DATA(input,fd);
|
|
#endif
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// Apply Matelial & Lighting
|
|
#if defined(LIL_OUTLINE)
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// UV
|
|
BEFORE_ANIMATE_OUTLINE_UV
|
|
OVERRIDE_ANIMATE_OUTLINE_UV
|
|
BEFORE_CALC_DDX_DDY
|
|
OVERRIDE_CALC_DDX_DDY
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// Main Color
|
|
BEFORE_OUTLINE_COLOR
|
|
OVERRIDE_OUTLINE_COLOR
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// Alpha
|
|
#if LIL_RENDER == 0
|
|
// Opaque
|
|
fd.col.a = 1.0;
|
|
#elif LIL_RENDER == 1
|
|
// Cutout
|
|
clip(fd.col.a - _Cutoff);
|
|
#elif LIL_RENDER == 2
|
|
// Transparent
|
|
clip(fd.col.a - _Cutoff);
|
|
#endif
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// Copy
|
|
fd.albedo = fd.col.rgb;
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// Lighting
|
|
#if defined(LIL_PASS_FORWARDADD)
|
|
fd.col.rgb = fd.col.rgb * fd.lightColor * _OutlineEnableLighting;
|
|
#else
|
|
fd.col.rgb = lerp(fd.col.rgb, fd.col.rgb * min(fd.lightColor + fd.addLightColor, _LightMaxLimit), _OutlineEnableLighting);
|
|
#endif
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// Premultiply
|
|
LIL_PREMULTIPLY
|
|
#else
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// UV
|
|
BEFORE_ANIMATE_MAIN_UV
|
|
OVERRIDE_ANIMATE_MAIN_UV
|
|
BEFORE_CALC_DDX_DDY
|
|
OVERRIDE_CALC_DDX_DDY
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// Main Color
|
|
BEFORE_MAIN
|
|
OVERRIDE_MAIN
|
|
fd.triMask = LIL_SAMPLE_2D(_TriMask, sampler_MainTex, fd.uvMain);
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// Alpha
|
|
#if LIL_RENDER == 0
|
|
// Opaque
|
|
fd.col.a = 1.0;
|
|
#elif LIL_RENDER == 1
|
|
// Cutout
|
|
clip(fd.col.a - _Cutoff);
|
|
#elif LIL_RENDER == 2
|
|
// Transparent
|
|
clip(fd.col.a - _Cutoff);
|
|
#endif
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// Normal
|
|
fd.N = normalize(input.normalWS);
|
|
fd.N = fd.facing < (_FlipNormal-1.0) ? -fd.N : fd.N;
|
|
fd.ln = dot(fd.L, fd.N);
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// MatCap
|
|
BEFORE_MATCAP
|
|
OVERRIDE_MATCAP
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// Copy
|
|
fd.albedo = fd.col.rgb;
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// Lighting
|
|
BEFORE_SHADOW
|
|
#if !defined(LIL_PASS_FORWARDADD)
|
|
OVERRIDE_SHADOW
|
|
|
|
fd.lightColor += fd.addLightColor;
|
|
fd.shadowmix += lilLuminance(fd.addLightColor);
|
|
fd.col.rgb += fd.albedo * fd.addLightColor;
|
|
|
|
fd.lightColor = min(fd.lightColor, _LightMaxLimit);
|
|
fd.shadowmix = saturate(fd.shadowmix);
|
|
fd.col.rgb = min(fd.col.rgb, fd.albedo * _LightMaxLimit);
|
|
#else
|
|
OVERRIDE_SHADOW
|
|
#endif
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// Rim light
|
|
fd.nvabs = abs(dot(fd.N, fd.V));
|
|
fd.uvRim = float2(fd.nvabs,fd.nvabs);
|
|
BEFORE_RIMLIGHT
|
|
OVERRIDE_RIMLIGHT
|
|
|
|
#ifndef LIL_PASS_FORWARDADD
|
|
BEFORE_EMISSION_1ST
|
|
OVERRIDE_EMISSION_1ST
|
|
|
|
BEFORE_BLEND_EMISSION
|
|
OVERRIDE_BLEND_EMISSION
|
|
#endif
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// Premultiply
|
|
LIL_PREMULTIPLY
|
|
#endif
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// Fix Color
|
|
LIL_HDRP_DEEXPOSURE(fd.col);
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// Fog
|
|
BEFORE_FOG
|
|
OVERRIDE_FOG
|
|
|
|
BEFORE_OUTPUT
|
|
OVERRIDE_OUTPUT
|
|
}
|
|
|
|
#endif |