最近我在尝试光照和阴影效果,突然有个想法:如果让光照本身也像素化会怎样呢?

我觉得效果还挺不错的!

大致做法如下:

游戏计算光照时,需要世界空间位置、法线向量和视线方向。我用给定的步数对位置进行量化处理:

floor(x * stepCount) / stepCount

这样光照就呈现出像素化效果。

为了防止闪烁,在量化位置前,我会沿着法线方向添加一个小的偏移量。

对于像素化的镜面高光,我还将视线方向替换为从相机位置到量化后位置的归一化向量:

viewDir = normalize(cameraPos - WorldPos);

阴影也用了类似的方法:对位置进行量化,并额外添加法线偏移来避免闪烁。

还在继续尝试中,不过目前的效果已经让我挺满意的了!

非常欢迎提出反馈意见!