Unity3D ShaderLab 修改渲染队列进行深度排序
来源:互联网 发布:java 数据字典 编辑:程序博客网 时间:2024/06/07 13:31
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 200 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等。1000Geometry
【几何体】
这是默认的渲染队列。它被用于绝大多数对象。不透明几何体使用该队列。2000AlphaTest
【透明度测试】
用于alpha测试的几何体,它和Geometry队列不同,在所有几何体物体绘制后再进行渲染的对象,它更有效率。2450Transparent
【透明】
该渲染队列在Geometry和AlphaTest队列后被渲染,采用由后到前的次序。任何通过alpha通道混合的(也就是说,那些不写入深度缓存的Shaders)对象使用该队列,例如玻璃和粒子效果。3000Overlay
【覆盖】
该渲染队列是用于实现叠加效果的。任何最后被渲染的对象使用该队列,例如镜头光晕。4000一旦你确定好了使用哪一个渲染队列,就可以给他赋予内置的渲染队列标签了。我们的着色器使用Geometry,所以我们写的是Tags { "Queue"="Geometry-20" }。
同时我们告诉物体再几何体队列之后在进行渲染,所以我们把它修改成了"Geometry-20"。这样做的目的就是告诉unity,我们将它修改改成一个不透明或者说是实体对象。
但是它会在其他所有不透明的物体之后才进行渲染。
最后,我们需要在subshader中申明Zwrite 标签。这样告诉unity 我们要重写物体的渲染深度顺序。
我们为它所标识的渲染队列赋予了一个值,Zwrite 的值被设置为Off。不设置,木有效果的哦!
ZWrite:是否此物体的像素深度会被记录(默认记录)
Zwrite on:进行深度记录
Zwrite off:不记录深度,通常用于半透明物体。
原文地址:http://www.cnblogs.com/2Yous/p/4271168.html
- Unity3D ShaderLab 修改渲染队列进行深度排序
- Unity3d shader中Queue 使用渲染队列进行深度排序
- 【Unity Shaders】Transparency —— 使用渲染队列进行深度排序
- Unity3d渲染队列
- ShaderLab基础(渲染管线)
- Unity3D的渲染排序思路
- Unity3D Shaderlab 学习记录
- Unity3D ShaderLab法线贴图
- Unity3D Shaderlab 学习记录
- 【Unity3D】ShaderLab学习笔记
- 【Unity3D】ShaderLab实战
- ShaderLab基础(深度测试)
- Unity3D ShaderLab<二>Shader属性
- Unity3D ShaderLab<二>Shader属性
- Unity3D翻译——Advanced ShaderLab topics
- Unity3D ShaderLab 混合两张贴图(Blend)
- Unity3D ShaderLab 创建自定义高光类型
- Unity3D ShaderLab 静态贴图光照模型
- jdbc prepareStatement 操作
- http_build_query()函数使用方法
- linux文件系统管理之文件与目录管理(终章)
- 8.函数式编程
- java web使用监听器实现定时周期性执行任务的功能
- Unity3D ShaderLab 修改渲染队列进行深度排序
- Qt使用多线程的一些心得——2.继承QObject的多线程使用方法
- navicat for mysql 远程连接数据库时出现2003-Can't connect to Mysql on '主机名'(10061)解决方法
- 《近匠》专访 SENSORO CTO 赵东炜:物联网行业发展分析
- 解析类路径下properties文件
- 编写一个函数。函数的3 个参数是一个字符和两个整数。字符参数是需要输 出的字符。第一个整数说明了在每行中该字符输出的个数,第二个整数指的是需 要输出的行数。编写一个调用该函数的程序
- 硬件锁使用说明
- Xcode历史版本下载
- any.h