[toc]

草地渲染的剔除流程

  1. 先剔除最大不可见距离外的草
  2. 剔除不在 NDC 空间内的草
  3. 剔除被遮挡的草 (HiZ 剔除)

# AABB 裁剪

一个最简单的裁剪方法,比如在使用 Gpu instance 进行渲染前可以通过 ComputeShader 对准备传入 GpuInstance 的 ConstantBuffer 进行数据的裁剪,在这个阶段可以用一个比较 Trick 的方法进行裁剪,即计算物体假的 BoundaryBox, 然后再计算这个 BB 是否在 NDC 空间的包围体内.
而这个过程只需要花费几个 if 判断,因为其具有极低的消耗,所以很适合用作在大量物体渲染流程中。

# Hi-Z Culling (遮挡剔除)

Hierarchy Z Hierarchy Z 裁剪需要生成 Depth Mip, 即深度图的 Mipmap, 生成 Mipmap 最简单的办法就是降采样。
假设原本的 Mipmap 是 1024*1024, 每次降采样时,长于宽降低为原来的 1/2 ,而降采样后的新的贴图则使用原本贴图每个 2*2 格子中的最小值 (一种最简单的滤波法)

使用 ComputeShader 生成 Hiz Mipmap 的方法

裁剪算法:
如果被计算实例化物体的 最小深度 大于深度图的 最大深度 ,则为不可见物体,不放入待渲染队列 解释:
固定每个草的高度为 0.2, 根据草的 Z坐标 和远裁剪平面的高度计算出 当前z坐标下的平面高度 ,然后根据这个草和这个高度的比值以及 屏幕的实际像素高度 计算出 当前草占屏幕的像素数 .
之后根据这个像素数来判断使用哪个等级的 Mipmap 来进行遮挡性的判断

更新于

请我喝[茶]~( ̄▽ ̄)~*

Solvarg 微信支付

微信支付

Solvarg 支付宝

支付宝

Solvarg 贝宝

贝宝