ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-07-21 01:31:07  阅读:361  来源: 互联网

标签:结点 渲染 压缩 纹理 UE 材质 Heskey 着色器 光照


本文禁止转载
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.材质性能提升:
  • Feature Level Switch结点

    ​ 会根据所使用的着色器模型来提取不同的输入。大部分计算机能处理SM5 (Shader Model 5),IOS可以使用ES2或ES3。那么就可以使用简化的材质设置,对于移动设备可以使用简单的材质设置。

  • Quality Switch结点

  • Fully Rough属性

    ​ 会移除部分PBR

  • Shader Permutations (Project Settings)

  • Texture Group sizes

【纹理:压缩和内存】

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

引擎内部存储两种图

①在导入时自动解压所有图片格式(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:
  • 由于GBuffer的限制,半透明表面难以显示反射,难以与一般光照和着色效果互动

  • 半透明材质尽可能使用无光照。(无光照与有光照差别小)

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】

是材质函数的变体

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

  • 勾选细节面板Use Material Attributes,会将末尾结点折叠成单一输入,实际的输入会来自Material Layer

    Blend Material Layers结点:将不同Material Layer混合在一起

    Set Material Attributes

  • Material Layer中的Input结点可以在材质使用时Override

【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
  • AO经过烘焙成为光照和阴影的一部分,以供材质编辑器读取,可以依据AO找到物体边缘位置

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有