Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
DMD3502-Cutscene-JacobTomassi/Cutscene/Assets/LowpolySimpleHouse/PostProcessing/Resources/Shaders/Common.cginc
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
166 lines (135 sloc)
4.73 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#ifndef __COMMON__ | |
#define __COMMON__ | |
#include "UnityCG.cginc" | |
// Mobile: use RGBM instead of float/half RGB | |
#define USE_RGBM defined(SHADER_API_MOBILE) | |
#define MOBILE_OR_CONSOLE (defined(SHADER_API_MOBILE) || defined(SHADER_API_PSSL) || defined(SHADER_API_XBOXONE) || defined(SHADER_API_WIIU)) | |
#if defined(SHADER_API_PSSL) | |
// No support for sampler2D_half on PS4 in 5.4 | |
#define sampler2D_half sampler2D_float | |
#endif | |
// ----------------------------------------------------------------------------- | |
// Uniforms | |
#if defined(SEPARATE_TEXTURE_SAMPLER) | |
Texture2D _MainTex; | |
SamplerState sampler_MainTex; | |
#else | |
sampler2D _MainTex; | |
#endif | |
float4 _MainTex_TexelSize; | |
float4 _MainTex_ST; | |
// ----------------------------------------------------------------------------- | |
// Vertex shaders | |
struct AttributesDefault | |
{ | |
float4 vertex : POSITION; | |
float4 texcoord : TEXCOORD0; | |
}; | |
struct VaryingsDefault | |
{ | |
float4 pos : SV_POSITION; | |
float2 uv : TEXCOORD0; | |
float2 uvSPR : TEXCOORD1; // Single Pass Stereo UVs | |
}; | |
VaryingsDefault VertDefault(AttributesDefault v) | |
{ | |
VaryingsDefault o; | |
o.pos = UnityObjectToClipPos(v.vertex); | |
o.uv = v.texcoord.xy; | |
o.uvSPR = UnityStereoScreenSpaceUVAdjust(v.texcoord.xy, _MainTex_ST); | |
return o; | |
} | |
// ----------------------------------------------------------------------------- | |
// Maths stuff | |
#define HALF_MAX 65504.0 | |
#define EPSILON 1.0e-4 | |
#define UNITY_PI_2 (UNITY_PI * 2.0) | |
inline half Min3(half3 x) { return min(x.x, min(x.y, x.z)); } | |
inline half Min3(half x, half y, half z) { return min(x, min(y, z)); } | |
inline half Max3(half3 x) { return max(x.x, max(x.y, x.z)); } | |
inline half Max3(half x, half y, half z) { return max(x, max(y, z)); } | |
inline half Min4(half4 x) { return min(x.x, min(x.y, min(x.z, x.w))); } | |
inline half Min4(half x, half y, half z, half w) { return min(x, min(y, min(z, w))); } | |
inline half Max4(half4 x) { return max(x.x, max(x.y, max(x.z, x.w))); } | |
inline half Max4(half x, half y, half z, half w) { return max(x, max(y, min(z, w))); } | |
inline half Pow2(half x) { return x * x; } | |
inline half2 Pow2(half2 x) { return x * x; } | |
inline half3 Pow2(half3 x) { return x * x; } | |
inline half4 Pow2(half4 x) { return x * x; } | |
inline half Pow3(half x) { return x * x * x; } | |
inline half2 Pow3(half2 x) { return x * x * x; } | |
inline half3 Pow3(half3 x) { return x * x * x; } | |
inline half4 Pow3(half4 x) { return x * x * x; } | |
#ifndef UNITY_STANDARD_BRDF_INCLUDED | |
inline half Pow4(half x) { return x * x * x * x; } | |
inline half2 Pow4(half2 x) { return x * x * x * x; } | |
inline half3 Pow4(half3 x) { return x * x * x * x; } | |
inline half4 Pow4(half4 x) { return x * x * x * x; } | |
#endif | |
// Returns the largest vector of v1 and v2 | |
inline half2 MaxV(half2 v1, half2 v2) { return dot(v1, v1) < dot(v2, v2) ? v2 : v1; } | |
inline half3 MaxV(half3 v1, half3 v2) { return dot(v1, v1) < dot(v2, v2) ? v2 : v1; } | |
inline half4 MaxV(half4 v1, half4 v2) { return dot(v1, v1) < dot(v2, v2) ? v2 : v1; } | |
// Clamp HDR value within a safe range | |
inline half SafeHDR(half c) { return min(c, HALF_MAX); } | |
inline half2 SafeHDR(half2 c) { return min(c, HALF_MAX); } | |
inline half3 SafeHDR(half3 c) { return min(c, HALF_MAX); } | |
inline half4 SafeHDR(half4 c) { return min(c, HALF_MAX); } | |
// Compatibility function | |
#if (SHADER_TARGET < 50 && !defined(SHADER_API_PSSL)) | |
float rcp(float value) | |
{ | |
return 1.0 / value; | |
} | |
#endif | |
// Tonemapper from http://gpuopen.com/optimized-reversible-tonemapper-for-resolve/ | |
float4 FastToneMap(in float4 color) | |
{ | |
return float4(color.rgb * rcp(Max3(color.rgb) + 1.), color.a); | |
} | |
float4 FastToneMap(in float4 color, in float weight) | |
{ | |
return float4(color.rgb * rcp(weight * Max3(color.rgb) + 1.), color.a); | |
} | |
float4 FastToneUnmap(in float4 color) | |
{ | |
return float4(color.rgb * rcp(1. - Max3(color.rgb)), color.a); | |
} | |
// Interleaved gradient function from Jimenez 2014 http://goo.gl/eomGso | |
float GradientNoise(float2 uv) | |
{ | |
uv = floor(uv * _ScreenParams.xy); | |
float f = dot(float2(0.06711056, 0.00583715), uv); | |
return frac(52.9829189 * frac(f)); | |
} | |
// Z buffer depth to linear 0-1 depth | |
// Handles orthographic projection correctly | |
float LinearizeDepth(float z) | |
{ | |
float isOrtho = unity_OrthoParams.w; | |
float isPers = 1.0 - unity_OrthoParams.w; | |
z *= _ZBufferParams.x; | |
return (1.0 - isOrtho * z) / (isPers * z + _ZBufferParams.y); | |
} | |
// ----------------------------------------------------------------------------- | |
// RGBM encoding/decoding | |
half4 EncodeHDR(float3 rgb) | |
{ | |
#if USE_RGBM | |
rgb *= 1.0 / 8.0; | |
float m = max(max(rgb.r, rgb.g), max(rgb.b, 1e-6)); | |
m = ceil(m * 255.0) / 255.0; | |
return half4(rgb / m, m); | |
#else | |
return half4(rgb, 0.0); | |
#endif | |
} | |
float3 DecodeHDR(half4 rgba) | |
{ | |
#if USE_RGBM | |
return rgba.rgb * rgba.a * 8.0; | |
#else | |
return rgba.rgb; | |
#endif | |
} | |
#endif // __COMMON__ |