码迷,mamicode.com
首页 > 编程语言 > 详细

Unity Shaders and Effects Cookbook (6-3) 修改渲染队列Queue 来 修改渲染顺序

时间:2016-05-07 07:45:59      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:

默认情况下,Unity是按照物体与 摄像机 的距离,来决定哪个物体先渲染。远处的物体先渲染,先渲染的物体,就会被都渲染的物体遮挡。

Unity 提供了一些默认的渲染队列,比如最先被渲染的是 Background = 1000,然后是 Geometry =2000,一般在编辑器中创建的 物体都是处于 Geometry 这一渲染队列的。


有这么一个场景,里面有两个Sphere,一个远一些,一个近一些。

那么肯定的是,近一些的会遮挡远一些的,这是自然现象。远一些的先渲染。


但是有的时候,需要让远一点的物体 显示在 近一点的物体的上层,该怎么办?

按照上面所说,在编辑器中创建的物体 都是处于 Geometry = 2000 这一层的,而且 渲染队列 越小 越先渲染,所以只要减少 近一点的物体的渲染队列,让他先渲染 就可以。


搭建场景,添加两个 Sphere,一个近,一个远。

转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn

首先来看默认的显示

技术分享


新建 Material,新建Shader,按照下面步骤修改默认 Shader。

1、在 Tags 模块中声明物体的渲染队列 Queue,默认物体是 Geometry ,现在要让 近一点的物体 先渲染,那么就让渲染队列 减小,这里设置为 Geometry-20

Tags { "RenderType"="Opaque" "Queue"="Geometry-20"}

2、在 Tags{} 下面 添加 Zwrite Off 标记,告诉 Unity 我们要控制 物体的显示顺序,同时 不写入 渲染的深度缓存。

		Tags { "RenderType"="Opaque" "Queue"="Geometry-20"}
		Zwrite Off


只要修改这两个地方。


下面是完整Shader 代码

Shader "CookBookShaders/Chapt6-3/Queue" 
{
	Properties {
		_MainTex ("Base (RGB)", 2D) = "white" {}
	}
	SubShader 
	{
		Tags { "RenderType"="Opaque" "Queue"="Geometry-20"}
		Zwrite Off
		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"
}

在 Material 中选择新建的 Shader,然后把材质 拖到 近一点的 Sphere 身上,会发现 原来 近一点的 Sphere 被远一点的 Sphere 覆盖了!

技术分享


Unity 提供了一些默认的渲染队列。

Background:背景, 最先被渲染,用于天空盒 等。渲染队列值=1000

Geometry:几何体,默认的渲染队列,用于大多数物体,不透明几何体使用 这个队列,渲染队列值=2000

AlphaTest:透明度测试,用于alpha 测试的几何体,在几何体 被渲染之后再 渲染 alpha 测试的物体会更有效率,所以放到了 Geometry 后面,渲染队列值 = 2450

Transparent:透明,采用由后 到 前的顺序,任何经 alpha 混合,即 不写入深度缓冲的着色器 的物体应该放到这里渲染,比如玻璃和粒子效果,渲染队列值=3000

Overlay:覆盖,用于实现叠加效果,任何用于最后渲染的物体应该使用这个队列,比如镜头光晕。渲染队列值=4000


声明Zwrite 标签,就告诉了 Unity 我们要重写 物体的渲染 深度顺序,我们为它的渲染队列赋予了一个新值,所以简单的设置 Zwrite 为 off 。


示例项目打包下载:

http://pan.baidu.com/s/1cKA0ma


Unity Shaders and Effects Cookbook (6-3) 修改渲染队列Queue 来 修改渲染顺序

标签:

原文地址:http://blog.csdn.net/huutu/article/details/51335315

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!