Unity3D ShaderLab 修改渲染队列进行深度排序
Unity3D ShaderLab 修改渲染队列进行深度排序
为了更深刻的理解透明度,我们还需要学习一下深度排序,简单来说就是物体被渲染的先后顺序。
Unity允许我们通过代码来控制某个特定物体渲染到屏幕的顺序。这个做法类似于photoshop中图层的概念。
开始之前,准备工作还是新建Shader Material,准备测试场景。为了对比 是需要使用2个材质球的。
打开我们的shader,稍微编辑一下即可看到效果。过程简单如下:
Shader "91YGame/DepthSort" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader {
//Tags { "RenderType"="Opaque" } default Tags.
Tags { "Queue"="Geometry-20" } //我们的
Zwrite Off //通知unity重写物体的渲染深度顺序。
LOD
CGPROGRAM
#pragma surface surf Lambert
sampler2D _MainTex;
struct Input {
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutput o) {
half4 c = tex2D (_MainTex, IN.uv_MainTex);
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
如你所见 ,修改的内容少到极致。。。。。
返回unity,看看效果:

是的,你没看错。影子在前面,暴露了他的真实坐标位置。可是在最终的成像渲染确把绿色的球体渲染到后面了。
默认情况下,unity会根据物体和摄像机之间的距离来决定渲染顺序,这是符合大多数场景需求的。如果某天你需要改变。
那么你是用Tags{}模块就可以自主控制渲染顺序了。
Unity内置的渲染队列如下:
| 渲染队列 | 渲染队列描述 | 渲染队列值 |
|
Background 【背景】 |
这个队列被最先渲染。它被用于skyboxes等。 | 1000 |
|
Geometry 【几何体】 |
这是默认的渲染队列。它被用于绝大多数对象。不透明几何体使用该队列。 | 2000 |
|
AlphaTest 【透明度测试】 |
用于alpha测试的几何体,它和Geometry队列不同,在所有几何体物体绘制后再进行渲染的对象,它更有效率。 | 2450 |
|
Transparent 【透明】 |
该渲染队列在Geometry和AlphaTest队列后被渲染,采用由后到前的次序。任何通过alpha通道混合的(也就是说,那些不写入深度缓存的Shaders)对象使用该队列,例如玻璃和粒子效果。 | 3000 |
|
Overlay 【覆盖】 |
该渲染队列是用于实现叠加效果的。任何最后被渲染的对象使用该队列,例如镜头光晕。 | 4000 |
一旦你确定好了使用哪一个渲染队列,就可以给他赋予内置的渲染队列标签了。我们的着色器使用Geometry,所以我们写的是Tags { "Queue"="Geometry-20" }。
同时我们告诉物体再几何体队列之后在进行渲染,所以我们把它修改成了"Geometry-20"。这样做的目的就是告诉unity,我们将它修改改成一个不透明或者说是实体对象。
但是它会在其他所有不透明的物体之后才进行渲染。
最后,我们需要在subshader中申明Zwrite 标签。这样告诉unity 我们要重写物体的渲染深度顺序。
我们为它所标识的渲染队列赋予了一个值,Zwrite 的值被设置为Off。不设置,木有效果的哦!
ZWrite:是否此物体的像素深度会被记录(默认记录)
Zwrite on:进行深度记录
Zwrite off:不记录深度,通常用于半透明物体。
Unity3D ShaderLab 修改渲染队列进行深度排序的更多相关文章
- 【Unity Shaders】Transparency —— 使用渲染队列进行深度排序
本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...
- Unity3D ShaderLab立方体图的法线渲染
Unity3D ShaderLab立方体图的法线渲染 某些情况下,我们希望立方体图的材质球上产生法线效果,来更多的表现细节,比如菱形花纹的玻璃,冰块的表面. 在帧数的协调下,我们可以通过input结构 ...
- Unity3D ShaderLab 立方体图的反射遮罩
Unity3D ShaderLab 立方体图的反射遮罩 上一篇,简单的介绍了立方体图的反射,那么我们能不能使用一张纹理对其进行指定遮罩呢?这样美工可以更好的控制图像的效果. 我们接着使用上一篇的sha ...
- Unity3D ShaderLab 简单的立方体图反射
Unity3D ShaderLab 简单的立方体图反射 反射是着色器模拟现实环境的一个关键因素,它能使我们的着色器渲染效果更加具备视觉冲击,因为他利用了我们周围的环境, 让着色器反射外界的场景信息并将 ...
- Unity3D ShaderLab 创建自定义高光类型
Unity3D ShaderLab 创建自定义高光类型 在上一篇,我们认识了Unity基础的高光实现,本次主要是研究如何对Phong高光类型进行顶点操作,以及在表面着色器中使用Input结构体的新参数 ...
- Unity3D ShaderLab BRDF模拟
Unity3D ShaderLab BRDF模拟 在上一篇,说到了使用渐变纹理着色,使用一个值来控制纹理的uv坐标,但是这也就表示我们只能得到一个线性的光照效果. 那么我们能不能通过观察方向的向量结合 ...
- 关于Unity中LOD和渲染队列----渲染通道通用指令(一)
每个shader里面有很多的subshader,如果所以的subshader都不执行的话就,就执行fallback.每个subshader都可以设置一个LOD,整个shader也有一个LOD. 系统就 ...
- Unity3D ShaderLab 透明裁剪着色器
Unity3D ShaderLab 透明裁剪着色器 上一篇,我们介绍了使用Alpha实现透明的手法,其实Unity为我们的#pragma提供了另一种参数,是我们能做出更高效 简单的透明效果,也就是裁剪 ...
- Unity3D ShaderLab 漫反射卷积光照模型
Unity3D ShaderLab 漫反射卷积光照模型 漫反射卷积[Diffuse convolution]是一个模糊立方体的过程,它保留了立方图的整体光照强度,只模糊了细节. 这种效果在我们要活得一 ...
随机推荐
- Java 集合系列 09 HashMap详细介绍(源码解析)和使用示例
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- RAID5和RAID10,哪种RAID更适合你(上)
[IT168 专稿]存储是目前IT产业发展的一大热点,而RAID技术是构造高性能.海量存储的基础技术,也是构建网络存储的基础技术.专家认为,磁盘阵列的性能优势得益于磁盘运行的并行性,提高设备运行并行度 ...
- 多分类问题中,实现不同分类区域颜色填充的MATLAB代码(demo:Random Forest)
之前建立了一个SVM-based Ordinal regression模型,一种特殊的多分类模型,就想通过可视化的方式展示模型分类的效果,对各个分类区域用不同颜色表示.可是,也看了很多代码,但基本都是 ...
- 转--CSS选择器详解(一)常用选择器
今天复习一下CSS的知识,看了篇文章觉得很好,转来备用. 转自:http://www.cnblogs.com/fattydoit/p/3492028.html 目录 类型选择器 类选择器 ID选择器 ...
- GO工程和包
转载:http://blog.csdn.net/achelloworld/article/details/43956831 在Go语言中,包是函数与数据的集合,用package定义一个包,包的名字不一 ...
- JDE910笔记1--基础介绍及配置
1.一般JDE部署后环境: DV:开发环境 PY:测试环境 PD:正式环境 根据端口号区分不同环境,可配置.同时,JDE默认使用分发服务器,不同环境连接为不同的数据库. 2.命名规范: 自定义项目.函 ...
- java邮件
我们用过很多邮件,qq,163,网易等. 一.发送邮件需要遵循smtp协议,接收邮件需要遵循pop3协议 二.发邮件的过程 假设用qq邮件 写邮件-->点 “发送” --> qq邮件服务器 ...
- 一个关于qml插件的文章-转
制作Qt Quick 2 Extension Plugin的几个问题-Qt 经过几天的google和爬帖,加上自己的摸索,终于把新版的Qt Quick 2制作插件的问题给弄了个明白,工作流可以建立了. ...
- fwite写入文件
用双引号(")定义字符串,PHP 懂得更多特殊字符的转义序列: 转移序列 说明 \n 换行 \r 回车 \t 水平制表符 \[/td> 反斜线 \$ 美元符号 \" 双引号 ...
- warning malformed '#pragma pack(push[, id], n)' - ignored
bmp.c:8: warning: malformed '#pragma pack(push[, id], <n>)' - ignored bmp.c:33: warning: #prag ...