unity如何往下挖地形_Unreal Engine地形系统辨析(一)

Unreal Engine的地形系统称之为Landscape,每个level里面可以存放多个Landscape的Actor(但不能对它们进行连续编辑,也就是说相邻两个landscape是不能被同一个brush修改的)。地形被均匀的切割成多个小的地块,这些地块名为Landscape Component,每个Component可以持有最多2x2个SubSection。而每一个SubSection是由多个quad组成的,这些quad是地形topology的最小单位。由于地形mesh的顶点信息记录在heightmap里,也就是顶点纹理中,所以它的分辨率尽量是二的指数幂。因此quad行和列的数量肯定是一个奇数,例如31x31,63x63等,对应的顶点数量为32x32个和64x64个。

相邻两个Component的边界处的顶点信息是一致的,它可以保证在渲染时不会产生crack,当然vertex shader中还有相应的stitch算法能够消除由于邻接的patch使用不同lod而导致的t-junction现象。根据地形的视觉误差计算结果,每个LandscapeComponent会自动的选择对应的lod,高等级的lod会比低一个等级的lod所对应mesh少一半的quad。所以63x63的quad,只会有6个lod(63x63,31x31,15x15,7x7,3x3,1x1),如果想增加lod的数量,只能去增加subsection的quad数量,换句说每个Component最多只能退化成2x2个quad。这对于比较大的地形来说drawcall数量就可能变得很多,因为地形culling的最小单位是Component,如果是一个subsection的quad数量为63x63,且有2x2个subsection的component,假设一个quad是1m的大小,那么一个component最多可以覆盖126米的范围。随着lod的升高,mesh会越来越稀疏(即三角形数量变少),当使用最高等级的lod时,126米的区域会用4个quad来表示。当前component如果可见,最多会形成4个drawcall(如果这四个subsection的screen size差异不是很大,它会自动合并成一个drawcall)。在视锥内且不没有被遮挡的Component一旦很多,那么相应的drawcall也会暴涨。通过调高subsection的quad的数量来减少drawcall似乎不是一个好的办法,因为如果culling粒度太大,会降低culling的效率,导致很多不在视锥内或者被遮挡的三角形依然会被处理。而且由于不同的lod,它对应的mesh的稀疏程度不同,导致drawcall里面处理的顶点数量也不尽相同。

ue4的实现是基于金字塔状的geometry mipmapping的平铺结构,而unity的地形是基于quadtree的层级结构,它们各有各的优势。首先ue4的地形块之间数据耦合度很小(每个component拥有自己的weightmap和heightmap,这些数据不需要跨component进行读取),它可以为每个component计算当前帧的lod值,互相比较独立,完全能够并行处理,只是收尾阶段要获取四个邻居的lod值,把它们传给shader用来做stitch。但是unity的实现需要从根部开始遍历这颗四叉树,如果当前的等级满足要求就不再往下递归,直接把当前等级的顶点信息提取出来,应用到一个固定的17x17个顶点的topology上。这样就保证了每个drawcall处理的顶点数量都是一样的,只是由于邻居的lod可能与自身的lod不同,需要选取不同的indexbuffer而已。为了减少topology的模式缓存数量,lod算法要保证相邻两个patch之间的lod差不能超过一,否则就会出现crack。而ue4的stitch算法似乎没有这些顾虑,弹性也因此更大。

由于unity的地形patch是用quadtree管理的,所以为了并行化视锥culling,它需要把quadtree遍历阶段的结果先缓存起来,放入到一个线性数组中,等到后面再与其他的renderer一起处理。反观ue4的地形,虽然每个component单独管理一个patch比较灵活,但是drawcall的数量会相对较多,尤其是那些较为平坦的地块,或者是距离摄像机较远的地块,基于quadtree的方法可能就只会使用到一个16x16quads的patch去表达,而ue4的方案如前所述,由于component覆盖的区域面积是固定的,所以它会生成更多的drawcall,甚至要处理更多的三角形。不仅如此,由于mesh退化程度有限,远处的mesh在光栅化后可能会出现overshading。

现代的桌面显卡和图形api对于drawcall和顶点处理似乎不那么敏感了,但是像素的处理由于量级太大,所以很难忽略它对性能的影响,尤其是纹理的采样和overdraw。ue4方案利用shader的static permutation的功能,有效的降低了材质中纹理的采样数量。不过如果unity能早日祭出virtual texture(不需要运行时混合多层的纹理)这一利器就另当别论了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533268.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jq输出文本_如何用 Linux 命令行工具解析和格式化输出 JSON | Linux 中国

我们将使用 Linux 上的命令行工具解析并格式化打印 JSON。它对于在 shell 脚本中处理大型 JSON 数据或在 shell 脚本中处理 JSON 数据非常有用。-- OstechnixJSON 是一种轻量级且与语言无关的数据存储格式,易于与大多数编程语言集成,也易于人类理解 ——…

计算机组成原理单周期mips,计算机组成原理CPU单周期数据通路(MIPS)

计算机组成原理CPU单周期数据通路(MIPS)【计算机组成原理】CPU:单周期数据通路(MIPS)寄存器传送语言RTL1)R(r)表示寄存器r的内容2)M(address)表示主存储器地址address的内容3)传输方向“←”表示,从右向左传输4)程序计数器PC的内容直接用PC表示输出信号改变时机1)se…

gmp计算机系统课件,EU GMP附录11计算机系统◆问答

GMP关于计算机系统的法规Zhulikou431整理,丁香园首发EU GMP guide annexes - Supplementary requirements: Annex 11Computerised Systems1. Appropriate controls for electronic documents such as templates should be implemented. Are there any specific requ…

不规则图形数格子的方法_【微课堂】人教版五年级数学(上)6.5不规则图形的面积图文精讲+教学视频+同步练习...

小学生精选资料库,家有小学生都在关注更多资料、微课堂,请至文末人教教材同步微课堂(包括视频微课、教材同步、图文讲解、同步练习等),可以在课堂之外帮助同学们学习。欢迎转发给更多的同学哦~~电子课本点击图片,查看大图▼▼▼▼…

计算机安全评估研究综合,计算机网络信息系统安全评价方法研究

摘要:该文论述了计算机网络安全现状,评价现状,以及网络信息安全评估标准,包括美国可信计算机安全评价标准(TCSEC),欧洲的安全评价标准(ITSEC),国际通用准则(CC,等同GB18336),我国计算机信息系统安全保护等级划分准则(GB17859-1999).综述了现在常用的几种评价方法,包…

动态获取某个元素的高度_codeforces 1443D,解法简单,思维缜密的动态规划问题...

大家好,欢迎来到codeforces专题。今天选择的问题是1443场次的D题,这题是全场倒数第三题,截止到现在一共通过了2800余人。这题的思路不算难,但是思考过程非常有趣,这也是这一期选择它的原因。链接:https://c…

显卡的优化以提高计算机性能作用,显卡优化,教您如何设置NVIDIA(英伟达)显卡玩游戏性能更高...

多人玩游戏可能都只是在游戏中设置画质选项,比如反锯齿等;而对显卡驱动控制面板中的设置并不关注。其实在显卡驱动面板中设置游戏文件,可以更好的控制和提高游戏画质、性能。那如何设置NVIDIA显卡玩游戏性能更高?下面,…

服务器选购seo优化规则,如何选择有利于SEO优化的空间服务器

之前我们讲过域名,讲过程序,今天我们来讲解空间,其实空间主要影响SEO只有两个方面,一个是速度,一个是稳定性,如果你的空间稳定性不够,经常打不开,百度蜘蛛经常抓取不了,就…

安装npm_Npm安装包的版本号是如何更新的?

点击右上方红色按钮关注“小郑搞码事”,每天都能学到知识,搞懂一个问题!大家好!我是/小郑搞码事/的小郑今天和大家分享一下关于NPM安装包的版本号是如何更新的问题。版本号?先来看一张图上图就是2.29.1就是安装包Momen…

css 向左白色箭头,带CSS的工具提示左侧的箭头

使用正确的CSS属性在工具提示的右边添加箭头。您可以尝试运行以下代码以在左侧添加带有箭头的工具提示示例html>.mytooltip .mytext {visibility: hidden;width: 140px;background-color: blue;color: #fff;z-index: 1;top: -5px;left: 110%;text-align: center;border-radi…

python有理数_Python中的as_integer_ratio()用于减少给定有理数的分数

在本教程中,我们将编写一个程序,该程序返回两个数字,它们的比率等于给定的float值。我们有一个称为as_integer_ratio()的方法,可以帮助实现我们的目标。让我们看一些例子。Input:1.5Output:3 / 2Input:5.3Output:5967269506265907…

js上拉加载ajax数据,原生ajax写的上拉加载实例

上拉加载的思路1 上拉加载是要把屏幕拉到最底部的时候触发ajax事件请求数据2.所有要获取屏幕的高度 文档的高度 和滚动的高度 下面的代码是已经做好了兼容的可以直接拿来用Javascript:alert(document.body.clientWidth); //网页可见区域宽(body)alert(document.body.clientHeig…

b站前端大佬_知乎大佬强烈热推的5个自学网站,看了几个月,月薪三千涨三万...

原标题:知乎大佬强烈热推的5个自学网站,看了几个月,月薪三千涨三万现在很多踏入了社会的小伙伴们经常会觉得为什么工作能力提升不上去,主要是因为很少利用业余的时间来学习一些跟自己工作有关的专业知识来充实自己,这其…

xp系统如何开启共享服务器,xp系统怎么关闭共享服务 xp系统共享打印机如何设置...

XP系统虽然已经出来很久了,但是仍然还有很多用户在使用,其实不管哪个系统只要电脑可以正常使用就行。很多XP用户在开启共享功能之后,想关闭但是又不知道如何设置,那么下面小编就为大家分享XP系统关闭共享服务的步骤教程&#xff0…

用udp协议通讯时怎样得知目标机是否获得了数据包?_和相亲对象聊天,你属于UDP还是CDP?...

有人说和相亲对象聊天就像ping服务器每发一条消息就像发出一条Ping命令等待对方回复从而得到响应速度结果但是难受的是这个响应速度永远无法做到秒级少点几分钟多则几十分钟甚至几十个小时才有响应有时候真希望对方不要响应了就能判断此处Ping不通从此断了念想...你是否也像这位…

三星w系列vip服务器,高端人士候机专属特权 三星W2017一张行走的VIP卡

原标题:高端人士候机专属特权 三星W2017一张行走的VIP卡17年春运时间为1月13日至2月21日,如今春节假期已过,亿万人开始踏上了离乡之路追寻梦想。每年春运都给交通带来巨大压力,今年为期40天的春运预计全国发送旅客或超29亿人次。铁…

阿酷快捷键怎么使用_必须收藏!Linux用户必须知道的常用终端快捷键

点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐]简介:以下是一些每个 Linux 用户必须使用的键盘快捷键。使用命令行时,这些 Linux 快捷键将提升你的工作效率。你知道什么把专业用户和普通用户分开的吗?掌握键盘快捷键。好的&#xff01…

checkbox ajax 不选中的值,php – 无法通过ajax传递checkbox的值

我有从数据库收到的表://$id $_SESSION[staff_id];$teamResult getQuarter($leader_id);$count1 0;if (mysqli_num_rows($teamResult) > 0){?>1st Quarterwhile($row mysqli_fetch_array($teamResult)){$staff_id $row[staff_id];$username $row[usern…

3dmax天光渲染设置_【扮家家云渲染效果图】3dmax测试全局照明效果|干货教程...

首先打开场景文件,首先按快捷键8,打开环境和效果控制面板。下面有一个全局照明这样一个选项卡,有染色、级别、环境光三个参数。默认情况下染色为白色,级别为1,环境光为黑色。此时我们可以单击渲染,查看一下…

手写table用ajax遍历,原生js把数据循遍历到前端table

用前端框架去给表格赋值简直不要太容易和简单。但是原生js就会复杂一些了。特别是按钮事件的那个(“ )和 (’)特别让人脑瓜子疼。最近做了一个功能,里面用的就是原生js实现。写在js里面的代码:(用的ajax请求将文件保存到服务器,返回的数据遍历…