|
|
发表于 2005-5-4 11:41:00
|
显示全部楼层
Re:请教大虾们,如何用纹理混合实现凹凸贴图
BUMPENVMAP多数情况下用于水面涟漪等的模拟。近似于一个texture dependent read操作。原理是设置一个2x2矩阵(3DTSS_BUMPENVMAT00 - D3DTSS_BUMPENVMAT11),然后与bump map(这里使用2 channel signed格式,如V8U8)相乘得到纹理坐标uv偏移,作用于下一个texture stage的纹理坐标并sample texture。另外用D3DTOP_BUMPENVMAPLUMINANCE还可以包含luminance计算,功能还算可以的。
问题在于支持这种功能的、DX8以下级别的显卡并不是很多,只有DX6级别的Matrox G4xx,G5xx,DX7级别的Radeon7xxx系列。(好像还有个采用eDRAM的bitboys的glaze3d也支持,不过用的人就太少了)占有率很高的NV1x(Geforce,Geforce2系列,Geforce4 MX系列)都不行,所以这个东西并没有推广。
目前一般意义上的凹凸贴图,指的是normal map + per pixel lighting,(emboss方式实在不是很理想)这个在DX7级别硬件上基本可以实现,需要1个或多个pass,主要是使用DOT3方式,第一个pass完成(N dot L)*Scale + Ambient(一个DOTPRODUCT3加上一个MULTIPLYADD)第2个pass完成specular计算,这里需要简化,比如用JC在DOOM3中用的方法((N Dot H) -0.75)*4。(一个DOTPRODUCT3加一个SUBTRACT加一个MODULATE4X)。 |
|