美文网首页OpenGL游戏引擎程序员
图形学 遮挡剔除算法综述

图形学 遮挡剔除算法综述

作者: 白痴毛 | 来源:发表于2017-09-28 12:48 被阅读589次

1. Hidden Line Removal (HLR)

光栅化的文章中,我们使用Z-Buffer来判断三角形面片是否遮挡,但Z-Buffer不适用于纯线框的模型的遮挡剔除。原因如下。


就如同上图左侧,在A点的位置,左侧的三角形由于只画边不画面,所以A点它是不画的,所以就没有Z值来与右侧的三角形的A点的Z值做比较,因此就没法判断A点是谁在前谁在后。

HLR算法总结

  1. Raycasting(光线投射)


  • 算出每条光线在屏幕上某个像素点上的交点位置
  • 在该像素点上只保留最近的交点
  1. Painter’s Algorithm(画家算法)
    简单粗暴,先画后面的物体,后画前面的物体,就像画画一样,后涂的颜色会覆盖掉先涂的颜色。
    比较两个物体,当前视角来看,如果A的点全都在B的点前面,那么先画B再画A
    但缺点也很明显:
    1)如果A的点不全的B的前面,即A有些点从当前视角看是在B的某些点后面,就会失败。
    2)物体之间有相交的面时,会失败。
    (好像飞机的雷达显示是用的这个算法?)

  2. Warnock Algorithm (沃诺克算法)
    核心:分而治之
    不停的四分屏幕(一般是四分,也可以二分或者其他分),直到被细分的子空间只存在简单的前后关系(就是画家算法的那个要求),或者子空间已经细分到了一个像素点的大小。
    在曲面和抗锯齿中很有用。



    1)当前子空间没有多边形:完成!
    2)当前子空间只有一个多边形:画!
    3)当前子空间有简单的前后关系:画前面的!
    4)当前子空间只有一个像素那么大了:画离该像素点距离最近的多边形!
    5)否则,继续递归细分

  3. BSP-Tree (Binary Space Partioning trees, 二维空间分割树)


    不停二分,在每个存在简单前后关系的子空间里使用画家算法。
    优点
    1)可以处理带透明度的遮挡
    2)快:不用每个像素点都计算Z并检测
  4. Z-buffer
    新建一个数组,叫Z-buffer。
    每次将像素点颜色写入frame buffer时,把该点的Z值也写入Z-buffer。
    每次将像素点颜色写入frame buffer之前,如果该位置已经被写入过,拿出它的Z值与正准备写的点的Z值比较一下,谁离屏幕近写谁。
    是目前最流行的方法。
    优点
    1)简单
    2)高效
    缺点
    1)增加了内存空间,因为多了个Z-buffer
    2)受限于Z的量级 / 精确度
    3)过度渲染:每个像素点可能会写入多次。
    4)不支持透明度!(不支持透明度竟然还会最流行?)

2. 面片消除(Culling)

  1. Portals
    预先根据视角计算出哪些三角形可见,那些三角形不可见。
    (一换视角就GG了)

  2. 视锥Culling


    如果某物体全部顶点都在视锥外面,则不显示。
  3. Backface Culling (背面消除)
    只适用于封闭物体
    通过每个面的法线来判断是正面还是背面,如果是背面,就隐藏。

相关文章

  • 图形学 遮挡剔除算法综述

    1. Hidden Line Removal (HLR) 在光栅化的文章中,我们使用Z-Buffer来判断三角形面...

  • Occlusion Culling(遮挡剔除)(转)

    Occlusion Culling(遮挡剔除)unity 性能优化之遮挡剔除(Occlusion Culling)...

  • Occlusion Culling(遮挡剔除)

    什么是Occlusion Culling(遮挡剔除)?遮挡剔除, 当一个物体被其他物体遮挡住而不在摄像机的可视范围...

  • 渲染优化-遮挡剔除

    相机视野范围外的游戏物体不显示直接用Unity的遮挡剔除组件Occlusion Culling即可 步骤:1.场景...

  • unity-遮挡剔除OcclusionCulling

    title: unity-遮挡剔除OcclusionCulling tags: [unity, occlusion...

  • 游戏遮挡剔除方案总结(转)

    游戏遮挡剔除方案总结 遮挡剔除是当一个物体被其他物体遮挡住而不在摄像机的可视范围内时,不对其进行渲染。在3D图形计...

  • 预渲染

    剔除(逐对象确定是否可见):距离剔除——》视锥体剔除——》预计算可视性(在每个单元格记录可以看到的内容)——》遮挡...

  • Unity Lod和Occlusion Culling

    Lod和Occlusion Culling Lod和遮挡剔除。  Occlusion Culling:Occlus...

  • 游戏遮挡剔除方案总结

    这是侑虎科技第507篇文章,感谢作者FrankZhou供稿。欢迎转发分享,未经作者授权请勿转载。如果您有任何独到的...

  • Unity Occlusion Culling Sumup

    意义 遮挡剔除,当一个物体被其他物体遮挡住而不在摄像机的可视范围内时不对其进行渲染。 不同于视锥剔除(只是不渲染摄...

网友评论

  • Karel_:那个。。。。请问一下,我采用threejs做大场景的渲染用那种算法比较好呢
    Karel_:@白痴毛 那怎么判断遮挡呢
    白痴毛:@Karel_Xiang bsp树

本文标题:图形学 遮挡剔除算法综述

本文链接:https://www.haomeiwen.com/subject/goumextx.html