其他分享
首页 > 其他分享> > 【Heskey带你玩渲染】UE材质系统

【Heskey带你玩渲染】UE材质系统

作者:互联网

本文禁止转载
B站:Heskey0

Part 1 : 底层原理

【整体架构】

1.实时渲染的运作方式:

使用HLSL写代码,其中部分关键变量处于未定义状态(使用何种纹理)。

着色器的作用是定义功能(包括定义精确数值:反射度高低,亮度,纹理),然后在编辑器中对这些变量进行定义。

2.虚幻的运作方式:

写HLSL(模板着色器),材质编辑器随后会使用此处的代码,将其与编辑器中的结果相结合,随后自行生成另一个着色器(实际将要使用的HLSL着色器)。材质实例系统会利用并定义着色器中未定义的值。

材质结点有两部分,接受输出的BasicPBR结点和产生输入的其它结点(材质图表)。

BasicPBR结点输出结果主要受到使用模板的着色器影响。

使用的模板着色器取决于基础材质的细节面板设置(例如Surface, Opaque, UnLit)

3.shader permutation:

因为每一种用例都需要某种特定方式的渲染,在一个着色器内无法支持过多功能,所以生成的着色器必须支持各种permutation。虚幻引擎自动生成的每个材质创建许多不同版本

例如:若已经生成了着色器,而物体采用静态光照,并且已经生成光照贴图,那么,之前的着色器的代码不具备混合光照贴图的功能,所以会追加一段代码。这将导致虚幻引擎对着色器进行编译(Compiling Shaders xxxx),这个过程就是生成材质的permutation。

permutation可以由材质编辑器细节面板中的Usage来控制,也会由材质图表的Switch结点产生,能由ProjectSettings中的Shader Permutation Reduction选项设置

只是打开了某些资源,虚幻却提示用户保存某些已修改的资源:

勾选Automatically Set Usage in Editor时,引擎会自动决定Usage,所以会提示保存生成的permutation

如果不能正确设置Usage,那么编辑器中能运行,而打包后可能出现材质丢失

【性能】

着色器性能受到顶点数和在屏幕上覆盖的像素数影响,alt+8显示shader复杂度

1.半透明开销大的原因:

①每个半透明层反复重新计算每个像素。

②难以理清半透明表面的排序顺序。

2.材质性能提升:

【纹理:压缩和内存】

纹理是在导入时进行压缩的,默认情况下,始终对纹理进行压缩

引擎内部存储两种图

①在导入时自动解压所有图片格式(bmp,png)存成无损

②根据设置将这张无损图压缩成另一张图

压缩纹理的原因:

1.压缩方式:
window->statistics
  1. 压缩格式:
BC/DXT(C)用于PC上的DirectX. (Block Compression/DirectX Texture Compression)
  1. 压缩类型:

每种压缩格式都有多种压缩类型,如:BC1, BC3, BC5, BC7, DXTC1, DXTC3, DXTC5

BC3,DXTC5表示含透明(alpha)的纹理,存储但不会对alpha通道压缩

BC1,DXTC1表示不含透明的纹理

VectorDisplacementmap(BAG8R8A8)表示未压缩,观察压缩后的大小,它是压缩等级的最佳指标

  1. 其它压缩选项:

Defer Compression延迟压缩:可以将压缩延迟到保存时,可以加快导入纹理的速度

Compress Without Alpha:纹理不含透明通道,压缩RGB

2.法线贴图:

使用特殊的BC5压缩,压缩会把蓝色移除,仅存储RG。

当法线贴图位于GPU上时,没有蓝色。

纹理不会影响FPS,纹理出问题,可能会导致纹理分辨率低,延迟,冻结,卡顿

【纹理池】

1.纹理预算(Texture Budget)

虚幻引擎将在内存中为纹理保留一定量的空间的过程。

2.纹理流送池(Texture Streaming Pool)

纹理预算预留的空间。纹理池的大小控制着实际用于要显示的纹理的空间量。(默认2GB)

控制台:
r.Streaming.PoolSize
配置文件:
MyProject->Config->DefaultEngine.ini
3.纹理流送(Texture Streaming)

确定在何种情况需要何种mipmap等级的纹理的过程。

4.mipmaps

大小为2的n次方的纹理才能生成mipmap。

5.Texture Group

是对纹理进行分类的一种方式,可以将一组纹理质量调低。

Mip Gen Settings和LOD Bias由Texture Group控制

纹理组组批量修改:
Window->Developer Tools->Device Profiles
6.共享采样器

每个材质有至多16个采样器的限制,除去光照贴图,阴影贴图等,一个材质包含13个纹理

应对方案:

①设置Texture Sampler结点的Sampler Source属性为Shared Wrap或Shared Group

②各通道存储不同的信息

Part 2 : 材质基础


【Shading Models】

1.Unlit:

“无光照”类似于“自发光”

Emissive Color

2.Subsurface:

Opacity:进入物体的光照的量

Subsurface Color

3.Subsurface Profile:

通过subsurface profile配置文件制造次表面散射的假象,根据配置文件中的参数模糊屏幕空间内的图像。

4.Two Sided Foliage:

模拟光线穿透树叶的效果

Opacity:进入物体的光照的量

Subsurface Color:穿透后产生的光颜色

5.Clear Coat

Clear Coat:是否启用

Clear Coat Roughness:

//Project Settings中可禁用此结点(Clear Coat Enable Second Normal)

Clear Coat Bottom Normal:提供一个输出,接收格外的法线贴图

【Blend Mode】

Blend Mode 用于对半透明度等设置进行控制

1.Translucent:

Translucency -> Lighting Mode:

选项自上到下等级升高
1.Volumetric NonDirectional
* 内部对面细分成块,对每个块进行光照

2.Volumetric PerVertex NonDirectional
* 对顶点进行光照,开销低
2.Masked

Opacity Mask

DitherTemporalAA结点:

输出到Opacity Mask

通过将表面分为大量小型像素,每个像素都可见或不可见,来使其呈现半透明效果。

【Material Domain】

1.Decal
2.Light Function

将此材质与光照混合,使光照能够投射材质

3.Volume

【Material Layers】

是材质函数的变体

并非将一小组表达式放置到一个函数中,而是直接将整个材质放置到一种特殊类型的函数中,该函数称为材质图层

【Material Parameter Collections】

使用:创建Material Parameter Collections资产,在材质中使用collection parameter结点

【HLSL】

【其它特性】

1.Particle

结点:

  • Particle Color:支持驱动粒子编辑器中的颜色来修改材质,可实现淡入淡出

  • Particle Radius

  • Particle Position

  • Particle Direction

  • Particle Speed

  • Particle Relative Time

  • Particle Random Value

  • Particle Size

  • Particle Motion Blur Fade

  • Particle SubUV:允许生成子UV材质

2.Custom UVs

修改细节面板Num Customized UVs

结点:

  • VertexInterpolator:

顶点着色器导入,像素着色器导出

使用该功能可以将工作转交给顶点着色器,可以避免在像素着色器上调整缩放,缩放改为在顶点着色器上执行。对于“Custom UV”而言同样如此。这样可以为负担过重的像素着色器减轻负担。

在Custom UV结点连接UV,等同于UV连接VertexInterpolator之后正常输入Texture Sample

3.Blurring

是一类结点,材质编辑器中的所有Blurring相关结点(Montion Blur等),只不过是多次复制图像,偏移,改变透明度,分层堆叠

4.BlackBody

是一个结点,用于将”色温“(即光照温度,如2700开尔文为家用灯泡),转换为可供材质编辑器使用的颜色,输出连接到自发光。

5.Ambient Occlusion Mask

PrecomputedAOMask结点

6.Distance Field

//勾选Project Setting->Generate Mesh Distance Fields

//取消勾选Actor实例的Affect Distance Field Lighting

距离场是将三维数据打包到纹理中的一种特殊方式,由此可以产生距离场纹理

DistanceToNearestSurface

标签:结点,渲染,压缩,纹理,UE,材质,Heskey,着色器,光照
来源: https://www.cnblogs.com/Heskey0/p/16500498.html