Unity 深度冲突的解决方法

Dillon|2014-02-12 10:00|5899次浏览|Unity(280)0

3d游戏中当2个片元距离近裁减平面 w  落在同一个区间的时候,他们的深度是相等的. 最终你所看到的结果,就是下面的这种样子:

注意到蓝色线框里面.

要解决这个问题, 你只要google 或者去 beyond3d,等论坛,搜索 depth fighting ,得到的答案往往就是设置深度偏移. OpenGL : Polygon offset. D3D: Depth Bais. 拿OpenGL 来说,就是对有存在深度冲突的2个 Mesh Object  A,B如下方式渲染.


1

2

3

4

5

A.Render();

glEnable(GL_POLYGON_OFFSET_FILL);

glPolygonOffset(0.0f,-1.0f);

B.Render();

glDisable(GL_POLYGON_OFFSET_FILL);

这是一个不错的方法,但是实际操作起来很麻烦,而且没有效率. 注意到,你必须一先一后的渲染这2个对象, 拿上图来说,我需要在MAX 中把手套和手臂脱离,形成一个独立的节点,然后我起码需要新建立2个顶点缓存,并在渲染的过程中设置2次.这对于带宽是个不小的代价.所以我不是很赞成这 样去处理,当然,有的时候无法避免了,也会如此..

如果避免发生Z-Fighting 才是关键. 注意到上面的depth – w 的位平面对应关系. 由于硬件都只能支持一定的深度格式,也就是说,Depth bits 是一定的,假为 D.而顶点的投影深度则毫无限制,他可以是 near_clip —> far_clip 的任意一个浮点数.因此

dw/D = (far_clip – near_clip)/near_clip;

从上面可以看出, 要想dw 更精确,那么 near_clip 必然要更大(适用范围是far_clip >> near_clip).

上面那张存在depth-fighting 的截图当时的情况是 near_clip :0.0001 far_clip : 64000.0

下面的是在near_clip 0.1 far_clip 不变.

继续提高定点投影深度,也不会出现难看的深度冲突了.

在unity中具体修改方法是在场景中找到对应的相机,设置Clipping Planes的Near 在场景允许的范围前越大越好.

Unity 深度冲突的解决方法

时间: 2024-12-08 17:16:09

Unity 深度冲突的解决方法的相关文章

关于Android滑动冲突的解决方法(二)

之前的一遍学习笔记主要就Android滑动冲突中,在不同方向的滑动所造成冲突进行了了解,这样的冲突非常easy理解,当然也非常easy解决.今天,就同方向的滑动所造成的冲突进行一下了解,这里就先以垂直方向的滑动冲突为背景,这也是日常开发中最常见的一种情况. 这里先看一张效果图 由于GIF 图片大小的限制.截图效果不是非常好 上图是在购物软件上常见的上拉查看图文详情,关于这中动画效果的实现.事实上实现总体的效果,办法是有非常多的,网上有非常多相关的样例,可是对某些细节的处理不是非常清晰.比方,下拉

jQuery与其它库冲突的解决方法(转)

原文出处:http://www.jb51.net/article/24014.htm 在jQuery库中,几乎所有的插件都被限制在它的命名空间里.全局的对象都很好地存储在jQuery命名空间里,因此当把jQuery和其它javascript类库一起使用时,不会引起冲突. (注意:默认情况下,jQuery用$作为自身的缩写而以) 如果jQuery类库和别的类库冲突的话,可以使用jQuerynoConflict()函数来将变量$的控制权移交出给其它的javaScipt库.看下面小片断代码 <scri

query和prototype库冲突的解决方法

我们在使用 jQuery 的过程中我们会频繁使用 $ 符号,$是JQuery的别名,所有使用$的地方也都可以使用JQuery来替换,例如 如$('#msg')等同于JQuery('#msg')的写法. 在页面中同时引入另一个js类库,并且该类库也是用了 $ 符号时,$ 代表的变量将被覆盖.例如 prototype.js. 我们举个例子: A.jquery.js 在 prototype.js 之前引入 <script src="jquery.js" type="text/

git 本地库推送远程库 版本冲突的解决方法

参考: http://blog.csdn.net/shiren1118/article/details/7761203 github上的版本和本地版本冲突的解决方法 $ git push XXX master把本地master分支的最新修改推送至远程库XXX Username for 'https://github.com': shiren1118Password for 'https://[email protected]': To https://github.com/shiren1118/

Linux下检测IP地址冲突及解决方法

Linux下检测IP地址冲突及解决方法 问题说明: 在公司办公网内的一台物理机A上安装了linux系统(ip:192.168.9.120),在上面部署了jenkins,redmine,svn程序.由于是在办公网内,这台机器和同事电脑都是在同一网段的. 突然某天问题出来了:有部分同事远程ssh登陆不上这台linux系统的机器,jenkins/redmine/svn也登陆不上,其他部分同事可以正常使用. 后来发现,是因为这台linux机器的ip被人占用了,ip地址冲突引起的!! 下面介绍下检查ip地

Hyper-V与VirtualBox或VMware虚拟机软件冲突的解决方法(VirtualBox只能创建32位虚拟机)

Hyper-V与VirtualBox或VMware虚拟机软件冲突的解决方法 Hyper-V是微软的虚拟化软件,功能类似VirtualBox.VMware,可以用来创建虚拟机. 虚拟化软件都是基于CPU等底层硬件的Hypervisor机制来实现的,而他们必须独占管理 Hypervisor,因此不能在一台电脑中同时运行多个虚拟化软件.由于Hyper-V与VirtualBox.VMware不能共存,因此当Hyper-V打开时,VirtualBox.VMware就不能正常工作了.目前还没有找到Virtu

LIBCMTD.lib与libcpmtd冲突的解决方法。

error: 1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" ([email protected]@Z) 已经在 LIBCMTD.lib(new.obj) 中定义 1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" ([

Mac Pro的HDMI接口与WI-FI可能存在冲突的解决方法

当我将Mac Pro通过HDMI->DVI转接头接上一台显示器时,正在使用的WI-FI网络立马不能使用,重新连接网络也不行,但断开HDMI连接后,WI-FI立马恢复正常. 在网上查,在apple的中国支持社区里也找了,包括问询苹果公司的技术支持,都没得到解答,后来在Apple的美国支持社区里,看到有人也遇到此问题,并给出了解决方法. 解决方法: 1. 连接登录到无线路由的管理界面,如TP-LINK的管理入口是http://192.168.1.253 2. 在其中修改无线设置的参数,将信道的默认设

关于单双引号与数组冲突问题,解决方法

最近在写站群程序,想把配置都搞成文件存放起来.在开发过程中出现了单双引号与数组冲突的问题. 错误提示: Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING 给大家举个栗子: <?php $a['aaa'] = 'bbb'; echo "'$a['aaa']'"; ?> 解决方法:把中括号中的2个单引号