后来我们发现只要限制点的中心在格里就可以了,这样一共是自己加周围8个邻居,共9次闪点相关的计算。可以利用一些情况来合并计算。
由于点的中心不能出框,左邻居只会影响当前格左半边的像素,右邻居只会影响当前格右半边像素,左右两半边可以合并计算。同理,上下两邻居也可以合批计算,四个对角也可以合并计算。上下左右加边角加自己,只需要计算4次闪点相关计算。
此外,还可以利用GPU的向量计算能力进一步减少计算量。对于偏移等float2计算,可以两两合并为一个float4;对于缩放等矢量计算,可以四组合并,这样最终的开销略小于两次完整的闪点计算。
最后是闪烁处理,我们的处理方式是利用刚才随机生成的相位值调整nh,进行高光计算。同时用一个统一的闪点光滑度控制闪烁程度。