前置:Unity3D基础3:贴图与材质球
一、Shader 与材质
贴图 + 着色器(Shader) = 材质球
同一张贴图使用不同的着色器,可以展现出不同的效果:
在下面这个位置设置 Shader,默认的 Standard Shader 是一种基于物理渲染的着色器,自带一些光照效果
下面是可视化面板,可以直接调整 Shader 里的各个参数,可调整的参数当然由对应的 Shader 决定
二、创建一个 Shader
先提前了解下 Unity Shader 的三种编写形式:
- 顶点/片元着色器:最标准的着色器形式,就是在之前 OpenGL 的学习中直接编写的顶点着色器和片段着色器
- 表面着色器:Unity3D自己创造的着色器类型,本质上还是顶点 / 片元着色器,只不过帮你实现了很多的光照细节,很多时候只需要编写很短的代码就可以实现很全面的渲染效果,当然了表面着色器的渲染开销会比较大
- 固定函数着色器:对应固定渲染管线
创建 Shader 的方法和创建材质一样:Project视图 / 菜单 Assets → Create → Shader,只不过在创建 Shader 时有四种选择:
- Standard Surface Shader:生成一个包含标准光照模型的表面着色器模板
- Unlit Shader:产生一个不包含光照(但包含雾效)的基本的顶点/片元着色器模板
- Image Effect Shader:基本图像处理模板
- Compute Shader:特殊的 Shader 文件,主要利用 GPU 的并行性来进行一些与常规渲染流水线无关的计算,超纲了
Shader 的导入设置(Inspector)面板如下:
可以方便地查看其使用的渲染队列(Render queue)、 是否关闭批处理(Disable batching)、属性列表(Properties)等信息
- 默认纹理,也可以在Shader拖入材质球后,在材质球的属性面板里设置
- 对于表面着色器,点击后可以查看 Unity 在背后为该表面着色器生成的顶点/片元着色器代码,同理下面的 Fixed function 为固定函数着色器对应的顶点/片元着色器代码
- 可以检查该 Unity Shader 针对不同图像编程接口(OpenGL、D3D9等)最终编译成的 Shader 代码
Unity Shader 本质上是一个文本文件,可以用任意编辑器打开,建议使用 VSCode,可以装对应的提示插件