255 lines
No EOL
5.6 KiB
HLSL
255 lines
No EOL
5.6 KiB
HLSL
// Upgrade NOTE: upgraded instancing buffer 'InstanceProperties' to new syntax.
|
|
|
|
#if !defined(MY_LIGHTING_INPUT_INCLUDED)
|
|
#define MY_LIGHTING_INPUT_INCLUDED
|
|
|
|
#include "UnityPBSLighting.cginc"
|
|
#include "AutoLight.cginc"
|
|
|
|
#define TESSELLATION_TANGENT 1
|
|
#define TESSELLATION_UV1 1
|
|
#define TESSELLATION_UV2 1
|
|
|
|
#if defined(_PARALLAX_MAP) && defined(VERTEX_DISPLACEMENT_INSTEAD_OF_PARALLAX)
|
|
#undef _PARALLAX_MAP
|
|
#define VERTEX_DISPLACEMENT 1
|
|
#endif
|
|
|
|
#if defined(FOG_LINEAR) || defined(FOG_EXP) || defined(FOG_EXP2)
|
|
#if !defined(FOG_DISTANCE)
|
|
#define FOG_DEPTH 1
|
|
#endif
|
|
#define FOG_ON 1
|
|
#endif
|
|
|
|
#if !defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN)
|
|
#if defined(SHADOWS_SHADOWMASK) && !defined(UNITY_NO_SCREENSPACE_SHADOWS)
|
|
#define ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS 1
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(LIGHTMAP_ON) && defined(SHADOWS_SCREEN)
|
|
#if defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK)
|
|
#define SUBTRACTIVE_LIGHTING 1
|
|
#endif
|
|
#endif
|
|
|
|
UNITY_INSTANCING_BUFFER_START(InstanceProperties)
|
|
UNITY_DEFINE_INSTANCED_PROP(float4, _Color)
|
|
#define _Color_arr InstanceProperties
|
|
UNITY_INSTANCING_BUFFER_END(InstanceProperties)
|
|
|
|
sampler2D _MainTex, _DetailTex, _DetailMask;
|
|
float4 _MainTex_ST, _DetailTex_ST;
|
|
|
|
sampler2D _NormalMap, _DetailNormalMap;
|
|
float _BumpScale, _DetailBumpScale;
|
|
|
|
sampler2D _MetallicMap;
|
|
float _Metallic;
|
|
float _Smoothness;
|
|
|
|
sampler2D _DisplacementMap;
|
|
float4 _DisplacementMap_TexelSize;
|
|
float _DisplacementStrength;
|
|
float _DisplacementStep;
|
|
|
|
sampler2D _AlphaMask;
|
|
float _FresnelClip;
|
|
float _FresnelClipPower;
|
|
float _FresnelClipOffset;
|
|
float _AlphaClip;
|
|
float _AlphaRange;
|
|
float _AlphaRangeFeather;
|
|
float _AlphaRangeCenter;
|
|
float _AlphaTiling;
|
|
|
|
sampler2D _OcclusionMap;
|
|
float _OcclusionStrength;
|
|
|
|
samplerCUBE _Background;
|
|
sampler2D _EmissionMap;
|
|
float _Emission;
|
|
half4 _EmissionColor;
|
|
float _EmissionFresnel;
|
|
float _BackgroundBlur;
|
|
float _BackgroundFresnel;
|
|
|
|
float _Cutoff;
|
|
|
|
struct VertexData {
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
float4 vertex : POSITION;
|
|
float3 normal : NORMAL;
|
|
float4 tangent : TANGENT;
|
|
float2 uv : TEXCOORD0;
|
|
float2 uv1 : TEXCOORD1;
|
|
float2 uv2 : TEXCOORD2;
|
|
};
|
|
|
|
struct InterpolatorsVertex {
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
float4 pos : SV_POSITION;
|
|
float4 uv : TEXCOORD0;
|
|
float3 normal : TEXCOORD1;
|
|
|
|
#if defined(BINORMAL_PER_FRAGMENT)
|
|
float4 tangent : TEXCOORD2;
|
|
#else
|
|
float3 tangent : TEXCOORD2;
|
|
float3 binormal : TEXCOORD3;
|
|
#endif
|
|
|
|
#if FOG_DEPTH
|
|
float4 worldPos : TEXCOORD4;
|
|
#else
|
|
float3 worldPos : TEXCOORD4;
|
|
#endif
|
|
|
|
UNITY_SHADOW_COORDS(5)
|
|
|
|
#if defined(VERTEXLIGHT_ON)
|
|
float3 vertexLightColor : TEXCOORD6;
|
|
#endif
|
|
|
|
#if defined(LIGHTMAP_ON) || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS
|
|
float2 lightmapUV : TEXCOORD6;
|
|
#endif
|
|
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
|
float2 dynamicLightmapUV : TEXCOORD7;
|
|
#endif
|
|
|
|
#if defined(_PARALLAX_MAP)
|
|
float3 tangentViewDir : TEXCOORD8;
|
|
#endif
|
|
};
|
|
|
|
struct Interpolators {
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
#if defined(LOD_FADE_CROSSFADE)
|
|
UNITY_VPOS_TYPE vpos : VPOS;
|
|
#else
|
|
float4 pos : SV_POSITION;
|
|
#endif
|
|
|
|
float4 uv : TEXCOORD0;
|
|
float3 normal : TEXCOORD1;
|
|
|
|
#if defined(BINORMAL_PER_FRAGMENT)
|
|
float4 tangent : TEXCOORD2;
|
|
#else
|
|
float3 tangent : TEXCOORD2;
|
|
float3 binormal : TEXCOORD3;
|
|
#endif
|
|
|
|
#if FOG_DEPTH
|
|
float4 worldPos : TEXCOORD4;
|
|
#else
|
|
float3 worldPos : TEXCOORD4;
|
|
#endif
|
|
|
|
UNITY_SHADOW_COORDS(5)
|
|
|
|
#if defined(VERTEXLIGHT_ON)
|
|
float3 vertexLightColor : TEXCOORD6;
|
|
#endif
|
|
|
|
#if defined(LIGHTMAP_ON) || ADDITIONAL_MASKED_DIRECTIONAL_SHADOWS
|
|
float2 lightmapUV : TEXCOORD6;
|
|
#endif
|
|
|
|
#if defined(DYNAMICLIGHTMAP_ON)
|
|
float2 dynamicLightmapUV : TEXCOORD7;
|
|
#endif
|
|
|
|
#if defined(_PARALLAX_MAP)
|
|
float3 tangentViewDir : TEXCOORD8;
|
|
#endif
|
|
|
|
#if defined (CUSTOM_GEOMETRY_INTERPOLATORS)
|
|
CUSTOM_GEOMETRY_INTERPOLATORS
|
|
#endif
|
|
};
|
|
|
|
float GetDetailMask (Interpolators i) {
|
|
#if defined (_DETAIL_MASK)
|
|
return tex2D(_DetailMask, i.uv.xy).a;
|
|
#else
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
float3 GetAlbedo (Interpolators i) {
|
|
float3 albedo =
|
|
tex2D(_MainTex, i.uv.xy).rgb * UNITY_ACCESS_INSTANCED_PROP(_Color_arr, _Color).rgb;
|
|
#if defined (_DETAIL_ALBEDO_MAP)
|
|
float3 details = tex2D(_DetailTex, i.uv.zw) * unity_ColorSpaceDouble;
|
|
albedo = lerp(albedo, albedo * details, GetDetailMask(i));
|
|
#endif
|
|
return albedo;
|
|
}
|
|
|
|
float GetAlpha (Interpolators i) {
|
|
float alpha = UNITY_ACCESS_INSTANCED_PROP(_Color_arr, _Color).a;
|
|
#if !defined(_SMOOTHNESS_ALBEDO)
|
|
alpha *= tex2D(_MainTex, i.uv.xy).a;
|
|
#endif
|
|
return alpha;
|
|
}
|
|
|
|
float3 GetTangentSpaceNormal (Interpolators i) {
|
|
float3 normal = float3(0, 0, 1);
|
|
#if defined(_NORMAL_MAP)
|
|
normal = UnpackScaleNormal(tex2D(_NormalMap, i.uv.xy), _BumpScale);
|
|
#endif
|
|
#if defined(_DETAIL_NORMAL_MAP)
|
|
float3 detailNormal =
|
|
UnpackScaleNormal(
|
|
tex2D(_DetailNormalMap, i.uv.zw), _DetailBumpScale
|
|
);
|
|
detailNormal = lerp(float3(0, 0, 1), detailNormal, GetDetailMask(i));
|
|
normal = BlendNormals(normal, detailNormal);
|
|
#endif
|
|
return normal;
|
|
}
|
|
|
|
float GetMetallic (Interpolators i) {
|
|
#if defined(_METALLIC_MAP)
|
|
return tex2D(_MetallicMap, i.uv.xy).r;
|
|
#else
|
|
return _Metallic;
|
|
#endif
|
|
}
|
|
|
|
float GetSmoothness (Interpolators i) {
|
|
float smoothness = 1;
|
|
#if defined(_SMOOTHNESS_ALBEDO)
|
|
smoothness = tex2D(_MainTex, i.uv.xy).a;
|
|
#elif defined(_SMOOTHNESS_METALLIC) && defined(_METALLIC_MAP)
|
|
smoothness = tex2D(_MetallicMap, i.uv.xy).a;
|
|
#endif
|
|
return smoothness * _Smoothness;
|
|
}
|
|
|
|
float GetOcclusion (Interpolators i) {
|
|
#if defined(_OCCLUSION_MAP)
|
|
return lerp(1, tex2D(_OcclusionMap, i.uv.xy).g, _OcclusionStrength);
|
|
#else
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
float3 GetEmission (Interpolators i) {
|
|
#if defined(FORWARD_BASE_PASS) || defined(DEFERRED_PASS)
|
|
#if defined(_EMISSION_MAP)
|
|
return tex2D(_EmissionMap, i.uv.xy) * _Emission;
|
|
#else
|
|
return _Emission;
|
|
#endif
|
|
#else
|
|
return 0;
|
|
#endif
|
|
}
|
|
|
|
#endif |