Terrain 算法整理。基本常识。


制作地形的方法大致分为 Voxel, Height map, Mesh 这几种,会根据使用的技术有各自的长短处,常识上的长短处如下。Unity 用的是高度图,所以说明下这个方式。

高度图地形的构成大概有4种,内存管理系统最重要也很难。

(1) 用高度图贴图制作的Mesh ( CPU -> 变成 GPU )
(2) Splitting 画出的贴图 ( 跟着 GPU 的发达,算法也在持续发达 )
(3) 内存管理系统 ( Stamp 单一 -> Tiled ,变成很多个 )
(4) 地图上的物体管理系统 ( group LOD )

以前的方式里地形的 Mesh 数据在世界坐标上以网格分 Chunk 管理。 LOD 离镜头越近每 Chunk 的 detail 越高,离镜头越远每Chunk的detail越低。 调 detail 叫做 ROAM 方式, cpu 会把 LOD 等级有变化的 Chunk 的 vertex buffer 和 Index buffer 都进行更新。

Unity 会把一个 Chunk 用四分树预先做好 detail LOD。然后根据 LOD 等级选择画自己还是画预先生成的精致的4个子 Chunk 进行渲染。
因为逻辑方式的问题,受 LOD 影响的 Chunk 每个阶段会增加4倍的Drawcalla。因为会占内存,不适合做大地图。

之后的 GPU 方式算法 geometry clipmaps 是2004年出的,实际上是 dx9 上市后可以从 vertex shader 读取贴图数据后开始使用的。
这个算法跟以前的不一样,不是以世界为中心(World Space) 而是以镜头为中心(Camera Space or View Space )画出预先做好的地形Chunk。高度和法线是在 vertex shader 阶段从贴图读取计算的。
Vertex Buffer的结构是越靠近中心渲染的精致度更高,越远相对越低,因为是镜头为中心的地域坐标(Local coordinate ),所以不需要 Mesh LOD。
现在是在 Unreal landscape,2018年新出的 Unity 新地形系统里使用的。

最后一种方法是使用 Geometry Shader 和 Tessellation ,因为需要 Shader model 5.0 硬件所以没有正式选择的引擎,所以不提取这种方式了。( <= 这基本是 voxel 和 height map 的混合方式)

然后是画在地形上的贴图。

地形跟普通的Mesh不一样,多个贴图根据制作人员做出的权重 Weight 随着 Layer混合,所以没什么可说的。
主要是怎么混合,以前的方式是根据 Weight 乘与 Linear 进行 Blending ,最近是用各种算法加 Weight value 可以更好的混合。
另外,使用 opengl es3.0 和 dx10 添加的 texture2DArray 会管理起来更方便。

以前地形是一个,但是现在地图越来越大还出现了无缝地图,所以用一张图已经驾驭不了。 所以做出了拼接多个地图实时储存加载的功能 Tiled 。
概念上虽然只是拼接,但实际上需要费很大精力管理。
在 Back-end 持续跟着镜头的移动读取和解除进行 LOD 不是一件容易的事情。
2018 将上市的新地形系统上是支持的。

我想说下最重要的一项工作 - 管理地图上的物体。 简单来讲都是 LOD,以组为单位的 LOD 到最下面 Mesh 为单位都需要管理。
但是随着越来越大,要不要渲染,Mesh要用哪个,有没有遮盖,Lightmap是不是烘焙过的,有没有GI信息 等等,从上面说过的可以做 Tiled 的系统开始会非常复杂。
比起 LOD, 把用在 LOD 的各个阶段资源在 back-end level 读取和解除做管理会更难。
为了完成这种工作制作了 Mega texture ,也出现了 Sparse texture ,这方面的工作在持续发展。 这些操作都是用非同步 streaming 读取和解除的。
现在还没有提供一个完美的系统的引擎。
这就意味着这部分都是要制作的;;;

Reference.

https://developer.nvidia.com/gpugems/GPUGems2/gpugems2_chapter02.html
https://docs.unity3d.com/2018.1/Documentation/Manual/SparseTextures.html
https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_sparse_texture.txt
https://en.wikipedia.org/wiki/ROAM

About JP

链接: Website.
在这里插入图片描述

出生在韩国的TA。
1997年开始从事电脑图形视觉化工作后,在这个行业已经有21年经验了。
在多个网络游戏公司引领过美术团队,之前在allegorithmic担任TA负责人,在中国网易盘古工作室担任TA总监,现在是巨人网络TA部门的总负责人。
懒惰的人才有创意”是他坚信并执行的哲学道理。

Terrain 算法整理。基本常识。相关推荐

  1. 最短路径算法整理(二)

    本文是最短路径算法整理的第二篇,想阅读第一篇的朋友能够点击下面链接: http://blog.csdn.net/hjd_love_zzt/article/details/26739593 这一篇博客继 ...

  2. 常见数据结构与算法整理总结(下)

    原文链接:https://www.jianshu.com/p/42f81846c0fb 这篇文章是常见数据结构与算法整理总结的下篇,上一篇主要是对常见的数据结构进行集中总结,这篇主要是总结一些常见的算 ...

  3. 最短路算法整理 七七八八的总结

    最短路算法整理 1.Dijkstra 算法 先讲讲朴素的Dijkstra算法的思路.朴素的Dijkstra算法先将起点入队.然后找到一个起点距离最近的点.再用这个点去更新其他所有的点.一共有多少个点就 ...

  4. SM4国密算法整理-流程图

    SM4国密算法整理–流程图 前一篇文章没有加入流程图,自己看着也有点晕,现在再次整理下 python代码看我之前的文章: 请点击. 加密 计算轮秘钥 #mermaid-svg-LmTcVIQC7cAr ...

  5. 精华游戏算法整理_整理游戏

    精华游戏算法整理 在HTML5 2D游戏开发系列的上一部分文章结尾,Snail Bait处于可玩但原始的状态. 在这一期的最后一部分中,我将向您展示如何将Snail Bait从该状态带到最终版本,如图 ...

  6. 百度算法整理,SEO工作者抓紧收藏了!(超详细)

    入行SEO这么长时间,要避免踩到百度算法的雷区就得经常查百度算法.而一个一个地去找算法就比较麻烦,于是我按照功能对应的算法整理了2013年以来的百度算法供大家参考(截止到2019年). 一.网站质量相 ...

  7. 点云处理算法整理(超详细教程)

    点云处理算法整理(超详细教程) 目录 一. 线性回归_最小二乘法.梯度下降法 二. 线性回归_最小二乘法.RANSAC算法 三. 最近点迭代_ICP算法 四. 常见三角网格划分_voronoi图和De ...

  8. python斗地主出牌算法_斗地主之用蚁群算法整理牌型:如何进行牌力估计

    我们在前面讲到过,各牌手的牌力估计就是我们在用蚁群算法构造最优牌型时的启发性知识.启发性知识其实就是我们利用自己的经验对事物做出的判优性评估,或者说就是对事物价值的判断. 原则上,应用蚁群算法需要用到 ...

  9. 斗地主之用蚁群算法整理牌型-如何进行牌力估计

    我们在前面讲到过,各牌手的牌力估计就是我们在用蚁群算法构造最优牌型时的启发性知识.启发性知识其实就是我们利用自己的经验对事物做出的判优性评估,或者说就是对事物价值的判断. 原则上,应用蚁群算法需要用到 ...

最新文章

  1. linux命令free
  2. 什么是 SAP UI5 的 Component-preload.js, 什么是Minification和Ugification
  3. JAVA入门级教学之(算数运算符)
  4. 文本处理算法_python 文本处理
  5. RocketMQ如何保证消息不丢失(消息可靠性)
  6. 基础知识学习-数据结构篇
  7. 关于在Android中访问和使用到上下文变量
  8. 不重装,不还原,不优化,让你的系统比重装还爽
  9. linux系统下载7.0,redhat7.0_redhat enterprise linux 7.0下载 附安装教程 - 121下载站
  10. C++opencv找圆心?看着一篇,一定有你要(边缘轮廓检测,拟合,凸包)找出相应的轮廓或者全部轮廓画外界圆轮廓并且标出轮廓中心
  11. JavaScript中的onload详解
  12. mysql查询结果乘2倍_SQL查询总和乘以它应该的2倍
  13. 如何删除outlook中的重复邮件
  14. 讲人话科普,Python是个啥?为啥大家都在学?
  15. Linux 摸索:使用VM安装CenOS 7之后,开机启动黑屏
  16. uniapp获取当前位置(定位-经纬度及城市信息)
  17. 不解,排名靠前那么多的人为什么抄袭我的activit博文??
  18. 企微企鲸客SCRM管理系统可以为销售提供哪些辅助
  19. 基于android公交车线路查询论文文献,基于Android手机的实时公交查询系统设计与实现...
  20. 自由与约束:使用GPL许可证项下开源代码的法律风险

热门文章

  1. 【swift】图片的编辑与合成
  2. android协议分析,【安卓QQ协议分析 】分析带说明
  3. 关于mysql的时间存储类型问题
  4. 超声波测距LCD1602显示
  5. matlab 数值积分举例,matlab数值积分实例
  6. 《快学 Go 语言》第 7 课 —— 诱人的烤串
  7. idea的Open Recent
  8. ZBar源码分析(一)
  9. Linux快速定位内存泄露和内存越界
  10. 基于通道注意力机制的图像压缩改进(zqb第三章)