Boat Attack使用了Universal RP的许多新图形功能,可以用于探索 Universal RP 的使用方式和技巧。
您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

74 行
3.2 KiB

#if USE_NORMAL_MAP
#if LIGHT_QUALITY_FAST
#define NORMALS_LIGHTING_COORDS(TEXCOORDA, TEXCOORDB) \
float4 lightDirection : TEXCOORDA;\
float2 screenUV : TEXCOORDB;
#define TRANSFER_NORMALS_LIGHTING(output, worldSpacePos)\
float4 clipVertex = output.positionCS / output.positionCS.w;\
output.screenUV = ComputeScreenPos(clipVertex).xy;\
output.lightDirection.xy = _LightPosition.xy - worldSpacePos.xy;\
output.lightDirection.z = _LightZDistance;\
output.lightDirection.w = 0;\
output.lightDirection.xyz = normalize(output.lightDirection.xyz);
#define APPLY_NORMALS_LIGHTING(input, lightColor)\
half4 normal = SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.screenUV);\
float3 normalUnpacked = UnpackNormal(normal);\
lightColor = lightColor * saturate(dot(input.lightDirection.xyz, normalUnpacked));
#else
#define NORMALS_LIGHTING_COORDS(TEXCOORDA, TEXCOORDB) \
float4 positionWS : TEXCOORDA;\
float2 screenUV : TEXCOORDB;
#define TRANSFER_NORMALS_LIGHTING(output, worldSpacePos) \
float4 clipVertex = output.positionCS / output.positionCS.w;\
output.screenUV = ComputeScreenPos(clipVertex).xy; \
output.positionWS = worldSpacePos;
#define APPLY_NORMALS_LIGHTING(input, lightColor)\
half4 normal = SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.screenUV);\
float3 normalUnpacked = UnpackNormal(normal);\
float3 dirToLight;\
dirToLight.xy = _LightPosition.xy - input.positionWS.xy;\
dirToLight.z = _LightZDistance;\
dirToLight = normalize(dirToLight);\
lightColor = lightColor * saturate(dot(dirToLight, normalUnpacked));
#endif
#define NORMALS_LIGHTING_VARIABLES \
TEXTURE2D(_NormalMap); \
SAMPLER(sampler_NormalMap); \
float4 _LightPosition;\
half _LightZDistance;
#else
#define NORMALS_LIGHTING_COORDS(TEXCOORDA, TEXCOORDB)
#define NORMALS_LIGHTING_VARIABLES
#define TRANSFER_NORMALS_LIGHTING(output, worldSpacePos)
#define APPLY_NORMALS_LIGHTING(input, lightColor)
#endif
#define SHADOW_COORDS(TEXCOORDA)\
float2 shadowUV : TEXCOORDA;
#define SHADOW_VARIABLES\
float _ShadowIntensity;\
float _ShadowVolumeIntensity;\
TEXTURE2D(_ShadowTex);\
SAMPLER(sampler_ShadowTex);
#define APPLY_SHADOWS(input, color, intensity)\
half4 shadow = saturate(SAMPLE_TEXTURE2D(_ShadowTex, sampler_ShadowTex, input.shadowUV)); \
half shadowIntensity = 1 - (shadow.r * saturate(2 * (shadow.g - 0.5f * shadow.b))); \
color.rgb = (color.rgb * shadowIntensity) + (color.rgb * intensity*(1 - shadowIntensity))
#define TRANSFER_SHADOWS(output)\
output.shadowUV = ComputeScreenPos(output.positionCS / output.positionCS.w).xy;
#define SHAPE_LIGHT(index)\
TEXTURE2D(_ShapeLightTexture##index);\
SAMPLER(sampler_ShapeLightTexture##index);\
float2 _ShapeLightBlendFactors##index;\
float4 _ShapeLightMaskFilter##index;\
float4 _ShapeLightInvertedFilter##index;