【Unity大气散射】GAMES104:3A中如何实现大气散射

这篇具有很好参考价值的文章主要介绍了【Unity大气散射】GAMES104:3A中如何实现大气散射。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面

前两天学习并整理的大气散射基础知识:【Unity大气渲染】关于单次大气散射的理论知识,收获了很多,但不得不承认的是,这其实已经是最早的、90年代的非常古老的方法了,后来也出现了一些优化性的计算思路和方法。因此,我打算先不急着跟各种教程在Unity中实现大气散射,而是再花时间来看看最近的游戏是如何去实现大气渲染的:06.游戏中地形大气和云的渲染(下) | GAMES104-现代游戏引擎:从入门到实践

接下来就跟着GAMES104讲地形大气和云渲染的部分学习并做简单的记录,涉及到之前没提到的Mie散射也只选择直接截图PPT的方式记录啦!毕竟对于做作品来说,之后实现出来才是重要的~

当然,May佬的百人计划在今年8月份也有一期关于大气散射的讲解,这里也放上课程的链接以及对应的超长内容整理的知乎文章链接:

【百人计划】图形 4.6 雾之 大气散射_哔哩哔哩_bilibili

游戏魔法编程:unity实现完整大气散射 - 知乎

话不多说,开始今天的学习! 

1 理论知识的查漏补缺

1.1 天空组成

天空(球、离我们很远)与云(非常visible的、离我们很近)是两个最重要的元素。其实还有个东西Fog,但雾效并不只是大气,更多的是可控性的效果,所以这里把雾和天空/云分开来考虑。

3A的标准在手游实现将会非常坑爹hhh,另外我想实现的是风格化天空盒,会参考更多以精简计算。

1.2 Mie散射

太阳、大气中的气体分子与气溶胶分子,于是Rayleigh散射和Mie散射就被提出来了~Rayleigh散射波长越短散射的越厉害,而Mie散射对所有波长光一视同仁。

g=0的时候,跟Rayleigh散射差不多;但g>0的时候,下图右边所示就会会更加向前。

【Unity大气散射】GAMES104:3A中如何实现大气散射

【Unity大气散射】GAMES104:3A中如何实现大气散射

生活中的Mie散射

Mie散射就是一些日出日落halo。

【Unity大气散射】GAMES104:3A中如何实现大气散射

1.3 多次散射

真实世界的散射绝对不止一次散射,一定还有多次散射!听上去很麻烦,但实际上目前的3A游戏多需要考虑多次散射。如下图右侧考虑多次散射的才是符合真实大气的样子:

【Unity大气散射】GAMES104:3A中如何实现大气散射

【Unity大气散射】GAMES104:3A中如何实现大气散射

1.4 Ray Marching

单次散射其实就是RayMarching(沿着视线不断向下积分,算是一种暴力解法吧),实际上计算所有的大气效果都是用Ray Marching这个思路。

【Unity大气散射】GAMES104:3A中如何实现大气散射

2 新的东西

2.1 T项的LUT

大气中的光学现象其实就只有两个部分:Transmittance&Scattering,这俩分别对应着我上一篇文章中的衰减系数T项和散射系数S项,这里介绍了一种很机智的算法计算Transmiitance——Precomputed Atmosphere Scattering,预计算。

(插播一点,这里也可以看看游戏魔法编程:unity实现完整大气散射 - 知乎后面部分对LUT的介绍)

这里最重要的思想是参数化——对于海拔高度为h的点,用视线与天顶角度去计算T项,从这一点一路走到大气层边界,记录边界处的Transmittance值。

那我怎么去用这个LUT表?——去查!怎么查?如下左图,假设我们想知道Xm位置的山脉的Transmittance的值,查1(从人眼位置Xv出发到边界的值);查2(山脉Xm到边界的值),查1/查2就是当前Xv位置看Xm位置的Transmiitance的值了。

【Unity大气散射】GAMES104:3A中如何实现大气散射

2.2 单次散射的LUT

选择海拔为h的点,向大气层边界去看(打出一条射线),这个时候看向的方向到天顶的角度1,这个时候太阳到天顶的角度2,看向的方向和太阳之间的角度3,这三个角度其实就得到了一个立体角!那么,这三个角度组成的立体角其实就能表达当前海拔高度所有视线方向沿途的Transmittance值,再从不同海拔通过RayMarching的方法一下获取一堆数据,这样一来就足以在一个3D Texture中将单次散射所有的光(4D数据)全部存下来了。

【Unity大气散射】GAMES104:3A中如何实现大气散射

2.3 多次散射的LUT

我们用前两次的两个结果再做几次积分(其实3-4次已经够用了),就能得到多次散射的结果。

【Unity大气散射】GAMES104:3A中如何实现大气散射

2.4 问题

预计算很费计算,手游上不太星。

刚开始是蓝天白云->下雨的效果的过渡,这个过渡需要很流畅;同时我们的美术会需要调整一些参数,这中间由于有预计算,会很麻烦。

【Unity大气散射】GAMES104:3A中如何实现大气散射

2.5 更前沿的方法

这里是课程最后提到的UE采用的方法,是在论文A Scalable and Production Ready Sky and Atmosphere Rendering Technique的基础上实现的,具体可以看看这篇文章:UE4新版大气实时渲染-论文导读 - 知乎 (zhihu.com)

仅作简单的记录

对于一个分子,可以假设四面八方光是均匀的,那就算两次,知道一个差值,就知道后来所有的值的百分比了!

【Unity大气散射】GAMES104:3A中如何实现大气散射

既然世界需要动态,那省事儿创造更流畅的画面才是关键,那假设人不变(干掉h),假设太阳不变(干掉太阳的那个角度),

【Unity大气散射】GAMES104:3A中如何实现大气散射

【Unity大气散射】GAMES104:3A中如何实现大气散射文章来源地址https://www.toymoban.com/news/detail-432351.html

到了这里,关于【Unity大气散射】GAMES104:3A中如何实现大气散射的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • GAMES104-现代游戏引擎 1

    主要学习重点还是面向就业,重点复习八股和算法 每天早上八点到九点用来学习这个课程 持续更新中... 引擎是分层架构的 编辑器 功能层 资源层 核心层 平台层 越底层的代码越稳定越坚固,越上层的代码越灵活越开放 --越适应不同地开发需求制作不同地游戏 Virtual world is

    2024年03月22日
    浏览(64)
  • Games104 现代游戏引擎3

    Sprite Animation  序列帧动画 自由度(degrees of freedom,DoF) 对于刚体而言描述它的运动需要3个位移3个旋转,一共6个自由度 顶点动画(per-vertex animation) 利用网格的顶点来控制运动。此时网格上的每个顶点有具有3个平移自由度,通过对网格顶点坐标的变换就可以实现模型的运

    2024年04月23日
    浏览(35)
  • GAMES104 作业2-ColorGrading

    ColorGrading网上资料很就多就不介绍了,简单来说就是将ps中一个像素的r-g-b值转换成x-y-z坐标映射到一个三维的颜色的颜色表(LUT)得到新的颜色,从而使场景更具电影感和好看。 以104中的色链LUT为例(ps中导出的LUT为矩形,但原理相同) 对色链LUT简单图解就如上图所示,以颜

    2023年04月08日
    浏览(32)
  • Unity实现 球形雾效散射光照

    首先,我们要解决的问题是,光源发出光线,打到雾中的粒子,粒子散射光线,散射的光线继续作为光源传播,继续打到其他粒子,再次散射,最终传入人的眼睛。 人眼单个点看到的颜色值,即为该光线方向所有粒子传到人眼的光线总和。 而这种方式的计算量几乎是无穷的

    2024年01月16日
    浏览(34)
  • GAMES104实录 | 游戏引擎导论(上)

    本期为GAMES104《现代游戏引擎:从入门到实践》视频公开课文字实录第1期 。 本课程由GAMES(图形学与混合现实研讨会)发起,游戏引擎技术专家王希携手游戏引擎一线开发者共同研发。 课程共计22个课时,将介绍现代游戏引擎所涉及的系统架构,技术点,引擎系统相关的知识

    2023年04月16日
    浏览(38)
  • unity实现子弹散射效果和闪电链效果

    实现爆炸散射效果可以按照以下步骤进行: 1.准备子弹模型和爆炸特效模型,可以使用粒子特效或者模型。 2.创建子弹和敌人模型,同时添加刚体组件。 3.创建子弹的脚本,绑定到子弹上。 4.在脚本中,对子弹的 OnTriggerEnter 或 OnCollisionEnter 函数做出响应,检测敌人碰撞事件发

    2024年02月16日
    浏览(35)
  • Games104现代游戏引擎学习笔记10

    Physics Actors and Shapes Actor Static:静态actor,例如挡板等 Actor Dynamic:动态actor,例如可移动的箱子 Trigger:触发器 Actor-Kinematic:违背物理原则,由设计决定,不遵循真实物理原则 反物理物体容易导致很多数学运算出现问题 Triangle Meshes一般只允许静态物体使用 Height Fields通常用于地

    2024年02月11日
    浏览(46)
  • Games104现代游戏引擎笔记 基础ai

    游戏AI navigation(导航系统) 地图的表达形式, 寻路,路径优化 Map representation: 1.可行走区域(物理碰撞,跳跃距离,攀爬高度) 2.表达形式:waypoint networks(路点网络图),grid(网格),navigation mesh(寻路网格),sparse voxel octree(八叉树) Waypoint Networks: 设置关键点,在关键点之间通过

    2024年02月08日
    浏览(46)
  • GAMES104里渲染等一些剩下的问题

    Game104渲染的一些剩下的问题 我们先从一个简单的效果开始—环境光遮蔽(Ambient Occlusion,以下简称AO)。大家可以看到,下图中的场景没有任何渲染效果,也没有任何着色效果,但场景呈现出了非常清晰的结构层次感,其中有很多的几何细节,而在光场中表现出了一定的明暗关系

    2024年02月15日
    浏览(30)
  • Games104现代游戏引擎笔记高级ai

    World State是一个主观的对世界的认知,并不是一个真实世界的描述 Sensors负责从游戏环境中抓取各种状态 HTN Domain 存放层次化的树状结构Task和之间的关联关系1 Planner 根据World State从 Domain 里规划 task Plan Runner 根据 Planner 设定的计划执行 Task,当 Task 执行过程中发生了很多其他问

    2024年02月06日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包