outline effect unity

Outline effect unity

You will learn to write a screen space shader to draw outlines around objects. This shader will be integrated with Unity's post-processing stack.

Rendering outlines is a technique that is often used in games either for aesthetic reasons or for supporting gameplay by using it for highlights and selections around an object. For example in the game Sable, outlines are used to create a comic-book-like style. In The Last of Us, outlines are used to highlight enemies when the player goes into stealth mode. However, when using it for rendering outlines, this physical meaning of the effect is not important. The following formula is used to form the outline.

Outline effect unity

.

The result is that now all the vertices get moved an equal distance in object space, usually resulting in an outline that looks more equal-width.

.

You will learn to write a screen space shader to draw outlines around objects. This shader will be integrated with Unity's post-processing stack. Outline , or edge detection effects are most commonly associated and paired with toon style shading. However, outline shaders have a wide variety of uses, from highlighting important objects on screen to increasing visual clarity in CAD rendering. This tutorial will describe step-by-step how to write an outline shader in Unity. The shader will be written as a custom effect for Unity's post-processing stack , but the code can also be used in a regular image effect. Concepts introduced here can be found in the Recolor effect from the Kino repository by keijiro , a Unity project that contains a variety of custom effects for the post-processing stack. To complete this tutorial, you will need a working knowledge of Unity engine, and an intermediate knowledge of shaders. These tutorials are made possible, and kept free and open source , by your support. If you enjoy them, please consider becoming my patron through Patreon.

Outline effect unity

In this tutorial, we are going to create an outline effect for basic meshes using Shader Graph in Unity3D. We will encounter some restrictions of Shader Graph and learn how we can overcome this kind of restrictions. At the end of the tutorial, we are going to obtain the following effect:. In order to create an outline for an object, we render an additional image with the same geometry and scale it a little bit to obtain the outline. Nevertheless, we also need to prevent to render the pixels of the newly created image when both images overlap. Therefore, we will see an outline effect around the object.

Telegraph obituaries macon ga

The dot product is ideal for this; not only does it return a scalar, but by performing the dot product for each normalFiniteDifference on itself , we are also squaring the value. For the "finished" screenshots in this tutorial, and for best results, anti-aliasing is set to Subpixel Morphological Anti-aliasing SMAA at High quality. The above process is very similar to what we did with depth, with some differences in how we compute the edge. I recommend reading this post on creating an outline in clip space. A third method to render an outline is by using something that I call a blurred buffer. You can use the color white for all silhouettes, allowing you to choose a single color for all outlines at the end by multiplying with the desired outline color. Note that depth is non-linear ; as distance from the camera increases, smaller depth values represent greater distances. While setting it to a value of 6 removes the artifacts entirely, it also is too large a threshold for some outlines that should be detected, like the teapot's rim or some staircase steps. To resolve this, you can modulate with a mask that is generated from the dot product between the normal vector N N N and the view direction V V V. Since the difference between nearby depth values can be very small and therefore difficult to see on screen , we multiply the difference by to make it easier to see. This would be a render texture that you create yourself during the render process, containing custom data that you wish to use to generate outlines.

Rendering outlines is a technique that is often used in games either for aesthetic reasons or for supporting gameplay by using it for highlights and selections around an object.

By scaling our UVs this way, we are able to increment our edge width exactly one pixel at a time—achieving a maximum possible granularity—while still keeping the coordinates centred around i. This method can avoid artifacts with models that have sharp edges but the big downside is the manual setup involved since you need to generate custom normals for your mesh, although this process can be automated using a script that bakes the normals. Add the following below the line declaring edgeDepth. This silhouette buffer is then blurred which expands the silhouette which is then used to render the outline. The result is that now all the vertices get moved an equal distance in object space, usually resulting in an outline that looks more equal-width. While this has eliminated the dark greys, it has created a few issues. One side-effect is that there will be absolutely no inner lines on the inside of the object and if two objects overlap, the outline will also only be visible around those 2 objects. We will multiply this value by our matrix to transform the direction to view space. Open the Outline shader in your preferred code editor. This tutorial will describe step-by-step how to write an outline shader in Unity. There are several trivial ways to do this, from simply adding the two values together, to plugging them into the max function. It is important to note that this is only an approximation of the fresnel effect, but it works well for our outlines. As well, some functionality, such as texture sampling, is now handled by macros. It was stated earlier that the depth buffer is non-linear , which has implications for our thresholding. Add the following code to the shader file

0 thoughts on “Outline effect unity

Leave a Reply

Your email address will not be published. Required fields are marked *