Unity has a number of built-in utility functions designed to make writing shaders simpler and easier.
See Built-in shader include files for an overview of shader include files provided with Unity.
| Function: | Description: | 
|---|---|
| float4 UnityObjectToClipPos(float3 pos) | Transforms a point from object space to the camera’s clip space in homogeneous coordinates. This is the equivalent of mul(UNITY_MATRIX_MVP, float4(pos, 1.0)), and should be used in its place. | 
| float3 UnityObjectToViewPos(float3 pos) | Transforms a point from object space to view space. This is the equivalent of mul(UNITY_MATRIX_MV, float4(pos, 1.0)).xyz, and should be used in its place. | 
| Function: | Description: | 
|---|---|
| float3 WorldSpaceViewDir (float4 v) | Returns world space direction (not normalized) from given object space vertex position towards the camera. | 
| float3 ObjSpaceViewDir (float4 v) | Returns object space direction (not normalized) from given object space vertex position towards the camera. | 
| float2 ParallaxOffset (half h, half height, half3 viewDir) | calculates UV offset for parallax normal mapping. | 
| fixed Luminance (fixed3 c) | Converts color to luminance (grayscale). | 
| fixed3 DecodeLightmap (fixed4 color) | Decodes color from Unity lightmap (RGBM or dLDR depending on platform). | 
| float4 EncodeFloatRGBA (float v) | Encodes [0..1) range float into RGBA color, for storage in low precision render target. | 
| float DecodeFloatRGBA (float4 enc) | Decodes RGBA color into a float. | 
| float2 EncodeFloatRG (float v) | Encodes [0..1) range float into a float2. | 
| float DecodeFloatRG (float2 enc) | Decodes a previously-encoded RG float. | 
| float2 EncodeViewNormalStereo (float3 n) | Encodes view space normal into two numbers in 0..1 range. | 
| float3 DecodeViewNormalStereo (float4 enc4) | Decodes view space normal from enc4.xy. | 
These functions are only useful when using forward rendering (ForwardBase or ForwardAdd pass types).
| Function: | Description: | 
|---|---|
| float3 WorldSpaceLightDir (float4 v) | Computes world space direction (not normalized) to light, given object space vertex position. | 
| float3 ObjSpaceLightDir (float4 v) | Computes object space direction (not normalized) to light, given object space vertex position. | 
| float3 Shade4PointLights (...) | Computes illumination from four point lights, with light data tightly packed into vectors. Forward rendering uses this to compute per-vertex lighting. | 
The following functions are helpers to compute coordinates used for sampling screen-space textures. They return float4 where the final coordinate to sample texture with can be computed via perspective division (for example xy/w).
The functions also take care of platform differences in render texture coordinates.
| Function: | Description: | 
|---|---|
| float4 ComputeScreenPos (float4 clipPos) | Computes texture coordinate for doing a screenspace-mapped texture sample. Input is clip space position. | 
| float4 ComputeGrabScreenPos (float4 clipPos) | Computes texture coordinate for sampling a GrabPass texure. Input is clip space position. | 
These functions are only useful when using per-vertex lit shaders (“Vertex” pass type).
| Function: | Description: | 
|---|---|
| float3 ShadeVertexLights (float4 vertex, float3 normal) | Computes illumination from four per-vertex lights and ambient, given object space position & normal. |