族谱网 头条 人物百科

凹凸贴图

2020-10-16
出处:族谱网
作者:阿族小谱
浏览:602
转发:0
评论:0
具体实现BMEM技术BMEM技术通过一张叫做高度图(Heightmap)的灰度图来储存每一点的高度信息然后直接由API处理。法线贴图法主条目:法线贴图但事实上游戏编程员却通常并不喜欢使用BMEM技术,因为他执行速度慢,因此他们通常使用DP3技术:直接把高度图(Heightmap)转换成一张法线图(NormalMap),其图的RGB分别是原高度图该点的法线指向:Nx、Ny、Nz,这张图可由Direct3D的专门函数帮助我们计算。最后在渲染的时候直接将该高度图的每个像素与光源的向量点乘,即可得到表示每一点的明暗系数的图:根据高度图,越突出的地方,法线与光源夹角越小,该点的数值越大。接着将这张图乘到渲染线中即可,这样就使模型在背光的凹处有阴影而在面向光源处更亮的效果,这样的3D模型看起来就像真的凹凸不平一样!这些都可以直接在渲染流水线中由机器完成。具体可以使用以下简单的语句来实现://将光源位置...

具体实现

BMEM技术

BMEM技术通过一张叫做高度图(Height map)的灰度图来储存每一点的高度信息然后直接由API处理。

法线贴图法

凹凸贴图

主条目:法线贴图

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

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

//将光源位置转换成ARGBDWORDVector2ARGB(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<SetRenderState(D3DRS_TEXTUREFACTOR,F);//pD是D3D的设备指针,这句将光源法线参数输入pD->SetTexture(1,TEXTURE);//设置原纹理,如上面的球,如有需要可以贴上纹理样式pD->SetTexture(0,normalmap);//使用上面生成好的法线图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);

假凹凸贴图

三维计算机图形程序员有时使用计算量较小的假凹凸贴图模拟凹凸贴图效果。其中一个方法是使用纹素索引变化取代曲面法线变化,这种方法经常用于二维凹凸贴图。在GeForce 2类型的图形加速硬件中就使用了这项技术。

全屏的二维假凹凸贴图,可以很容易地用简单快速的渲染循环实现,在二十世纪九十年代的示范影像是一个非常普通的视觉效果。

与位移映射之间的差别

位移映射与凹凸贴图之间区别在例图中已经很明显地显现出来了:在凹凸贴图中,只有法线进行了扰动,而几何体本身没有扰动,这样的结果就是人为改变只出现在物体的轮廓上,而球体本身仍然是原来的圆形。即凹凸贴图只是视觉上的改变,就像一个画得很透视的图片;而位移映射却真的将3D物体变得“凹凸不平”。

参考文献

Blinn, James F. "皱纹表面模拟", Computer Graphics, Vol. 12 (3), pp. 286-292 SIGGRAPH-ACM (August 1978)

链接

Bump Mapping tutorial using CG and C++

参见

纹理映射

法向映射

视差映射

位移映射

浮雕纹理映射


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

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

更多文章

更多精彩文章
打赏
私信

推荐阅读

· 视差贴图
参见视差
· 位移贴图
进一步的阅读资料BlenderDisplacementMapping浮雕纹理贴图网站任意多边形表面的实时浮雕纹理贴图论文无高度场的表面细节的浮雕纹理贴图论文参见材质贴图凹凸贴图法线贴图视差贴图演示效果高度图
· 反射贴图
典型的反射映射标准环境映射标准环境映射更加常用的名称是球形环境映射,是反射无限远环境物体的纹理球面的应用。使用鱼眼镜头、预渲染或者光探头生成球形纹理,然后将这个纹理映射到空球表面,通过计算物体上个点的光向量到达环境图上的纹素从而确定纹素的颜色。这项技术类似于光线跟踪,但是由于所需物体各点的所有颜色图形处理单元已经预先知道,所以所需做的就是计算入射与反射角度。1982年GeneMiller在MAGISynthavision首次试验了球形环境映射。在ChristineChang的帮助下,他在MAGI的停车场拍摄了一幅圣诞装饰照片。通过将球体的照片裁减到直径大小,他将照片映射到空球表面(参见上面的过程)(Fig.1)。然后,他将这幅纹理用到KenPerlin(Fig.2)创建的一个斑点狗模型上,并且将环境映射模型添加到停车场照片上,就得到Fig.3中的照片。这种环境映射的技术最后在真实的环境高动...
· 法线贴图
工作原理为了计算表面光照的朗伯值,从浓淡点到光源的单位向量与表面法线单位向量做点积,得到的结果就是光线在表面上的强度。其它的照明模型也都涉及到与法线向量做点积。假设有一个球体的多边形模型只能近似表示曲面形状。通过在模型上应用RGB位图纹理,就可以对更加细致的法线向量进行编码。位图中的每一个通道即红色、绿色、蓝色通道都对应于一个空间尺度X、Y、Z,这些空间尺度与物体空间法线图的固定的坐标系统相关,或者与tangenet空间法线图场合中根据位置相对于纹理坐标平滑变化的坐标系统相关。这使得模型表面更加细致,尤其是与先进的光照技术一起使用的时候更是如此。在ValveSource引擎及nVidia硬件卡等法线图最常见的实现中,当从右侧照射的时候红色通道是材料的relief,当从下部照射的时候绿色是的relief,当从正面照射的时候蓝色通道是材料的具体实现直接把高度图(Heightmap)转换成一张法
· 材质贴图
例子代码下面是简单的球面材质贴图的Java语言实现。参看EdwinCatmull纹理滤波

关于我们

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

APP下载

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