下面两幅图,同样的场景素材,同样的光源,非常接近的材质模型,但用的是完全不同的渲染方法。

第一幅是我自己的渲染器用基于光线追踪的无偏全局光照算法渲染,第二幅是用虚幻引擎(版本4.7)的渲染引擎渲染。

首先说明一下,第一幅图片中椅子的扶手和桌子底部是塑料材质(漫反射加光滑镜面反射),而第二幅中是金属材质(粗糙镜面反射)。原因是UE4导出的时候没有把整个素材弄成一个材质了,我也懒得再编辑。然后桌上的雕塑第一幅是毛玻璃,第二幅是平滑玻璃。其余材质都一样了。

接下来点评一下两幅图中的不同之处。第一个最抓眼球的区别就是场景底部平面的镜面反射,两个都是用粗糙参数为0.25^2的GGX模型 描述的粗糙镜面,上下图的差异很大。上图是完全基于对BRDF和光源采样的无偏结果,可当做参考,下图则是可以说暴露了虚幻引擎4对轻微的粗糙反射的一个缺陷。虚幻引擎4中的反射解决方案是屏幕空间反射(Screen Space Reflection,SSR)加环境贴图。对于非常平滑的表面,当它在场景中的反射刚好在屏幕上存在时,虚幻引擎4会使用SSR。当表面变的粗糙,或者反射部分在屏幕边缘时候,反射会变成SSR和环境贴图的加权和,直到对特别粗糙的表面完全变成使用环境贴图。(其实这里我只要再把粗糙度调高一点,SSR就完全没有了,不过那样就完全看不出反射了因为环境贴图的反射特别粗糙,不利于比较)所以下图中的结果可以说是一个平滑镜面反射和粗糙镜面反射的加权和,当然无法真正模拟出轻微的粗糙反射。(这个问题用最近的Stochastic Screen-Space Reflections可以得到一定的解决,不过很多时候不那么robust)

第二个比较细微的区别则是下图中桌椅黄色部分的镜面反射有信息丢失了。这个便是因为SSR算法本身无法处理反射物体在不在当前屏幕上的情况。这个Artifact其实在现在的游戏中也非常常见,相信很多人都注意到了。SSR另一个细微的错误则是反射中的镜面高光会是错误的,因为高光的计算取决于视线入射方向,域名购买直接从根据相机方向计算的屏幕上取是不对的。不过这个问题比前一个丢失信息的问题小多了,没人care。。

第三个差别是底部平面的高光区域在下图比上图分散很多,看起来下图底部的屏幕比上图更加粗糙。这个是由于两种完全不一样的Image Based Lighting的方法导致的。上图还是一切基于环境贴图的能量分布采样光源,虚幻引擎4则使用了Split-Sum,将渲染方程的光照部分和BRDF部分拆开分别积分,再对于两个积分的结果球积。

其中光照部分的积分又使用了Prefilter Cube Map的方法。再讲细一些,UE4的环境贴图是128x128x6的分辨率,7层MipMap。每一层的每一面都用1024个样本采样不同粗糙度的GGX去Filter。这里有几个产生误差的原因,第一是误差是采样GGX的入射光线永远是等于表面的法线方向,所以没办法模拟出上图那样在入射角和法线角夹角大的时候那种拉长的高光。另一个误差则是只采样了7个离散的粗糙度,并且不同的粗糙度使用的不同Mipmap,这样做对性能更有利,但是这种粗糙度和Mip层的映射完全是Epic的人“发明”出来的,完全不是基于物理。我自己试过同样的BRDF在UE4中做Image Based Lighting都会比真正的离线参考看起来粗糙许多。当然只要结果 Artists用着舒服,粗糙度看着有变化,也没有什么不好的。

第四个差别是下图中桌子下面的部分和上图比明显偏亮。这个误差则是因为环境贴图的遮挡信息只有在capture的那一点才是正确的,例如这里环境贴图是在桌子上面capture的,桌子下面的部分大部分入射光被桌子遮挡,应该会比较暗,这里则变成桌子下面接收到的光照和桌子上面一样,所以和上图比偏亮了。解决办法就是应该在桌子下面人工多capture一个单独的环境贴图。

除了这些区别,色调的不同,以及背景模糊度的不同,都是不同渲染系统的post processing参数以及其他工程性的小问题,就不细说了。

除了这些渲染本身的区别,实时渲染系统往往也需要更多的artists work才能hack出接近真实的画面,例如在场景不同的地方放置probes,提前烘焙光照贴图等。

最后,现在别说是用UE4做建筑可视化,就连做低成本动画电影的都有。毕竟快速的迭代可以降低很多的成本,也就有可能出现一些非Pixar那种一定要男女老少都能看才能保票房的题材的片子。

而且要不是我这样把UE4脱光了衣服拿出来比较,大家直接看着也不会觉得有任何问题。甚至我相信很多读这个答案的人盯着这两张图看不出差别的。搞图形的就是这样。。废了半天劲很可能是自娱自乐,真的搞的真实好看了,看得人也认为是理所当然。

实例比较虚幻引擎4与光线追踪渲染相关推荐

  1. 教你学会虚幻引擎中的光线追踪功能使用,此教程必看

    在本教程中将展示虚幻引擎中的光线追踪功能.为了比较光线追踪引入的变化,我从头开始构建了一个独特的环境,其中包括各种材料和模块化资产.光线追踪是一个很棒的工具,可以让你更好地控制场景的视觉方面. 启用光 ...

  2. QQ安装包内置UE4是什么意义呢?会不会是奔着元宇宙,搭载了虚幻引擎的QQ在渲染数字孪生上表现更强劲?

    如何看待IOS版手机QQ新安装包高达800M+,内置虚幻4游戏引擎? - 知乎

  3. href=javascript 显示开发中_Looking Glass全息显示屏兼容全新虚幻引擎插件

    随着裸眼3D显示技术的发展,美国厂商Looking Glass Factory生产的显示屏在显示全息内容方面给人留下了深刻的印象,其生产的全息显示屏支持12个人同时以不同角度观看立体3D视频.近日,该 ...

  4. 科技碰撞:元宇宙与虚幻引擎,被掩盖的底层逻辑何在?

    今年6月,元宇宙标准论坛(Metaverse Standards Forum)宣布成立.这个包含Meta.微软.Epic Games.Adobe.英伟达.索尼等科技巨头的组织,宣布其活动将由各成员的需 ...

  5. 车机而已,怎么连虚幻引擎都用上了?

    金磊 浩楠 发自 凹非寺 量子位 | 公众号 QbitAI 赛车游戏,想必大家都玩过:汽车,很多人也都开过. 但是朋友,像游戏那样操控一台真正的汽车,你体验过吗? 来,先看这么一段画面: (本文所有图 ...

  6. 虚幻引擎与元宇宙:被游戏掩盖的底层逻辑

    今年6月,元宇宙标准论坛(Metaverse Standards Forum)宣布成立.这个包含Meta.微软.Epic Games.Adobe.英伟达.索尼等科技巨头的组织,宣布其活动将由各成员的需 ...

  7. Unreal Engine(虚幻引擎)渲染 – 正确使用方法

    我们已经讨论过 Unreal Engine(虚幻引擎)中可用的很多神奇工具,包括最近抢先体验的 Unreal Engine 5.多亏了 Epic,世界各地的开发人员和团队都可以轻松进行游戏开发.Epi ...

  8. ue4vr插件_UE4虚幻引擎可视化VR实例3dsMax全流程中级教学

    原标题:UE4虚幻引擎可视化VR实例3dsMax全流程中级教学 教学总长度11小时左右 使用软件:Unreal Eengine4,3dsmax 本教学紧接<UE4虚幻引擎可视化VR实例3dsMa ...

  9. 基于C++与CUDA的N卡GPU并行程序——虚幻5渲染视频很牛逼?让我们从底层C++开始自制光线追踪渲染器,并自制高级版《我的世界》

    虚幻5效果图   哈喽,呆嘎吼.最近5月13日,官方放出了虚幻5的演示视频,据说是可以同屏显示数亿三角形,从而实时渲染出电影级别的画质,其动态光照效果也是极其逼真.其中提到了Nanite技术与Lume ...

最新文章

  1. pythonjson数据写入csv_将JSON数据从“Requests”Python模块写入CSV
  2. Android图表控件MPAndroidChart——曲线图LineChart的使用(财富收益图)
  3. 在sp_executesql中使用like字句
  4. java时间往后一天_如何在Java中将日期增加一天?
  5. Python SQLite3库
  6. Bailian2977 生理周期【枚举+中国剩余定理】
  7. ThinkPHP如何URL如何去掉index.php(重写模式)
  8. windows配置路由表办公网和外网自动切换
  9. java解压和压缩cab包 附jar
  10. 关于正向代理,反向代理,负载均衡的个人理解
  11. python提取人物特征_基于图像人物面部表情识别的特征提取优化方法与流程
  12. php iis 上传文件大小限制,IIS上传和下载文件大小限制
  13. 什么是JSONP协议 及对JSONP的改进
  14. 计蒜客题解——T1213:拯救行动
  15. 小班安全使用计算机教案,小班安全教案《使用学习用具》
  16. 网友强悍出手,电话骗子被骗
  17. Win11触控板如何关闭 Win11关闭触控板的方法
  18. 【Python】小甲鱼课后习题第20、21讲--函数(中)
  19. jfinal生成二维码
  20. serve注解是加在哪个类_@Service注解是放实现类上的而非接口上

热门文章

  1. 几款好用超赞的Google Chrome插件
  2. aes解压命令 linux,Linux使用tar和openssl加密和解密文件
  3. pppoe错误代码 linux,PPPOE常见故障代码及分析
  4. birt脚本for循环语句_Python初级教程(11): for循环语句
  5. swiper怎么在HTML引入JS文件,Swiper.js插件超简单实现轮播图
  6. python处理重复的复制粘贴_如何将数组复制/重复N次到新数组中?
  7. android 6.0权限封装,Android6.0------权限申请管理(单个权限和多个权限申请)
  8. 【Java例题】5.3 线性表的使用
  9. matlab 非线性曲线拟合
  10. Arria10_emif