首页 > 编程知识 正文

虚幻4实时渲染,虚幻引擎用的什么渲染

时间:2023-05-06 12:22:33 阅读:175651 作者:2906

作者: _子宽来源:

3359 blog.csdn.net/u 010281174/article/details/107847966

摘要Filament是谷歌开发的跨平台实时渲染引擎,支持PBR材质,并针对安卓平台进行了优化(毕竟是谷歌的亲生儿子)。 本文针对Filament的特点,包括Filament的一些特性、其材质系统和照明系统。

这些设计对渲染器,特别是PBR渲染器的实现有一定的参考意义。 关于具体实现的细节,由于与PBR理论的重复度高,因此省略说明。

如果你对这个引擎感兴趣,请参阅他们的文档。 这个文档不管怎么说,不可思议的是详细的地方非常详细,简单的地方一律是“TODO”。

平台特性支持跨平台、Android、IOS、Linux、max操作系统和Windows

提供c、Java和JavaScript API

基本图形库支持OpenGL 4.1、OpenGL ES 3.0、Metal、Vulkan 1.0和WebGL 2.0

渲染属性支持群集前渲染器

支持microfacet BRDF

支持HDR/linear照明

各向异性材质支持

支持metallic、roughness、ao、normal mapping和texture mapping

支持布料的渲染

支持(弱)半透明材质

支持IBL

支持物理相机模拟(快门、光圈等)

支持shadows

支持全球雾模拟

支持颜色系统)。

支持FXAA、MSAA

支持动态分辨率

材质模型系统Filament定义以下材质模型:

lit (标准)。

子表面

衣料

单元

其中第一个是使用最多的,在另一个渲染器中可能称为“standard model/material”。

使用Cloth来模拟布料。

Unlit严格来说不是材质,可以理解为用于在画面上显示调试信息的材质。

Lit Model Lit model是Filament支持的最全面、最基本的材质模型,是基于PBR模型的材质,具有以下属性:

表示基本颜色、非金属表面的漫反射albedo或金属表面的高光颜色

metallic表示材质的金属性,0表示dielectric,1.0表示conductor

metallic是0 (左)到1 (右)。

roughness表示材质的粗糙度,1.0表示平滑,0表示粗糙度

非金属roughness为0 (左)至1 (右)。

金属的roughness是0 (左)到1 (右)。

表示反射、Fresnel反射系数

reflectance为0 (左)到1 (右)。

normal,指示材质曲面的局部法线偏移

ambientOcclusion,表示环境照度

emissive,表示材质表面发光度

描述各向异性程度的anisotropy和anisotropyDirection

表示clearCoat,clearCoatRoughness和clearChatNormal,clear coat layer的参数

bentNormal,用于提高间接光的效果

定位颜色。 用于与光照计算结果混合,以获得特殊的光照效果

ior,表示物体折射率的

ior为1 (左)至1.5 (右)。

transmission,表示物体的透明度

transmission是0 (左)到1 (右)。

absorption,表示材质对不同透射光线的吸收系数

absorption从(0.0,0.02,0.14 ) (左)到(0.0,0.36,2.3 ) (右)

microThickness和thickness、材质的厚度参数

其中,baseColor、metallic、roughness、reflectance、normal、ambientOcclusion、emissive都是PBR材质中常用的参数,用法也基本一致

有些物体的表面覆盖着一层薄薄的半透明材质,就像手机表面的薄膜。

但是,这个胶卷也有一定的颜色和方向。 clear coat参数(clear coat,clearCoatRoughness和clearChatNormal )用于描述此层的表面材质,缺省情况下为各向同性、非金属。

其中,clearCoat被视为布尔变量,必须说明此表面材质是否存在。

C

learCoat从0(左)到1(右)。

clearCoatRoughness从0(左)到1(右)。

除此之外,有些物体表面是各向异性的,例如朝单一方向磨砂的金属。anisotropy参数可以用于描述这种材质。

anisotropy从0(左)到1(右)。

Subsurface model

TODO

这个模型文档里没有介绍,我也没有用过,因此这里先略过。后面慢慢看代码吧。

Cloth model

Cloth模型用于描述类似于纺织物的布料材质,这类布料的一个特点是其表面由纤维堆叠而成,会吸收和散射一定的入射光线。

Cloth model包含前面Lit model的各种参数,删除了metallic和reflectance,额外添加两个cloth相关的参数:

sheenColor,描述高光反射的颜色

蓝色纤维有(右)与没有(左)sheenColor

subsurfaceColor,描述次表面散射的颜色

白色布料(左)与带棕色subsurface scatting的白色布料(右)

Unlit model

如前所述,Unlit model不算是一个材质模型,它用于渲染天空盒,或场景中以外的物体,比如用户界面的图形和文字,或者用于调试。

如下图所示。该模型只有三个参数:

baseColor

emissive

postLightingColor

用法跟Lit model一致。

光照系统

Filament支持的光照可以分为直接光(direct lighting)和间接光(indirect lighting),前者包括:

方向光(directional lights)

精确光源(punctual lights),包括point lights和spot lights,二者的区别是point light是超各个方向均匀发光的,而spot light有一个朝向,朝向以外的区域光照强度逐渐减少,直至为零:

Photometric lights,用配置文件描述光源发出的光线在各个方向上的强度,可以还原真实世界中的光源情况。

这一套描述是通用的光源描述,Filament的用法是将描述文件处理为纹理,然后在渲染的时候取出来判断计算光照。我理解这个光源其实是对spot light的拓展。

下图展示了一些不同的光源描述文件。

光源(Area lights):仅支持正方形和圆形的面光源。

间接光包括:

Image-based lighting

光照参数

对于直接光来说,Filament用以下参数来描述一个光源:

Type,定义光源类型,包括directional,point,spot,area

Direction,描述光线朝向,或者面光源的法向

Color,描述光源发出的光线的颜色

Intensity,描述光线强度

Falloff radius,光源所能影响到的最大半径

Inner angle和Outer angle,描述spot light的内外圆锥的角度

Length和Radius,描述面光源的边长、半径

Photometric profile,Masked profile和Photometric multiplier,描述puctual lights的属性

Imaging Pipeline

Imaging pipeline用于对片元着色器输出的颜色做进一步处理,使其色彩更加真实。

包含以下几个步骤:

白平衡

色彩分级

色调映射

OETF(opto-electronic transfer function)

流程图如下:

Physically based camera

基于物理的相机可以设置相关的相机参数,对成像效果进行调整。应用到的相机参数包括光圈(aperture)、快门(shutter speed)、敏感度(ISO)。

由于采用三个量表示曝光效果过于繁琐,因此Filament将其简化为exposure value,简称EV。

总结

总的来说,Filament是一款还在开发中的渲染器,主要特点是PBR材质系统,对Android的支持,色彩后处理系统,其次是半成熟的光照系统。

作为渲染领域的学习材料还是不错的。


技术交流,欢迎加我微信:ezglumes ,拉你入技术交流群。

推荐阅读:

音视频面试基础题

OpenGL ES 学习资源分享

开通专辑 | 细数那些年写过的技术文章专辑

NDK 学习进阶免费视频来了

推荐几个堪称教科书级别的 Android 音视频入门项目

觉得不错,点个在看呗~

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。