Firstborn/Library/PackageCache/com.unity.terrain-tools@4.0.5/Shaders/TerrainTools.hlsl

69 lines
2.0 KiB
HLSL
Raw Normal View History

2023-03-28 13:24:16 -04:00
#ifndef TERRAIN_TOOLS_INC
#define TERRAIN_TOOLS_INC
#include "TerrainTool.cginc"
/*=================================================================================================
Domain Conversion
=================================================================================================*/
float4 _PcUvVectors; // xy = offset, zw = dimensions in uv space relative to the target heightmap dimensions
float4 _PcPixelRect;
float2 PcUvToHeightmapUv(float2 pcUV)
{
return _PcUvVectors.xy + pcUV * _PcUvVectors.zw;
}
float2 HeightmapUvToPcUv(float2 heightmapUV)
{
return (heightmapUV - _PcUvVectors.xy) / _PcUvVectors.zw;
}
/*=================================================================================================
Texel Validity
=================================================================================================*/
sampler2D _PCValidityTex;
float4 _PCValidityTex_TexelSize;
float IsPcUvPartOfValidTerrainTileTexel(float2 pcUV)
{
return sign(max(0, tex2D(_PCValidityTex, pcUV).r));
}
float IsPcUvPartOfValidTerrainTileTexelSobel(float2 pcUV, float2 offset)
{
float3 offsets = float3(offset.x, offset.y, 0);
float t = tex2D(_PCValidityTex, pcUV).r;
t += tex2D(_PCValidityTex, pcUV - offsets.xz).r;
t += tex2D(_PCValidityTex, pcUV + offsets.xz).r;
t += tex2D(_PCValidityTex, pcUV - offsets.zy).r;
t += tex2D(_PCValidityTex, pcUV + offsets.zy).r;
return sign(max(0, t - 4));
}
/*=================================================================================================
Filters
=================================================================================================*/
float2 _PrevFilterRange;
float2 _FilterRange;
inline float RemapFilterValue( float4 n, float o, float p, float a, float b )
{
return a.xxxx + (b.xxxx - a.xxxx) * (n - o.xxxx) / (p.xxxx - o.xxxx);
}
inline float pow_keep_sign( float4 f, float p )
{
return pow( abs( f ), p ) * sign( f );
}
#endif