[计算机图形学]可见性与遮挡,Z-Buffer(前瞻预习/复习回顾)

一、前言

通过光栅化我们知道,模型的三角形最终都被画在了屏幕上成为了像素,那么真实的场景往往有许多模型,也就是有很多三角形需要被画在屏幕上,这么多的三角形如何正确的判断它们的遮挡关系,从而把离我们摄像机最近的三角形画出来是一个问题,而解决这个问题的方法就是我们今天要讲的Z-Buffer,中文名深度缓存/缓冲

二、画家算法

场景中有很多的物体,我们可以由远到近的一一把他们画在画布上来实现遮挡关系。例如:先画远处的山,再画地面,再画树。而此算法被称为画家算法

那如果碰到如下图这种情况怎么办?

显然,画家算法并不能解决这种复杂的遮挡关系,而且对顺序有着很直观印象的要求,这种要求无法让计算机理解。所以人们采取了新方案,也就是Z-Buffer

三、Z-Buffer

基本思想:

在渲染的过程中,同时生成渲染结果和一张深度图,其中深度图用来储存该像素上深度值最小的深度信息,在之后根据后续的深度结果决定是否更新该像素的深度值。

简单的说,就是在一个像素内,先默认深度为无限远,然后随着不断渲染,判断新的深度值和储存在其中的深度值的大小关系,如果新的深度小于存储的深度,那么就更新为新的深度,否则不更新,这样就可以确保该像素的深度值始终是正确的,距离摄像机最近的。

我们曾经规定过,相机始终是放在原点,朝向-z方向,那么此时我们就可以认为,z坐标的绝对值表示的就是深度的大小,z的绝对值越大说明深度越大,该点离我们越远,反之则越近。

渲染结果(左)和深度缓存得到的深度图(右)

深度缓存算法伪码

深度缓存的工作流程图示:

(R表示深度值为无限大)一个红色三角形被光栅化,紧接着一个蓝色三角形被光栅化,其中由深度缓存得出的遮挡关系发生的变化。

深度缓存算法复杂度:

深度缓存算法复杂度为O(n),我们并没有做排序求遮挡关系,只是始终在求最小深度所以不是O(nlogn)

参考:

Lecture 07 Shading 1 (Illumination, Shading and Graphics Pipeline)_哔哩哔哩_bilibili

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值