【图像渲染】Z-Buffer 算法

来源:games101图形学入门Lecture07
Lingqi Yan
UC Santa Barbara

Z-Buffer

Idea:

  • Store current min. z-value for each sample (pixel)
  • Needs an additional buffer for depth values
    • frame buffer stores color values
    • depth buffer (z-buffer) stores depth

IMPORTANT: For simplicity we suppose z is always positive
(smaller z -> closer, larger z -> further)

我们同时要生成两个缓存:frame buffer和depth buffer。
并且现在我们假设深度就是这个点离相机的距离——永远为正。
意思就是以下两张图——记录这个物体颜色的图,和记录这个物体深度的图,是同步生成的。

Z-Buffer可不能处理透明物体,透明物体需要特殊的处理。

在这里插入图片描述

  • 深度图如何理解呢?对于这张图,深度越近,颜色就越深。(颜色值越小,当然就越黑)
  • 当我们把物体放到地板上,物体会遮住地板的一部分。当记录下的物体的深度小于地板的深度,那么我们就把这个物体画在地板“前面”,并且更新这个深度为一个更浅的深度。

Z-Buffer Algorithm

Initialize depth buffer to ∞ ∞
首先将所有值都初始化为无限大
During rasterization:
在光栅化的过程中:

for (each triangle T)
	for (each sample (x,y,z) in T)
		if (z < zbuffer[x,y]) // closest sample so far 如果这个像素是目前为止最浅的
			framebuffer[x,y] = rgb; // update color 更新颜色值
			zbuffer[x,y] = z; // update depth 更新深度值
		else
			; // do nothing, this sample is occluded 什么都不做,这个像素已经被遮挡了

图解算法:渲染两个带深度并且会相交的三角形(R表示无限大,数字表示深度值)
在这里插入图片描述

Z-Buffer Complexity

Complexity 复杂度

  • O(n) for n triangles (assuming constant coverage)
    对于n个三角形,用O(n)的时间就能知道谁遮挡谁。
  • How is it possible to sort n triangles in linear time?
    我们并不排序,我们只找出每个像素的最小值。所以它是一个O(n)的算法

Drawing triangles in different orders? 更换渲染的顺序呢?
假设我们先画蓝色的三角形,再画红色的三角形,结果也是一样的。
毕竟,我们只考虑每个像素上深度的最小值,和三角形出现的顺序无关。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值