博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity 深度冲突的解决方法
阅读量:4597 次
发布时间:2019-06-09

本文共 1058 字,大约阅读时间需要 3 分钟。

Dillon|2014-02-12 10:00|5899次浏览|
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 在场景允许的范围前越大越好.

转载于:https://www.cnblogs.com/forlove/p/3785294.html

你可能感兴趣的文章
gui编程实践(3)--记事本界面 JMenuBar JMenu
查看>>
黑马程序员--抽象类与接口
查看>>
IaaS,PaaS,SaaS 的区别
查看>>
Python复习基础篇
查看>>
关于Cocos2d-x中背景音乐和音效的添加
查看>>
.Net持续集成 —— Jenkins+Git+WebDeploy
查看>>
01_Numpy基本使用
查看>>
checkbox和文字对齐
查看>>
JConsole远程连接配置 服务器监控工具
查看>>
了解HTTP协议栈(实践篇)
查看>>
loj10035. 「一本通 2.1 练习 1」Power Strings
查看>>
%s的用法
查看>>
调用底层不能直接访问的类和方法
查看>>
清理缓存的方法 #DF
查看>>
JAVA array,map 转 json 字符串
查看>>
2017-12-27练习
查看>>
NET设计规范(二) 命名规范
查看>>
VMware 9.0.1安装Mac OS X Mountain Lion 10.8.2
查看>>
SSL延迟
查看>>
android新手关于左右滑动的问题,布局把<android.support.v4.view.ViewPager/><ImageView/> 放在上面就不行了。...
查看>>