134 lines
3.7 KiB
Plaintext
134 lines
3.7 KiB
Plaintext
// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
|
|
|
|
#ifndef UNITY_CG_INCLUDED
|
|
#define UNITY_CG_INCLUDED
|
|
|
|
// -------------------------------------------------------------------
|
|
// Common functions
|
|
|
|
float saturate(float x)
|
|
{
|
|
return max(0.0, min(1.0, x));
|
|
}
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
// builtin values exposed from Unity
|
|
|
|
// Time values from Unity
|
|
uniform vec4 _Time;
|
|
uniform vec4 _SinTime;
|
|
uniform vec4 _CosTime;
|
|
|
|
// x = 1 or -1 (-1 if projection is flipped)
|
|
// y = near plane
|
|
// z = far plane
|
|
// w = 1/far plane
|
|
uniform vec4 _ProjectionParams;
|
|
|
|
// x = width
|
|
// y = height
|
|
// z = 1 + 1.0/width
|
|
// w = 1 + 1.0/height
|
|
uniform vec4 _ScreenParams;
|
|
|
|
uniform vec3 _WorldSpaceCameraPos;
|
|
uniform vec4 _WorldSpaceLightPos0;
|
|
|
|
uniform vec4 _LightPositionRange; // xyz = pos, w = 1/range
|
|
|
|
// -------------------------------------------------------------------
|
|
// helper functions and macros used in many standard shaders
|
|
|
|
#if defined DIRECTIONAL || defined DIRECTIONAL_COOKIE
|
|
#define USING_DIRECTIONAL_LIGHT
|
|
#endif
|
|
|
|
#if defined DIRECTIONAL || defined DIRECTIONAL_COOKIE || defined POINT || defined SPOT || defined POINT_NOATT || defined POINT_COOKIE
|
|
#define USING_LIGHT_MULTI_COMPILE
|
|
#endif
|
|
|
|
|
|
#ifdef VERTEX
|
|
|
|
// Computes world space light direction
|
|
vec3 WorldSpaceLightDir( vec4 v )
|
|
{
|
|
vec3 worldPos = (unity_ObjectToWorld * v).xyz;
|
|
#ifndef USING_LIGHT_MULTI_COMPILE
|
|
return _WorldSpaceLightPos0.xyz - worldPos * _WorldSpaceLightPos0.w;
|
|
#else
|
|
#ifndef USING_DIRECTIONAL_LIGHT
|
|
return _WorldSpaceLightPos0.xyz - worldPos;
|
|
#else
|
|
return _WorldSpaceLightPos0.xyz;
|
|
#endif
|
|
#endif
|
|
}
|
|
|
|
// Computes object space light direction
|
|
vec3 ObjSpaceLightDir( vec4 v )
|
|
{
|
|
vec3 objSpaceLightPos = (unity_WorldToObject * _WorldSpaceLightPos0).xyz;
|
|
#ifndef USING_LIGHT_MULTI_COMPILE
|
|
return objSpaceLightPos.xyz - v.xyz * _WorldSpaceLightPos0.w;
|
|
#else
|
|
#ifndef USING_DIRECTIONAL_LIGHT
|
|
return objSpaceLightPos.xyz - v.xyz;
|
|
#else
|
|
return objSpaceLightPos.xyz;
|
|
#endif
|
|
#endif
|
|
}
|
|
|
|
// Computes world space view direction
|
|
vec3 WorldSpaceViewDir( vec4 v )
|
|
{
|
|
return _WorldSpaceCameraPos.xyz - (unity_ObjectToWorld * v).xyz;
|
|
}
|
|
|
|
// Computes object space view direction
|
|
vec3 ObjSpaceViewDir( vec4 v )
|
|
{
|
|
vec3 objSpaceCameraPos = (unity_WorldToObject * vec4(_WorldSpaceCameraPos.xyz, 1.0)).xyz;
|
|
return objSpaceCameraPos - v.xyz;
|
|
}
|
|
|
|
// Declares 3x3 matrix 'rotation', filled with tangent space basis
|
|
// Do not use multiline define here, nVidia OpenGL drivers are buggy in parsing that.
|
|
#define TANGENT_SPACE_ROTATION vec3 binormal = cross( gl_Normal.xyz, Tangent.xyz ) * Tangent.w; mat3 rotation = mat3( Tangent.x, binormal.x, gl_Normal.x, Tangent.y, binormal.y, gl_Normal.y, Tangent.z, binormal.z, gl_Normal.z );
|
|
|
|
|
|
// Transforms float2 UV by scale/bias property (new method)
|
|
// GLSL ES does not support ## concat operator so we also provide macro that expects xxx_ST
|
|
#define TRANSFORM_TEX_ST(tex,namest) (tex.xy * namest.xy + namest.zw)
|
|
#ifndef GL_ES
|
|
#define TRANSFORM_TEX(tex,name) TRANSFORM_TEX_ST(tex, name##_ST)
|
|
#endif
|
|
|
|
// Deprecated. Used to transform 4D UV by a fixed function texture matrix. Now just returns the passed UV.
|
|
#define TRANSFORM_UV(idx) (gl_TexCoord[0].xy)
|
|
|
|
#endif // VERTEX
|
|
|
|
|
|
|
|
// Calculates UV offset for parallax bump mapping
|
|
vec2 ParallaxOffset( float h, float height, vec3 viewDir )
|
|
{
|
|
h = h * height - height/2.0;
|
|
vec3 v = normalize(viewDir);
|
|
v.z += 0.42;
|
|
return h * (v.xy / v.z);
|
|
}
|
|
|
|
|
|
// Converts color to luminance (grayscale)
|
|
float Luminance( vec3 c )
|
|
{
|
|
return dot( c, vec3(0.22, 0.707, 0.071) );
|
|
}
|
|
|
|
|
|
#endif
|