文章目录
材质
材质是一个数据集,主要功能就是给渲染器提供数据和光照算法。
Unity Shader
Unity Shader 是 Unity 为开发者提供的高层级的渲染抽象层。
Unity提供了 4 种 Unity Shader 模板
- Standard Surface Shader
包含了一个包含了标准光照模型的表面着色器模板; - Unlit Shader
不包含光照(但包含雾效)的基本顶点/片元着色器; - Image Effect Shader
为我们实现各种屏幕后处理效果提供了一个基本模板; - Compute Shader
产生一个特殊的 Shader,这类 Shader 旨在利用 GPU 的并行性来进行一些常规渲染流水线无关的计算;
在Unity中需要配合使用材质和Unity Shader才能达到效果。常见的流程:
- 创建Unity Shader 和材质;
- 把 Unity Shader 赋给材质;
- 将材质赋给要渲染的对象;
- 在材质面板上调整 Unity Shader 属性(使用的纹理、漫反射系数等)来查看渲染效果;
ShaderLab
Unity 提供的编写 Unity Shader 的一种说明性语言。
Unity Shader在 Inspector 面板中显示的内容
- Default Maps
指定该 Unity Shader 使用的默认纹理。当任何材质第一次使用该 Unity Shader 时,这些纹理就会自动被赋予到相应的属性上。 - Surface shader
是否是表面着色器。 - Show generated code
这个文件里将显示 Unity 在背后为该表面着色器生成的顶点/片元着色器。 - Fixed function
是否是固定函数着色器。 - Compile and show code
下拉列表可以让开发者检查该 Unity Shader 针对不同图像编程接口(例如 OpenGL、D3D9、D3D11等)最终编译成的 Shader 代码,直接单击该按钮可以查看生成的底层的汇编指令,可以利用这些代码来分析和优化着色器。 - Cast shadows
是否产生阴影 - Render queue
使用的渲染队列 - LOD
细节级别,可以在一个 shader 里写一出组 SubShader ,分别设置不同的 lod ,lod 越大的对应性能越好,越低的性能越差。就可以用设置 lod 的方法来控制游戏画面的渲染质量。在Unity3D->Project Setting->QualitySettings中的Maximum LODLevel可以设置最大LOD等级,Shader的LOD值是小于所设定的LOD值,才会被编译使用。Maximum LODLevel的等级可以设置7个级别,例如设置为1,则表示把最大LOD值设置为100,等级2,则最大LOD值为200,以此类推,若设置为0,则表示不进行LOD判断,任何LOD值的Shader都会被使用。 - Ignore projector
是否忽略投影 - Disable batching
是否关闭批处理
Unity Shader 的结构
// Shader 的名字,通过名字在材质面板的下拉列表中查找。
Shader "AAAA/NewUnlitShader"
{
Properties
{
// Properties 是材质和 Unity Shader 的桥梁;
// Properties 语义块中包含了一系列的属性,这些属性将会出现在材质面板中;
// Properties 可以不声明任何材质属性;
_MainTex ("Texture", 2D) = "white" {}
_Color ("Color Tint", Color) = (1.0, 1.0, 1.0, 1.0)
// _Name ("Display name", Float) = 1
// 解释:
// _Name 属性的名字,一般由下划线开始