|
|
|
|
|
|
|
|
|
|
#if (SHADERPASS == SHADERPASS_DBUFFER) |
|
|
|
void GetSurfaceData(float2 texCoordDS, float4x4 normalToWorld, out DecalSurfaceData surfaceData) |
|
|
|
#elif (SHADERPASS == SHADERPASS_MESHDECALS) |
|
|
|
void GetSurfaceData(FragInputs input, out DecalSurfaceData surfaceData) |
|
|
|
#endif |
|
|
|
#if (SHADERPASS == SHADERPASS_DBUFFER) |
|
|
|
texCoordDS = texCoordDS * scale + offset; |
|
|
|
float2 texCoords = texCoordDS * scale + offset; |
|
|
|
#elif (SHADERPASS == SHADERPASS_MESHDECALS) |
|
|
|
float totalBlend = _DecalBlend; |
|
|
|
float2 texCoords = input.texCoord0; |
|
|
|
#endif |
|
|
|
|
|
|
|
surfaceData.baseColor = SAMPLE_TEXTURE2D(_BaseColorMap, sampler_BaseColorMap, texCoordDS.xy); |
|
|
|
surfaceData.baseColor = SAMPLE_TEXTURE2D(_BaseColorMap, sampler_BaseColorMap, texCoords); |
|
|
|
surfaceData.baseColor.w *= totalBlend; |
|
|
|
totalBlend = surfaceData.baseColor.w; // base alpha affects all other channels; |
|
|
|
#if _ALBEDOCONTRIBUTION |
|
|
|
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
surfaceData.normalWS.xyz = mul((float3x3)normalToWorld, UnpackNormalmapRGorAG(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, texCoordDS))) * 0.5f + 0.5f; |
|
|
|
float3 normalTS = UnpackNormalmapRGorAG(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, texCoords)); |
|
|
|
#if (SHADERPASS == SHADERPASS_DBUFFER) |
|
|
|
float3 normalWS = mul((float3x3)normalToWorld, normalTS); |
|
|
|
#elif (SHADERPASS == SHADERPASS_MESHDECALS) |
|
|
|
float3 normalWS; |
|
|
|
GetNormalWS(input, 0, normalTS, normalWS); |
|
|
|
#endif |
|
|
|
surfaceData.normalWS.xyz = normalWS * 0.5f + 0.5f; |
|
|
|
|
|
|
|
surfaceData.mask = SAMPLE_TEXTURE2D(_MaskMap, sampler_MaskMap, texCoordDS.xy); |
|
|
|
surfaceData.mask = SAMPLE_TEXTURE2D(_MaskMap, sampler_MaskMap, texCoords); |
|
|
|
#endif |
|
|
|
#if (SHADERPASS == SHADERPASS_MESHDECALS) |
|
|
|
void GetSurfaceData(FragInputs input, out DecalSurfaceData surfaceData) |
|
|
|
{ |
|
|
|
surfaceData.baseColor = float4(0, 0, 0, 0); |
|
|
|
surfaceData.normalWS = float4(0, 0, 0, 0); |
|
|
|
surfaceData.mask = float4(0, 0, 0, 0); |
|
|
|
surfaceData.HTileMask = 0; |
|
|
|
float totalBlend = _DecalBlend; |
|
|
|
#if _COLORMAP |
|
|
|
surfaceData.baseColor = SAMPLE_TEXTURE2D(_BaseColorMap, sampler_BaseColorMap, input.texCoord0); |
|
|
|
surfaceData.baseColor.w *= totalBlend; |
|
|
|
totalBlend = surfaceData.baseColor.w; // base alpha affects all other channels; |
|
|
|
#if _ALBEDOCONTRIBUTION |
|
|
|
surfaceData.HTileMask |= DBUFFERHTILEBIT_DIFFUSE; |
|
|
|
#else |
|
|
|
surfaceData.baseColor.w = 0; // dont blend any albedo |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
#if _NORMALMAP |
|
|
|
float3 normalTS = UnpackNormalmapRGorAG(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.texCoord0)); |
|
|
|
float3 normalWS; |
|
|
|
GetNormalWS(input, 0, normalTS, normalWS); |
|
|
|
surfaceData.normalWS.xyz = normalWS * 0.5f + 0.5f; |
|
|
|
surfaceData.normalWS.w = totalBlend; |
|
|
|
surfaceData.HTileMask |= DBUFFERHTILEBIT_NORMAL; |
|
|
|
#endif |
|
|
|
#if _MASKMAP |
|
|
|
surfaceData.mask = SAMPLE_TEXTURE2D(_MaskMap, sampler_MaskMap, input.texCoord0); |
|
|
|
surfaceData.mask.z = surfaceData.mask.w; |
|
|
|
surfaceData.mask.w = totalBlend; |
|
|
|
surfaceData.HTileMask |= DBUFFERHTILEBIT_MASK; |
|
|
|
#endif |
|
|
|
} |
|
|
|
#endif |