1.什么是衍射
小尺度的表面细节引起反射波彼此干扰,这个现象就是衍射。首先,计算机绘图的大多数表面反射模型都忽略自然光的波动效果。当表面的细节比光的波长(约1um)大许多时,不存在问题。但对于小尺寸的细节,例如一个光盘的表面,波效应就不能忽略了。所以,对于小尺度的表面细节引起反射波彼此干扰的现象,即为衍射。
衍射使这些表面的反射光呈现五彩缤纷的图案,由光盘的精细反射可以看到这一现象。
衍射的实现,可以在Shader的顶点着色器上,也可以在片元着色器上,且实现可以在任何网格上进行,只需提供一个“切线向量”,和每顶点的法线及位置。而切线向量提供表面上窄条带的局部方向。对于一个光盘,其为轨道的方向,如下图:
基于波干涉的理论基础,我们假设所有发自表面而到达接收点的波是彼此平行的,若要从不同条带发出,最后到达接收点的波相位相同,它们从光源到接收点的光程差只能是波长的整数倍。
对应给定衍射波长的颜色,可以使用简单近似的彩虹贴图。贴图从紫到红排列,而且提供彩虹的大部分颜色,用三个理想凹凸函数(峰值分别在蓝、绿和红的区域)简单混合而成。
而最终的衍射颜色是彩色的衍射图案和各项异性高光的简单相加的和。
【关键词提炼】
衍射模拟(Simulating Diffraction)
各项异性(Anisotropy)