本文由@唐三十胖子出品,转载请注明出处。
文章链接:https://blog.csdn.net/iceSony/article/details/84258594
这篇文章将总结和提炼《Unity Shader入门精要》的第三章“ShaderLab基础”的内容。
通过这篇文章,你可以知道
1)Unity中的ShaderLab语法
2)Properities属性类型介绍
3)SubShader中的Tags介绍
一.Unity中包含4类模板
Standard surface shader:普通表面着色器
输出标准光照模型
Unlit shader:无光照着色器
输出不含光照的基本顶点、片元着色器
Image Effect Shader:屏幕特效着色器
实现屏幕后处理效果
Compute Shader:计算着色器
利用GPU进行与渲染流水线无关的运算(书中并未涉及)
着色器必须和纹理搭配
组合形成纹理:)
这些其实都可以不用知道,模板而已
二.ShaderLab的好处
Unity Shader 之前说过unity有自己的shader开发语言
事实上也就是HLGL\CG的封装
ShaderLab VS 传统渲染过程
极大简化了编辑流程
Unity Shader结构
Shader “ShaderName” { Properties { //属性 } SubShader { //显卡A使用的子着色器 } SubShader { //显卡B使用的子着色器 } Fallback “VertexLit” }
shader名称很简单,你在这里设置的名字都是在这里的
三.属性写法
Properities { 变量名(“编辑器显示名”,属性类型)=默认值 }
变量名也就是shaderlab获取变量的名称
显示名就是Unity中显示的属性名称
属性类型如下图
默认值就是属性的默认状态
四.子着色器相关
SubShader { [Tags] [RenderSetup] Pass{} }
4.1 Tags 渲染标签
样式Tags{“渲染名称”=”渲染值”}
告知如何渲染物体
4.2 RenderSetup渲染设置
设置显卡的渲染状态
这些我们先记得有这些属性就行
和Tags不同的是,RenderSetup可以写到Pass中
目的是不同Pass中显卡渲染设置不同
而SubShader中的Tags和Pass中Tags是不同的
4.3 Pass代表完整的渲染流程(尽可能少)
一个pass一次渲染
Pass { [Name] [Tags] [RenderSetup] //Other code }
定义Name
Name “Pass名称”
这样子我们可以在其他的shaderlab中通过
UsePass “着色器名称/Pass名称”
注意Usepass的着色器名称/Pass名称都要是大写!
Pass中的Tags使用
最后的保底
FallBack “name”
之前说过不同机器的显卡不同,我们要用一个显卡的东西来玩。