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

[toc] # 前言 最近项目中也有在做 GpuInstance 相关的东西,考虑到这节课讲的也是 GpuInstance, 故做此 Blog 当做笔记. # 1. Compute Shader 基于 ComputeShader 实现的方案常见的有 GPGPU ,MaxWell 也有发过一篇文章,大概意思是 GPGPU 可能在将来会类似于现在的前端开发 Shader 在渲染管线中是用作可定制化部分的脚本而存在的,在常见的渲染管线中存在几何、顶点、片元等着色器。 但是考虑这一点,因为 GPU 极其适合大量同质化的并行运算,如果只能用在渲染管线中可能会导致无法轻量化的让游戏开发者利用 GPU...

[toc] # BVH 简单 BVH 图示 # BVH 性质 图元是叶子节点 每个图元只在一个层次中出现过 一个图元可能存在于多个空间划分中 节点数量有界 # BVH 构建 SplitMethod : 构建 BVH 的方法 1enum class SplitMethod { SAH,HLBVH,Middle,EquialCounts } # 三个阶段 计算每个图元的边界信息,并保存到将用于构建 BVH 树的数组中 用选择的 SplitMethod 编码方法进行树的构建 将 BVH...

[toc] # Chapter 4 图元和相交加速 # 综述 直接渲染的类和直接操作信息的类统称为 Primitive 类,基于 Primitive 类之上的是 Aggregate 组 这样有一个好处,就是在进行相交检测加速时,可以进行整组的剔除。 本章会介绍两个加速器 BVH 和 K-d # Primitive 基类 123456789101112131415161718// Primitive Declarationsclass Primitive { public: // Primitive Interface virtual ~Primitive(); virtual...

[toc] # Vector3 通过重载运算符实现下标访问器 123456789101112T operator[](int i) const { DCHECK(i >= 0 && i <= 2); if (i == 0) return x; if (i == 1) return y; return z;}T &operator[](int i) { DCHECK(i >= 0 && i <= 2);...

[toc] # The Graphics Processing Unit # 1. 可编程着色模型 uniform 输入是在一个 draw call 中保持不变的值 现代 Gpu 上的运算操作速度对比 (书上): 标量 / 向量的乘法和加法 乘加运算 / 点乘运算 (以及 1 的组合运算) 其它运算 (倒数 / 平方根 / 正弦 / 余弦 / 指数 / 对数) 另外,纹理操作实际上是比较高效的 流控制 (flow control), 是指分支指令:如 if,case, 静态流控制 (输入的 Shader 上下文变量) 动态流控制 (if/case) Shader...

# PBR # 总结 # 材质参数对比 # BRDFLUT (离线生成的 BRDF 简化公式的第二项贴图) # 数值拟合方式计算 BRDF # Gamma 与 Linear

[toc] https://www.bilibili.com/video/BV1V84y117YU/?spm_id_from=333.999.0.0&vd_source=1140bfac569fe6b7e83c9f1282924d06 # 项目目录组织方式 如上图,头文件目录下再套一层目录,为了防止头文件命名冲突 (比如都有一个叫 stdio.h 的文件,套一层以后就变成了 模块 /stdio.h) # 项目的分离 比如 在这里被划分成了两个子项目,这样就可以保证项目的可复用性 比如在 python 中,python.exe 只有 16kb, 而实际上用于执行 python...

[toc] # 基于 Top-down level 的加速结构 Top-down Acceleration 上层存放所有实例的数据 (变换矩阵 / 包围体) 下层 bottom level 存放的就是 BVH 等信息 acceleration structure 里存放的是一个几何数据,但是可以被多个相同几何的实例引用 正常的光栅化流程是从局部坐标转到世界坐标,DXR 是从世界坐标到局部坐标 # shader table shader table 里每一个元素称为 shader record shaderId 是一个指针,指向了 hitgroup hitgroup 包含三种...

[toc] https://oi-wiki.org/geometry/convex-hull/# 凸多边形 # 凸包 在给定平面上能够包含给定点的最小的凸多边形叫做凸包 使用三角不等式可以证明最小凸多边形的周长最小 # Andrew 算法求凸包 # 二维凸包 把所有点以横坐标为第一关键字,纵坐标为第二关键字排序,排序后最小元素和最大元素一定在凸包上 从一个点出发逆时针走,出现右拐,则不在凸包上,使用单调栈来维护上下凸壳 伪代码 1234567891011121314151617181920212223242526// C++ Version// stk[]...