- 浏览: 95187 次
- 性别:
- 来自: 上海
文章分类
最新评论
教程:实时环境映射贴图技术实时环境映射贴图技术(Real-time Evironmnet Mapping)
如果你是个赛车游戏的爱好者,你一定玩过风靡全世界的赛车游戏《极品飞车:地下狂飚2
》 (Need For Speed : UnderGround2)。在这款游戏中,玩家扮演了一个靠赛车为生的地下飚
车手,在永远是夜晚的城市中飞驰。这款游戏大量地运用了环境映射技术(Real-time
Evironmnet Mapping),例如下过雨的公路上看到两旁夜景的倒映、玩家车身上对周围环境的真
实反射等等,这些都是环境映射技术的功劳。这种最酷、最华丽的特效现在已经被应用在大量
实时虚拟显示游戏中,将来它也许会成为游戏中必不可少的元素。
环境映射贴图技术最典型的应用就是车体的“流光”,这种现象在现实中非常普遍。当你
开着车行驶在满是霓虹灯的街道上时,周围的灯光会在车身上投射出一个光斑或光带(前提是车
子洗得非常干净)。当车子在街道上飞驰的时候,就好像一个个五彩的斑点在你的车体上流动,
产生非常炫目的效果。甚至当你和别的车子擦肩而过时,别的车子也会映射在你的车体上。
要实现环境贴图映射首先需要一组环境信息。假设在场景里有一辆车(本文中将一直使用这
个的例子),车的环境信息,即除车以外,你在车的位置上向四周看到的全部画面。你用相机对
六个不同方向拍出六张照片,这样就产生了一组环境信息。车上的每个象素都和这个环境信息
中的一个点有对应关系(也就是所谓的映射)。在最后渲染车时,需要把车身上每个环境对应点
与车体本身的效果做混合处理。
归纳起来要实现环境贴图映射需要执行以下步骤:
A.创建环境贴图
B.把场景中的物体渲染到环境贴图上
C.渲染车体时,把原始贴图和环境贴图经过处理后最终渲染到屏幕上
准备好你的车子了吗?你一定想马上体验一下给自己车子打上环境贴图是什么感觉吧!不
过在动手之前,你还需要对相关知识有所了解,否则是很难找到正确方法的。
一、什么是环境贴图?
在上面我用照相机作过比喻,在这个比喻中,那六张照片就类似一组环境贴图,它们代表
了立方体的六个面。你可以想象一下,当你的眼睛处于这个立方体时,你会看到周围所有的景
物,因此我们将面,每次绘制其中一个面,就要对场景中所有的景物进行一次渲染。这个过程的开销是十分大
的。如果你的场景中某个物体上使用了环境映射,那么原来只需绘制一次的场景,就会增加6倍
的渲染消耗!如果一个游戏原来跑70帧,当绘制一个使用了环境映射的特效时,马上降到了10
帧!这是一个相当可怕的数字!你也许会考虑:那么这项技术会不会因为开销太大而失去使用
的价值?答案是不会的。以目前人类的智慧已经可以非常好的处理好环境映射的效率问题,所
以不必担心,而且在后文中我们还会详细讲解这些方法。
三、如何使用Cube Map?
当你渲染好了贴图坐标,下一步就是如何使用的问题了。要想将一张贴图绘制到屏幕上,
就需要用坐标和模型的顶点进行对应。我们都知道,2D贴图使用u、v两个坐标来表示顶点对应
的贴图坐标。而在Cube Map中,仅有2个量是无法表示一个点在立方体中的位置的,所以,Cube Map的贴图坐标是由3个数的向量来表示的,你可以简单把这个贴图坐标对应的颜色理解为:从
盒子中心向这个3D向量方向前进直至与盒子相交,其交点的象素颜色值。比如你要让场景中的一个球映射出周围的环境,最简单的做法是把球上每个点的它们称为环境贴图。
一般来说我们所使用的环境贴图都是用立方体作参照,因此通常称为立方体贴图(Cube Map)。
每个Cube Map包含六个面,在DirectX中分别用+X、-X、+Y、-Y、+Z、-Z来表示,其每个面都在
水平和垂直平面上都覆盖了90度的视角。
二、我们要如何操作这组Cube Map呢?
在DirectX 9中,分别使用了六个不同的标识来表示Cube Map中的各个面。这组标识叫
D3DCUBEMAP_FACES,其中的D3DCUBEMAP_FACE_POSITIVE_X就代表了Cube Map中以中心点为原点
的正X轴所指向的那个面,依此类推。而Cube Map的每一个面都是一个LPDIRECT3DSURFACE9对象
,当你需要对其中某个面进行某些操作时,就需要先调用GetCubeMapSurface函数来得到你所指
定的那个面(Surface),然后像操作一般面一样操作即可。而本文中将要对其进行的操作就是把
面作为渲染目标(Render Target),把周围环境中的景物全部绘制到这个Cube Map上。因为Cube Map在每个方向上有一个法线做为贴图坐标传给图形处理芯片,这样一来就能让球具有金属质感。不过,仅仅这样简单
对应的话,绘制出的图将会和现实世界的映射有所出入。
我的网站设计 web design home page
http://www.webdesign-cn.com
http://www.webdesign-china.cn
如果你是个赛车游戏的爱好者,你一定玩过风靡全世界的赛车游戏《极品飞车:地下狂飚2
》 (Need For Speed : UnderGround2)。在这款游戏中,玩家扮演了一个靠赛车为生的地下飚
车手,在永远是夜晚的城市中飞驰。这款游戏大量地运用了环境映射技术(Real-time
Evironmnet Mapping),例如下过雨的公路上看到两旁夜景的倒映、玩家车身上对周围环境的真
实反射等等,这些都是环境映射技术的功劳。这种最酷、最华丽的特效现在已经被应用在大量
实时虚拟显示游戏中,将来它也许会成为游戏中必不可少的元素。
环境映射贴图技术最典型的应用就是车体的“流光”,这种现象在现实中非常普遍。当你
开着车行驶在满是霓虹灯的街道上时,周围的灯光会在车身上投射出一个光斑或光带(前提是车
子洗得非常干净)。当车子在街道上飞驰的时候,就好像一个个五彩的斑点在你的车体上流动,
产生非常炫目的效果。甚至当你和别的车子擦肩而过时,别的车子也会映射在你的车体上。
要实现环境贴图映射首先需要一组环境信息。假设在场景里有一辆车(本文中将一直使用这
个的例子),车的环境信息,即除车以外,你在车的位置上向四周看到的全部画面。你用相机对
六个不同方向拍出六张照片,这样就产生了一组环境信息。车上的每个象素都和这个环境信息
中的一个点有对应关系(也就是所谓的映射)。在最后渲染车时,需要把车身上每个环境对应点
与车体本身的效果做混合处理。
归纳起来要实现环境贴图映射需要执行以下步骤:
A.创建环境贴图
B.把场景中的物体渲染到环境贴图上
C.渲染车体时,把原始贴图和环境贴图经过处理后最终渲染到屏幕上
准备好你的车子了吗?你一定想马上体验一下给自己车子打上环境贴图是什么感觉吧!不
过在动手之前,你还需要对相关知识有所了解,否则是很难找到正确方法的。
一、什么是环境贴图?
在上面我用照相机作过比喻,在这个比喻中,那六张照片就类似一组环境贴图,它们代表
了立方体的六个面。你可以想象一下,当你的眼睛处于这个立方体时,你会看到周围所有的景
物,因此我们将面,每次绘制其中一个面,就要对场景中所有的景物进行一次渲染。这个过程的开销是十分大
的。如果你的场景中某个物体上使用了环境映射,那么原来只需绘制一次的场景,就会增加6倍
的渲染消耗!如果一个游戏原来跑70帧,当绘制一个使用了环境映射的特效时,马上降到了10
帧!这是一个相当可怕的数字!你也许会考虑:那么这项技术会不会因为开销太大而失去使用
的价值?答案是不会的。以目前人类的智慧已经可以非常好的处理好环境映射的效率问题,所
以不必担心,而且在后文中我们还会详细讲解这些方法。
三、如何使用Cube Map?
当你渲染好了贴图坐标,下一步就是如何使用的问题了。要想将一张贴图绘制到屏幕上,
就需要用坐标和模型的顶点进行对应。我们都知道,2D贴图使用u、v两个坐标来表示顶点对应
的贴图坐标。而在Cube Map中,仅有2个量是无法表示一个点在立方体中的位置的,所以,Cube Map的贴图坐标是由3个数的向量来表示的,你可以简单把这个贴图坐标对应的颜色理解为:从
盒子中心向这个3D向量方向前进直至与盒子相交,其交点的象素颜色值。比如你要让场景中的一个球映射出周围的环境,最简单的做法是把球上每个点的它们称为环境贴图。
一般来说我们所使用的环境贴图都是用立方体作参照,因此通常称为立方体贴图(Cube Map)。
每个Cube Map包含六个面,在DirectX中分别用+X、-X、+Y、-Y、+Z、-Z来表示,其每个面都在
水平和垂直平面上都覆盖了90度的视角。
二、我们要如何操作这组Cube Map呢?
在DirectX 9中,分别使用了六个不同的标识来表示Cube Map中的各个面。这组标识叫
D3DCUBEMAP_FACES,其中的D3DCUBEMAP_FACE_POSITIVE_X就代表了Cube Map中以中心点为原点
的正X轴所指向的那个面,依此类推。而Cube Map的每一个面都是一个LPDIRECT3DSURFACE9对象
,当你需要对其中某个面进行某些操作时,就需要先调用GetCubeMapSurface函数来得到你所指
定的那个面(Surface),然后像操作一般面一样操作即可。而本文中将要对其进行的操作就是把
面作为渲染目标(Render Target),把周围环境中的景物全部绘制到这个Cube Map上。因为Cube Map在每个方向上有一个法线做为贴图坐标传给图形处理芯片,这样一来就能让球具有金属质感。不过,仅仅这样简单
对应的话,绘制出的图将会和现实世界的映射有所出入。
我的网站设计 web design home page
http://www.webdesign-cn.com
http://www.webdesign-china.cn
发表评论
-
Android游戏开发
2011-07-01 15:26 196Android开发中Activity是个 -
Flash WebGame 开发经验心得和PureMVC框架细说
2011-06-28 14:02 1550→前端的主程序架构和模块划分与人手和人事分工是紧密联系在一起的 ... -
Flash中的深度排序
2011-06-28 11:34 1275As for Multiplayer Games and Vi ... -
Flex 中的callback
2011-06-28 11:16 964Flash支持传递函数做完参数传递。 下面是主函数中的方法 ... -
常用flash引擎和框架
2011-06-27 11:08 2986官方在线帮助(没标英文的都是中文) 用于 Adobe Flas ... -
原来flash player对图片的解码不是异步的,AIR2.6后就异步了
2011-06-27 10:53 851用过 Loader 对象的人都知道,加载图片时,无论是使用 l ... -
Flash WebGame 开发经验心得和PureMVC框架细说
2011-06-27 10:32 1068→前端的主程序架构和模块划分与人手和人事分工是紧密联系在一起的 ... -
简要评说Adobe的FlashPlayer的渲染算法
2011-06-27 10:22 1026前些时候看到CSDN上一篇文章介绍FlashPlayer的渲染 ... -
游戏中的智能寻路
2011-05-22 18:20 1270近年来,游戏产业的快 ... -
as3中ProgressEvent的bytesTotal始终为0
2011-05-16 09:50 1515as3中ProgressEvent的bytesTotal始终为 ... -
使用URI-Style Namespace编译ActionScript/Flex Library
2011-05-12 11:10 820当你开发了一个有着多个Pacakge的类库,并在MXML中使用 ... -
Python之旅
2010-12-09 19:40 949一直用AS3+Red5做一些小游戏,感觉挺方便的,特别在做上下 ... -
flash player10的rotationY的使用
2010-12-07 12:26 1608flash player10提供了对3D的支持,虽然功能不够强 ... -
red5的常用方法
2010-12-03 10:11 977在使用red5+flash做rpg游戏开发的时候有些功能是需要 ... -
PV3d性能优化
2010-11-25 14:19 1347当你优化你的程序时, ... -
PV3D处理3D矢量绘图与3D文本
2010-08-23 11:46 1162Papervision3D主要以位图为 ... -
Flash中矢量和位图的使用
2010-06-09 16:47 890最近在做一个世界地图的Flash,其中导入一个很大的矢量图形, ... -
flex 3 + .net开发flash Remoting四[完整代码
2010-03-02 20:49 762一. 相关说明: 本 ... -
关于PV3D常用材质的讨论
2009-12-17 14:05 1114PV3D中的贴图材质有很多。 颜色材质Co ... -
AS3中的loading与stage
2009-12-16 13:53 1010在AS3中如果用loading在主flash中是不能使用sta ...
相关推荐
HDRI(High Dynamic Range Imaging)环境贴图制作是3D渲染和视觉效果领域中的关键步骤。这种技术允许创建和使用具有广泛动态范围的图像,能够更真实地模拟光线在现实世界中的行为。HDRI环境贴图可以捕捉到场景中的...
HDRI(High Dynamic Range Imaging)环境贴图制作工具是一种用于创建和编辑高动态范围图像的软件,它在3D图形和游戏开发中扮演着至关重要的角色。这种技术能够捕捉和再现现实世界中从最亮到最暗的广泛光照范围,为3D...
"模拟的天空的环境贴图DIRECT10"是一个与之相关的项目,它利用Microsoft DirectX 10(简称DIRECT10)的图形编程接口来创建和应用立方体贴图,实现环境映射和环境阴影效果。下面将详细介绍这一技术及其关键知识点。 ...
OpenGL环境贴图是一种在3D图形渲染中模拟物体表面反射的技术,它允许物体表面看起来能够反映出周围的环境。这种效果在游戏、虚拟现实和可视化应用中非常常见,为场景增加了真实感和深度。环境贴图主要依赖于纹理立方...
在计算机图形学中,环境贴图技术是模拟环境反射和光照效果的重要手段。它在游戏开发和虚拟现实领域有着广泛的应用。特别是在《17.2环境贴图1》这一章节中,我们重点讨论了环境贴图的创建过程以及如何将其融入世界...
在IT行业中,尤其是在游戏开发和视觉艺术领域,高质量的环境贴图是至关重要的元素,能够为虚拟世界带来深度和现实感。"二次元梦幻卡通纯手绘HDR环境贴图"是一个专为创建这类视觉效果而设计的资源集合。这个资源包包...
在3D场景设计中,环境贴图是至关重要的组成部分,它们赋予了虚拟世界生动而真实的视觉效果。这里的“秋季主题3d场景天空图”是一组专门为秋季场景设计的环境贴图资源,旨在帮助3D场景开发者更好地构建具有秋天氛围的...
在3D场景设计中,环境贴图是至关重要的元素,它们赋予了虚拟世界生动而真实的视觉效果。这里的“春季3d场景的天空图”是一系列专为春季主题设计的环境贴图,旨在为3D场景开发者提供丰富的素材,无论你是初学者还是...
在3D场景设计中,环境贴图是至关重要的组成部分,它们赋予虚拟空间以真实感和生动性。这里的“夏季3D场景的天空图”是一组专门针对夏季主题的环境贴图资源,旨在帮助3D场景开发者们构建出更加逼真的夏季场景。这些...
在3D场景设计中,环境贴图是至关重要的组成部分,它们赋予了虚拟世界生动而真实的视觉效果。"冬季3d场景的天空图"这个资源集合就是专为创建冬季主题的3D场景而准备的,旨在帮助设计师们打造逼真的冰雪世界。 首先,...
在3D场景设计中,环境贴图是至关重要的元素,它们赋予了虚拟世界生动而真实的视觉效果。这里的“天空和天空大海3d场景的天空图”集合,正是为3D艺术家们提供了一系列高品质的环境贴图,专用于创造令人沉浸的天空与...
学习threejs,设置envMap环境贴图创建反光效果,天空贴图
HDR资源,用于threejs环境贴图
例如,文件名CG-Source-Empty-Apartment_0003_4k.hdr表明这是一个空公寓的环境贴图,4k分辨率意味着它具有非常高的细节和清晰度,适合用于创建高质量的虚拟体验。同样,HDRI_Hen-Cabin_4k.hdr可能是表示一个山间小屋...
Three.JS 使用RGBELoader和CubeTextureLoader 添加环境贴图
在KeyShot中,HDR素材主要用作环境贴图,它可以模拟各种自然或人造的光照环境,例如晴朗的日光、阴天、室内灯光等。这些HDR图像通常包含360度全景信息,能够全方位地影响场景中的物体,使渲染出的图像具有丰富的光影...
【E3D HDRI贴图】是用于3D渲染中的高质量环境光照贴图。HDRI,全称为High Dynamic Range Image,即高动态范围图像,它能够捕捉和存储场景中的广泛光照信息,包括亮部和暗部的细节。在3D建模与渲染领域,HDRI贴图通常...
环境纹理贴图 hdr格式贴图环境纹理贴图 hdr格式贴图环境纹理贴图 hdr格式贴图环境纹理贴图 hdr格式贴图环境纹理贴图 hdr格式贴图环境纹理贴图 hdr格式贴图环境纹理贴图 hdr格式贴图环境纹理贴图 hdr格式贴图环境纹理...
VTF文件不仅包含普通的二维图像数据,还可能包括额外的元数据,如法线贴图、环境映射、位移贴图等,这些在3D渲染中起着关键作用。 VTFEdit是一款强大的VTF贴图查看与修改工具,它允许用户查看和编辑这些专用的图像...
5. 环境贴图:用于反射效果,让模型表面反映出周围环境。 6. 散射贴图:影响光线在物体表面的散射,用于模拟透明或半透明物体。 二、贴图的分辨率与压缩 为了在游戏中保持高质量的画面,同时兼顾性能,永恒之塔的...