81 lines
2.9 KiB
HLSL
81 lines
2.9 KiB
HLSL
|
|
// ---------------------------------------------------------------------------
|
|
// Includes
|
|
// ---------------------------------------------------------------------------
|
|
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SurfaceInput.hlsl"
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Textures, Samplers & Global Properties
|
|
// ---------------------------------------------------------------------------
|
|
// (note, BaseMap, BumpMap and EmissionMap is being defined by the SurfaceInput.hlsl include)
|
|
TEXTURE2D(_MetallicSpecGlossMap); SAMPLER(sampler_MetallicSpecGlossMap);
|
|
TEXTURE2D(_OcclusionMap); SAMPLER(sampler_OcclusionMap);
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Functions
|
|
// ---------------------------------------------------------------------------
|
|
|
|
half4 SampleMetallicSpecGloss(float2 uv, half albedoAlpha) {
|
|
half4 specGloss;
|
|
#ifdef _METALLICSPECGLOSSMAP
|
|
specGloss = SAMPLE_TEXTURE2D(_MetallicSpecGlossMap, sampler_MetallicSpecGlossMap, uv);
|
|
#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
specGloss.a = albedoAlpha * _Smoothness;
|
|
#else
|
|
specGloss.a *= _Smoothness;
|
|
#endif
|
|
#else // _METALLICSPECGLOSSMAP
|
|
#if _SPECULAR_SETUP
|
|
specGloss.rgb = _SpecColor.rgb;
|
|
#else
|
|
specGloss.rgb = _Metallic.rrr;
|
|
#endif
|
|
|
|
#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
specGloss.a = albedoAlpha * _Smoothness;
|
|
#else
|
|
specGloss.a = _Smoothness;
|
|
#endif
|
|
#endif
|
|
return specGloss;
|
|
}
|
|
|
|
half SampleOcclusion(float2 uv) {
|
|
#ifdef _OCCLUSIONMAP
|
|
#if defined(SHADER_API_GLES)
|
|
return SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
#else
|
|
half occ = SAMPLE_TEXTURE2D(_OcclusionMap, sampler_OcclusionMap, uv).g;
|
|
return LerpWhiteTo(occ, _OcclusionStrength);
|
|
#endif
|
|
#else
|
|
return 1.0;
|
|
#endif
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// SurfaceData
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void InitializeSurfaceData(Varyings IN, out SurfaceData surfaceData){
|
|
surfaceData = (SurfaceData)0; // avoids "not completely initalized" errors
|
|
|
|
half4 albedoAlpha = SampleAlbedoAlpha(IN.uv, TEXTURE2D_ARGS(_BaseMap, sampler_BaseMap));
|
|
surfaceData.alpha = Alpha(albedoAlpha.a, _BaseColor, _Cutoff);
|
|
surfaceData.albedo = albedoAlpha.rgb * _BaseColor.rgb * IN.color.rgb;
|
|
|
|
surfaceData.normalTS = SampleNormal(IN.uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap), _BumpScale);
|
|
surfaceData.emission = SampleEmission(IN.uv, _EmissionColor.rgb, TEXTURE2D_ARGS(_EmissionMap, sampler_EmissionMap));
|
|
surfaceData.occlusion = SampleOcclusion(IN.uv);
|
|
|
|
half4 specGloss = SampleMetallicSpecGloss(IN.uv, albedoAlpha.a);
|
|
#if _SPECULAR_SETUP
|
|
surfaceData.metallic = 1.0h;
|
|
surfaceData.specular = specGloss.rgb;
|
|
#else
|
|
surfaceData.metallic = specGloss.r;
|
|
surfaceData.specular = half3(0.0h, 0.0h, 0.0h);
|
|
#endif
|
|
surfaceData.smoothness = specGloss.a;
|
|
} |