HaloWars地形技术(HALO WARS: The Terrain of Next-Gen)

Unity——地形切割方法(Terrain Slicing插件用法) 简单来说这篇文章属于地形分割插件Terrain Slicing的教程,简单实用 阅读详情

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!

CesiumJS PrimitiveAPI 高级着色入门 - 从参数化几何与 Fabric 材质到着色器 - 上篇 最近还整理一份JavaScript与ES的笔记,一共25个重要的知识点,对每个知识点都进行了讲解和分析。能帮你快速掌握JavaScript与ES的相关知识,提升工作效率。 阅读详情

相关推荐

使用九宫格算法在unity中实现无限地图

地图,一个大型的游戏不可或缺的一部分,有的游戏内容比较丰富,相对来说,他的地图就会比较大,那么,把一整块地图和资源全部加载到游戏场景中显然是行不通的,一是浪费渲染的性能,二是全部加载出来也会造成游戏运行内存过大,达到一定阈值就会造成游戏闪退,甚至直接死机,所以,动态加载地图就成了一个大型的游戏不可缺少的一部分,就像市面上的一些3A大作,例如:GTA5、荒野大镖客、古墓丽影等等大型3A大作,玩法丰富,内容多样,像这样的游戏,必须使用动态加载地图,所以,我们今天就来实现一下在unity中动态加载地图。

wangluofashaoyou的博客 2944

unity 地形切割及动态加载插件Terrain Slicing Dynamic Loading Kit v4.0 快速使用说明

假设有地形的切割、blend、动态加载的需求,可阅读本文。 地形切割原理较为简单,但blend、动态加载也算比较麻烦,不如直接用插件。我采用的 Terrain Slicing Dynamic Loading Kit v4.0下载 该版本插件支持unity 4及以上,2018.2以下(unity2018.2之后不再支持js)。虽然地形切割部分2018.2就不支持了,但动态加载部分还是可用的。所以,也...

思依_vr 的专栏 6771

Terrain Slicing好用的地形terrain分割插件

切片过程 1)开始切片过程,在Unity编辑器顶部选择地形选项,然后单击“切片地形”选项。一个窗口会出现一些配置信息。 2)拖动您希望分割为“地形切片”字段的地形。或者,如果您在步骤1中单击“切片地形”选项时选择了地形,则该字段中已经出现了地形。 3)输入每个补丁的详细分辨率。优选地,该值应与每个补丁值的基本地形细节分辨率匹配。这些信息不能通过脚本访问,这就是为什么你必须在这里输入它。您可以输入与基础地形设置不同的值,但这将导致细节网格(植物和草地)复制的准确性降低。 4)选择您希望结束的切片维度。2×2仅仅意味着基本地形将沿着X轴2次和Z轴2次分割,以创建4个地形片。64×64未经测试,不建议使用,所以请自行承担风险。 5)设置希望存储地形数据的文件路径。默认情况下,这是资产/ terrainslicing /地形数据。如果您希望暂时在另一个文件夹中创建地形数据,只需在这里输入新路径。如果希望永久更改默认文件夹,请输入新的文件路径,并选择“保存当前文件路径作为默认文件路径”按钮。请确保没有“/”后的文件路径上的文件夹名称(例如,用于文件的默认路径的地形数据后),否则将会出现错误。 6)当单击“创建地形”按钮时,选择是否覆盖现有的地形数据。这是一个安全功能,以确保你不小心覆盖的地形数据,你已经创造了。如果试图在未选中此值时重写数据,则会出现警告消息,告诉您要检查此值,而切片操作将不会开始。 7)单击“创建地形”按钮,等待进度条填充。如果进度条未显示,则在编辑器窗口显示通知错误的通知消息。有时您可能需要检查控制台以获得更详细的信息。最后,确保只在编辑模式下执行切片地形脚本。

Terrain Slicing - 强大地形分割插件

Terrain Slicing - 强大地形分割插件 【下载地址】TerrainSlicing-强大地形分割插件 Terrain Slicing 是一款专为Unity开发者设计的地形分割插件,旨在帮助用户轻松将复杂地形切割成多个独立部分,便于精细管理和编辑。通过简单的操作流程,用户可以选择地形、设置分辨率、定义切片维度,...

gitblog_06737的博客 569

地形切割及动态加载插件Terrain Slicing Dynamic Loading Kit v4.0

地形切割及动态加载插件Terrain Slicing Dynamic Loading Kit v4.0

地形分割和Lightmap分割

Unity的Terrain分割,分块后的各Terrain各自保存自己的Lightmap信息。

Terrain Slicing切片工具

Terrain Slicing 插件这是一款专为Unity开发者的地形编辑提供便捷分割功能的工具。 Terrain Slicing 插件能够帮助用户轻松将Unity的地形分割成多个独立的部分,便于更精细地管理和编辑。

Unity Terrain Slicing Dynamic Loading Kit 4.3.3 地形切割插件

最新版最好用地形切割插件

借助英特尔集成显卡,优化提升PC版 Halo War*2 性能

任务当来自英国的顶级工作室 Creative Assembly* 开始开发 Halo Wars* 2 时,他们的目标很宏伟,他们希望游戏在 DirectX* 12 支持的各种设置上运行,在各个硬件层面上都具有较强的可玩性——包括高级台式机 PC 配置和笔记本电脑。 尽管通过一系列的优化,配有独立显卡的高端系统的游戏体验在不断增强,他们团队仍将进一步探索针对英特尔集成显卡和多核处理功能如何进行游戏优...

intel_news的博客 669

Terrain Slicing Dynamic Loading Kit V4.4.0.unitypackage

Terrain Slicing Dynamic Loading Kit V4.4.0,相比之前的,最大的修改支持2018.3

Unity在Terrain中创建道路插件

这是一款非常方便的的插件,在平时我们想要在地形中创建道路可能还需要有模型然后在放到道路上面,通过这款插件,我们可以非常便捷的就制作出道路。下面一起来看看这款插件吧。

Cesium中自定义材质material

Cesium.Material.fromType() 方法是一个简写,完整的写法是如下,Fabric 是 Cesium 中用于描述材质的一种 JSON 规定,里面type属性是材质的类型,也就是材质标识,uniforms是对应材质的一些变量,可以设置材质的颜色、图片等,不同材质的uniforms不一样。内置的材质可以直接拿来使用,最常用的就是Color和Image。但是,不管是哪一种,在这些 glsl 代码中,都是可以直接使用 glsl 的内置函数和 Cesium 预定义的 函数、结构体、常量的。

liubangbo的专栏 4652

使用 Rhino terrain 插件创建三维地面模型

本文是作者工作中的实例,利用Rhino terrain 插件创建带有地理坐标的三维地面模型。非常抱歉,由于本人在国外工作,此文档使用英文写成,对给您可能造成的不便表示歉意。

TerrainSlicing-强大地形分割插件

TerrainSlicing-强大地形分割插件 【下载地址】TerrainSlicing-强大地形分割插件 Terrain Slicing 是一款专为Unity开发者设计的地形分割插件,旨在帮助用户轻松将复杂地形切割成多个独立部分,便于精细管理和编辑。通过简单的操作流程,用户可以选择地形、设置分辨率、定义切片维度,并配置...

gitblog_06786的博客 447

一个unity无限terrain加载

terrain_endlessizer 这个无限地图的思路是先创建几个地形缓冲池,然后把需要显示的地形数据读入并显示,这个代码没有读取地形的高度信息和地表信息,比较遗憾,可以看我另外一个下载<> http://download.youkuaiyun.com/detail/thinbug/9585232 ,这个里有读取地形信息代码,自己没时间合并这2个代码,但是代码可以用. 需要的朋友可以下载学习.

Unity插件 Ferr2D Terrain Tool v1.0.9

通过简单地可视化拖动轻松快速制作类似《滑雪大冒险》、《登山赛车》等2D游戏地形通过简单地可视化拖动轻松快速制作类似《滑雪大冒险》、《登山赛车》等2D游戏地形

上一篇: SomethingOn生产力提升工具使用
下一篇: 2012_2 misc on reading
安柏霖
安柏霖 领域专家: 学术研究与理论基础技术领域 领域专家: 学术研究与理论基础技术领域
博客等级 码龄20年 1788粉丝 891原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值