Unity挑战大世界刷草(一)

前言

大家好,作为博客开通后的第一篇技术类博文,我决定将前不久总结的一些关于如何在移动端开放大世界中高效渲染草海的心得做一下分享,内容比较多,主要是寻找和探讨阻碍我们实现目标的一些技术问题,以及整理应对思路。 

那么在开始正式分享前,大家可以先概略的了解下接下来的主要内容:

1)首先,也是比较基础的,我们得明确实现所谓的“移动端开放世界草海”会遇到哪些挑战,引出几个主要的问题点;

2)接下来,在明确问题的前提下,我会花比较多的篇幅,来和大家一起设计一套可行的方案。期间我们会讨论许多内容,诸如,如何定义一株草,如何存储信息,如何在适宜的地方偷工减料,如何安排任务,充分利用起CPU和GPU的并行能力等等。

3)紧接着,我会简单过一下接口设计,大家此时已经对渲染草海的实现原理有了基本认识,因此对接口内容也应当能更好的理解了。

4)再之后是分享的一些,在工程搭建中,个人感觉比较重要的技术细节和实现。当然,由于我自身经验的局限,所选的技术实现不一定最适合当下的应用场景,所以随时欢迎大家指正问题。

5)在分享的最后,是一个简短的Demo展示和性能比对。


问题与挑战(渲染草海的基本概念,及其主要特点)

我们要做的是 移动端的 开放世界超大地图 上的 可交互的 草海。有3个定语修饰一个名词“草海”,我觉得首要问题还是要明白草海到底是什么,然后再来给它添加新特性以满足各项要求。

真实世界草海的2个特点

听到“草海”这个词,大家能想到什么。。。就我而言,我想到了遍布山丘的牧草,连片的金黄色麦田,或者密布在岸边的芦苇。这些景象给我的一个宏观感受是一个词“连绵不绝”,是一种在空间上由近及远铺排开来的那种连绵起伏的感觉,我们换一种朴实的说法就是:草是“海量”的;另一种给我的感受也可以总结为一个词“浑然一体”,意思是在色彩感官上,草海是相对统一和规律的,而不是杂乱琐碎的,就是说构成草海的草的个体种类具有同质性。所以“海量”和“同质”是我对这类自然景观的一种概括或抽象。也是草海的两点“特质”,后续我们的许多工作都是基于这两项认知的。

数字世界草海面临的挑战

基于对现实中草海的认识,来到移动数字端,我们发现这个绘制“海量”植被需求的本身,就是主要挑战。细分一下,主要有2个方面:

第一个是:草体本身的绘制压力,主要由CPU和GPU共同承担,可以预见,草的数量越多,代表草的几何面片数量自然越多,这样从CPU读取数据,预处理,合并上传GPU,再到渲染这套通用流程走下来,总耗时就越来越大了。

另一个是:存储草海信息的压力,简言之就是如何正确的记录下每一株草的位置、朝向等独有信息,并在需要的时候高效的获得到。

我们举个例子,不妨以一张10公里见方的世界地图为例,假设每平米生长有10株草,那么光存位置信息,我们需要占用: 

    10^4 * 10^4 * 10 * Vector3 = 10^9 * 12 byte > 10GB 

10G就算是理论上限也已经很大了,何况不止一种草要处理。

综上所述,算起来压力大,存起来存不下,面对在移动端绘制海量草的需求,这就是我们需要面对的基本问题与挑战。


面片草 vs 模型草

我们刚刚提到过,绘制大量构成草的几何形状是有压力的,如果不能从草的数量上下手,那么就只能简化模型网格了。

主流的草模型有2类,既 面片草模型草

面片草是做得比较极端的例子,在这种模式下,草的颜色和轮廓只是一张带有alpha通道的纹理,草的几何构成(或者叫Mesh)被简化为一张或若干张面片(一般是矩形的)。如左上方的示例图,运行时GPU会在这块面片底板上,将美术同学绘制的2D贴图贴合上去,通过开启透明测试(也叫Alpha Test),让贴图纹理中不是草的部分透明,留下草本体的影像,以达到在3D空间中,绘制草效果。

模型草是另一种绘制流派,与面片草最主要的区别在于如何表现草的外轮廓,后者(也就是面片草)的轮廓是由美术同学在纹理上直接绘制出来的,而前者(模型草)则主要由模型网格本身来表现植被的轮廓。网格长成什么样子,草的形态就是什么样子。运行时GPU采样纹理,一般也只是简单的渐变色块。我们之前聊过,移动端草海中草的模型不能复杂,不然GPU受不了,所以这也限制了模型草的美术表现空间,我们常见的模型草样式是如上图右侧这般的长条状柳叶形态,就是这种限制的表现。

面片草优缺点:

    ->优点:绘制Mesh顶点少效率高,一片面片可以代表多株草,草的样式对美术发挥空间大(因为美术可以把草的纹理绘制得很复杂,却不用增加额外的GPU运行消耗),此外一般认为面片草在绘制密度较高,且较低矮的草丛时,效果不错。

    ->缺点:首先是依赖透明度测试,因为一些原因,这个开销在不少移动端设备上是相当昂贵的。其次每株草都在垂直于地面的2D平面上,近处观察和俯视效果都不佳,且受制于简陋的面片Mesh,无法做出复杂的动画,影响交互体验 

模型草优缺点:

    ->优点:3D模型的草,不论上下远近观察,效果都很稳定;可以作出较复杂,较自然的动画,交互性好;此外还有暗含的一点:可以不依赖透明度测试(或者说草模型的轮廓就是草的轮廓,无需进行透明度测试)

    ->缺点:相对面片草Mesh多,每株模型草,一般只能表现一根草体,想要复杂草体,就得多上更多的顶点 

综上,模型和面片各自都有优缺点,很多时候需要根据美术上的实际需求来权衡;在下面一篇博文中我会介绍草海信息的储存构思,之后再谈谈我对于绘制草海的技术选型(包括模型和面片草的选取)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容