# Utility Nodes

**Visual Studio 2015**

The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.

The latest version of this topic can be found at Utility Nodes.

In the Shader Designer, utility nodes represent common, useful shader calculations that don't fit neatly into the other categories. Some utility nodes perform simple operations such as appending vectors together or choosing results conditionally, and others perform complex operations such as computing lighting contributions according to popular lighting models.

Node | Details | Properties |
---|---|---|

Append Vector | Creates a vector by appending the specified inputs together.Input:`Vector` : `float` , `float2` , or `float3` The values to append to. `Value to Append` : `float` The value to append. Output:`Output` : `float2` , `float3` , or `float4` depending on the type of input `Vector` The new vector. | None |

Fresnel | Computes the Fresnel fall-off based on the specified surface normal. The Fresnel fall-off value expresses how closely the surface normal of the current pixel coincides with the view vector. When the vectors are aligned, the result of the function is 0; the result increases as the vectors become less similar, and reaches its maximum when the vectors are orthogonal. You can use this to make an effect more or less apparent based on the relationship between the orientation of the current pixel and the camera. Input:`Surface Normal` : `float3` The surface normal of the current pixel, defined in the current pixel's tangent space. You can use this to perturb the apparent surface normal, as in normal mapping. Output:`Output` : `float` The reflectivity of the current pixel. | ExponentThe exponent that's used to calculate the Fresnel fall-off. |

If | Conditionally chooses one of three potential results per component. The condition is defined by the relationship between two other specified inputs. For each component of the result, the corresponding component of one of the three potential results is chosen, based on the relationship between the corresponding components of the first two inputs. Input:`X` : `float` , `float2` , `float3` , or `float4` The left-hand side value to compare. `Y` : same type as input `X` The right-hand side value to compare. `X > Y` : same type as input `X` The values that are chosen when `X` is greater than `Y` .`X = Y` : same type as input `X` The values that are chosen when `X` is equal to `Y` .`X < Y` : same type as input `X` The values that are chosen when `X` is less than `Y` .Output:`Output` : `float3` The chosen result, per component. | None |

Lambert | Computes the color of the current pixel according to the Lambert lighting model, by using the specified surface normal. This color is the sum of ambient color and diffuse lighting contributions under direct lighting. Ambient color approximates the total contribution of indirect lighting, but looks flat and dull without the help of additional lighting. Diffuse lighting helps add shape and depth to an object. Input:`Surface Normal` : `float3` The surface normal of the current pixel, defined in the current pixel's tangent space. You can use this to perturb the apparent surface normal, as in normal mapping. `Diffuse Color` : `float3` The diffuse color of the current pixel, typically the Point Color. If no input is provided, the default value is white.Output:`Output` : `float3` The diffuse color of the current pixel. | None |

Mask Vector | Masks components of the specified vector. You can use this to remove specific color channels from a color value, or to prevent specific components from having an effect on subsequent calculations. Input:`Vector` : `float4` The vector to mask. Output:`Output` : `float4` The masked vector. | Red / XFalse to mask out the red (x) component; otherwise, True.Green / YFalse to mask out the green (y) component; otherwise, True.Blue / ZFalse to mask out the blue (z) component; otherwise, True.Alpha / WFalse to mask out the alpha (w) component; otherwise, True. |

Reflection Vector | Computes the reflection vector for the current pixel in tangent space, based on the camera position. You can use this to calculate reflections, cubemap coordinates, and specular lighting contributions Input:`Tangent Space Surface Normal` : `float3` The surface normal of the current pixel, defined in the current pixel's tangent space. You can use this to perturb the apparent surface normal, as in normal mapping. Output:`Output` : `float3` The reflection vector. | None |

Specular | Computes the specular lighting contribution according to the Phong lighting model, by using the specified surface normal. Specular lighting gives a shiny, reflective appearance to an object, for example, water, plastic, or metals. Input:`Surface Normal` : `float3` The surface normal of the current pixel, defined in the current pixel's tangent space. You can use this to perturb the apparent surface normal, as in normal mapping. Output:`Output` : `float3` The color contribution of specular highlights. | None |

Show: