HaloWars地形技术(HALO WARS: The Terrain of Next-Gen)
2012-02-25 15:54
477 查看
http://www.gdcvault.com/play/1277/HALO-WARS-The-Terrain-of
这个是09年的视频,很多技术点还是非常有借鉴意义的,主讲者ColtMcanlis当时在bonfire studio后来到了blizzard也发了一个gdc的presentation(link),不过后来又离职了。
看完video的几个感觉是:
像UE这样的engine只能提供general的技术,针对特定游戏类型(比如halo war这样的rts类的)需要其量身定做的技术才能达到最优的效果,而且这种最优可能有相当大的优势。
halo war中地形的变化
halo war的开发商之前是做帝国时代的,地形系统也是一脉相承,之前的技术提到的就是很通用的使用mesh来处理cliff的情况。
在halowar里面,bonfire:
大幅度的增加了地形的精度(8x)
使用了vector field来增加地形的变化(可以倾斜)
内存问题
开始的时候是一个4kx4k的地形,这个对内存的消耗很大:200mb pos,200mb normal
那么使用wavelet&dxt技术,可以把400mb压缩到32mb,这个很令人惊讶。然后在gpu上去解压缩,但是效率上有一些问题,使用了7个texture。
进一步的问题解决就不是技术上做的了,而是从设计上摒弃了4k地形的做法,换成1280的地形,那么就可以压缩到14mb,这个就是一个很让人接受的数据和效率了。这里的数据format是:normal:11,11,10
ao,alpha:dxt5
LOD
这里mcanlis列了几个方案,都是很不错:index buffer sampling,和roam很像,通过改变index buffer的方式,但是这个有pop up
RQT:这个前几天还看见intel在说这个,就是irregular的grid:
但是这种方式并不是由于每一个sector要有自己的index buffer,内存上的消耗不能接受
最后使用的xbox360上的tesselation,这个也是效果最好(性能和smooth的lod转换)
SimInteraction使用从gpu上capture场景的方式来获得用来simulation的方式,没想到居然和我在项目里的做法一样,:)
Texturing这里有介绍一个专业词汇:splatting,就是多层地形混合。splatting是超级费的一个操作,需要sample大量的texture。
bonfire使用virtual texture来替代splatting,但是这个很普通的使用virtual texture有一个很大不同就是,你不能preload,因为rts是瞬间转换到各个地形部分,而不是fps那样一步步向前走的。这里bonfire使用的方法就是使用splatting来填充cache(而不是mega texture类的从硬盘读取)。实现细节上使用xbox360的一些底层函数(比pc上的driver要高效的多)来进行快速cache切换。而且在gpu上splatting之后,还会做一次compress,就是从rendertarget的rgba8到dxt1,这个也会省去大量的memory cost和渲染时刻的bandwidth消耗。
TerrainSkirt这个小技巧很有意思,就是在地图边缘把地形做一个镜像,这样就用同样的内存创造了大得多的地形。真的是很聪明的idea,好用好实现。
编辑器
这里mcanlis说他们犯了很二的错误,就是使用c#在pc上实现了一套代码在xbo360上搞了另外一套,不应该如此。
还实现了一个腐蚀系统,来模拟更加真实的一个情况,从实际工作来看,erosion不太可能人工用简单画刷来实现。
相当有技术含量的一个presentation, I like it!
这个是09年的视频,很多技术点还是非常有借鉴意义的,主讲者ColtMcanlis当时在bonfire studio后来到了blizzard也发了一个gdc的presentation(link),不过后来又离职了。
看完video的几个感觉是:
像UE这样的engine只能提供general的技术,针对特定游戏类型(比如halo war这样的rts类的)需要其量身定做的技术才能达到最优的效果,而且这种最优可能有相当大的优势。
halo war中地形的变化
halo war的开发商之前是做帝国时代的,地形系统也是一脉相承,之前的技术提到的就是很通用的使用mesh来处理cliff的情况。
在halowar里面,bonfire:
大幅度的增加了地形的精度(8x)
使用了vector field来增加地形的变化(可以倾斜)
内存问题
开始的时候是一个4kx4k的地形,这个对内存的消耗很大:200mb pos,200mb normal
那么使用wavelet&dxt技术,可以把400mb压缩到32mb,这个很令人惊讶。然后在gpu上去解压缩,但是效率上有一些问题,使用了7个texture。
进一步的问题解决就不是技术上做的了,而是从设计上摒弃了4k地形的做法,换成1280的地形,那么就可以压缩到14mb,这个就是一个很让人接受的数据和效率了。这里的数据format是:normal:11,11,10
ao,alpha:dxt5
LOD
这里mcanlis列了几个方案,都是很不错:index buffer sampling,和roam很像,通过改变index buffer的方式,但是这个有pop up
RQT:这个前几天还看见intel在说这个,就是irregular的grid:
但是这种方式并不是由于每一个sector要有自己的index buffer,内存上的消耗不能接受
最后使用的xbox360上的tesselation,这个也是效果最好(性能和smooth的lod转换)
SimInteraction使用从gpu上capture场景的方式来获得用来simulation的方式,没想到居然和我在项目里的做法一样,:)
Texturing这里有介绍一个专业词汇:splatting,就是多层地形混合。splatting是超级费的一个操作,需要sample大量的texture。
bonfire使用virtual texture来替代splatting,但是这个很普通的使用virtual texture有一个很大不同就是,你不能preload,因为rts是瞬间转换到各个地形部分,而不是fps那样一步步向前走的。这里bonfire使用的方法就是使用splatting来填充cache(而不是mega texture类的从硬盘读取)。实现细节上使用xbox360的一些底层函数(比pc上的driver要高效的多)来进行快速cache切换。而且在gpu上splatting之后,还会做一次compress,就是从rendertarget的rgba8到dxt1,这个也会省去大量的memory cost和渲染时刻的bandwidth消耗。
TerrainSkirt这个小技巧很有意思,就是在地图边缘把地形做一个镜像,这样就用同样的内存创造了大得多的地形。真的是很聪明的idea,好用好实现。
编辑器
这里mcanlis说他们犯了很二的错误,就是使用c#在pc上实现了一套代码在xbo360上搞了另外一套,不应该如此。
还实现了一个腐蚀系统,来模拟更加真实的一个情况,从实际工作来看,erosion不太可能人工用简单画刷来实现。
相当有技术含量的一个presentation, I like it!
相关文章推荐
- 电子书下载:Pro Internet Explorer 8 & 9 Development: Developing Powerful Applications for The Next Generation of IE
- The next Generation of Client Management.
- open source Swift, Objective-C and the next 20 years of development
- the House of Force技术简单分析
- 国外的53个优秀技术博客-53 Of The Best Tech Blogs Out There
- The Frightening Science of Prediction: How Target & 10 Others Make Money Predicting Your Next Life Event(转摘)
- 87.You want to display the date for the first Mon day of the next month and
- [LeetCode] Next Permutation - Next bigger number with the same set of digits
- Zhenjiang deployment of current and the first quarter of next year to start work
- Next select the number of free fifa 16 coins
- CodeIgniter-a php framework powering the next generation of web apps
- The Internet of Things: From RFID to the Next-Generation Pervasive Networked Systems
- Try out the latest C++ compiler toolset without waiting for the next update of Visual Studio
- 《the Zen of CSS Design》技术术语翻译意见征集
- Guru of the Week 条款28:“Fast Pimpl”技术
- .Net EF Core数据库使用SQL server 2008 R2分页报错How to avoid the “Incorrect syntax near 'OFFSET'. Invalid usage of the option NEXT in the FETCH statement.”
- Ballmer: Investing in the Next Decade of Growth and Opportunity
- TestNg--The next generation of testing--2
- AlphaGo:用机器学习技术古老的围棋游戏掌握AlphaGo: Mastering the ancient game of Go with Machine Learning
- 上周技术关注:The Rule of Method Design