图形学 遮挡剔除算法综述_遮挡算法-程序员宅基地

技术标签: 图形算法  Unity  性能优化  

转-https://www.jianshu.com/p/0a7a018c5539

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 (背面消除)
    只适用于封闭物体
    通过每个面的法线来判断是正面还是背面,如果是背面,就隐藏。



作者:白痴毛
链接:https://www.jianshu.com/p/0a7a018c5539
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq2512667/article/details/82025922

智能推荐

hdu1213-程序员宅基地

文章浏览阅读53次。hdu1213 #include <stdio.h>#include <string.h>#define MAXN 1100int parent[MAXN];int n,m;void UFset(){ for(int i=1;i<=n;++i) parent[i...

【转】牛仔文化与历史背景_西部牛仔是什么时代-程序员宅基地

文章浏览阅读3k次。  时装潮流这个不停流转的大车轮里,牛仔服饰一如其他服装,同样经历过高低起伏的时候。  早在五十年代,牛仔裤可说是美国人生活的一部分。有报章曾报导,大约百分之九十的美国青年除了睡觉和到教堂外,无论到哪里去,总少不了一条牛仔裤,牛仔裤成为普及文化。七十年代,摇滚乐的流行造就了牛仔裤的热潮。  1990至96年间,时装设计师称此段期间为牛仔服的黑暗时期,只有喜欢北欧soft rock、爱烫上大鬈发的乐迷、或是流连廉价商铺的消费者,才会热衷於那些高腰的石磨蓝萝卜型牛仔裤。稍後风_西部牛仔是什么时代

程序员最实用快捷键及CSDN换行_写完一行代码换行快捷键-程序员宅基地

文章浏览阅读3.2k次,点赞2次,收藏11次。Ubuntuctrl + alt + t 调出新窗口terminalctrl + shift + t 新打开一个tab的terminalalt + 数字键 切换terminal的tabctrl + alt + d 打开桌面system + l 锁屏ctrl +alt + ↑↓←→ 切换虚拟桌面ctrl + 1 文件夹文件列表显示ctrl + 2 文件夹文件图片显示ctrl + ..._写完一行代码换行快捷键

Matlab括号使用详解_matlab纵轴的括号竖起来-程序员宅基地

文章浏览阅读3.4w次,点赞16次,收藏81次。Matlab中用括号去引用某Array或者是cell的内容,三者的区别:大括号 用于单元阵列的赋值 中括号 用于形成一个向量或矩阵小括号 通常用于一般的算术表达式,指示优先运算,还用于表示函数变量、向量下标和矩阵下标等到[ ] 中括号用来构建向量(Vectors)或者是矩阵(Matrices)。如[6.9 9.64 sqrt(-1)] 就是一个有三个元素的_matlab纵轴的括号竖起来

docker 启动nexus 出现的问题_unable to update instance pid: unable to create di-程序员宅基地

文章浏览阅读1.5w次。问题1:启动nexus时,没有权限操作宿主机文件夹docker run -d -p 8082:8082 -v /home/nexus-data/:/nexus-data/ --name nexus1 sonatype/nexus3Warning: Cannot open log file: ../sonatype-work/nexus3/log/jvm.logWarning: F..._unable to update instance pid: unable to create directory /nexus-data/instan

java大数总结_java 大数总结-程序员宅基地

文章浏览阅读447次。java大数总结【定义】java中用于操作大数的类主要有两个,一个是BigInteger,代表大整数类用于对大整数进行操作,另一个是BigDecimal,代表高精度类,用于对比较大或精度比较高的浮点型数据进行操作。因为这两种类的使用方法是一样的,所以下面我们一BigInteger为例进行讲解【基本用法】基本用法1、新建一个值为123的大整数对象BigInteger a=ne..._java 大数总结

随便推点

计算机组成原理袁春风百度云,计算机组成原理[袁春风]chap32.pdf-程序员宅基地

文章浏览阅读735次。3.3 定点加 减运算计算机内的加减运算一般用补码实现1. 补码定点加减法规则假设A B是带符号的n位二进制定点整数 其补码形式为[A] =a a …… a [B] =b b …… b补 n-1 n-2 0 ..._计算机组成原理袁春风第二版pdf

电脑开机出现press f11 to start recovery system问题分析与解决_press f1 to enter recovery-程序员宅基地

文章浏览阅读1.8w次,点赞3次,收藏7次。电脑开机可能出现下图情况这种情况通常是安装了一键还原精灵这样玩的还原工具,从而导致每次开机都会出现是否进入一键还原模式提示,一般情况下等待几秒就可以进入到开机界面了。出现的情况有以下两种:第一种:启动盘无效,有可能是你有软驱,并装进去了软盘;或者你的启动顺序是先软盘或者光驱,光驱里有光盘,分别退出软、光盘就可以正常启动。如果设了软驱或光驱优先启动,驱动器内有非启动盘就会这样的,弹出软盘或光盘就行了。最好直接设成硬盘优先启动。第二种:或者你磁盘分区不正确,以前设置过一键还原,但愿来的备份盘或文件以经_press f1 to enter recovery

阿里十年架构师,教你深度分析ConcurrentHashMap原理分析_concurrenthashmap底层原理-程序员宅基地

文章浏览阅读787次。ConcurrentHashMap的初步使用及场景CHM的使用ConcurrentHashMap是J.U.C包里面提供的一个线程安全并且高效的HashMap,所以ConcurrentHashMap在并发编程的场景中使用的频率比较高,那么这一节课我们就从ConcurrentHashMap的使用上以及源码层面来分析ConcurrentHashMap到底是如何实现安全性的ap..._concurrenthashmap底层原理

topic model(LDA 主题模型)-程序员宅基地

文章浏览阅读1.8k次。LDA简介在老师讲主题模型的时候看到这个LDA,刹时觉得很熟悉,在机器学习中,其实有两个LDA,一个是平时接触比较多的Linear Discriminant Analysis即线性判别分析,另一个便是这篇文章的主角Latent Dirichlet Allocation即隐含狄利克雷分布。提出目的用于推测文档(document)的主题分布,以及主题(topic)的词(word)分布;换个角度来说其实这个模型解决了文档和词汇的软聚类,即文档的主题分布概率可以当作文档聚类的指标,而词汇则归属于其隶属的主题而_topic model

golang sdk后端怎么用_Python比Golang慢多少?实际上两者差异并不大-程序员宅基地

文章浏览阅读95次。Python一直被诟病并发很弱,确实,因为GIL的关系,Python在单进程运行的情况下,无法利用多核CPU,所以就被其他能在单进程的情况下利用多核CPU的语言“吊打”性能了。但在使用了多进程后,结果仍然如此吗?为此,我特意做了一组实验。我用VirtualBox新建了一台ubuntu虚拟机,配置为10G内存,4核CPU使用apache2的ab进行测试,并发数为1000,请求10万次。Python程..._python接入go的sdk

2k屏幕开多少缩放_酷比魔方Expand X便携显示器评测:13英寸+2K分辨率+反向充电...-程序员宅基地

文章浏览阅读987次。随着我们手上的数码科技产品越来越多,移动办公、娱乐也逐渐成为不少朋友的日常,与之配套的便携显示器也逐渐由鸡肋变成了实用型产品。众所周知现在旗舰手机的性能越来越强大,在移动办公的时候已经可以替代笔记本电脑了,但手机的屏幕太小看着费力,这时候搭配便携显示器,不仅可以提升办公效率,也方便用户携带,可以说是继笔记本电脑之后的办公娱乐神器。早期的便携显示器,做的比较笨重,功能也比较单一。而现在的便..._2k笔记本缩放多少合适

推荐文章

热门文章

相关标签