Shaders are assets that contain code and instructions for the graphics card to execute.
MaterialsAn asset that defines how a surface should be rendered, by including references to the Textures it uses, tiling information, Color tints and more. The available options for a Material depend on which Shader the Material is using. More info
See in Glossary reference shaders, and setup their parameters (textures, colors and so on).
Unity contains some built-in shaders that are always available in your project (for example,
the Standard shaderA built-in shader for rendering real-world objects such as stone, wood, glass, plastic and metal. Supports a wide range of shader types and combinations. More info
See in Glossary). You can also write your own shaders and apply post-processing effects.
To create a new Shader, use AssetsAny media or data that can be used in your game or project. An asset may come from a file created outside of Unity, such as a 3D Model, an audio file or an image. You can also create some asset types in Unity, such as an Animator Controller, an Audio Mixer or a Render Texture. More info
See in Glossary > Create > ShaderA small script that contains the mathematical calculations and algorithms for calculating the Color of each pixel rendered, based on the lighting input and the Material configuration. More info
See in Glossary from the
main menu or the Project View context menu. A shader is a text file
similar to a C# script, and is written in a combination of Cg/HLSL and ShaderLabUnity’s declarative language for writing shaders. More info
See in Glossary languages
(see writing shaders page for details).
This inspectorA Unity window that displays information about the currently selected GameObject, asset or project settings, allowing you to inspect and edit the values. More info
See in Glossary section allows specifying default textures for a shader. Whenever a new
Material is created with this shader, these textures are
automatically assigned.
The Shader Inspector displays basic information about the shader (mostly shader tags), and allows compiling and inspecting low-level compiled code.
For Surface ShadersUnity’s code generation approach that makes it much easier to write lit shaders than using low level vertex/pixel shader programs. More info
See in Glossary, the Show generated code
button displays all the code that Unity generates to handle lighting and shadowing. If you really want
to customize the generated code, you can just copy and paste all of it back to your original shader file
and start tweaking.
The pop-up menu of the Compile and show code button allows inspecting final compiled shader code (e.g. assembly on Direct3D9, or low-level optimized GLSL for OpenGL ES) for selected platforms. This is mostly useful while optimizing shaders for performance; often you do want to know how many low-level instructions here generated in the end.
The low-level generated code is useful for pasting into GPU shader performance analysis tools (like AMD GPU ShaderAnalyzer or PVRShaderEditor).
On shader import time, Unity does not compile the whole shader. This is because majority of shaders have a lot of variants inside, and compiling all of them, for all possible platforms, would take a very long time. Instead, this is done:
At player build time, all the “not yet compiled” shader variants are compiled, so that they are in the game data even if the editor did not happen to use them.
However, this does mean that a shader might have an error in there, which is not detected at shader import time. For example, you’re running editor using Direct3D 11, but a shader has an error if compiled for OpenGL. Or some variants of the shader does not fit into shader model 2.0 instruction limits, etc. These errors will be shown in the inspector if editor needs them; but it’s also a good practice to manually fully compile the shader for platforms you need, to check for errors. This can be done using the Compile and show code pop-up menu in the shader inspector.
Shader compilation is carried out using a background process named UnityShaderCompiler
that is started by Unity
whenever it needs to compile shaders. Multiple compiler processes can be started (generally one per CPU
core in your machine), so that at player build time shader compilation can be done in parallel. While the
editor is not compiling shaders, the compiler processes do nothing and do not consume computer resources,
so there’s no need to worry about them. They are also shut down when Unity editor quits.
Individual shader variant compilation results are cached in the project, under Library/ShaderCache
folder.
This means that 100% identical shaders or their snippets will reuse previously compiled results. It also
means that the shader cache folder can become quite large, if you have a lot of shaders that are changed
often. It is always safe to delete it; it will just cause shader variants to be recompiled.
When you visit any website, it may store or retrieve information on your browser, mostly in the form of cookies. This information might be about you, your preferences or your device and is mostly used to make the site work as you expect it to. The information does not usually directly identify you, but it can give you a more personalized web experience. Because we respect your right to privacy, you can choose not to allow some types of cookies. Click on the different category headings to find out more and change our default settings. However, blocking some types of cookies may impact your experience of the site and the services we are able to offer.
More information
These cookies enable the website to provide enhanced functionality and personalisation. They may be set by us or by third party providers whose services we have added to our pages. If you do not allow these cookies then some or all of these services may not function properly.
These cookies allow us to count visits and traffic sources so we can measure and improve the performance of our site. They help us to know which pages are the most and least popular and see how visitors move around the site. All information these cookies collect is aggregated and therefore anonymous. If you do not allow these cookies we will not know when you have visited our site, and will not be able to monitor its performance.
These cookies may be set through our site by our advertising partners. They may be used by those companies to build a profile of your interests and show you relevant adverts on other sites. They do not store directly personal information, but are based on uniquely identifying your browser and internet device. If you do not allow these cookies, you will experience less targeted advertising. Some 3rd party video providers do not allow video views without targeting cookies. If you are experiencing difficulty viewing a video, you will need to set your cookie preferences for targeting to yes if you wish to view videos from these providers. Unity does not control this.
These cookies are necessary for the website to function and cannot be switched off in our systems. They are usually only set in response to actions made by you which amount to a request for services, such as setting your privacy preferences, logging in or filling in forms. You can set your browser to block or alert you about these cookies, but some parts of the site will not then work. These cookies do not store any personally identifiable information.