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. |

Did you find this page useful? Please give it a rating: