Unity着色器常用关键字及属性
来源:互联网 发布:mac循环计数 编辑:程序博客网 时间:2024/05/24 04:58
看了好多次shader,不过还是感觉无从下手的去写shader,然后看shader的效果
个人认为还是因为shader基础打得不够扎实,顾特意再重温shader相关书籍的时候,看见有些常用关键字时,把他记录下来
希望这对学习unity shader的同学来说有些用
Shader
- 这是shader的根命令
SubShader
- 这个是子着色器,一个Shader里面可以有多个SubShader
Properties
- 属性块
常用属性
纹理属性选项(即2D等属性的{option})
Tags
- Queue 队列标签
Tags {“Queue”=”Transparent”}
- IgnoreProjector 忽略投影标签
Pass
- 每个通道都能使几何体被渲染一次,一个Subshader里面可以有多个Pass
两个特殊通道
UsePass例子:
UsePass “Specular/BASE”
Name “MyPassName”
使用Specular/BASE这个Pass,并在当前shader中重命名为MyPassName使用
所有通道名字都是大写开头,因此UsePass必须使用大写开头的名字来书写索引
GrabPass捕获当前屏幕内容到一个纹理中,纹理能在后续通道中通过_GrabTexture进行访问
通道渲染设置命令
SetTexture
- 设置纹理,格式为SetTexture [纹理属性名] {纹理块}
混合
- 混合是用来制作透明物体的
常用混合只能在RGBA模式下进行,物体的绘制顺序会影响到OpenGL的混合处理
Blend常用语法如下:- Blend Off
- 关闭混合
- Blend 源因子 目标因子
- 配置并开启混合,计算产生的颜色和源因子相乘,颜色缓冲中的颜色和目标因子相乘,然后两个颜色相加
- Blend 源因子 目标因子,源因子A 目标因子A
- 源因子,目标因子和上面相同,但是源因子A,目标因子A这些因子使用alpha通道进行混合
- BlendOp 操作
- 不是将加入的颜色混合在一起,而是对他们做一些操作,主要操作指令有Min(最小值)、Max(最大值)、Sub(求和)、RevSub
关于混合因子
OpenGL红宝书上的解释为:
源因子:就是当前的贴图,或光照计算后生成的颜色值
目标因子:就是显示器中的帧缓存的图
常用混合因子(对源因子和目标因子都有效)如下:
以下是常见的混合类型:
- Blend SrcAlpha OneMinusSrcAlpha //混合
- Blend One One //混合相加
- Blend One OneMinusDstColor //柔和相加混合
- Blend DstColor Zero //相乘混合
- Blend DstColor SrcColor //2倍相乘混合
通道标签
通道标签只能在通道(而不是子着色器)中使用
- LightMode
- 光照模式标签,它定义了光照管线中的通道的角色。比较少用,大多数情况下需要和光照进行互动的着色器会被写成表面着色器
常用光照模式标签表如下:
- RequireOptions
- 当某些额外条件满足时,该通道才会被渲染,它的值是SoftVegetation,需要在Quality Settings中开启SoftVegetation才渲染通道
Fallback
- 降级,如果没有子着色器能使用,将运行降级着色器,用法如下:
- Fallback “着色器名” //回归到指定着色器
- Fallback Off //不降级,也不会出现任何出错报警,没有子着色器也会继续运行
Category
- 分类是渲染命令的逻辑组,大多数情况下用于继承渲染状态
#pragma surface 表面函数 光照模式 [可选参数]
表面函数
表明那些CG函数中有表面着色器的代码,这个函数的格式如下:
void surf(Input IN,inout SurfaceOutpur o)光照模式
在光照模式中使用,内置的光照模式有Lamberr(漫反射)和BlinnPhong(高光)可选参数
可选参数列表如下:
标准的表面着色器输出结构体如下:
struct SurfaceOutput {
half3 Albedo; //反射光颜色
half3 Normal; //法线
half3 Emission; //自发光,用于增强物体自身的亮度,使之看起来好像可以自己发光
half Specular; //镜面高光
half Gloss; //光泽度
half Alpha; //透明度
};
表面着色器的输入结构体Input包含着所有着色器所需要的纹理坐标和附加值
纹理坐标必须在纹理名称前面加上”uv”,或者以”uv2”作为头命名来使用第二个纹理坐标集
附加值按需要加入Input中,常用附加值如下所示:
RenderType
在一个子着色器的Tags中可以设置RenderType,格式如:
Tags {“RenderType” = “Opaque”}
而RenderType的参数如下所示:
- Opaque: 用于大多数着色器(法线着色器、自发光着色器、反射着色器以及地形的着色器)。
- Transparent:用于半透明着色器(透明着色器、粒子着色器、字体着色器、地形额外通道的着色器)。
- TransparentCutout: 蒙皮透明着色器(Transparent Cutout,两个通道的植被着色器)。
- Background: Skybox shaders. 天空盒着色器。
- Overlay: GUITexture, Halo, Flare shaders. 光晕着色器、闪光着色器。
- TreeOpaque: terrain engine tree bark. 地形引擎中的树皮。
- TreeTransparentCutout: terrain engine tree leaves. 地形引擎中的树叶。
- TreeBillboard: terrain engine billboarded trees. 地形引擎中的广告牌树。
- Grass: terrain engine grass. 地形引擎中的草。
- GrassBillboard: terrain engine billboarded grass. 地形引擎何中的广告牌草。
顶点片元着色器
顶点片元着色器不使用灯光交互,实际着色器代码用CG或HLSL语言编写,嵌入在着色器的通道块中,常用编译指令表如下所示:
在only_renderers和exclude_renderers中的渲染器如下:
使用方法:#pragma only_renderers opengl
注意:每个顶点片元着色器必须包含一个顶点程序或者片元程序(或两者兼有),因此需要一个#pragma vertex命令或者#pragma fragment命令(或两者兼有)
顶点结构成员
- Unity着色器常用关键字及属性
- [unity 基础教程]给着色器shader添加透明属性
- Unity GameObject常用属性及操作
- Unity创建着色器
- Unity 着色器
- Unity着色器学习
- Unity着色器基础
- 着色器属性寄存器
- 【Unity手册】着色器参考
- Unity Shaders表面着色器
- Unity 简单渐变着色器
- unity水面波纹着色器
- 【Unity Shaders】学习笔记之为表面着色器添加属性(四)
- [cnblogs镜像]unity 模型 材质 贴图 关系;着色器属性
- unity常用属性总结
- Unity [属性] 常用
- 关键字着色
- Unity顶点着色器和片段着色器
- 高效求素数--筛法求素数
- 根据mysql表中字段创建hbase表
- Spring MVC配置response自动转json
- 进程和线程的一些问题
- ActiveMQ 即时通讯服务 浅析
- Unity着色器常用关键字及属性
- 解决HorizontalScrollView与SeekBar滑动冲突的问题.
- LeetCode -- Sum Root to Leaf Numbers
- 程序员整理的各种不错的工具
- SAN存储网络
- python判断文件类型
- JQuery 学习,翻译练习
- Android ADB server didn't ACK * failed to start daemon * 简单有效的解决方案
- linux下gcc/g++编译器使用简介及makefile的书写规则