AAA游戏中雪的实现

现在越来越多的AAA游戏中都实现了逼真的雪的效果,比如战神4、地平线:黎明时分、荒野大镖客:救赎2、古墓丽影:崛起等都实现了不错的雪地效果。今天我们就来探究一下他们的实现方式。现在主流的实现方式都是通过硬件提供的细分功能来实现的。

Batman: Arkham Origins

这个游戏里面没有地形,只有房顶和城市街道两种,所以它的做法比较取巧,局限性比较大。

动态生成置换高度图,主机使用视差映射,PC使用细分技术。

如何生成高度图?

把会影响雪地效果的物体(有一部分在雪的表面下)使用一个踝关节高的正交相机渲染到一个rt里面。

  1. 把rt清除成黑色。
  2. 渲染物体为白色。
  3. 过滤并把渲染结果累积到另外一张纹理里面。

大体思路就是这样的,它的优点就是实现简单,但是也有一些局限就是它只适用于房顶以及平坦的城市街道。当然我们也可以对它进行相应的改进,以支持地形以及有坡度的物体。

Rise of the Tomb Raider

古墓丽影崛起的做法较通用,可以在地形上产生雪迹。在仔细介绍前先统一下术语。

Snow height:在未应用变形之前的雪的高度(vertex.z)

Deformation points:劳拉的脚以及其它产生变形的3D坐标。

Foot height:一个变形点的垂直高度(point.z)

Trail depression:雪迹被踩下去的比原本雪低的那部分。

Trail elevation:由于被踩下去导致雪隆起的那一部分。

Deformation heightmap:一张32位的纹理,1024x1024个像素,存储变形信息。

Depression depth:abs(snow height – foot height)

Deformation shader:用于生成变形高度图的compute shader。

Fill shader:用于模拟暴风雪后雪迹被慢慢填充的过程。

Snow shder:用于渲染雪的shader,这个shader会应用变形信息。

有了这些术语,我们接下来看看它是怎么做的。

从上图可以看出它主要分为三个步骤:

  1. Deformation shader根据dynmaic_object的defomation point来计算影响的像素信息。
  2. Fill shader用于修改上面计算好的高度信息,模拟暴风雪将雪迹填平的过程。
  3. Snow shader用来应用变形高度图配合细分来实现雪迹效果。

生成高度图

观察发现雪迹的形状可以用一个二次曲线近似,通过把一些 动态物体近似成一些点,变形高度可以通过以下公式计算:

这些变形点累积到deformation heightmap中,deformation shader为每一个点分配一个组,每个组会写入32x32的一个区域内,并且使用一个原子取最小操作,之所以需要这个是因为多个点的影响的区域 可能会重合。

生成隆起(elevation)部分

为了计算elevation,foot height也是需要的,主要是用来判断是否能生成雪迹,因为elevation部分是高于雪未经变形的高度的。

为了计算elevation,我们需要知道elevation distance,它是elevation 开始的地方到当前渲染点的距离。如下图所示:

为了计算elevation distance,我们引入了以下几个变量:

  • Depression distance:变形的中心到depression结束的距离
  • Distance from root:变形的点心到当前渲染点的距离,注意它是depression distance和elevation distnce的和。

Elevation的值应该跟雪迹的深度成正比,雪迹越深,那么elevation应该越高。计算公式如下所示:

纹理选择

为了给雪地一个更随机真实的效果,三张纹理贴图应用到了变形的不同部分,如下所示:

到这里,基本的雪的变形效果的实现已经讲完了,一些优化细节我们这里就不仔细讲解了,感觉兴趣的同步可以参考GPU Pro7上的文章。现在我们来说下它的优缺点,优点是实现也比较简单,支持任意坡度的网格,雪迹的形迹有隆起的部分,以及模拟暴风雪填平雪迹的效果。缺点是它把一个物体当成了一些点的集合,这样就不容易做一个人死后躺在地上类似的效果,当然也不是不能做就是把一个成当成多个点来解决,但是总体效果会差一些。下面我们来看另外一个解决方案。

Creating Snow Trails in Unreal Engine 4

它的步骤如下所示:

  1. 使用一个Scene Capture从下向上拍摄一张地形的深度图。
  2. 在上一个拍摄的基础上使用Custom Depth拍摄影响雪迹深度。
  3. 根据这两个深度的差值来决定哪些地方会产生雪的轨迹。
  4. 把上面的结果放到别个一个rt上用来做累积。
  5. 应用累积后的效果到雪的材质产生雪迹的效果。

从下往上拍摄

根据offset来生成灰度图

当然这里有一些细节需要处理,我们这里略过不谈,感兴趣的可以看参考文章中的Create snow trails in ue4来了解细节。当然这个只是个demo实现,并不能应用到实际使用中,需要做很多的改动和优化,主要是借鉴下思路。最终效果如下所示:

现在我们来说下它的优缺点,优点是实现较简单,适用于所有情况(适用于任意形状的物体),缺点是这个只是个demo,如果要真正使用中还是有很多细节(坑)要去踩。当然也可以在这个算法上做些改进优化以达到更通用的支持,比如在地形之外的任何物体产生雪迹。

总结

上面列举了几个生成雪迹的方案,可以看到都用到了变形以及细分来做,如果硬件机能有限也可以把细分用视差映射来替代,通过分析它们的优缺点,读者可以根据自己的游戏类型来选择对应的方案。当然我们也可以在原来的基础上扩展以及修改达到更好的支持,甚至超越市面上的AAA游戏。如果有其它的方案,也欢迎大家在留言中讨论。

参考文章

  1. https://www.slideshare.net/colinbb/gdc2014-deformable-snow-rendering-in-batman-arkham-origins
  2. http://tombraider.tumblr.com/post/131825841425/dev-blog-snow-tech-and-houdini-simulations-mike
  3. GPU Pro 7 Deferred Snow Deformation in Rise Of The Tomb Raider
  4. https://www.raywenderlich.com/5760-creating-snow-trails-in-unreal-engine-4
  5. https://www.resetera.com/threads/gamingbolt-graphics-analysis-god-of-war-arguably-the-best-looking-game-of-all-time.35748/page-32

原文地址:https://www.cnblogs.com/ghl_carmack/p/10390650.html

时间: 2024-10-28 14:26:00

AAA游戏中雪的实现的相关文章

【HAPPY FOREST】用Unreal Engine4绘制实时CG影像

用Unreal Engine绘制实时CG影像 近年来,对实时CG的关心热度越来越高,但要想弥补与预渲染方式的差异并不是那么容易.这里就有影像业界的先锋进行挑战的MARZA ANIMATION PLANET.本文中通过Demo Movie的制作,来看看实时CG的可能性. 对应现状的问题意识与先见之明相结合的实验性项目 近年来的实时CG的品质的提升特别显著,最新的影像出现使得CG影像的相关人员兴奋起来,不光是影像的美丽程度,还感到了这种技术的可能性.这次介绍的MARZA ANIMATION PLAN

虚幻4蓝图快速入门(一)

蓝图快速入门 序言 本文依据官方教程总结而来,只是带你对蓝图有一个快速的认识,如果想对蓝图有一个比较深入的了解,那么可以看官方的视频或者是做一些小项目练手,如果你有编程经验的话,上手还是很容易的. 蓝图快速入门 什么是蓝图 虚幻引擎中的蓝图可视化系统是一个完整的游戏脚本系统,其理念是使用基于节点的界面从虚幻编辑器中创建游戏可玩性元素,该系统非常灵活且非常强大,因为它为设计人员提供了一般仅供程序员使用的所有概念及工具.它是一种特殊类型的资源,为关卡设计师和游戏开发人员提供了一种在编辑器中快速创建及

为什么我从来不无偿加班?你也不应该! 【转载】

英文:Andrew Wulf 译者:伯乐在线 - 王浩 链接:http://blog.jobbole.com/100960/ [伯乐在线导读]:关于加班,最近有 2 篇热文<IT 行业睡在公司成常态>和<不给钱还想要员工免费努力加班?>.如果你还没有看,推荐先看看. (图来自< IT 行业睡在公司成常态>报道) 作为一个在美国工作长达 30 年的程序员,我在这期间很多时候每周工作超过 40 小时,加班这在这一行业中并不那么常见.而且我从未领到更多的薪水. 现在再也不这样

从外围了解UE4

我的游戏终于全球发售咯,在97个国家得到AppStore首页推荐.当前在美国和加拿大付费排行榜的最好成绩是36名.这是当前国内最好成绩的iOS游戏吗?可能,也许吧. 更好的消息是SCE联系了我们,我们将会踏着快船向PlayStation家族进发. 停止沾沾自喜,收集了大量的UE4 官方ppt,这可以让我们从外围解读. 1.虚幻4 的概览:一个程序员对UE4的一瞥 好吧,你会被吓到的. 虚幻4不像你的老奶奶一样,她非常的火辣哦 他有5000以上的目录结构,40000以上的文档.好吧大师,你来上吧

C / C ++ 项目中的 DevOps 挑战

"C++ 不仅是性能最强大的语言,而且也是一门伟大的语言!它具有真正的泛型,它是表达性的,是程序员最喜欢的语言之一."                                                                                                                            - JFrog 软件工程师兼 Conan.io 的创建者迭戈·罗德里格斯 - 洛萨达( Diego Rodriguez-Lo

BZOJ2121 字符串游戏

Description BX正在进行一个字符串游戏,他手上有一个字符串L,以及其 他一些字符串的集合S,然后他可以进行以下操作:对于一个在集合S中的字符串p,如果p在L中出现,BX就可以选择是否将其删除,如果删除,则将删除后L 分裂成的左右两部分合并.举个例子,L='abcdefg' , S={'de'},如果BX选择将'de'从L中删去,则删后的L='abcfg'.现在BX可以进行任意多次操作(删的次数,顺序都随意),他想知道最 后L串的最短长度是多少. Input 输入的第一行包含一个字符串

Unreal SDK 游戏开发从入门到精通(UnrealScript语法、UI Scene界面、UDK独立开发游戏)

对这个课程有兴趣的朋友可以加我的QQ2059055336和我联系 课程内容简介 本系列讲座主要讲述如何利用UDK开发游戏程序. 本课程主要分为四个部分: 1.学习UnrealScript的基本语法, 为下面的学习打下良好的基础 2.系统学习UDK的主要模块, 熟悉并掌握游戏开发的各个系统 3.使用UDK独立开发游戏Demo, 体验和理解UDK对游戏开发流程的整合 课程大纲 第一章初步接触Unreal SDK 1.1 Unreal sdk简介aaa 1.2 UC语言的基本介绍 1.3 搭建UDK的

unity3D游戏开发之GUI

转:http://blog.csdn.net/kuloveyouwei/article/details/23598171 GUI在游戏的开发中占有重要的地位,游戏的GUI是否友好,使用是否方便,很大程度上决定了玩家的游戏体验.Unity内置了一套完整地GUI系统,提供了从布局.控件到皮肤的一整套GUI解决方案,可以做出各种风格和样式的GUI界面.在Unity中使用GUI来完成GUI的绘制工作,目前Unity没有提供内置的GUI可视化编辑器,因此GUI界面的制作需要全部通过编写脚本代码来实现,如果

【浅墨Unity3D Shader编程】之一 游戏场景的创建 &amp; 第一个Shader的书写

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 邮箱: [email protected] 作为一个系统介绍Unity3D中Shader编写的系列文章的开篇,本文的第一部分系列文章的前言,然后第二部分介绍了这个系列文章中我们会使用的游戏场景创建方式,最后一部分讲解了如何在Un