89 lines
3.2 KiB
HLSL
89 lines
3.2 KiB
HLSL
#ifndef LIL_PASS_FORWARD_FAKESHADOW_INCLUDED
|
|
#define LIL_PASS_FORWARD_FAKESHADOW_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
|
|
|
|
struct v2f
|
|
{
|
|
float4 positionCS : SV_POSITION;
|
|
float2 uv0 : TEXCOORD0;
|
|
LIL_VERTEXLIGHT_FOG_COORDS(1)
|
|
#if defined(LIL_HDRP) || defined(LIL_V2F_FORCE_POSITION_WS)
|
|
float3 positionWS : TEXCOORD2;
|
|
#endif
|
|
LIL_CUSTOM_V2F_MEMBER(3,4,5,6,7,8,9,10)
|
|
LIL_VERTEX_INPUT_INSTANCE_ID
|
|
LIL_VERTEX_OUTPUT_STEREO
|
|
};
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// Shader
|
|
v2f vert(appdata input)
|
|
{
|
|
v2f output;
|
|
LIL_INITIALIZE_STRUCT(v2f, output);
|
|
|
|
if(_Invisible) return output;
|
|
|
|
LIL_SETUP_INSTANCE_ID(input);
|
|
LIL_TRANSFER_INSTANCE_ID(input, output);
|
|
LIL_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
|
|
|
|
//------------------------------------------------------------------------------------------------------------------------------
|
|
// Encryption
|
|
#if defined(LIL_FEATURE_ENCRYPTION)
|
|
input.positionOS = vertexDecode(input.positionOS, input.normalOS, input.uv6, input.uv7);
|
|
#endif
|
|
|
|
LIL_VERTEX_POSITION_INPUTS(input.positionOS, vertexInput);
|
|
#if defined(LIL_HDRP)
|
|
LIL_VERTEX_NORMAL_INPUTS(input.normalOS, vertexNormalInput);
|
|
lilFragData fd = lilInitFragData();
|
|
LIL_GET_HDRPDATA(vertexInput,fd);
|
|
float3 lightColor;
|
|
float3 lightDirection;
|
|
lilGetLightDirectionAndColor(lightDirection, lightColor, posInput);
|
|
lightDirection = normalize(lightDirection * Luminance(lightColor) + unity_SHAr.xyz * 0.333333 + unity_SHAg.xyz * 0.333333 + unity_SHAb.xyz * 0.333333 + float3(0.0,0.001,0.0));
|
|
output.positionWS = vertexInput.positionWS;
|
|
#else
|
|
float3 lightDirection = normalize(lilGetLightDirection() + length(_FakeShadowVector.xyz) * normalize(mul((float3x3)LIL_MATRIX_M, _FakeShadowVector.xyz)));
|
|
#endif
|
|
float2 lightShift = mul((float3x3)LIL_MATRIX_VP, lightDirection * _FakeShadowVector.w).xy;
|
|
output.positionCS = vertexInput.positionCS;
|
|
output.positionCS.xy -= lightShift.xy;
|
|
output.uv0 = input.uv0 * _MainTex_ST.xy + _MainTex_ST.zw;
|
|
LIL_TRANSFER_FOG(vertexInput, output);
|
|
|
|
return output;
|
|
}
|
|
|
|
float4 frag(v2f input) : SV_Target
|
|
{
|
|
LIL_SETUP_INSTANCE_ID(input);
|
|
LIL_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
|
|
lilFragData fd = lilInitFragData();
|
|
|
|
fd.uv0 = input.uv0;
|
|
#if defined(LIL_HDRP) || defined(LIL_V2F_FORCE_POSITION_WS)
|
|
fd.positionWS = input.positionWS;
|
|
#endif
|
|
LIL_GET_HDRPDATA(input,fd);
|
|
#if defined(LIL_HDRP)
|
|
fd.V = normalize(lilViewDirection(fd.positionWS));
|
|
#endif
|
|
fd.col = LIL_SAMPLE_2D(_MainTex, sampler_MainTex, fd.uv0);
|
|
fd.col *= _Color;
|
|
LIL_HDRP_DEEXPOSURE(fd.col);
|
|
float4 fogColor = float4(1,1,1,1);
|
|
LIL_APPLY_FOG_COLOR(fd.col, input, fogColor);
|
|
return fd.col;
|
|
}
|
|
|
|
#endif |