转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=2761

本系列的上一篇讲了DR中的一些改进。本篇开始将描述这个版本加入的新功能,高质量地形。

原有的地形

以前的地形实现和水面的方法一样,都是从Crytek在2008年的老方法改进而来。虽然比projected grid的好得多,并且速度很快,但有一些很明显的缺点:

  1. 视点移动的时候会抖动。水面比较平,而且有波浪看不出抖动。如果用来做静态地形抖动就会非常明显。尤其是far plane变大之后,远处更明显,所以限制在3000以下。
  2. 不支持shadow。因为只有产生了视野内的三角形,视野外的地形无法正确投出shadow。
  3. 顶点密度较低,无法表达精细的地形。原先的方法三角型分布接近于screen space,不足以很好表达地形。

这个抖动的消除可以靠snapping操作,每次更新height map的时候都保证原来的像素中心仍然落在新的像素中心上。这样每个顶点在视点移动后仍然会去到同样的值。

Clipmap

Clipmap也不是什么新东西了,最早出现于1998年。当时还是用CPU做几何生成和提交。2004年MSR的一篇Geometry Clipmaps: Terrain Rendering Using Nested Regular Grids把clipmap带到了GPU时代,GPU Gems 2的第二章就是这篇paper的缩写版本。通过在GPU上维护一个以视点为中心逐级递减的一系列几何块,依靠GPU的强大处理能力,过度细分的地形也能实时渲染。用这种方法,远处的三角形密度仍然较大,所以可以很容易的把far plane推到5000-8000。

但是,即便是2004年的方法,也已经过去了将近10年。当时的SM3能VTF,却不能改变几何拓扑。在实际使用中,这个方法的开销还是比较大的。而且由于不同层次之间的三角形密度一定是2倍的关系,难免还是会有看得见的层次跳变。

Tessellation

(这里的实现是从NVIDIA Direct3D SDK 11的一个例子改进而来)

DX11的GPU都支持tessellation,而且效率不低。这里对clipmap很自然的改进就是加入硬件tessellation支持,把细分的任务转到GPU里做。这样CPU端直需要提交比较稀疏的几何,在GPU里通过视点距离等因素计算tessellation level就可以了。而且,DX11要求GPU支持基于浮点的细分。三角形不但可以分整数次,还可以分任意的浮点数次。这么一来,就能让细分层次连续变化,层次跳变问题就彻底解决了。

如果检测到GPU不支持tessellation,就会退回到原先的clipmap方法。这时候需要处理不同层次之间的接缝问题。因为在连接处顶点密度不同,如果不处理的话,就会出现许多小的空洞。这个问题由团队成员孙文全解决了,方法是调整较密层次的顶点,在shader里面手工插值,得到和较稀疏层次同样的height。这么做虽然没有在拓扑上达到无缝连接,但GPU的精度足以保证空洞基本都会小于一个pixel的大小。所以视觉上看不到空洞了。

Procedural

在Texturing and Modeling: A Procedural Approach这一巨作中,有详细介绍如何用分型的方式生成地形。这个方法也可以顺利地移植到GPU,在生成height map的时候使用。如果参数合适,生成的结果很像自然的风景,有崇山峻岭也有平原低地。height map以视点为中心,加上snapping的修正,得到视点周围一定面积的所有高度场。这个height map可以进一步用来计算gradient map,在渲染的时候作为normal使用。以视点为中心,所有方向都有几何也保证了可以轻松地使用原有的shadow map系统,包括CSM在内。

加上细节

有了tessellation之后,height map里的信息只负责大体形状。顶点密度远大于height map的情况下,加上个noise就有意义了。normal上也可以用同样的方法加上像素级别的细节。有了这些之后,tessellation的能力就能全部显现出来了。并且可以根据GPU能力连续地调节细分的程度和细节的多少。

在不支持tessellation的平台上,这个细节就只能加到normal上。视觉效果也不差。

综合一下,加入水体、light shaft、SSR等效果之后,可以发现新的地形系统可以很容易兼容于原有deferred框架的其他组件。

本篇专注于新实现的高质量地形。下一篇仍会将一个新的渲染效果,屏幕空间次表面散射。

转载于:https://www.cnblogs.com/gongminmin/p/3487294.html

KlayGE 4.4中渲染的改进(三):高质量无限地形相关推荐

  1. KlayGE 4.4中渲染的改进(五):OpenGL 4.4和OpenGLES 3

    转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=2796 上一篇我们提到了SSSSS,作为本系列的最后一篇,本文将介绍KlayGE 4.4的Op ...

  2. 判断某值是否属于枚举类中的值_编写高质量可维护的代码之优化逻辑判断

    if else.switch case 是日常开发中最常见的条件判断语句,这种看似简单的语句,当遇到复杂的业务场景时,如果处理不善,就会出现大量的逻辑嵌套,可读性差并且难以扩展. 编写高质量可维护的代 ...

  3. 如何在Spring Boot中使用TDD写出高质量的接口

    本文发布于专栏Effective Java,如果您觉得看完之后对你有所帮助,欢迎订阅本专栏,也欢迎您将本专栏分享给您身边的工程师同学. 之前在<如何说服你的同事使用TDD>中介绍了为什么要 ...

  4. 数据刷新中的并行改进(三) (r5笔记第79天)

    在之前的两篇中分享了数据刷新的并行改进,其实在对很多的数据表做了切分之后,数据刷新的总体负载就基本是平均的了.如何使得刷新的过程更加平滑和完整,我们还是需要做一些工作的.首先各个节点中都存在相同的表( ...

  5. Ogre渲染优化心得(三) -- 优化天龙八部的地形

    地形的实现,一种是用拼格子,每个格子一个四边形,不共用顶点,不能lod,但是一个格子就可以多层纹理,适合2.5D视角游戏,比如魔兽3和天龙 另一种就是主流3D游戏做法,共用顶点,lod,缺点是一个地形 ...

  6. 35个极好的高质量PSD源文件网站三

    35个极好的高质量PSD源文件网站三 23, 2010 想要高质量的PSD源文件么?在设计中,我们可能需要一些高质量的分层photoshop原始素材,这里,我们收集了35个极好的高质量PSD源文件网站 ...

  7. 高质量数字化转型创新发展大会暨中国信通院“铸基计划”年度会议成功召开

    2023年3月3日,由中国信通院主办的高质量数字化转型创新发展大会暨中国信通院"铸基计划"年度会议在北京成功召开.本次大会深度展示了中国信通院在数字化领域的工作成果,并全面展望了2 ...

  8. KlayGE 4.0中Deferred Rendering的改进(四):GI的神话

    转载请注明出处为KlayGE游戏引擎 上一篇解决了透明物体的渲染问题:本文将挑战另一个实时渲染的神话,实时全局光照(GI). 实时全动态GI 目前direct lighting在游戏中日趋成熟,比较前 ...

  9. KlayGE 4.0中Deferred Rendering的改进(五)完结篇:Post process

    转载请注明出处为KlayGE游戏引擎 上一篇分析了KlayGE中实现实时全动态GI的方法,本篇是这个系列的完结篇,主要讲流水线的最后一段:Post process. Post process 在Kla ...

最新文章

  1. AutoMapper 入门
  2. 【c++】5.函数传指针与传值特容易混淆的点
  3. cat /proc/meminfo 各字段详解
  4. Win10系统在运行界面cmd出现ipconfig命令无法使用的情况的解决办法!!
  5. 生产中的12种容器镜像扫描最佳实践
  6. Embedding技术在推荐系统中的应用
  7. Linux 环境下安装 MySQL,各种踩坑、疑难杂症 | 原力计划
  8. iOS申请发布证书-图文详解
  9. list()的相关问题
  10. 短文本相似度比较:simHash简介以及java实现
  11. drawboard pdf拆分文件_Drawboard PDF 免费版
  12. 蜂鸣器音乐代码 天空之城_歌单 | 音乐拥有魔力
  13. win7忘记开机密码怎么弄?
  14. 一文详解高功率音频放大器的设计准则与诀窍
  15. 生活随记-公平和本分
  16. matlab ghm,matlab – 用Python中的matplotlib绘制许多数据点
  17. 匿名社交?无秘模式基本宣告失败
  18. 非计算机专业可以考的证书有哪些科目,证书可以免考自考非计算机专业中的“计算机应用”科目吗?...
  19. 黑莓几乎转型成纯软件公司 恢复盈利助股价暴涨16%
  20. Loopback 录屏和录音频(Mac录屏教程/录视频教程/Loopback 教程)

热门文章

  1. ubuntu常用命令或设置
  2. 4000多人全靠报表自动化,效率提高60%,这套数据平台方法论真强
  3. 让领导狂夸,让业务目瞪口呆的报表,竟然是这样?
  4. 大学计算机基础模拟,模拟练习系统
  5. java in array_ArrayList to Array Conversion in Java
  6. python3.7模块内容_python3.7 time模块
  7. EDLines: A real-time line segment detector with a false detection control
  8. Python之Matplotlib库常用函数大全(含注释)
  9. ORB-SLMA3的学习笔记
  10. Jupyter Lab——如何添加没有出现的kernel