- 左右手坐标系下的默认旋转方向原来是不同的??左手系顺时针,右手逆时针。(US入门精要4.2.5节)
- 半兰伯特模型:兰伯特模型中的点乘结果偏移+0.5,让非光线直射处也亮
- Schlick菲涅尔近似等式:$F_{schlick}(\bold{v,n})=F_0+(1-F_0)(1-\bold{v}\cdot \bold{n})^5$
- Empricial菲涅尔近似等式:$F_{Empricial}(\bold{v,n}=\max(0,\min(1,bias+scale\times (1-\bold{v}\cdot \bold{n})^{power})))$
法线变换
- 法线变换需要用变换矩阵的逆转置矩阵做变换,推导过程如下:
法线贴图
- 模型空间法线贴图优点:
- 直观,计算简单
- 边界突变少,边界处可通过插值平滑变化(待加深理解)
- 切线空间法线贴图优点:
- 可换给其他模型使用
- 可实现UV动画
- 纹理对于一个模型内也可重用
- 可压缩,省略Z坐标
其他纹理
渐变纹理
,我的理解是将漫反射光照结果映射到我们自定义的纹理上遮罩纹理
,单纯的遮罩纹理就是用于计算时mask其他纹理的某些部分,避免它们加入到计算中
Bloom效果(后处理)
- 以某个阈值提取出画面中亮的部分做一次模糊,然后与原图混合
运动模糊
- 累计缓存:多张图像结果混合(在一帧渲染多次场景)
- 速度缓存:保存之前的渲染结果混合
- 速度映射图:用上一帧的VP矩阵对这一帧的顶点做变换,与本次变换结果做插值即可得到速度映射图。然后用速度值决定模糊的方向和大小
优化
设计模式-优化型
优化型模式 - 浅墨感觉优化型的设计模式的思想有一种通用性,所以优先弄明白,在面试时候就有问到开放题可以使用其中思想优化(有次现场想了个很nice的算法呀,延迟数组的删除操作替换成脏标记,等到一定时机整理一遍,有垃圾回收算法的感觉在里面了,但是那次面试官很敷衍,好像get不到)
数据局部性模式 Data Locality
,通过保证处理的数据排列在连续内存上,以提高内存局部性,从而提高性能脏标识模式 Dirty Flag
,使用脏标记来判断是否需要重新计算对象池模式 Object Pool
,顾名思义空间分区模式Spatial Partition
,将对象存储在基于位置组织的数据结构中,来有效的定位对象
求凸包算法
分治法
:每次寻找将点集划分为上下包,上包再上没有点则这部分以及找到,反之找下包。具体算法如图Jarvis步进法
:从最下方的点开始,以每个其他点和它的连线的夹角为条件,找出最下夹角作为下一个凸包点。Melkman算法
,待深入学习
BVH树构建
二叉树,叶子节点存储物体,中间节点存储包围盒,用递归的方式自底向上组织,需要的数据是全部物体的list,下面需要确定list中物品的排序和划分算法:
- 决定在xyz哪一条轴上进行划分,优先在物体分散的轴
SAH
表面积启发式算法(Surface Area Heuristic)决定划分方式:假设在list中切一刀,划分成A、B两个包围盒,那么可以通过最小化损失函数的思想来优化AB的划分。在SAH算法中表现为最小化AB包围盒的面积差
两直线求最短距离
推导看懂了,但是怎么解释呢?待
PCF和PCSS
PCF
, percentage closer filter, 用于生成软阴影。思路是用采样点在光源空间的深度,和采样点周围的shadow map储存的深度都做一次比较,将比较结果(1 or 0)平均或加权平均,就可以得到[0, 1]之间的软阴影。
PCSS
, percentage closer soft shadows, 在PCF的基础上生成更真实的软阴影。对于PCF中的周围,即filter的大小,有越大越软这样的关系。而一个采样点的阴影到底要多软,实际上与光源->遮挡物边缘->阴影 这三者距离比值有关,简单来说就是遮挡物离光源越近,那么对应的半影面积越大,即阴影越软。所以我们动态调整fiter的大小,从而生成更符合物理世界效果的阴影。要实现PCSS主要有以下三步:
- 以一定范围内的遮挡距离(即shadow map的值)平均得到一个平均遮挡距离。这里的实现方式待深入,理论上是以光源照射到采样点的过程中投影到shadow map上的那一部分进行平均
- 以平均遮挡距离计算filter大小
- 以filter大小进行PCF计算软阴影
VSSM
VSSM
:Variance Soft Shadow Mapping,对PCSS进一步优化。在原有的shadow map中,利用二维前缀和(Summed Area Tables, SAT)实现快速求区域均值,利用方差公式:$Var(X)=E(X^2)-E^2(X)$实现快速求区域方差,再利用均值和方差作为高斯分布的参数,用这样一个正态分布来近似该区域shadow map中的值的分布。又因为高斯分布可以转换为标准高斯分布,可以直接利用查表来计算其$CDF(x)$。但是我们不使用正态分布,而是用切比雪夫不等式得到约束关系$P(x>t)\leq \frac{\sigma^2}{\sigma^2+(t-\mu)^2}$,其中$\sigma$为方差、$\mu$为均值,我们可以直接用此不等式作为近似公式来计算上文中PCF结果
对于PCSS中第一步,由于我们需要求遮挡物的均值$Avg_{block}$,而SAT的结果是全部的均值,此时我们可以假设非遮挡物的均值为采样点的深度,非遮挡物在shadow map中占的比值$k$则通过切比雪夫不等式近似,由此可得$AVG_{block}=\frac{AVG_{all}-k*AVG_{notblk}}{1-k}$
Moment Shadow Mapping
在VSSM中,如果区域内遮挡物深度值的分布非常地“不正常”,就会导致切比雪夫不等式估值结果偏离太多,以至于出现阴影中有亮光的情况(light leaking)。我们可以存储矩阵的1到m阶的moment(矩),可以更好得拟合真实分布。(具体实现算法需要看论文)