You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

278 lines
17 KiB

#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl"
$Material.SubsurfaceScattering: #define _MATERIAL_FEATURE_SUBSURFACE_SCATTERING 1
$Material.Transmission: #define _MATERIAL_FEATURE_TRANSMISSION 1
$Material.Anisotropy: #define _MATERIAL_FEATURE_ANISOTROPY 1
$Material.Iridescence: #define _MATERIAL_FEATURE_IRIDESCENCE 1
$Material.SpecularColor: #define _MATERIAL_FEATURE_SPECULAR_COLOR 1
$Material.ClearCoat: #define _MATERIAL_FEATURE_CLEAR_COAT
$AmbientOcclusion: #define _AMBIENT_OCCLUSION 1
$SpecularOcclusionFromAO: #define _SPECULAR_OCCLUSION_FROM_AO 1
$SpecularOcclusionFromAOBentNormal: #define _SPECULAR_OCCLUSION_FROM_AO_BENT_NORMAL 1
$SpecularOcclusionCustom: #define _SPECULAR_OCCLUSION_CUSTOM 1
$Specular.EnergyConserving: #define _ENERGY_CONSERVING_SPECULAR 1
$Specular.AA: #define _ENABLE_GEOMETRIC_SPECULAR_AA 1
$RefractionBox: #define _REFRACTION_PLANE 1
$RefractionSphere: #define _REFRACTION_SPHERE 1
$RefractionThin: #define _REFRACTION_THIN 1
// This shader support recursive rendering for raytracing
//#define HAVE_RECURSIVE_RENDERING
#define SHADERPASS_MAINTEX (27)
#define SHADERPASS_METALLICTEX (28)
#if defined(UNITY_INSTANCING_ENABLED) && defined(_TERRAIN_INSTANCED_PERPIXEL_NORMAL)
#define ENABLE_TERRAIN_PERPIXEL_NORMAL
#endif
#define TERRAIN_DEFAULT_TEXTURE
TEXTURE2D(_BlackTex); SAMPLER(sampler_BlackTex);
TEXTURE2D(_NormalBlank); SAMPLER(sampler_NormalBlank);
TEXTURE2D(_DefaultWhiteTex); SAMPLER(sampler_BilinearClamp);
SAMPLER(sampler_BilinearRepeat);
SAMPLER(sampler_Control1);
float4 _BlackTex_TexelSize = float4(1,1,1,1);
half4 _BlackTex_ST = half4(1,1,0,0);
#if defined(_ALPHATEST_ON) && !defined(_HOLES_TEXTURE_DEF)
#define _HOLES_TEXTURE_DEF
TEXTURE2D(_TerrainHolesTexture);
SAMPLER(sampler_TerrainHolesTexture);
#endif
UnityTexture2D TerrainBuildUnityTexture2DStructInternal(Texture2D tex, SamplerState samplerstate, float4 texelSize, float4 scaleTranslate)
{
UnityTexture2D result;
result.tex = tex;
result.samplerstate = samplerstate;
result.texelSize = texelSize;
result.scaleTranslate = scaleTranslate;
return result;
}
#ifndef _TERRAIN_8_LAYERS
#define DEF_TERRAIN_TEXTURE_LOAD(name, defaultName) UnityTexture2D TerrainBuildUnityTexture2DStructInternal##name(int index) \
{ \
switch(index) \
{ \
case 0: \
return TerrainBuildUnityTexture2DStructInternal(name##0, sampler_BilinearRepeat, _Splat0_TexelSize, _Splat0_ST); \
case 1: \
return TerrainBuildUnityTexture2DStructInternal(name##1, sampler_BilinearRepeat, _Splat1_TexelSize, _Splat1_ST); \
case 2: \
return TerrainBuildUnityTexture2DStructInternal(name##2, sampler_BilinearRepeat, _Splat2_TexelSize, _Splat2_ST); \
case 3: \
return TerrainBuildUnityTexture2DStructInternal(name##3, sampler_BilinearRepeat, _Splat3_TexelSize, _Splat3_ST); \
default: \
return TerrainBuildUnityTexture2DStructInternal(defaultName, sampler_BilinearRepeat, _BlackTex_TexelSize, _BlackTex_ST); \
} \
}
#define DEF_TERRAIN_TEXTURE_AVAILABLE(name) float TerrainTextureAvailableInternal##name(int index) \
{ \
switch(index) \
{ \
case 0: \
case 1: \
case 2: \
case 3: \
return 1; \
default: \
return 0; \
} \
}
#define DEF_TERRAIN_VALUE_LOAD(name, returnType, defaultVal) returnType Unity_Terrain##name(int index) \
{ \
switch(index) \
{ \
case 0: \
return name##0; \
case 1: \
return name##1; \
case 2: \
return name##2; \
case 3: \
return name##3; \
} \
return defaultVal; \
}
float TerrainTextureAvailableInternal_Mask(int index)
{
switch(index)
{
case 0:
return _LayerHasMask0;
case 1:
return _LayerHasMask1;
case 2:
return _LayerHasMask2;
case 3:
return _LayerHasMask3;
default:
return 0;
}
}
#else
#define DEF_TERRAIN_TEXTURE_LOAD(name, defaultName) UnityTexture2D TerrainBuildUnityTexture2DStructInternal##name(int index) \
{ \
switch(index) \
{ \
case 0: \
return TerrainBuildUnityTexture2DStructInternal(name##0, sampler_BilinearRepeat, _Splat0_TexelSize, _Splat0_ST); \
case 1: \
return TerrainBuildUnityTexture2DStructInternal(name##1, sampler_BilinearRepeat, _Splat1_TexelSize, _Splat1_ST); \
case 2: \
return TerrainBuildUnityTexture2DStructInternal(name##2, sampler_BilinearRepeat, _Splat2_TexelSize, _Splat2_ST); \
case 3: \
return TerrainBuildUnityTexture2DStructInternal(name##3, sampler_BilinearRepeat, _Splat3_TexelSize, _Splat3_ST); \
case 4: \
return TerrainBuildUnityTexture2DStructInternal(name##4, sampler_BilinearRepeat, _Splat4_TexelSize, _Splat4_ST); \
case 5: \
return TerrainBuildUnityTexture2DStructInternal(name##5, sampler_BilinearRepeat, _Splat5_TexelSize, _Splat5_ST); \
case 6: \
return TerrainBuildUnityTexture2DStructInternal(name##6, sampler_BilinearRepeat, _Splat6_TexelSize, _Splat6_ST); \
case 7: \
return TerrainBuildUnityTexture2DStructInternal(name##7, sampler_BilinearRepeat, _Splat7_TexelSize, _Splat7_ST); \
default: \
return TerrainBuildUnityTexture2DStructInternal(defaultName, sampler_BilinearRepeat, _BlackTex_TexelSize, _BlackTex_ST); \
} \
}
#define DEF_TERRAIN_TEXTURE_AVAILABLE(name) float TerrainTextureAvailableInternal##name(int index) \
{ \
switch(index) \
{ \
case 0: \
case 1: \
case 2: \
case 3: \
case 4: \
case 5: \
case 6: \
case 7: \
return 1; \
default: \
return 0; \
} \
}
float TerrainTextureAvailableInternal_Mask(int index)
{
switch(index)
{
case 0:
return _LayerHasMask0;
case 1:
return _LayerHasMask1;
case 2:
return _LayerHasMask2;
case 3:
return _LayerHasMask3;
case 4:
return _LayerHasMask4;
case 5:
return _LayerHasMask5;
case 6:
return _LayerHasMask6;
case 7:
return _LayerHasMask7;
default:
return 0;
}
}
#define DEF_TERRAIN_VALUE_LOAD(name, returnType, defaultVal) returnType Unity_Terrain##name(int index) \
{ \
switch(index) \
{ \
case 0: \
return name##0; \
case 1: \
return name##1; \
case 2: \
return name##2; \
case 3: \
return name##3; \
case 4: \
return name##4; \
case 5: \
return name##5; \
case 6: \
return name##6; \
case 7: \
return name##7; \
} \
return defaultVal; \
}
#endif
DEF_TERRAIN_TEXTURE_LOAD(_Splat, _BlackTex)
DEF_TERRAIN_TEXTURE_AVAILABLE(_Splat)
DEF_TERRAIN_TEXTURE_LOAD(_Normal, _NormalBlank)
DEF_TERRAIN_TEXTURE_AVAILABLE(_Normal)
DEF_TERRAIN_TEXTURE_LOAD(_Mask, _BlackTex)
DEF_TERRAIN_VALUE_LOAD(_NormalScale, float, float(1))
DEF_TERRAIN_VALUE_LOAD(_Metallic, float, float(0))
DEF_TERRAIN_VALUE_LOAD(_Smoothness, float, float(0.5))
DEF_TERRAIN_VALUE_LOAD(_DiffuseRemapScale, float4, float4(1,1,1,1))
DEF_TERRAIN_VALUE_LOAD(_MaskMapRemapOffset, float4, float4(0,0,0,0))
DEF_TERRAIN_VALUE_LOAD(_MaskMapRemapScale, float4, float4(1,1,1,1))
#ifndef _TERRAIN_8_LAYERS
float TerrainTextureAvailableInternal_Control(int index)
{
return index==0;
}
UnityTexture2D TerrainBuildUnityTextureControl(int index)
{
switch(index)
{
case 0:
return TerrainBuildUnityTexture2DStructInternal(_Control0, sampler_Control0, _Control0_TexelSize, float4(1,1,0,0));
default:
return TerrainBuildUnityTexture2DStructInternal(_BlackTex, sampler_BlackTex, _BlackTex_TexelSize, _BlackTex_ST);
}
}
#else
float TerrainTextureAvailableInternal_Control(int index)
{
return index==0||index==1;
}
UnityTexture2D TerrainBuildUnityTextureControl(int index)
{
switch(index)
{
case 0:
return TerrainBuildUnityTexture2DStructInternal(_Control0, sampler_Control0, _Control0_TexelSize, float4(1,1,0,0));
case 1:
return TerrainBuildUnityTexture2DStructInternal(_Control1, sampler_Control1, _Control0_TexelSize, float4(1,1,0,0));
default:
return TerrainBuildUnityTexture2DStructInternal(_BlackTex, sampler_BlackTex, _BlackTex_TexelSize, _BlackTex_ST);
}
}
#endif
#define Unity_TerrainTextureAvailable(t, n) TerrainTextureAvailableInternal##t(n)
UnityTexture2D TerrainBuildUnityTextureHoles(int index)
{
#if defined(_ALPHATEST_ON)
return TerrainBuildUnityTexture2DStructInternal(_TerrainHolesTexture, sampler_TerrainHolesTexture, _Control0_TexelSize, float4(1,1,0,0));
#else
return TerrainBuildUnityTexture2DStructInternal(_DefaultWhiteTex, sampler_BilinearClamp, _BlackTex_TexelSize, _BlackTex_ST);
#endif
}
#define TerrainBuildUnityTexture2DStruct(name, index) TerrainBuildUnityTexture2DStructInternal##name(index)
#define TerrainBuildUnityTexture2DStructNoIndex(name) TerrainBuildUnityTexture2DStructInternal(name, sampler##name, name##_TexelSize, name##_ST)