真实感森林的建模与可视化

真实感森林的建模与可视化

Modeling and Visualizing a Real Forest

 

 

文章来源:IEEE Computer Graphics and Applications,大规模场景对象渲染技术系列文章(1)

 

Donald H.House,

Midori Kitagawa-DeLeon

Greg S.Schmidt,

Scott A. Arvin,

翻译:张嘉华

http://blog.csdn.net/javazjh

newzjh@126.com

翻译:梁成(女)

aliceliang@163.net

 

德克萨斯州A&M可视化实验室

华南理工大学计算机学院

 

 

介绍 (Introduction)

在德克萨斯州的A&M可视化实验室,我们最近和计算机科学家、心理学者、艺术家以及其他方面专家合作,共同创造了一个具有高度真实感、计算机生成的森林漫游。在美国农业部(USDA)的资助下,这项工作在亚利桑那州大学心理学实验室进行了实验。研究员希望测定在计算机生成可视化自然场景动画的现实程度,让人们得以了解虚拟环境和现实究竟有多少相似。这项计划将要比较项目在真实情况、图像带、图象漫游、和计算机模拟漫游下的效果。

1. 地点数据和信息
 (Site data and information)

亚利桑那州大学科学家调查了一个位于美国犹他州南部自然森林中的风景优美的山坡,并且使用了激光范围搜索设备和GPU技术以定位每一颗树。初始的地形高程数据来自一个ARC/INFO三角网格,我们将它转换为规则网格。这让我们易于应用纹理和位移图到最终的渲染。该地点可视化的区域约占18亩地, 150 英尺 高程,包含1600颗树。我们得到树木的数据文件——每一颗树一行数据。对于每颗树,有位置、高度主干和遮盖直径、类型、针的比例和生长角度。

 

1:在该地点平面图的

成阶层的摄像机路径

 


 

2. 树木几何定义 (Tree geometry definition)

Bogas分枝对象生成和动画系统生成树木的几何结构。该系统由俄亥俄州大学Midori Kitagawa-DeLeon研发,Bogas作为整个成果的骨干,——它为所有的每一颗个体的树修改树木调查数据为realistic representative几何结构。Bogas使用参数化的算法过程去“生产”有机的分枝结构。为了在Bogas中发育一个分枝,你必须首先定义几何图元元素,它构成对象并且定义了这些元素间的拓扑和几何关系。一个定制的软件工具提供了地点调查数据和Bogas的界面。该软件转换树木调查参数——如树木高度、树干直径、遮蓬半径为一个适当的Bogas参数集,Bogas的输出按椭圆体和多边形定义了树木的几何结构。我们使用额外的定制软件转换这树木几何到Pixar动画工作室的Renderman4软件的RIB文件格式。

 

2:作为纹理形式

的个体树木

3. 场景生成过程
(Scene generation process)

为了生成场景,我们首先定义一个摄像机路径,然后渲染每一颗树,并且最终创建动画中每一帧单独的图象。我们设计摄像机路径以模拟一个人沿着连续的路径漫步,在每个预先定义的点停下来,转360度,并且继续沿着路径走。该路径打算模拟真实的森林漫步远足旅行。图1展示了一个带有树木、摄像机路径和旋转点的该地点的布谷图。结合从初始调查得到的树木大小的数据,我们使用Bogas为每一颗树创建几何结构。在该点上,我们为每颗树渲染一个二维图象以创建纹理映射代表在最终图象中远离摄像机摄像机的树(见图2)。对于最终动画中的每一帧,我们创建一个Renderman4RIB文件。该定制软件从Bogas综合每一颗树的几何结构,树木坐落于最初调查所得的位置,矩形网格来源于地形数据,摄像机路径信息定义每一帧。我们编写定制的Renderman shader为地面和树皮提供位移(displacement)和纹理图。针叶构成Engleman Spruce树叶,同样是由定制的位移(displacementshader生成的,它转换Bogas输出的简单的椭圆体的针叶为定人信服的针叶从,如图3

3 Needle closeup displacement map

4. Managing size and complexity

我们的生成过程,从初始化的地形和树木数据到渲染的每一帧,逻辑地创建了从数据到图象的管线。但是,许多其它实际问题需要解决,不仅仅我们需要解决的问题大小。首先,我们想通过强制(brute force)使用最大可能的计算能力能够快速地给我们结果。我们在德克萨斯州A&M超级计算中心的SGI Power Challenge机器,带有24个每转200MHZ的处理器。我们每个处理器有 1G 内存空间, 4G 磁盘空间用于渲染,在几何用户之间共享。即使在这样的大型机器,我们首次尝试创建RIB文件并且试图渲染它们均失败了。RIB文件和里面的模型太大,超过了RAM能够处理的能力,——换来的结果是虚拟内存交换使得渲染非常慢。一些图象根本没有渲染,导致机器在几小时后崩溃。其它图象花费了超过10小时用于渲染,并且RIB文件可能超过 500M ,最后,我们减少渲染时间到一个范围:从20分钟到2小时,RIB文件大小减少到以下范围:从 50M 120M 。最终,我们通过小心处理潜在的复杂问题,在努力维持一个高度可见的真实感情况下,完成了渲染。

 


 

 

5. 细节层次技术(Level of detail)

我们首先尝试通过每帧减少递交给RIB文件的树木数量以减少复杂度。在三维图形学中,你通常传递整个模型给渲染器,并且让渲染器软件丢弃模型中对于当前摄像机位置不影响图象渲染的部分,此外,所有模型元素通常以全分辨率展现,渲染器必须检测多精细或多粗糙去抽样特定模型元素以得到渲染图象中的合适精度。但是,在我们的问题中,模型中的树木数量太大,每颗树都太复杂了,使得这种标准方法显得不切实际。取而代之,我们预处理模型,传递给RIB文件仅仅那些从当前摄像机位置影响最终图象的树木。图4展示了带有一个三角形高亮标识了摄像机位置和视锥的森林图例。截然不同的颜色代表不同的树木类型:处于视锥内和仅仅超出视锥范围的的树木(绿色),那些完全处于视锥外但它们的阴影可能重叠在视锥内的树木(黄色),其它被剔除的树木(红色)。所有的场景中的树木根据它们距离摄像机的距离被分类为nearmidfarvery far区域。我们使用上述的树木距离区域去决定在渲染树木时在RIB文件中使用那种细节层次(LOD),并且决定那种颜色和位移(displacement)细节。

4:根据观察视锥分类并剔除树木

 

   

 

5,一个渲染好的图象,展示了树木是如何从4个不同区域呈现。树木在标识为very far的区域中不以几何模型的形式包含在RIB文件中,取而代之的是,它们表现为一个具有透明度的面向摄像机的矩形多边形,带有不透明的树木二维纹理图在它之上(如图2)。这种技术通常被称为公告牌。我们完全建模剩下的树,但根据与摄像机的距离渲染它们(见表1)。在far区域中的树木通过仅仅实体颜色着色(solid color shader),没有针对树皮和针叶的位移(displacement)贴图。在near区域的树通过全部纹理和表现真实树皮针叶的位移(displacement)贴图渲染。对于中间区域的树,我们在纹理和位移贴图(displacement)之间插值,从全纹理到实体颜色(solid color),从全纹理和全位移贴图到没(none),根据它们距离摄像机的距离,这种插值方案避免动画中由于渐进漫游过程树木在区域间移动所产生的讨厌的可见效果。

5不同的细节层次

 


 

6. 实例化 (Instantiation)

根据视锥预处理模型被证实在处理过程中非常有用,但是在一些动画片段中,场景仍然太大和太复杂难以渲染。所以,我们引入实例化(instantiation)以减少截然不同的树木几何模型数量在一个RIB件中。我们在原始树木数据库中根据类别和高度对对1600颗树进行分类。类别包括幼树(baby tree)和成熟的树(mature tree)以及每颗树是否活的,将要死亡的还是已经死亡的。高度每 两米 区间为一组。我们小组为每一个类别和高度创建一个模型,结果剩下70种截然不同的几何模型。每个RIB文件包含仅仅特定场景需要的树木几何模型和那个模型应该放在地形中那个位置的信息。实例化方案让我们明显减少RIB文件大小,并且在漫游中以适当的帧速和时间渲染所有场景。但是,着技术确实有一个主要缺点——我们丢失了不同树木之间的差异性。例如,树木宽度和复杂度(叶子数量和枝干数量)变成了静态的。我们相信无经验的观察者不会注意到这些丢失的差异性。当观察作为森林中一个很大的整体时,并且带有针叶和其它添加的细节,那是几乎不可能存在一样的树木。

7. 照明和观察(Illumination and shadows)

当我们创建合适的几何结构、摄像机动作和表面细节后,我们关注森林中的照明以达到真实地在森林中徒步旅行的效果。我们建模天空作为一个蓝色的椭球体包围着森林。主要的关照来源于 7 21 日早上 10:00时太阳位置所产生的平行光。一个很小的环境光模拟由于反射和大气漫反射引起的光线。最后,一个填充式的光总是处于摄像机位置,并且和观察方向一致的发射方向,提供一些额外的光线和背面光漫反射感觉。我们用Renderman depth-cue shader创建大气效果,它给予摄像机到反射面的距离混合背景色到来自表面的光线反射中。阴影的存在对于最终的动画表现是犹关重要的。图6展示了同样的场景带有三种不同层次阴影渲染的效果。图 6a 展示了没有阴影的场景,森林显得非常静态,并且不真实——显然是计算机生成的。在图6b,我们看到同样的树带有通过包含仅仅树皮和枝干在阴影计算中的“telephone pole”阴影。我们使用阴影层次在我们的首次尝试渲染全部动画。最终,在图 6c ,我们看到场景带有全部阴影渲染——包含树叶canopy效果。在创建遮蔽的大区域和象征森林的太阳,消耗了50%更多的渲染时间去包含恰当的telephone pole阴影;从这到全阴影增加了额外的20%渲染时间。但是,可见的真实感带来的冲击是非常重要的以致于我们决定包含全阴影在最终的动画版本中。

7:各种阴影渲染的森林对比

 


 

8成果 (Production)

那是很难去预测一个场景动画的效果直到它被渲染和以视频帧速回放。整个序列,包含7200帧,包含7360度回转和7个直线截取。对于动作,为了快速得到一个效果,我们开始每30帧渲染以保证所有的东西合理渲染,我们通过从一帧到下一帧的分解把这些帧放到带上,以观察动作和时间。在成果的鼓励下,我们填充丢失的帧并且以每秒10帧渲染并产生动画。沿着直线路径上截取每一帧,看起来对了,但是需要在360度转弯处更细化。所以我们在转弯处以7.5FPS帧速渲染。不幸运的是,这并没有带来好的效果,由于转弯处会带来令人昏乱(dizzying)效果。为了抵消这种效果,我们渲染转弯处以一系列摄像机位置静止,大约每帧之间30度旋转的10多帧,分解转弯处360度的两帧之间为30度旋转的12帧。这带来了转弯处急速勒马(saccades)的效果。最终,我们解决勒许多在产生森林漫游动画中遇到的困难的问题,并且最终产生了如图7所见的完整动画。我们在NTSC BetaCam 录像带渲染并记录了整个4分钟动画。同时,我们在准备7个动画片段和7次转弯动画的MPEG版本。

 

7:最终的效果

 

9. 结语 (Conclusion)

这项目需要许多工具和技术去解决高度复杂的真实感需求带来的问题。这项目教会我们在自然场景工作中分层次细节层次建模和渲染。我们将会提供地表纹理质量,这可能是我们图象中最缺乏真实感的地方。一个可能的方法将会是使用过程着色(procedural shader)代替位移贴图和纹理映射。令一个方面的改进是包含各种各样的树木颜色表现死亡的树木和森林地表残骸,并且建模环境效果,如基于森林密度的树木形状改变。如果让我们重新再做这个项目,我们会考虑编写一个专门的渲染器,为我们的问题和需求优化,以提高渲染时间。我们得到的最好的称赞将会是我们真实森林场景的工作得到一个研究员花费可观的时间关注,他所看到的图象和动画,截取了森林的灵魂和气息,带给他真实的沉浸感。

鸣谢 (Acknowledgments)

参考文献 (References)

1.        D.H. House et al., “Visualizing the Midway Face of the Dixie National Forest ,” Proc Siggraph 97 Visual Technical Sketches,ACM Press, New York , 1997, p. 207.

2.        M. Kitagawa-DeLeon, “Branching Object Generation and Animation System with Cubic Hermite Interpolation,” J.Vis. and Computer Animation, 1994, Vol. 2, pp. 60–67.

3.        M. Kitagawa-DeLeon, “Rendering the Midway Face Forest, Towards High Realism in Environmental Visualizations,”Proc. Resource Tech. 94, American Soc. of Photogrammetry and Remote Sensing, Bethesda, Md., 1994, Vol. 1, p. 231.

4.        S. Upstill, The RenderMan Companion: A Programmer’s Guide to Realistic Computer Graphics, Addison-Wesley, Reading , Mass. , 1990

 
已标记关键词 清除标记
相关推荐
简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address EJB的实现 ,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口函数得到远程接口的引用,用远程接口的引用访问EJB。 EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上直接地使用它,但是它的主要作用是供程序使用的。本规范尝试满足大型主机、微型主机、个人工作站、和TACs 的不同需求。例如,容易实现协议的设计。 Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天通信演示代码 2个目标文件,一个服务器,一个客户端。 Java Telnet客户端实例源码 一个目标文件,演示Socket的使用。 Java 组播组中发送和接受数据实例 3个目标文件。 Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密   Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。   设定字符串为“张三,你好,我是李四”   产生张三的密钥对(keyPairZhang)   张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节   通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 同上 java聊天室 2个目标文件,简单。 java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件,简单。 java求一个整数的因子 如题。 Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥   Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从文件中得到公钥编码的字节数组、如何从字节数组解码公钥。 Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输   Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页