Marterial, Shader, Texture
Material是渲染结果,Shader是渲染过程,方式,Texture是渲染中的一个参数
Unity Shader Code Struct
Properties
输入的一些参数
SubShader
Unity会调用第一个显卡可用的Shader,且只调用一个,所以高级的SubShader写在前面
1 | SubShader{[Tags][LOD][RenderSetup]Passdef[Passdef...]} |
- Tags: 一般写成以下形式
1
Tags{ "Queue" = "Geometry - 20" "RenderType" = "Opaque" }
下面介绍一下Tags中的Queue和Render Type
Queue: 表示渲染顺序,值越高渲染越后面,叠的越前面
Render Type: 一般用于以下两个函数
1 | Camera.RenderWithShader(Shader shader, string replacementTag); |
LOD: Level of Detail
可以设置支持的最大LOD(shader.maximumLOD),那么有比这个值大的LOD的shader就不会被执行RenderSetup: 一些设定值
Pass: 一个pass是一个完整的Graphics Pipeline
UsePass{}: 在其中定义一个name,可让其他shader去抓,达到重复利用的效果
GrabPass{}: 抓取画面中的渲染结果,存到一张贴图,再对它进行一些细节操作,比如玻璃效果、模糊效果1
Pass{[Name and Tags][RenderSetup]}
如果在前面的RenderSetup里面写的话,下面的每个Pass都会被套用,在Pass里写就是自己用
FallBack
所有SubShader都不能用时,当备用
Unity Shader Category
Fixed Function Shader
- 不可程式码编辑要用选项式(设定式)
- 完全使用ShaderLab命令
- 支持旧设备
- 用于简单效果
Surface Shader
- 可程式码编辑(CGPROGRAM…ENDCG,CG语法)
- 编辑多个Pass
- 编译Vertex Shader,Fragment Shader
- 硬件帮我们封装了很多光影处理细节和光照模式
Vertex and Fragment Shader
- 可程式码编辑(CGPROGRAM…ENDCG,CG语法)
- 最灵活弹性,语法最复杂
- 特别的效果(顶点位置改变,部分颜色混合)
A Shader Example
1 | Shader "Custom/Sample" |