这篇文章是这个系列最后一篇啦,前情回顾:

未名客:【魔改UE4】Realtime DynamicSkyLight_关于动态天空光照的一次尝试​zhuanlan.zhihu.com

未名客:【魔改UE4】Rtx水面半透明反射的一次讨巧尝试​zhuanlan.zhihu.com

有了动态的天空,动态的水面反射,距离心中想的比赛作品还差最后一个最大的挑战,那就是可以互动的实时焦散。UE4 连水都没有,更别提焦散,所以这部分内容完全得靠自己。

在组里其他小伙伴的帮忙下,在比赛距离比赛截止还剩不到4天的时间,完成了效果原型。因为涉及到一些项目内部的信息,所以目前这篇文章只对我认为可以放出的内容,稍微点一下。据说NV 有意要把焦散的实现给UE4,那到时候再给大家做具体的分析。

当然,NV 也在18年GDC 上给出了焦散相关的信息,有兴趣的小伙伴可以到这里查看:

https://www.youtube.com/watch?v=l-wTZLjhZ5Y&feature=youtu.be​www.youtube.com

这篇文章,我将分享下面的内容

  1. 游戏里面最常用的焦散场景?实时可交互的焦散是什么样的?
  2. 水面焦散的原理【水面上下,水的反射折射】。
  3. 游戏里面常规的焦散如何做,如何使用RayTracing 实现焦散【只分享过程部分截图,不会涉及具体代码】。

废话不多说,这就开始。

1、什么是焦散?

游泳池里面的焦散效果最常见了,这些跟着水面一起晃动的亮斑,其实就是这里所谓的“焦散”,它们会出现在水底,也会出现在水上,岸边天花板都有。

游戏里面,传统的焦散,一般是通过某些专业软件,导出一个焦散序列,然后通过uv动画来制作的。

  • 优点:效率快,效果可以控制。
  • 缺点:无法交互。

NV 在推他的RayTracing就一直提到 焦散,那么这个实时的焦散张啥样?

其实远的不说,就拿国产游戏Rtx来说,《逆水寒》、《剑网三》都曾指出自己实现了rtx 焦散。因为剑三已经正式交付到玩家手里,我以《剑网三》为例说明。

jx3_caustic_realtime.wmvhttps://www.zhihu.com/video/1191764443942563840

以上画面是从剑网三正式服蓬莱场景截取的,可以看出,当你在水里跑动的时候,焦散会跟着一起动。这便回答了上述的问题啦。

2、焦散原理

关于焦散的原理的准确阐述,大家可以看上面NV 的Gdc 视频,也可以查一下。我这里说一下我们游戏里面,要实现的水面这个焦散的大致情况。

其实说的通俗简单一点,对于水面,我们并不是是为了焦散而去做焦散,真正要做的是,模拟光线从空气进入水面后发生的一些事情。

由上面那张图可以看到,光线打到水面上的一个点,会根据水面的发现发生反射和折射。当一束平行光线过来,因为水面并不平,反射以后的光线并不是平行的,会朝着各个方向继续传播,当他们碰到下一个平面,很多光子聚集到一起,就形成了一系列的“亮点”,远距离看起来,这些亮点看上去,有了形状,就是我们所说的由于反射,而产生的水面上面的焦散了。折射产生的水下焦散也是这个道理。

  • 反射形成的焦散会打到水面的上方。
  • 折射形成的焦散会达到水面的下方。

3、焦散的实现

我们知道,在RTX 的框架下,处理这种已知位置和方向的射线求交是非常方便的。其实焦散的实现非常方便,实际代码和反射非常相似。只不过,反射是一个像素被动的去计算一个像素被反射到的颜色,而焦散则是主动发出射线去照亮场景。

简而言之,一共有下面三个步骤:

  1. 【光栅化】绘制水面,得到水面位置和法线信息。
  2. 【RayTracing】做射线求交,得到求交结果。
  3. 【光栅化,可选】根据实际情况,选择是否绘制Caustic 网格。

值得注意的有两点:

  1. 焦散 实际是通过RayTracing 和 光栅化共同完成的结果。
  2. 第三步是可选的,当发出的射线不够多时,点亮场景的点非常散,没办法聚成一定的形状。这个时候就需要通过降噪的手段来处理这些噪点了。当然,如果只是一个为了一个制作一个效果原型,不扣细节,我们可以选择要不加多射线,也有一个很讨巧的办法,把这些点实时导出,拼成三角形,CS计算三角形的面积,决定三角形的亮度,最后在PS 里面三角形画出来即可。

此外,要想实现一个非常漂亮的焦散效果,对水面的法线要求很高。最终焦散的效果是来自水面法线的,这也是美术控制焦散最主要的方式。

综上所述,焦散的具体实现步骤:

  1. 【光栅化】 正交绘制水面,RT 为水面的世界坐标和法线。
  2. 【RayTracing,GenRay】根据屏幕上一个像素水面的法线,和光线的方向,计算反射、折射方向。
  3. 【RayTracing,DispatchRay】沿着这两个方向,主动像场景发射射线。
  4. 【RayTracing,HitGroup】当碰到场景时,计算这一点在屏幕上的坐标,把SceneColor 上对应的点 点亮,降噪,使场景颜色平滑干净。
  5. 【RayTracing,HitGroup】必要时,不做第4步,直接导出碰到的世界坐标点,和其他关心的信息。
  6. 【CS】拼接三角形,根据三角形面积,计算三角形亮度强度。
  7. 【光栅化】GS 剔除不符合的三角形,PS 绘制三角形,完成焦散。

下面做一个简单的概述,以及我部分完成的情况,供有兴趣的小伙伴参考:

3.1 正交绘制水面,得到水面世界坐标,和法线的信息

这一步在最开始的时候,我是新建了两个和屏幕一样大小的RT,从主相机的角度透视拍水面的。这么做确实很方便,不用管理相机,但是它的问题是,首先会浪费很多像素,其次精度不够,会出现摩尔纹以及各种莫名其妙的问题。

最终决定使用正交相机。

如果是使用正交相机,在水面正上方,垂直向下拍,那么得到的世界坐标,及法线精度是足够的了。

为了方便演示,我仅仅使用一张法线贴图,和一个平面来表示水面,机器波动。

如图所示,图里是个非常简单的场景,只有一块儿水面,2张rt,分辨率是512*512,分别记录了水面的世界坐标,和压缩过的法线。

3.2 RayTracing,点亮场景

一开始,因为reproject 到屏幕上 计算错误,出了下面的一些问题,没办法打到正确的场景物件上,立起来了:

https://www.zhihu.com/video/1191774046361186304

后来改正reproject 以后,得到了和想象中非常接近的效果

好是好,但是正如上文提到的,这么做存在精度问题。

UE4的原现场有点久远了,我用一个独立的小demo 演示一下它的问题。

https://www.zhihu.com/video/1191775655585521664

好了,最后在同事帮忙下,开始转正交做。有了如下结果。

在RayTracing 这一步,我一开始是直接一个点一个点打亮场景的,结果发现发出的射线不够多,出来很多小点点:

3.3 失败的降噪

降噪这部分,我只知到可以通过每帧随机数 + taa 的方式 来做时间上的降噪。对空间降噪算法不是很了解。

一开始试图通过降噪来处理这些点,并没有得到非常好的结果。眼看比赛截止时间临近,最后在同事的讲解下,开始考虑第二种方法,点云拼接三角形。

3.4 点阵 拼接三角形,回头走光栅化流程

在上面的rtx 步骤中,实际上并没有对SceneColor 做任何操作,而是输出了 世界坐标和一些其他参数的Buffer。

世界坐标buffer 直接作为VertextBuffer,走光栅化流程~

上图展示了大致的结果,已经非常非常接近最终结果了。

接下来,就是把根据亮度筛选三角形,通过一个CS,计算三角形面积,得出三角形的亮度强度,再走GS ,剔除不符合要求的三角形,最终就能得到下面的结果啦~

标题图get~

ok,基本到了这一步,整个焦散的实现过程就算完成了,当然中间有很多可以添加参数,给美术控制的地方,我这里就不方便说太多了~

好的,焦散部分就说到这里了,这个系列的三篇文章也按照预期更新完了。小伙伴们,有缘再见~

ue4网格转地形_【魔改UE4】Rtx实时焦散的一次尝试相关推荐

  1. ue4网格转地形_翼翻 在UE4中完成灯塔场景制作

    Hello~大家好 今天给大家带来一篇UE4的场景工作的图文 本图文来自英国的环境艺术家Craig Richards 介绍我叫Craig Richards,我是英国的环境艺术家.我第一次涉足电子游戏艺 ...

  2. ue4网格转地形_不用建模就能生成地形,SU怎么办到的?!

    有什么方法可以不建模 直接生成真实好看的地形呢 这里强烈安利这款神器 位图转模型 ▼ 位图转模型 位图转模型 高程着色 坡度着色 插件介绍 位图转模型 SUAPP编号186 作者:thomthom 插 ...

  3. ue4光追降噪_【魔改UE4】后记_焦散效果总结

    我了解的的焦散共有三种做法: 贴图动画 实时焦散:Normal 挤出网格[我感觉非常漂亮,可以低成本模拟rtx效果] 实时焦散:rtx,主动点亮场景 以UE4 为例. 一.贴图动画 UE4 有一个实例 ...

  4. ue4网格转地形_UE4 山脉风景地形模型

    UE4 山脉风景地形模型 这套"风景地形"包括非常详细的山地背景.这些山脉将有资格参加下一代游戏. 这个包包含27个模块化山脉和11个全地平线(360度)山脉.每个设置都有自己的一 ...

  5. 西瓜大作战java 源码_魔改和上线你的合成大西瓜,最全教程!

    本文是从 0 到 1 的教程,让小白也能够魔改和上线发布属于你的合成大西瓜! 最近,一款名为『 合成大西瓜 』的游戏突然火了!看来真的是大家吃瓜吃太多了,这个小游戏深抓人心! 当然,游戏本身非常有趣, ...

  6. ue4网格转地形_UE4荒凉海岛灯塔场景制作/译文

    设为星标,不错过任何干货 先点上方" CG自学站"再点右上角" ..."最后设置星标★ CG自学站专注分享国内外CG教程和大师名家推介 专业词汇翻译疏漏某些请理 ...

  7. ue4网格转地形_UE4教程:创建地形材质

    文件夹设置 完成地形的造型后即可为其添加材质,使其与现实世界中的地形相似. 在执行操作之前应先对文件夹进行设置,以便存储创建和迁移的内容. 在教程的此部分中,我们将创建以下四个文件夹. 如需了解在虚幻 ...

  8. 3 魔改_魔改启动!《战地3》非官方MOD工具即将发布

    VU团队近日宣布,<战地3>非官方MOD工具将于2020年12月发布.团队还公布了一段宣传片,展示了用MOD工具制作的一些自定义地图. VU(Venice Unleashed)是致力于对& ...

  9. 代码已开源,一起魔改大西瓜!

    上了两次微博热搜的<合成大西瓜>,想必大家都玩过了,好多人刚开始嗤之以鼻,最后真香了,说实话有点上头. 其火热程度直登热搜第三,阅读量6.9亿,朋友圈里也在纷纷安利. 合成大西瓜 游戏界面 ...

最新文章

  1. JS中fori和forEach跳出循环的问题
  2. 如何选择主机操作系统?
  3. 甲骨文中国公司如何如何打赢这场裁员翻身仗?
  4. log4j配置日志系统成功 (转)
  5. 8大行业场景!最新 Apache Flink 行业案例集火热出炉
  6. BZOJ 1016 最小生成树计数 【模板】最小生成树计数
  7. tensorflow2 训练和预测使用不同的输出层、获取权重参数
  8. UVa 10400 记忆化搜索
  9. C#多线程的用法2-线程的生命周期
  10. Brute Force(暴力算法)
  11. PCI Express Base Specification Revision 3.0 英文手册 免费下载
  12. vue 电视看板_基于Vue的拖放看板
  13. 《视觉slam十四讲》第3讲课后习题
  14. Word处理控件Aspose.Words功能演示:从 Java 中的 Word 文档中提取图像
  15. python 使用摄像头监测心率
  16. Debian 执行apt-get update失败提示:请使用 apt-cdrom,通过它可以让 APT 识别该盘片。apt-get upgdate 不能被用来加入新的盘片
  17. openjudge 1.3.10 计算并联电阻的阻值
  18. commander、ora、chalk、inquirer使用
  19. 软考高项——【项目进度管理】
  20. 基于磁阻传感器的断路保护装置设计

热门文章

  1. 【理财】3.富人思维
  2. 数值计算大作业:最小二乘法拟合(Matlab实现)
  3. python反距离权重法_先从IDW(反距离权重)插值开始吧
  4. 【智能硬件】初识RKNN
  5. Excel怎么设置每页都打印标题行?
  6. WEB安全 TCP协议安全 应用安全 信息安全 业务安全 SDK嵌入式防护 等保 攻击溯源 CDN DCDN
  7. 超实用后台UI模板有这些就够了!(二)
  8. 以太坊钱包Metamask 下载,Metamask 7.7.9最新版官方版下载和安装方法
  9. PHP之各种SQL注入源码
  10. 关于魔兽世界插件AddOns