族谱网 头条 人物百科

法线贴图

2020-10-16
出处:族谱网
作者:阿族小谱
浏览:620
转发:0
评论:0
工作原理为了计算表面光照的朗伯值,从浓淡点到光源的单位向量与表面法线单位向量做点积,得到的结果就是光线在表面上的强度。其它的照明模型也都涉及到与法线向量做点积。假设有一个球体的多边形模型只能近似表示曲面形状。通过在模型上应用RGB位图纹理,就可以对更加细致的法线向量进行编码。位图中的每一个通道即红色、绿色、蓝色通道都对应于一个空间尺度X、Y、Z,这些空间尺度与物体空间法线图的固定的坐标系统相关,或者与tangenet空间法线图场合中根据位置相对于纹理坐标平滑变化的坐标系统相关。这使得模型表面更加细致,尤其是与先进的光照技术一起使用的时候更是如此。在ValveSource引擎及nVidia硬件卡等法线图最常见的实现中,当从右侧照射的时候红色通道是材料的relief,当从下部照射的时候绿色是的relief,当从正面照射的时候蓝色通道是材料的具体实现直接把高度图(Heightmap)转换成一张法

工作原理

为了计算表面光照的朗伯值,从浓淡点到光源的单位向量与表面法线单位向量做点积,得到的结果就是光线在表面上的强度。其它的照明模型也都涉及到与法线向量做点积。假设有一个球体的多边形模型只能近似表示曲面形状。通过在模型上应用RGB位图纹理,就可以对更加细致的法线向量进行编码。位图中的每一个通道即红色、绿色、蓝色通道都对应于一个空间尺度X、Y、Z,这些空间尺度与物体空间法线图的固定的坐标系统相关,或者与tangenet空间法线图场合中根据位置相对于纹理坐标平滑变化的坐标系统相关。这使得模型表面更加细致,尤其是与先进的光照技术一起使用的时候更是如此。

在Valve Source引擎及nVidia硬件卡等法线图最常见的实现中,当从右侧照射的时候红色通道是材料的relief,当从照射的时候绿色是的relief,当从正面照射的时候蓝色通道是材料的

具体实现

直接把高度图(Height map)转换成一张法线图(Normal Map),其图的RGB分别是原高度图该点的法线指向:Nx、Ny、Nz,这张图可由Direct3D的专门函数帮助我们计算。最后在渲染的时候直接将该高度图的每个像素与光源的向量点乘,即可得到表示每一点的明暗系数的图:根据高度图,越突出的地方,法线与光源夹角越小,该点的数值越大。接着将这张图乘到渲染线中即可,这样就使模型在背光的凹处有阴影而在面向光源处更亮的效果,这样的3D模型看起来就像真的凹凸不平一样!这些都可以直接在渲染流水线中由机器完成。

具体可以使用以下几步简单的语句来实现:

将光源位置转换成ARGB的辅助函数:

DWORDVector2ARGB(D3DXVECTOR3*v,floatheight){DWORDr=(DWORD)(127.0f*v->x+128.0f);DWORDg=(DWORD)(127.0f*v->y+128.0f);DWORDb=(DWORD)(127.0f*v->z+128.0f);DWORDa=(DWORD)(255.0f*height);return((a<<24L)+(r<<16L)+(g<<8L)+b);}

生成法线图:

D3DXComputeNormalMap(pNormalMap,pHeightMap,NULL,0,D3D_CHANNEL_RED,1.0f);//pHeightMap为原高度图的指针,pNormalMap为一张空纹理,用于存放法线图

在渲染程序段中实现:

DWORDF=Vector2ARGB(&light,0.0f);//light是单位化的光源向量pD->SetRenderState(D3DRS_TEXTUREFACTOR,F);//pD是D3D的设备指针,这句将光源法线参数输入pD->SetTexture(1,pTEXTURE);//设置原纹理,如上面的球,如有需要可以贴上纹理样式pD->SetTexture(0,pNormalMap);//使用上面生成好的法线图pD->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);//设置“来源1”为法线图pD->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_DOTPRODUCT3);//将“来源1”(法线图)与“来源2”(光源法线)进行点乘pD->SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_TFACTOR);//设置“来源2”为光线的光源法线参数pD->SetTextureStageState(1,D3DTSS_COLORARG1,D3DTA_TEXTURE);//这步和下面几步将图片的原纹理加上pD->SetTextureStageState(1,D3DTSS_COLOROP,D3DTOP_MODULATE);pD->SetTextureStageState(1,D3DTSS_COLORARG2,D3DTA_CURRENT);

法线贴图在计算机娱乐中的应用

交互式法线贴图最初只能在北卡莱罗纳大学Chapel Hill建造的并行图形机器上进行渲染,后来逐渐可以在高端的SGI工作站上用多次渲染以或者帧缓冲操作进行法线映射,以及在低端个人计算机硬件上用调色板纹理这样的技巧实现。但是,随着家用电脑以及游戏终端的处理计算能力的不断增强以及功能越来越复杂,法线贴图逐渐通过一些鲜活的计算机游戏步入大众的视野,这些游戏包括:Far Cry(Crytek), Deus Ex: Invisible War(Eidos Interactive), Thief: Deadly Shadows(Eidos Interactive), The Chronicles of Riddick: Escape from Butcher Bay(Vivendi Universal), Halo 2(Microsoft), Doom 3(id Software), Half-Life 2(Valve Software), Call of Duty 2(Activision),以及Tom Clancy"s Splinter Cell: Chaos Theory(Ubisoft)。在即将推出的Unreal engine(Epic Games)中也大量地使用了这项技术。法线贴图在视频游戏设计中的流行源自于同时具有的出色图形质量以及与生成类似效果的其它方法相比所需的较少资源。较少的处理资源要求就可以转变成性能的提升,并且使得按照距离索引细节缩放这种降低纹理法线图细节的技术成为可能,基本上这就意味着距离越远所需的光照模拟复杂性越低,这样就可以减少处理工作,而且能够保持与近距纹理同样的细节层次。

目前,法线贴图已经在个人电脑以及游戏终端上得到成功而广泛的应用。最初,微软的Xbox是唯一完全支持这种效果的家庭游戏终端,其它一些终端由于硬件上不能直接支持这种功能所以只能通过软件实现。如Xbox360这样的下一代终端的开发人员严重依赖于法线贴图的技术,并且已经开始着手实现视差映射技术。

参考文献

纹理贴图

凹凸贴图

视差贴图

位移贴图

线性代数

参考文献

Fitting Smooth Surfaces to Dense Polygon Meshes, Krishnamurthy and Levoy, SIGGRAPH 1996

(PDF)Appearance-Preserving Simplification, Cohen et. al, SIGGRAPH 1998

(PDF)A general method for recovering attribute values on simplifed meshes, Cignoni et al, IEEE Visualization 1998

(PDF)Realistic, Hardware-accelerated Shading and Lighting, Heidrich and Seidel, SIGGRAPH 1999


免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

——— 没有了 ———
编辑:阿族小谱

相关资料

展开
发表评论
写好了,提交
{{item.label}}
{{commentTotal}}条评论
{{item.userName}}
发布时间:{{item.time}}
{{item.content}}
回复
举报
点击加载更多
打赏作者
“感谢您的打赏,我会更努力的创作”
— 请选择您要打赏的金额 —
{{item.label}}
{{item.label}}
打赏成功!
“感谢您的打赏,我会更努力的创作”
返回

更多文章

更多精彩文章
打赏
私信

推荐阅读

· 法线
法线的计算对于像三角形这样的多边形来说,多边形两条相互不平行的边的叉积就是多边形的法线。用方程ax+by+cz=d{\displaystyleax+by+cz=d}表示的平面,向量(a,b,c){\displaystyle(a,b,c)}就是其法线。如果S是曲线坐标x(s,t)表示的曲面,其中s及t是实数变量,那么用偏导数叉积表示的法线为如果曲面S用隐函数表示,点集合(x,y,z){\displaystyle(x,y,z)}满足F(x,y,z)=0{\displaystyleF(x,y,z)=0},那么在点(x,y,z){\displaystyle(x,y,z)}处的曲面法线用梯度表示为如果曲面在某点没有切平面,那么在该点就没有法线。例如,圆锥的顶点以及底面的边线处都没有法线,但是圆锥的法线是几乎处处存在的。通常一个满足Lipschitz连续的曲面可以认为法线几乎处处存在。法线的唯一性曲面...
· 视差贴图
参见视差
· 位移贴图
进一步的阅读资料BlenderDisplacementMapping浮雕纹理贴图网站任意多边形表面的实时浮雕纹理贴图论文无高度场的表面细节的浮雕纹理贴图论文参见材质贴图凹凸贴图法线贴图视差贴图演示效果高度图
· 反射贴图
典型的反射映射标准环境映射标准环境映射更加常用的名称是球形环境映射,是反射无限远环境物体的纹理球面的应用。使用鱼眼镜头、预渲染或者光探头生成球形纹理,然后将这个纹理映射到空球表面,通过计算物体上个点的光向量到达环境图上的纹素从而确定纹素的颜色。这项技术类似于光线跟踪,但是由于所需物体各点的所有颜色图形处理单元已经预先知道,所以所需做的就是计算入射与反射角度。1982年GeneMiller在MAGISynthavision首次试验了球形环境映射。在ChristineChang的帮助下,他在MAGI的停车场拍摄了一幅圣诞装饰照片。通过将球体的照片裁减到直径大小,他将照片映射到空球表面(参见上面的过程)(Fig.1)。然后,他将这幅纹理用到KenPerlin(Fig.2)创建的一个斑点狗模型上,并且将环境映射模型添加到停车场照片上,就得到Fig.3中的照片。这种环境映射的技术最后在真实的环境高动...
· 凹凸贴图
具体实现BMEM技术BMEM技术通过一张叫做高度图(Heightmap)的灰度图来储存每一点的高度信息然后直接由API处理。法线贴图法主条目:法线贴图但事实上游戏编程员却通常并不喜欢使用BMEM技术,因为他执行速度慢,因此他们通常使用DP3技术:直接把高度图(Heightmap)转换成一张法线图(NormalMap),其图的RGB分别是原高度图该点的法线指向:Nx、Ny、Nz,这张图可由Direct3D的专门函数帮助我们计算。最后在渲染的时候直接将该高度图的每个像素与光源的向量点乘,即可得到表示每一点的明暗系数的图:根据高度图,越突出的地方,法线与光源夹角越小,该点的数值越大。接着将这张图乘到渲染线中即可,这样就使模型在背光的凹处有阴影而在面向光源处更亮的效果,这样的3D模型看起来就像真的凹凸不平一样!这些都可以直接在渲染流水线中由机器完成。具体可以使用以下简单的语句来实现://将光源位置...

关于我们

关注族谱网 微信公众号,每日及时查看相关推荐,订阅互动等。

APP下载

下载族谱APP 微信公众号,每日及时查看
扫一扫添加客服微信