【GAMES104】 游戏中的天空渲染

news/2024/11/17 20:33:12/

一、大气拟合仿真

分析如何做出天空效果,直接的方法就是类似于Bling-Phong模型的拟合方法,这里给出了一个可以根据视角仰角\theta和与太阳夹角\gamma就可求得颜色的模型。这个模型的问题就是只能限制在地表,而且不具有实时性。

 所以要做出更加真实的大气效果,就要从真实大气散射出发,这里给出了两种散射模型,瑞利散射(Rayleigh Scattering)和米氏散射(Mie Scattering) 。像空气分子这样的比光的波长还要小很多的颗粒引发的散射,我们称之为瑞利散射。发生瑞利散射时,光的波长越短,散射程度越强。由较大的颗粒引起的散射,称之为米氏散射。米氏散射的特征是所有波长的光均等发生散射。因此,各种波长的光混合在一起,使散射光和太阳光一样呈现白色。

 

 要真正做到拟合就要考虑到多种散射模型的融合,当然要做到这样就需要大量的计算,所以这就引出了著名的 Ray Marching 算法,它的核心思想就是,沿着视线,每过一段距离计算一次单一散射(Single-Scattering),之后将这些结果叠加。通常这些计算得到的数据运用LUT的方式进行存储。

 二、实时大气渲染

上面说到在计算Ray Marching的时候要用到LUT的方式,那么存储的具体分为两个部分,一个部分是通透度(transmittance),表示可以看到的百分比;另一个部分就是散射度(Scattering)。为了预计算这两个部分,这里引出了Precomputed Atmosphere Scattering算法。

在计算通透度的时候,需要两个参数,天顶与实现夹角\theta和海拔高度h,当我们要计算从视点X_v到观测点X_m,只需要将视点到大气层顶的值除以观测点到大气层顶的值相除即可。

在计算散射的时候,我们需要四个参数,天顶与实现夹角\theta、海拔高度h、天顶与太阳夹角\eta、视线与太阳夹角\phi,这样我们可以得到一个四维表,这样我们就可以把Single-Scattering求了出来。

 之后我们就可以用Ray Marching的方法将多次单一散射混合,最终获得Multi-Scatter LUT。这个算法的问题就是,需要大量的预计算并且在低阶的设备上不能进行,并且不能灵活的改变散射系数来达到不同的效果,在实时运行的过程中我们需要将LUT进行降采样来提高采样的效率。

这里又提到一个更先进的解决方法,首先做了一个大胆的假设,假设大气中的散射都是同样的,那么在这个假设下就得以得出散射就是一个百分比的衰减,我们计算一次到两次的散射就会的到一个百分比,更高次的散射就是这个百分比的一个级数,这样就能用最简单的方式得到Multi-Scatter LUT。对于四维表的存储方式的优化,它去掉了太阳位置和高度,直接建立一个与天顶角和360°的环角的二维表。

 

 进一步,为了加上大气中透明度的积分,就直接积分过去,根据相机的距离产生3D LUT。虽然这种方法不符合物理上的认知,但是他实际上是符合人类的认知,最大的优点就是运用灵活。

 三、云的渲染

 现在制作云运用的是 Volumetric Cloud Modeling 的方法,这种方式做出的云是实时渲染的,是能够实时变化的。第一步就是先获得一份Weather Texture,他是由两部分组成,一个是云在空间上的分布,另一个表示云的厚度,这样基本就能获得一个体积云。第二步就是用各种低频Noise进行腐蚀,再用高频增加云的细节。

获得云后就要去渲染它,云不会生成面片,所以我们只能运用 Ray Marching 的方法进行渲染。在我们视线经过云的部分去计算其通透和散射。

 


http://www.ppmy.cn/news/560828.html

相关文章

文明6免安装简繁中文绿色版

文明6风云变幻可以简称之为文明6(软件下载点击这里),是一款极其知名的回合制策略类游戏,在游戏中,玩家的每一个决策都至关重要,丰富的环境变化将带来更多的挑战,例如灾难、瘟疫、战争等,玩家将使用全新的特…

Unity RTS 策略游戏等建造系统仿照COC游戏的插件 - City Building Perfect Kit

国内真的很少人用这个插件,也比较冷门 不过刚好,个人需要想做一个家园系统(元数据热门,但网上几乎找不到如何用Unity做家园系统),只能靠这个 City Build Perfect Kit 国内很少团队会做这类型的手游 但是国外小哥2015年就开始做了。。。。。 一开始做的是RTS Battle 战…

我的世界java版天空材质_我的世界天空材质包下载|

超真实天空材质包epic realistic sky是我的世界游戏的一款地图画面修改软件,它可以帮助大家体验到最真实的游戏画面,让你感受到不一样的游戏场景和最高品质的体验,欢迎大家到本站下载体验! 我的世界天空材质包介绍 超真实天空材质…

星空之翼游戏的设计与实现

星空之翼游戏的设计与实现 摘要 本毕业设计开发的《星空之翼》是一款纵版飞行射击类游戏。游戏采用组件式架构。整个游戏由主程序模块、游戏引擎模块、地图编辑器模块和声音引擎模块4个相对独立的模块组成,其中声音引擎采用的是一个开源声音引擎irrklang。本毕业设…

15M安装包就能玩《原神》,带你了解云游戏背后的技术秘密

简介:对于大多数玩家来说,云游戏已经不是一个陌生的概念,它经常和秒玩、不吃设备、大屏临场感、上手门槛低、真香等字眼一起出现在评论留言区。的确,对于既想尝试高品质游戏大作又不想一直卷装备的玩家来说,云游戏做到…

详解Spring配置文件

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;JavaEE、Spring Spring配置文件 1、简介2、XML3、\<Bean\>3.1、Bean标签范围配置3.2、生命周期3.3、⭐实例…

SQL死锁查询及处理,死锁知识了解

SQL死锁查询及处理&#xff0c;死锁知识了解 现象 表现一: 一个用户A 访问表A(锁住了表A),然后又访问表B 另一个用户B 访问表B(锁住了表B),然后企图访问表A 这时用户A由于用户B已经锁住表B&#xff0c;它必须等待用户B释放表B,才能继续&#xff0c;好了他老人家就只好老老实…

Unreal 5 实现UI制作

这一篇讲解一下unreal engine里面的内置ui插件UMG&#xff0c;虚幻示意图形界面设计器&#xff08;Unreal Motion Graphics UI Designer&#xff09;(UMG) 是虚幻引擎内置的一套ui制作工具&#xff0c;通过它我们能够实现平面ui&#xff0c;场景hud内容 实现背景图片填充整个…