[Unity3D]如何计算某个pixel的depth precision

原创 2015年07月08日 09:52:53

摘要

最简单的避免z-fighting的方法是为camera调整一个合适的near clip和far clip,试一试都能出正确的值,但是如何理解这个值。

正文

参考这篇文章:
http://www.sjbaker.org/steve/omniv/love_your_z_buffer.html
这篇文章中有个计算器,通过这个计算器计算出了以下的depth precision。
其中计算depth precision使用到的函数如下(一般人找不到),其中nbit为depth buffer的精度,z为投影空间的深度。具体原理这个函数中公式以及推倒目前没有找到,回头再仔细看看wiki。

function zprec (nbits,zFar,zNear,z)
{
    var b = zFar * zNear / ( zNear - zFar ) ;
    var res = ( b / ( (b/z) - 1.0/(1<<nbits) ) ) - z ;

    if ( res < 0.0001 )
       return res ;
    else
       return Math.floor ( res * 100000.0 ) / 100000.0 ;
}

这个函数能计算出depth precision,depth precision的意义在于,只要两个pixel的z的精度之间的差值,超过了depth precision,则不会发生z fighting。
例如,near clip为0.1,farclip为10,某pixel的z为2,则算出的precision为0.000002360341147422673,所以在这个位置上两个pixel的z之间差值只要大于这个值,就不会发生z-fighting。

最后

算出这个值也没啥意思,文章里的结论说的挺好。

Always put zNear as far from the eye as you can tolerate.

如果near clip和far clip实在两全,那么就使用两个camera。

相关文章推荐

Unity3D图像后处理特效——Depth of Field 3.4

http://blog.csdn.net/amazonzx/article/details/7749329   Depth of Field 3.4 is a common postproce...

Unity3D翻译——Using Depth Textures

Using Depth Textures       使用深度纹理 原文地址:http://unity3d.com/support/documentation/Components/SL-Dept...

Unity3d Camera的Clear Flags、Culling Mask和Depth三个属性的理解

先说说 Clear Flags:Skybox:把颜色缓冲设置为天空盒,并完全清空深度缓冲 Solid:和天空盒一样,只是把颜色缓冲设置为纯色 Depth only:这个选项会保留颜色缓冲,但会清空...

Unity3d 获取屏幕depth与normal

Depth 获取Depth的几种方法,分别有不同效果 1. float2 depth_uv = float2(i.uv_MainTex.x, 1-i.uv_MainTex.y); flo...
  • wolf96
  • wolf96
  • 2015年06月01日 18:39
  • 2830

[unity3D基础知识]NGUI中深度depth和z轴关系 (转载)

问题源自一个帖子,因为上传的图比较多,就另开了这个贴写下自己的试验结果,原帖在下面链接中 http://game.ceeger.com/forum/read.php?tid=8911#info NGU...

Unity3D图像后处理特效——Depth of Field 3.4

Depth of Field 3.4 is a common postprocessing effect that simulates the properties of a camera lens....

Unity3d Shader开发(三)Pass(Culling & Depth Testing)

剔除是一种通过避免渲染背对观察者的几何体面来提高性能的优化措施。所有几何体都包含正面和反面。剔除基于大多数对象都是封闭的事实;如果你有一个立方体,你不会看到背离你的那一面(总是只有一面在你的前方),因...
  • Carl180
  • Carl180
  • 2015年02月01日 23:29
  • 479

Unity3D Shader官方教程翻译(七)----Shader语法:Pass的Culling & Depth Testing

ShaderLab syntax: Culling & Depth Testing 语法:面剔除及深度测试     Culling is an optimization ...
  • ldghd
  • ldghd
  • 2012年09月18日 12:19
  • 1145

Unity3D——主角面朝方向一定区域内对象角度计算

写在前面的话,前两天有个朋友在QQ上问我 如何获取主角面朝方向一定区域中的敌人对象。这个命题看似简单,其实里面蕴含了很多数学方面的东西。今天刚好有时间我就彻底的把这个疑问写在博客中。希望可以帮助到他。...

unity3d中的一些数学计算方法

以下所说的点都是unity中的坐标点(x, y, z)形式的 using UnityEngine; using System.Collections; public class MathfHel...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[Unity3D]如何计算某个pixel的depth precision
举报原因:
原因补充:

(最多只允许输入30个字)