为什么变换?
- MVP矩阵,让空间中的图元显示在屏幕空间上
- PBR材质的上半球采样,生成随机数在世界坐标系的上半球范围内,需要变换到顶点法线上半球范围内,进行采样
变换矩阵
- 视口变换矩阵
将绕x,y,z轴旋转的矩阵(可以分成三个,也可以组合起来变成一个矩阵)相乘,
在x,y,z轴上的平移组装成一个矩阵相乘。 - 局部坐标系变换到世界坐标系矩阵
已知,每个新x,y,z轴基向量,可以由原来的x,y,z轴表示
xnew =[0,1,0]
ynew =[1,0,0]
znew =[0,0,1]
比如,我们把x轴和y轴互换一下位置
对于局部坐标系下的newpos.xyz =Matnew * pos.xyz
GLSL 是列矩阵存储,我们通过上面的矩阵Matnew易得 newpos.xyz = pos.yxz
PBR材质的上半球采样
取fragment的法线,找到与法线相互垂直的另外两条向量b1,b2建立局部坐标系
把b1作为x轴 b2作为y轴 法线作为z轴
xnew = b1
ynew = b2
znew = normal
采样之后的结果是不是有点过亮了?
我改了一版,最后一个bounce连接上一个顶点和光线进入方向,反而更亮了
把结果直接除以2pi半球角度,效果似乎是好了点,但是这不符合原理