RealTime-Rendering26-Dithering
为什么我们最初需要对数字图像进行抖动处理。虽然现在它变成了一种美学风格,但在过去,我们需要用抖动来“欺骗”我们的眼睛,让我们看到比实际存在的更多的颜色。👇
RealTime-Rendering18-dFdx/dFdy/fwidth
fwidth/dFdx/dFdy是GLSL中的函数方法,ddx/ddy是HLSL中的方法,他们都是用于计算变量基于屏幕空间像素变化率的方法。
RealTime-Rendering17-Weighted Blended OIT
Weighted Blended Order-Independent Transparency (WBOIT) 是一种非常实用的顺序无关半透明渲染技术。它通过在着色器中对每个片元的颜色和透明度进行加权求和,巧妙地避免了传统半透明渲染中复杂且耗时的排序问题,在性能和效果之间取得了很好的平衡。WBOIT算法的实现主要包含两个Pass:Accumulation Pass 和 Composite Pass。
RealTime-Rendering12-AABB Plane intersection
AABB Plane intersection
核心判定逻辑:计算AABB中心到平面的有符号距离(signed distance),并与AABB在平面法线方向上的投影半径(projection interval radius)进行比较。
平面由法向量n和到原点的距离d定义:
$x\cdot \vec{n} = d$
AABB由最小角点 min 和最大角点 max 定义,可以将其转换为中心-半边长(center-extents)表示:
中心点:$c = (min + max) / 2$
正半边长:$e = max - c$
投影半径计算:
AABB在平面法线n方向上的投影半径r为各轴向半边长在法线方向上的绝对值之和,这实际上是AABB在法线方向上的最大”半径”——从中心到最远顶点的投影距离,直观理解可以表示为AABB在法线方向投影的覆盖范围
RealTime Rendering04-zFighting
RealTime-Rendering11-Gaussian Blur
RealTime-Rendering09-SSAO
详细拆解SSAO算法及实现细节
RealTime-Rendering25-Primitive Restart
Primitive Restart是渲染中的一个重要特性,主要用于高效渲染多个独立的图元序列(例如三角形条带、线条条带等),而无需发出多个绘制调用或在索引数据中插入“退化”图元(即面积为零或不可见的图元)。下面从概念、工作原理、使用场景、优缺点以及在不同图形API中的具体实现等方面进行详细解释。
RealTime-Rendering24-Fast Extraction of Frustum Planes from the WorldView-Projection Matrix
从viewProjection矩阵中快速推导构成Frustum的六个面