虚幻图像渲染引擎有哪几种为什么靠一张纹理就能实现模型上色模块化,是什么原理?

页头UE 5.3.1更新于24.03.27· 本来就懂的就略,错了的就改,缺的就补充,或者仅翻译、定义、简单释义或实践记录。包含内容:
> 简明PBR
> 光照与反射
> 屏幕空间渲染
> 网格体距离场
> Lumen
> 抗锯齿
> 纹理过滤
> LOD
> Nanite
> 碰撞体积【简明PBR】Physically Based Rendering基于物理的渲染,是搞美术,不是搞科学。重点在美术观感,计算机图形学、物理、数学的方面感受个逻辑就行。迪士尼定义BRDFPBR理论基于:2012-2015迪士尼定义BRDF(Disney Principled Bidirectional reflectance distribution function)双向反射率分布函数简化模型。双向(Bidirectional):入射方向与反射方向,入射光线到观察视角。反射率分布(Reflectance distribution):光线如何反射。函数(Function):输入参数,输出结果。PBR美术上就是输入参数,或者用贴图描述参数,让渲染器输出基于物理预期的观感。两种PBR工作流程贴图两种PBR贴图工作流程,实现的逻辑是不同的,不能一起用。UE中走Metal - Roughness工作流程。UE中的材质节点基础颜色Base Color左侧:金属完全反射入射光。 右侧:反射苹果固有色。光在物体上反射,然后反射到眼睛里接收。贴图也叫Albedo反照率,体现为反射光时反射该物体的什么基础颜色,贴图没有光影内容。颜色贴图要开sRGB Gamma校正贴图的RGB三个数值,输入用于线性Linear的计算是准确的,但是如果是输出图像给人眼会有亮度损耗(原因复杂不用管)。sRGB Gamma校正,是把要显示的图像校正为人眼认为的正确亮度。下图中:
F(1)=Y=X的1/2.2次幂
F(2)=Y=X的1次幂
F(3)=Y=X的2.2次幂Gamma校正曲线Gamma校正就是非线性地再算了一次亮度,可以理解为提亮了。中灰值0.5=0.218的0.45次幂,0到1的幂不等,是非线性的计算。一般来说怎么算的不用管,就是理解为把亮度调到正常的观感就行。Photoshop中的色阶调节图像色阶调节中的输入色阶这里,左边是暗部,右边是亮部,中间就是Gamma。例如Basecolor固有色贴图、Cubemap立方体贴图、HDRI环境贴图等,这类用来显示颜色的贴图,都应该打开sRGB Gamma校正。图像颜色指标色域:色彩空间。不同的目标输出端、程序算法,颜色空间不一样。Gamma:明度校正。符合人眼观感的校正算法。色深:颜色数量。更高的颜色数量可以有更好的过渡。动态:明度范围。可记录容纳的明度范围。UE的颜色空间· 使用色板检查明度sRGB校正会给不同明度的颜色进行校正,具体的明度可以通过引擎自带的色板检查。在引擎内容EngineContent中可以找到色板,导航到:Engine>Content>EditorMeshes>ColorCalibrator色板贴图有两个格式,一个是EXR的32位色深,一个是TGA的8位色深。色板贴图8bit色深=2的8次幂,即256种颜色,也就是常用的RGB中的0-255种颜色。高色位深度图片可以储存更多的颜色,提供更细致的颜色过渡。通常使用8位色深的sRGB贴图,更高色位深度通常用作线性计算数据。8位色深常见的图片格式:JPG、TGA、PNG。16位色深常见格式:EXR。32位色深常见格式:HDR。线性色板明度值EXR格式的这一张色板,关闭sRGB处于线性颜色时,颜色的明度明显较低。通过Photoshop吸色可以检查到所有黑白色块的明度色值。作为颜色参考色板,打开sRGB,进行Gamma校正之后的色板明度才是正确的颜色明度参考。其中19%的灰色,通过Gamma校正、应该是0.19的0.45次幂,大概是0.4736299,它应该是一个sRGB色域里接近中灰明度的颜色。sRGB色板明度值打开sRGB之后,19%的灰色校正为48%,忽略小数浮动,与计算基本一致。通过使用色板对场景的光照进行检查,可以明确亮度是否处于合理值。如果希望光照环境处于中间明度,就检查中灰明度色块是否处于中灰。以简单的单一天光为例,做中灰光照环境设置与检查:将SM_ColorCalibrator放入空场景中,色板模型SkyLight天光需要一张HDR贴图照亮环境,为了避免光色与复杂光源影响,用Photoshop做一张50%明度灰色的32位HDR贴图。32位色深的50%中灰图片保存为HDR将贴图导入引擎,在场景中放置一盏天光,天光基础设置指定立方体贴图,贴上中灰HDR,为了下半球也有光源使光照平均,关闭 较低半球为纯色。关闭自动曝光放置PostProcessVolume,设置无限范围,关闭自动曝光,将曝光补偿、MinEV100和MaxEV100都设置为0.吸色检查将这样照亮的色板截一张图,粘贴到Photoshop中检查色板明度。通过吸取中灰色块,发现明度为15%,低于48%,说明天光暗了。将天光强度调到6.5之后,截图出来的中灰色块就与色板明度匹配了。亮度调节这是单一完全平均的天光,只是过一个检查流程。复杂的环境光照并不是平均的,具有不同的光影明暗,明度与色板并不需要完全一致,接近且符合预期即可。注意!只有显示颜色用来看的图,才需要sRGB Gamma校正。灰度图包含的是一些数值,是用于运算的,不是用来看的图。例如:法线贴图(灰度混合贴图)、粗糙度等灰度图,不能Gamma校正。法线贴图进行了Gamma校正是错的结果如果灰度图打开sRGB Gamma校正,因为提亮了,数值被提高了,所以会得到错误的计算结果。用于人看的,打开sRGB Gamma校正;用于计算的,关闭sRGB Gamma校正。关闭Roughness的sRGB批量设置属性细节如果希望批量设置同样类型资产的同一个属性,一个个设置效率低,可以批量设置。选择所有需要批量设置的资产,资产操作>编辑属性矩阵中的选择。批量设置属性在属性矩阵中,左边选择所有资产,右边搜索对应内容,设置完成后左上角保存。举例:给灰度图批量关闭sRGB Gamma校正法线Normal多边形网格体(Polygon Mesh)反射光的方向由顶点/面法线方向决定。复杂细小的结构需要更多的法线计算光路,过多的顶点还要计算空间位置等等,只为计算光影的话增加了不必要的性能消耗,所以将法线信息烘焙到贴图上,只给反射光提供信息。法线通道与烘焙法线法线贴图是一种灰度混合贴图,混合了RGB三个通道的三张灰度图信息。三张灰度图对应了XYZ三个方向的高模顶点法线信息。OpenGL和DirectX法线格式OpenGL与DirectX管线格式的法线切线空间Y轴(绿通道)是相反的。UE使用的默认Render Hardware Interface(渲染硬件接口,RHI)是DirectX。项目设置中检查RHI两个格式凹凸是相反的各常见软件的管线格式(http://wiki.polycount.com/wiki/Normal_Map_Technical_Details)UE中设置法线翻转绿通道· Mikk法线切线空间
Mikk T-Space不同程序计算顶点法线的方式不同,可能会出现软硬边平滑组错误的问题。Mikk Tangent Space切线空间 可以实现跨软件同步正确的平滑组。把模型导入其它软件时,要确认切线空间计算Mikk已经打开。· Mikk切线空间在各软件中启用Substance Painter:Substance Bakers兼容UE的工作流程Substance Painter文档中描述了其对Mikk切线空间的兼容,方式是打开“计算每个片段的切线空间”。Substance Painter中导入模型时确认计算切线空间设置打开Marmoset Toolbag八猴渲染器烘焙:一般来说Marmoset的默认切线空间也是没有问题的,如果出现了软硬边平滑组问题,尝试切换切线空间到Mikk重新烘焙。打开Mikk切线空间UE5:在UE中导入FBX,导入选项中是默认使用Mikk TSpace的。FBX导入选项:法线生成方法· 粗糙度Roughness表面粗糙的漫反射反射光的集中程度由粗糙度信息体现。粗糙度可以表现不同的质感,细腻的质感要再粗糙度贴图上多做细节变化。《掌控粗糙度:写实材质的关键》↓粗糙度贴图不要Gamma校正· 菲涅尔反射物理现象,不用管科学的部分,就只管如何运用到美术表现上。所有材质都有菲尼尔反射现象,金属较为不明显但也有。万物皆有菲涅尔
Everything has Fresnel.菲尼尔反射现象就是,从垂直反射到平行反射,会有反射率的变化。水面的菲尼尔反射观察角度在垂直角度时反射率较弱,夹角越小反射越强,直到平行角度最强。反射率变化通过使用菲尼尔反射模拟,可以在三维软件中实现较为自然的材质反射效果。左有菲尼尔反射,右没有菲尼尔反射不只是用来做水,还可以用来做轮廓效果,例如毛绒、外轮廓发光等。比如说,菲涅尔轮廓的内发光F0-F90的含义:菲涅尔本人(左),观察角度的反射变化现象菲涅尔反射现象,菲尼尔方程中,表示光线垂直反射的符号是F0,Fresnel Reflectance at 0 Degrees,菲尼尔0度反射率。菲尼尔反射随观察角度变化F0指的就是 光滑表面垂直0°观察反射率,平行观察就是F90。即反射率在垂直观察时为2-5%,到平行观察逐渐增强到100%。常见反射率:常见反射率一般默认反射率设为4%(0.04),平行观察时是100%。非金属的F0反射率最高是8%(0.08),金属的F0反射率会更高。常见材质的菲尼尔反射率曲线:横轴是从0度到90度的反射,纵轴是0到1的反射率。以下图表从左至右是铜、铝、金属、钻石、玻璃、水。常见反射率曲线非金属反射率:图表中最高的钻石,RGB反射率一致,F0是0.8,F90是1.金属反射率:图表中最高的铜,RGB反射率不同,其中R通道的F0是0.95(G通道是0.64,B通道是0.54,表现为黄红色,见上一张表格《常见反射率》),F90是1.以下左图非金属,右图金属,图表曲线体现了其菲尼尔反射率。非金属与金属的反射特性非金属材质:反射完全遵循菲尼尔反射特性,垂直反射弱,边缘逐渐强;金属材质:整体反射率要更强,但全角度反射都较为平均,且对不同颜色的反射率不一样;另外半导体介于两者之间,很少遇到。菲尼尔节点:菲尼尔节点在UE中可以使用Fresnel节点来实现菲尼尔效果。Fresnel节点根据表面法线与摄像机方向的标量积来计算衰减。左5.0 【Exponent 指数】 右1.0△ Exponent 指数:默认5。控制衰减大小,数值越大、渐变的范围越靠近边缘。左0.1【Base Reflect Fraction 基础反射分数】右0.0△ Base Reflect Fraction 基础反射分数:默认0.04。控制衰减强度,数值越大、越不衰减。△ Normal法线:如果未指定任何法线,那么将使用网格的切线法线,根据法线凹凸进行菲尼尔衰减。也可以修改来做一些效果,比如使用世界空间像素法线PixelNormalWS乘一个标量的效果如图。· 金属度Metallic制作金属材质需要注意控制固有色、金属度和粗糙度。非金属的反射率是固定的,金属对于不同颜色的反射率不一样。红色固有色,0粗糙度非金属(左)反射率一致,反射颜色被固有色改变的程度较小。金属(右)反射亮度有所衰减,反射颜色也会被固有色大程度改变。白色固有色,0粗糙度如果是白色的固有色,不开金属度会大程度反射固有色;开金属度,完全反射环境颜色。都开金属度,左边粗糙如果全开粗糙,即使开了金属度也不会有金属质感。金属的材质设置粗糙度要非常的低,低于0.5。· 次表面Subsurface透光的材质会具有次表面特性。光在次表面材质的中的反射折射透光率,表示光线透过介质的物理比率。透明度,表示透过介质看透的主观感受。【Opacity 不透明】黑透白不透的遮罩贴图。【Subsurface Scattering次表面散射】Scattering 散射(0到1范围),Scattering Color 散射色(颜色)。【Translucent半透明】Transmissive 透光率(0到1范围),Translucency 透光色(颜色)。玉石如果物体具有透光度,光不会完全反射或吸收,有一部分光会穿透并散射,例如皮肤、树叶、玉器、塑料或玻璃,造成次表面散射。· 折射率Index of Refraction不同材质会有不同的折射率IOR,体现为不同程度的折射反射程度。 IOR影响光线投射折射和反射结果,UE中可以根据IOR自动计算反射。不透明时只与反射有关,透明时会影响透明内容的形变。折射光波观察到筷子折断的效果水的折射率会根据温度变化而变化,一般是1.3左右。水的物理IOR测量结果
水气态 1.000
水固态 1.310
水 100° 1.318
水 35° 1.325
水 0°-20° 1.333基本遵循物理可以较为准确的模拟,但没必要那么科学,只管视觉效果就好了。UE半透明材质中模拟折射效果,可以使用折射率设定折射Refrection。以水的IOR为1.33实例:混合模式:半透明
光照模式:表面半透明体积
折射方法:折射率
基础颜色:0
粗糙度:0
金属度:0
不透明度:0.9
折射:1.33IOR1.33的折射效果折射不自然是因为不符合菲尼尔物理特性。根据菲尼尔特性,F0的IOR是1不折射,F90的IOR是1.33。使用菲尼尔节点作为Alpha,通过Lerp节点,A输入的是F0的IOR,B输入的是F90的IOR。菲尼尔特性的折射效果· 高光度Specular在金属/粗糙度工作流程中,高光度由基础颜色、粗糙度和金属度自动计算反射高光,一般无需手动设置。 没必要追求绝对的物理正确,所有参数都应该服务于美术效果,只是在物理正确基础上调节会更为自然。不同的IOR折射率,具有不同的反射高光量Specular。非金属表面材质IOR转换Specular值的计算方法如下:float DielectriciorToF0(float lor)
{
const float F0Sqrt=(IOR-1)/(IOR+1)
const float F0=F0Sqrt*F0Sqrt;
return F0;
}
Specular=F0/0.08(Clamp0-1)float浮点值,Dielectric电解质,IOR折射率,F0垂直反射率;const常量,F0Sqrt垂直反射率的平方根,return回报值,specular高光度,clamp数值钳制,非金属的反射率最高为8%即0.08。意思就是:
浮点 电解质折射率转垂直反射率(浮点值 折射率)
{
常量 浮点值 垂直反射率的平方根=(折射率-1)/(折射率+1)
常量 浮点值 垂直反射率=垂直反射率的平方根*垂直反射率的平方根;
返回 垂直反射率
}
高光度=垂直反射率/0.08(计算结果钳制在0-1之间,小于0就等于0,大于1就等于1)例如:玻璃IOR1.5的高光度计算F0Sqrt垂直反射率的平方根:(1.5-1)/(1.5+1)=0.2F0垂直反射率: 0.2*0.2=0.04Specular高光度: 0.04/0.08=0.5UE中默认的高光度Specular是0.5,就是IOR为1.5的情况。IOR转Specular算法体现在材质蓝图中:IOR转换Specular因为高光在不定义的时候是自动计算的,所以这样连上与断开是一样的高光效果。可以根据想要实现的视觉效果,调节高光的反射程度。根据菲尼尔特性,在F0到F90的透明度是有反射率变化的。F0是反射率最低所以可以很透明,F90反射率最高所以不透明。给高光和透明菲尼尔特性的效果在边缘反射率高的部分,只体现了高光和不透明的固有色,没有镜面反射。反射率不止体现在Specular高光度上,还应该体现在Reflection镜面反射上。给玻璃贴一张环境的HDRI作为反射贴图:HDRI自发光模拟反射在不开光线追踪镜面反射和屏幕空间反射的情况下,使用自发光HDRI模拟镜面反射内容。使用Reflection Vector WS反射矢量作为UV坐标,将HDRI贴在自发光颜色。菲尼尔衰减HDRI自发光在菲尼尔F0的范围减弱HDRI的反射强度。然后稍微调整调整、玻璃材质· 常见材质IOR-折射率参考以下一些材质的IOR参考值,基于科学测量结果,通用于三维美术软件渲染。根据三维美术软件的表现结果有所调整,仅用于三维美术参考。英文名称中文名称最小值最大值Air空气1.000Alcohol, Ethyl (grain)酒类(酒精、乙醇、含沉淀物颗粒)1.360Aluminum铝1.3901.440Asphalt沥青、柏油1.635Beer啤酒1.345Bronze青铜1.180Copper铜1.1002.430Crystal水晶、石英、结晶2.000Diamond钻石2.418Emerald翡翠、绿宝石、祖母绿1.5601.605Eye,Lens眼睛、镜头1.410Glass玻璃1.500Glass,Pyrex耐热玻璃1.474Gold金0.470Ice冰1.309Iron铁2.950Ivory象牙1.540Lead铅2.010Lucite透明的合成树脂1.495Mercury(liquid)汞、水银(液体)1.620Milk奶、乳汁1.350Nickel镍1.080Nylon尼龙(丝袜)1.530Pearl珍珠1.5301.690Plastic塑料1.460Teflon特氟隆(不粘涂层、氟碳涂料)1.3501.380Titanium钛2.160Vodka伏特加1.363Water (35 deg C)水(35°)1.325【光照】UE使用两种方法模拟光线运动:动态光照:可移动和可交互的光照,实时光照,所见即所得,但运算开销较大。预计算光照:没有动态或交互的光照,固定光照,将光照信息(静态光、漫反射、间接光、自发光、直接阴影、间接阴影)预先烘焙到光照贴图Lightmap中,运行时直接调用结果。只要是“实时”的渲染,就会很消耗性能,所谓的“开销成本”。为了保证运行流畅,实时的渲染尽可能用在重点的部分,即可移动或可交互的部分。非重点部分采用烘焙Bake的方式,预渲染固定的内容,不用实时运算,不消耗过多运算开销。UE5的全局光照全局光照(Global illumination)(间接照明和间接光照)能够模拟光照与几何体及材质表面的交互效果,与它们之相互作用的材质光线吸收性和反射性。后处理体积中的全局光照设置插件全局光照是第三方插件提供的全局光照方法,没用过,不知道是啥效果。无:不适用动态全局光照方法。全局光照仍然可以烘焙到光照贴图中。全局光照:无Lumen:应用于所有光源、自发光材质投射的光线、天空光照遮蔽。需要为软件光线追踪启用“生成网格距离场”,并为硬件光线追踪启用“支持硬件光线追踪”。全局光照:Lumen屏幕空间(测试版):独立屏幕空间全局光照。开销低,但受屏幕空间信息限制。全局光照:屏幕空间独立光线追踪(已废弃):这个废了,请你用Lumen。Lumen有软硬件光追。(那干嘛不删掉)它废了光照的实时与烘焙实时光照可以获得最准确的结果,但是性能开销非常大,就很卡。“烘焙光照”在UE中叫“构建光照”。跟其它的烘焙贴图一样,烘焙结果是固定不变的。静态网格体细节中设置光照UV静态网格体Actor除了纹理UV之外,还需要用于烘焙光照的光照UV。预计算光照信息将烘焙到Actor的光照UV通道,储存为光照贴图。Actor的光照贴图描述了它自己固定的光影情况,与其它Actor一起组成光照纹理图谱。构建光照后,世界场景设置中可以查看光照贴图单独加载actor光照纹理非常低效,一次性加载纹理图谱效率更优,因此UV不能跨象限连续,需要排布在UV空间之内。纹理UV一般是通道0,光照UV一般是通道1模型体积不同UV面积不同,分辨率根据纹理像素密度表现需求设置。烘焙光照后如果没有烘焙结果,检查UV通道索引是否正确选择了光照UV通道。分辨率与UV通道索引光照UV的切分与排布,与纹理UV需求不同。光照贴图中一般只有光影信息,没有细致纹理,所以分辨率可以很低。亮部受暗部阴影晕散影响但是分辨率过低的时候,UV岛内的贴图会互相晕散,如果UV岛间距过近,导致明显的接缝和伪影等问题。未完全舒展的UV(例如打直的UV)也会出现锯齿状光影边缘。打直的未舒展UV,暗部阴影锯齿状溢散到亮部UV间距按光照贴图分辨率情况排布,要么加大分辨率,要么拉开UV间距。尽量不要将UV接缝切在可见受光表面。UV不允许重叠,会报“重叠UV错误”。UV不能超出一个象限范围,会报“包裹UV错误”。Lightmass全局光照信息Lightmass描述了固定的光照情况。是将光照信息预计算,储存在Lightmass光照图中,供静态和固定的actor渲染时调用。这个光照图储存了空间内的固定光照信息,是立体的点阵信息。Lighmass重要体积Lightmass important volume 全局光照重要体积,在体积区域内的光照会被重点计算,构建光照后会有清晰的间接照明。区域外的,只能得到一次间接照明反射,比如阳光照到墙壁弹射间接光到地面,但可移动物体经过此处不会被间接光影响。视口中打开可视化>体积光照贴图显示,可以看到小球矩阵上呈现构建后的Lightmass光照信息。体积光照贴图Lightmass光照贴图描述了光照环境渲染结果,Actor光照贴图描述了它和光的交互渲染结果。构建Lightmass光照信息和actor光照贴图,在运行渲染时直接调用它们的预渲染结果。不实时运算可能会有不清晰或者错误的情况,但是没那么卡。光源光源类型定向光源(平行光):相当于直射的太阳光,无所谓放置位置放哪都一样,垂直角度会改变色温。天空光照:相当于大气散射光,平均照亮整个环境,移动性是“可移动”时,可以实时捕获天空大气环境来照亮场景。插件中的HDRI背景中,带有一个天光,和一个用来显示背景的环境球模型。HDRI背景内容会体现在Actor的反射上。移动端只能用静态天光。天光的HDRI使用HDRI立方体贴图来照亮场景,或者捕获场景作为天光。捕获场景是指,以天光actor的位置为中心,捕获当下环境作为HDRI来照亮场景。光源照度单位点光源、聚光灯、矩形光:烛光cd(坎德拉,亮度:尼特Nit=cd/平方米),描述一根蜡烛火苗的亮度。流明:lm,描述光通量,光散发在1球面角的单位。1cd=4π中12.56 lm定向光源(平行光):照度Lux勒克斯,描述环境亮度,1lux=1lm=1cd/㎡。EV:描述曝光度Exposure Value单位的含义感受个概念就行,主要还是看美术观感。移动性移动性光源和Actor细节面板中的移动性设置。性能开销:静态<固定<可移动三种移动性构建光照后的效果静态(Static):完全不会变动的Actor,将静态光影烘焙在Actor的光照贴图上,使用Lightmass生成光影,间接光照是最好的。固定(Stationary):不能移动位置,但可以在运行时改变光源的亮度和颜色,比可移动开销低。固定光源将使用动态直接光照和静态间接光照,动态的部分:可以实时计算,不变的直接投影会存储在阴影贴图中复用于下一帧。静态的部分:不会变,调用光照贴图Lightmass生成。间接光照和投影存储在光照贴图中。可移动(Movable):完全动态可交互,不使用Lightmass生成,actor会被所有光源包括影响,实时计算所见即所得,开销最大。构建光照构建后将聚光灯删掉的效果构建光照之后如果去掉光源,静态的:光影完全不会变化;固定的:间接光影不会变化;可移动的:光影会实时改变。查看三种移动性光源的LightmassLightmass重要体积范围内,静态光源需要的Lightmass精度最高,固定的次之,可移动的不使用。对于会变的不移动光源,固定光源是比较好的折中选择,但也要注意它局限。移动端不支持固态灯。固定光源红叉固定光源相对于静态,会增加直接照明部分的开销。并且可以影响单个对象的光源数量始终有限。可以影响单个对象的固定光源最多只有4个,超过会红叉。优化视图检查光照>优化视图模式>固定光源重叠 检查重叠的固定光源。固定光源靠得太近靠的太近重叠的,4个固定光源也会报错,离远点。另外,自发光是可以作为静态光源,烘焙光照Lightmass的。需要在静态网格体Actor的Lightmass设置中,打开使用静态光照的自发光。没有打开时,自发光不能烘焙进Lightmass打开了之后,Lightmass能看到被影响了【屏幕空间渲染】Screen Space Render屏幕空间渲染在实时渲染中性能表现很好,因为只计算屏幕空间内的信息。会根据屏幕空间内容实时运算,但也仅限屏幕空间内的内容。屏幕空间全局光照设置屏幕空间全局光照 Screen Space Global Illumination(SSGI) 屏幕空间全局光照可以提供一个良好的AO和间接照明。SSGI自带的AO后处理设置间接光照:0.0后处理设置间接光照:2.0屏幕空间全局光照只计算屏幕空间内的,在屏幕边缘会有一点AO和间接光错误。屏幕空间环境光遮蔽 Screen Space Ambient Occlusion(SSAO)官方文档在后处理效果中对于SSAO的介绍后处理体积设置全局光照方法上面提到的全局光照方式有自己的环境光遮蔽方法。要设置屏幕空间环境光遮蔽,就不采用其它全局光照的方法。缓冲显示中切换环境光遮蔽视图AO强度0.1AO强度1.0屏幕边缘的SSAO屏幕空间环境光遮蔽只计算屏幕空间内的AO,在屏幕边缘会有一点错误。材质环境光遮挡环境光遮挡贴图材质中存在AO贴图的,可以给材质纹理提供更强的体积感、表面凹凸深度。材质AO贴图(调参加强了)AO调参包括AO等灰度图要加强或减弱,可以使用ADD+CheapContrast调节,Add加一个数可以提亮灰度图,减就可以减暗;CheapContrast可以调节对比度。但是发现贴上AO贴图之后没有效果,没有材质AO效果材质环境光遮挡检查缓冲显示的材质环境光遮挡,材质贴图没有AO信息。是因为项目没有关闭静态光照。项目设置关闭静态光照项目设置中关闭静态光照之后,重启引擎,重新编译着色器。材质环境光遮挡(调参加强了)再查看材质环境光遮挡缓冲显示,就有了信息。具有材质AO屏幕空间反射 Screen Space Reflection(SSR) SSR是一种动态后期处理特效屏幕空间反射(Screen Space Reflections)(SSR) 是一种动态后期处理特效,仅限于反射屏幕中显示的物体。屏幕外或者被其它物体挡住的物体无法使用屏幕空间反射显示,这会导致反射中的渲染瑕疵。屏幕空间反射是实时渲染的,但只渲染屏幕空间内的内容。项目设置中与后处理体积中的反射方法:屏幕空间《迷失》右边玻璃的屏幕空间反射如上图,玻璃中有反射,而且是动态变化的,但是看起来其实不符合物理常识。反射内容重影、边缘模糊,还有形变和位移,就像在左边截个图,镜像反转贴进去一样。是因为只反射了屏幕内已经渲染的内容,没有在屏幕内的无法体现。反射捕获的内容如果要反射屏幕之外的内容,则需要进行反射捕获。就是预先渲染好附近的反射内容,烘焙在Reflection贴图里,此时的反射内容就可以有屏幕外的内容了。但是因为这是预烘焙的内容,不能实时更新。《GTA5》动态物体不在反射贴图上上图中,会随风摇曳的树木灌木、移动的人物、动态的灯光,都没有在水面的反射上体现。并且反射贴图的分辨率还会影响反射的观感。屏幕空间反射和反射捕获都有缺点,但是也一定程度体现了镜面反射材质的质感。【反射捕获】UE5.3的反射种类反射捕获可以预渲染反射信息,运行时直接调用结果。反射捕获的内容是静态的,无法移动和交互,固定和可移动的actor无法被反射捕获。项目设置中设置屏幕空间反射项目设置中,反射设置改成 屏幕空间反射 ,动态全局光照方法 屏幕空间(测试版),反射捕获分辨率设置,分辨率越大反射内容越清晰。创建一个空关卡,放一个Skylight天光,天光贴一个HDRI,HDRI的内容会体现在反射上。较低半球为纯色:开启较低半球为纯色:关闭天光的反射下半是黑的,设置 较低半球为纯色 关闭,就不黑了。创建PostProcessVolume,后处理范围:无限,全局光照方法:屏幕空间(测试版),反射方法:屏幕空间。镜子前面放一根自发光柱子在镜子(颜色1,金属度1,粗糙度0)前放一根自发光柱子。光柱在屏幕空间内,镜子中的光柱柱子在屏幕空间内的时候,镜子上会有它的反射。光柱离开屏幕空间,镜子中的光柱如果屏幕空间内没有了自发光柱子,那反射就不会再在镜子上体现。屏幕空间反射的效果屏幕空间反射质量低的时候会有严重的拖影,质量0,拖影大质量100,拖影小可以在后处理体积中设置ScreenSpaceReflection。反射捕获探针构建反射捕获放置球体和盒体两种反射捕获,覆盖镜子和光柱,构建>构建反射捕获。镜子上捕获盒范围内多了两种反射,即使光柱不在屏幕范围也有反射捕获的反射。球体反射盒体反射两种形态的反射根据体现反射材质的物体造型和所处环境情况选用。越多的反射探针,越能细致地在各个物体上体现正确丰富的反射内容。反射捕获只能在游戏会话之外进行,捕获的反射是静态的。预捕获的反射贴图可以将环境进行预捕获储存下来,存成Cubemap,或者叫HDRI贴图。在需要体现这个环境反射的地方都使用这张贴图,可以节省反射捕获成本。当前玻璃球上只有屏幕空间反射,反射效果较差。场景捕获立方体创建场景捕获立方体,在纹理目标处选择新建立方体渲染目标。选择一个保存这个捕获Cubemap的储存路径,保存了之后,就开始实时捕获了。实时捕获中的Cubumap打开这张Cubemap,可以调整生成的尺寸等等。捕获是实时的,可以调整场景内的位置和捕获的内容,确定后导出这张Cubemap,再导回引擎使用。将Cubemap使用在反射内容上场景捕获2D也可以通过捕获2D的画面,来模拟监视器画面。捕获2D的操作方法与Cubemap捕获一样。场景捕获2D捕获2D但是它是一个平面2D的贴图,没有深度空间。【网格体距离场】 Mesh Distance Fields项目设置中打开 生成网格体距离场网格体距离场MDF,可用于实时计算动态的全局光影、AO和粒子碰撞等。相比屏幕空间光照、AO的实时计算,MDF不止屏幕空间,所以计算更为全面准确,但开销也更大。网格体表面与空间的距离信息网格体的 SDF有向距离场(Signed Distance Field),网格体外的点计为正,内的点计为负。储存在体积纹理Volume Texture中,用以其它效果计算的调用。距离场是预生成的,不会在运行时改变,所以只有静态和固定模型会有距离场。距离场有两种:全局距离场、网格体距离场。全局距离场网格体距离场全局距离场是分辨率较低的距离场,可用于所有物体的粗略实时计算。网格体距离场分辨率高的时候,计算更为准确,开销也会增大。距离场环境光遮蔽(Distance Field Ambient Occlusion)(DFAO)可以看到场景里其实有个小人,它是骨骼网格体,是可移动的,并没有网格体距离场。例如:距离场环境光遮蔽(DFAO),可以在 视口显示>可视化 中检视,可移动的天光细节中可以调节。如果距离场分辨率不足,包括DFAO这些效果就会有错误。距离场分辨率静态网格编辑器中设置距离场在静态网格体中可以增大距离场网格体的分辨率,更改完成后点击 应用改动。【Lumen】全局光照和反射UE5的特性功能,卤闷。软件光线追踪的实时全局光照与反射系统,在硬件光线追踪可以达到更高的品质。Lumen远场追踪全局光照显卡要求最低NVIDIA GeForce GTX-1070,硬件光追要求RTX-2000系列/RX-6000系列以上显卡。在5.3这个版本,只支持PC和主机端,移动端是不支持的。Lumen是实时渲染的,全动态的全局光照和反射系统,具有无限次数的反弹以及间接高光反射效果。Lumen的全局光照取代了屏幕空间全局光照(SSGI)和距离场环境光遮蔽(DFAO)。Lumen的反射取代了屏幕空间反射。项目设置中设置默认全局光照与反射相比之前的屏幕空间渲染,Lumen基于距离场网格进行软件光线追踪Software Ray Tracing运算,光线追踪技术计算了光照在网格间的直接、间接、反射、穿透等光路,比屏幕空间渲染的效果更准确好看,也更消耗性能。Lumen直接光照与间接光照、环境光遮蔽Lumen反射打开生成网格网格体距离场Lumen全局光照的软件光追需要打开生成网格体距离场。打开后,Lumen的软件计算光线追踪将可以基于网格体距离场实时运算光照。是全动态的,静态的Actor也会当做动态的来渲染。项目设置-渲染-Lumen相关软件光线追踪模式:细节追踪(Detail Tracing) :追踪单个网格体的有向距离场以获得最高质量。前两米用于获得准确度,而对此距离之外的每道光线则使用全局距离场。全局追踪(Global Tracing): 仅对每道光线进行全局距离场追踪,以获得最快的追踪速度。【抗锯齿】了解个意思,知道会消耗什么得到什么就行。低分辨率下像素密度不足时高反差边缘产生的锯齿、模糊、消失和闪烁问题。提升分辨率可以缓解,但例如远距离、斜角度的视角下,还是会产生不自然的视觉效果。ue5的抗锯齿选项UE 5.3.1 里有的抗锯齿方法是:快速模拟抗锯齿(Fast Approximately -Aliasing,简称FXAA)临时抗锯齿(Temporal Anti-Aliasing,简称TAA)多重采样抗锯齿(Multi-Sample Anti-Aliasing,简称MSAA)临时超分辨率(Temporal Super Resolution,简称TSR)FXAA快速模拟抗锯齿(Fast Approximately -Aliasing)快速、近似、抗锯齿。简单无脑地模糊边缘,耗费低,但抽象。FXAA找到颜色差别大的边缘,边缘的像素做近似扩散,就是模糊边缘。相似的颜色会被填到附近,以达到抗锯齿的目的。这个视频里有一些效果。FXAA开关对比FXAA开关对比观感会糊。差不多是那意思,近似嘛,你就说有没有缓解锯齿吧。它可以配合其它抗锯齿方式使用,给低性能设备带来更低的消耗和更好的效果。MSAA多重采样抗锯齿(Multi-Sample Anti-Aliasing)是在 超采样抗锯齿(Supersampling Anti-Aliasing,简称SSAA)基础上的改良方法。超采样抗锯齿SSAA超采样是先渲染超当前分辨率的图像,采样所有像素色值,再降回当前分辨率,将多个像素的色值平均,分配给单个像素。因为要超分辨率和低分辨率重复渲染,性能消耗极大。MSAA的多重采样MSAA多重采样是采样单帧内一个像素内的多个采样点,检查渲染目标颜色覆盖多少个采样点,按比例计算色值。算就行了,不用真的渲染,只用渲染一次低分辨率,性能消耗低一些。采样点数可以是2X、4X、8X,越多采样点越精确,抗锯齿效果越好。2x MSAA+FXAA对于静帧时MSAA表现很好,但如果物体移动等画面变化,会出现卡顿闪烁。加之,MSAA高采样会降低帧数,低采样加上FXAA做一点模糊,可以达到更好的观感。MSAA采样率调低,再加FXAA,观感近似,性能消耗更低,获得更高的帧数。不同设置下的CSGO帧数表现再加上动态模糊,低帧率和低分辨率也可以有低锯齿不卡顿不闪烁的观感。但是如果模糊的话,竞技时动态细节会损失,动态视力会受到影响。CMAA2与MSAA对比CS2中,FXAA被替换成了CMAA保守形态抗锯齿2.0(Constellation Mapping-based Anti Aliasing),与快速近似抗锯齿 (FXAA) 相比,CMAA2 提供了同样好或更好的抗锯齿,同时在大致相似的性能下保留了更多的输入图像清晰度。英特尔官方的效果对比图可以理解为FXAA的升级版。COD中的SMAA设置COD采用的是 子像素增强抗锯齿(Enhanced Subpixel Morphological,简称SMAA),SMAA 与 FXAA类似,性能消耗小,但是相比FXAA更清晰。TAA临时抗锯齿(Temporal Anti-Aliasing)或者叫时域抗锯齿,前面FXAA和MSAA在多帧画面大幅度变化时,都会不同程度的模糊、锐度对比度降低。TAA是以多帧画面进行采样,不做模糊,也不只采样单帧。TAATAA会预渲染前后多帧,然后对比前后帧颜色内容,计算填充高反差边缘锯齿附近的颜色。前后帧对比溯源采样多帧对比前后颜色,对颜色位置溯源判断,将前一帧的颜色正确渲染为后一帧的颜色,消除帧残影。它的问题就是会有帧延迟,和难免的帧残影。TSR临时超分辨率(Temporal Super Resolution)或者叫 时域超级分辨率,在输入分辨率低至1080p的情况下,渲染帧接近原生4K的质量。TSR它将一些开销大的渲染计算分摊到了许多帧。可以理解为SSAA超采样+TAA多帧采样。TSR开关对比采样多帧溯源更精确,相比于采用虚幻引擎4的默认时间抗锯齿(TAA)方法:TSR表现下的高频率背景上的可见"鬼影"瑕疵更少,减少高复杂性几何体频闪。TSR渲染链在渲染链中,TSR在景深之后发生,后续所有内容都会进行分辨率修改。UE5编辑器里这四种对比之下,TSR观感更好,锯齿闪烁少,也更清晰,但移动时和TAA一样有残影。【纹理过滤】三维模型纹理在渲染时,根据UV映射对应的纹理,绘制到模型在屏幕中的位置,在距离前后移动,纹理分辨率改变时,纹理绘出现闪烁和过锐。双线性过滤双线性过滤提取映射点附近四个像素混合进行线性插值,称为双线性过滤,可以缓解前后移动时纹理闪烁的问题。但如果距离过远,还是会出现闪烁的问题。远距离的闪烁与摩尔纹在1个单位像素里绘制多个单位像素,运动时就会闪烁,格栅样式纹理与显示分辨率栅格频率相似时还会出现摩尔纹。Mip-mapping 纹理映射贴图(Multum in parvo-mapping)Mip-mapping后的远景纹理Mip-mapping可以根据距离显示更低分辨率的纹理,缓解闪烁、摩尔纹等问题。Mip生成设置近距离采用高分辨率,在远距离采用更低分辨率的纹理贴图版本,也可以带来更好的性能表现。贴图尺寸规范Mipmap可以由引擎自动生成,前提要求规范贴图分辨率尺寸是2次幂。250x250分辨率,有mip如果不是二次幂,Mip-map的纹理过滤效果就会失效。HDRI贴图设置无Mip如果不希望纹理根据距离切换Mip-map,例如环境球HDRI贴图,则设置为无mip贴图。三线性过滤在切换Mip-map的时候还会出现不连贯的闪跳现象,纹理三线性过滤则可以解决这个问题。计算映射点前后两张Mip-map的像素得到一个插值,平滑过渡两张mip map的切换。各异相性过滤 Anisotropic Filtering在倾斜角度时,远处的纹理会模糊。贴图倾斜观察时,近大远小,远处的映射点的空间被压缩了。CS2中的三线性纹理过滤空间不一致但按照相同的映射方式的话,远处的纹理采样就会不足,变得模糊。“各异相性”的意思是,随着方向的改变而有所变化,在不同的方向上呈现出差异的性质。CS2中的各异相性纹理过滤各异相性映射纹理时,正交的映射点不变,随着观察角度的变大,映射点加倍。有的游戏可以按性能选择4X、8X、16X的倍率,远景加到足够多的映射点,便可以正确绘制清晰的纹理。COD中各向异性材质滤镜:高【细节级别LOD】同一个模型,不同细节等级为了性能优化,近处模型可以高细节,远处模型不需要高细节。LOD 0是最高最细节的等级,LOD 1、2、3等等逐级降低细节程度。同一个资产,不同细节的多套模型贴图一个设置好LOD的资产,可以根据距离,自动切换不同细节级别的模型和材质贴图。Bridge中的扫描资产在UE中用是可以免费商业使用的。可以下载Bridge软件,登录Epic账号即可下载资源。或是在引擎内使用Bridge插件,也是登录Epic账号下载。上:Bridge软件下载 下:Bridge插件下载引擎内Bridge插件下载的资产都是uasset,直接可以在引擎内调用。Bridge插件下载的是混合贴图,独立软件下载的是分通道贴图。打开Bridge插件后,资源管理器中右键,可以打开Quixel Bridge扫描模型资产库。Bridge插件中下载资产High Quality中包含8K和4K贴图,所有LOD模型和对应贴图引擎内下载的已经设置好了贴图的材质,包括可以绘制的植物等等UE资产。里面很多扫描的模型是设置好LOD的,可以直接添加到项目中。静态网格编辑器中的LOD设置在静态网格管理器中,左上角可以看到当前LOD等信息。这个模型的LOD 0是9309个三角面。拉远视角“当前屏幕大小”指的是在屏幕中的占比,距离越远,占比越小,屏幕大小这个值就越小。拉远到一定距离,“当前屏幕大小”的数值变小后,LOD的等级也被切换了。光照显示但远处更低的模型面数,获得了更好的性能表现。场景编辑器中检查LOD有没有生效,可以在左上角的着色选项中,场景编辑器中查看网格体LOD着色找到 着色细节层级>网格体LOD着色 ,不同LOD会以不同颜色体现。线框显示LOD的切换取决于是否明显能看出切换,包括过渡是否平滑、在不同距离设置足够的细节等级。做得好的话,应该拉不同距离看,看不出来不同层级区别。自动生成LOD将静态网格体设置LOD组,引擎可以自动为其生成LOD。设置静态网格体的LOD组给静态网格体设置一个LOD组,下方设置一个LOD数量。LOD组是根据所列类型的模型进行自动减面生成LOD的规则。勾开LOD选取器下方的自定义,可以看到该LOD组的LOD属性设置。简化设置简化设置中可以设置简化方式和简化程度,减面是自动的。模型布线不是平均的时候,可能会减得不对、破面、造型变化过于明显等问题,可以更改LOD组(即自动LOD规则),也可以考虑手动减面后导入LOD模型。LOD组的减面规则LOD组点击各组会自动给模型生成LOD,有各自的规则,引擎默认配置的分组在配置文件中列举:C:\UE_5.3\Engine\Config\ BaseEngine.ini
[StaticMeshLODSettings]各LOD组的LOD生成规则LevelArchitecture=(NumLODs=4, MaxNumStreamedLODs=8,bSupportLODStreaming=8,LightMapResolution=32, LODPercentTriangles=50, PixelError=12,SilhouetteImportance=4, Name=LOCTEXT("LevelArchitectureLOD","Level Architecture"))对应翻译关卡建筑(LOD组名)=(LOD数量=4,最大数量流送LOD=8,支持LOD流送=8,光照贴图分辨率=32,LOD三角面减面百分比=50,像素容错=12,轮廓重要性=4,命名=LOCTEXT(“组名LOD”,“组名”))手动设置LOD具有6级LOD的素材用Bridge软件下载一个具有LOD的资产,将资产导入UE中。先只导入LOD0的资产,设置好材质实例赋予模型。导入素材导入LOD在静态网格体编辑器>LOD设置中导入其它LOD模型,导入后LOD数量会自动更改。此时LOD会采用一个默认设置,如果没有特殊需求,这样基本就可以了。进一步的LOD设置,就是按需设置切换距离和切换材质贴图。默认情况下,自动计算LOD距离是打开的,会自动根据屏幕尺寸切换LOD。当前屏幕大小距离越远,屏幕大小越小。例如这个模型,在默认情况下,屏幕尺寸为1以下、0.75以上时,是LOD0。当缩放至0.75以下、0.5625以上时,切换到LOD1。如此类推。自定义LOD如果LOD切换距离过近或过远,希望更改切换LOD的距离,取消勾选自动计算LOD距离,勾起LOD选取器下的自定义,编辑各LOD的屏幕尺寸数值。根据平台设置屏幕尺寸屏幕尺寸可以根据平台设置不同的设定,跨平台运行时体现不同的LOD切换距离。例如手机屏幕小,主机屏幕大,可以为不同平台屏幕尺寸,对应设置LOD屏幕尺寸。有时候切换LOD的闪跳现象,不只是模型面数导致造型变化的问题。有时是贴图与模型顶点对应不上的问题,导入减面之后重新烘焙的贴图。然后可以给不同的LOD设置不同的材质贴图。导入并设置各LOD的材质实例各LOD赋予不同的材质在静态网格编辑器中的材质插槽新增材质,然后在各LOD的分段中设置对应的材质插槽。【Nanite】虚拟几何体UE5的特性功能,内奶特。虚拟几何体可以理解为一种全自动LOD,全自动体现所需网格数量,全自动剔除看不见的网格。可以导入超高面数的高精度模型,设置为Nanite就行。在5.3这个版本,只支持PC和主机端,移动端是不支持的。如果检视Nanite可视化没有反应,检查系统版本是否Win10 ver1909+,检查UE项目设置RHI是否DX12,更新显卡驱动。将静态网格体设置为Nanite导入模型时FBX选项中设置编译Nanite,或者在资源管理器中右键它勾起Nanite,或者在静态网格体编辑器中启用Nanite支持。启用Nanite支持的超高面数模型这个模型有将近四百万个三角面,启用Nanite支持。这个模型面数这么高,单是网格体就273mb这么大,导入都超久。即使是Nanite,显示三角面也是相当炸裂的往场景里放864个,如果作为普通mesh来说,有三十多亿面。编辑器偏好设置中,显示帧率和内存,打开帧率监控运行时几乎没有太多卡顿,只掉了10帧左右。相比没有摆这些,只掉了10帧左右看三角面密度太大了,看簇也是很过瘾的减面变化非常细致无感,不像LOD的切换容易被感知,Nanite根本看不出来mesh减面了,离得越远帧数越高。当然,模型面数这么高,对于内存容量和硬盘读写速度的考验还是很大的。【碰撞体积】用于阻挡玩家或物体的不可见包裹体模型,包裹在可视模型外,也可以单独存在作为空气墙。UE编辑器中是可以吸附放置物体的,但是如果没有碰撞体积就吸附不了,也没法刷草。还有只阻挡相机的碰撞体,让相机不穿模静态网格体碰撞体积根据性能开销和碰撞细致程度,分为简单和复杂两种,静态网格体编辑器中可以导入自定义的碰撞模型简单指的是在模型外包裹一个面数结构较低的碰撞体,真正的阻挡体积;复杂指的是跟模型本身面数结构一样或更细致的高面数碰撞体。可以自动生成球体、胶囊体、盒体的简单碰撞,还有几个预设细致度的简单碰撞生成。为模型生成简单碰撞简单碰撞会阻挡穿越,复杂碰撞阻挡视线扫描,也会影响例如角色的腿部IK。这个模型没有设置玩家碰撞,但角色还是踏上去了自动凸包碰撞自动凸包碰撞可以进一步细致地生成简单碰撞。碰撞复杂度也可以在碰撞复杂度里将可视模型自身设置为碰撞体,将复杂碰撞作为简单碰撞。自动生成的碰撞体性能开销性价比肯定是不如自定义的。简单碰撞的阻挡体积肯定不如复杂的细致,但是要按情况尽可能的简单。阻挡体积如果希望放置“空气墙”,则是使用 阻挡体积。如果只是希望不让摄像机穿过,则可以使用 摄像机阻挡体积。不同的碰撞类型具有不同的功能。碰撞方式具有3种:阻挡Blocking、重叠Overlapping、忽略Ignoring。不同的碰撞方式可以用来执行不同的相应,例如:阻挡:不让玩家或物体穿过。忽略:只阻挡视线扫描,玩家或物体可以穿过。重叠:当玩家或物体与其重叠时,执行一个程序。阻挡类型案例阻挡类型如上图,草:阻挡视线,忽略武器。防弹玻璃:忽略视线,阻挡武器。砖墙:阻挡视线,阻挡武器。用户场景案例情景举例如上图,草不阻挡玩家,阻挡视线,可以与玩家pawn重叠overlap,可以让玩家与草重叠时,执行草的动效与音效。砖墙则是既阻挡玩家pawn,也阻挡视线。检视关卡中的碰撞视口中检视碰撞在视口中有两种查看碰撞的视图模式:· 玩家碰撞:简单碰撞,阻挡穿越。· 可视性碰撞:复杂碰撞,阻挡视线。碰撞体颜色动态网格体在碰撞视图中显示贴图的基础颜色;地形是灰色;地形、静态网格体、动态网格体碰撞体积是粉红色,画刷是粉紫色。碰撞视图中的6种颜色静态网格体在视图中有:青蓝色、蓝紫色、玫红色、绿色。4种颜色代表其可动性:静态、固定、可移动、模拟物理。}
之前的教程都是很小范围的景观或者小镇局部,这对展示建筑场景而言是不足够的,做出来的话顶多选几个摄像机位置截图一下,这样的话有没有ue的实时渲染没啥区别,在max、blender中做也差不多,顶多就是制作过程中ue可以通过实时渲染观察效果,但搞了半天最后就是为几张静态的图。第一篇:基于官方字幕《[技术演讲]黑客帝国觉醒:创造世界》的总结matrix这个项目基于一个4x4平方公里的城市局部,其制作目的是要创建一个介于影视与游戏之间的实时大型场景,使用程序化工具和工作流让小团队能做大场景.用ue的MassAI生成行人和车流,MetaSounds生成环境声音。3d assets(资产/模型)matrix这个项目用了1000多个组件,每个由50000-500000个polygons组成。所有的资产都是nanites。尽可能使用megascan的资产。textures(纹理):纹理方面都使用4k分辨率,如果需要更高的像素,则把uv分割为udims,然后增加更多的4k纹理。所有的纹理都被转换为虚拟纹理(virtual textures),关于这个概念b站上有很多教程有介绍,目前基础还差很多类似这样的概念、技术分支需要逐个突破。建筑造型的参考:想要做一个充满高楼的都市,有标志性建筑以及许多变种,有细节。建筑有摩天大楼、商业、住宅。从旧金山、芝加哥和纽约获得灵感、参考。希望能够用一些建筑的上半部分与另一些技术的下半部分搭配也就是可以模块化。building、street props诸如遮阳篷、路牌、广告牌等等,点缀在建筑外立面。团队找了24个独立建筑,10个来自芝加哥、8个纽约、6个旧金山。以及一个megascan里的建筑资产来验证模块化建筑的可行性。Asset pipeline:确定了建筑和道具后,ue创建一个content library,这个内容库将为houdini的程序化城市生成器提供元数据。城市生成器产生的结果再回传到ue。在内容库最先添加的是建筑模型,由于有了nanite,可以将建筑模型的细节都做到位而不用考虑使用置换贴图做凹凸。建筑模型包括了瑕疵、破损、倒角线(cornice)、浮雕。当然模型不是一个完整的建筑单体,这样会限制整个城市的建筑多样性,需要考虑部件复用。建筑有许多、墙和窗适合被实例化,尽量使用实例化,这样会减少内存和显存的使用。把建筑像ui、网页设计那样切图分块,这在“UE5大型概念游戏环境场景创建”这个教学里也有提到过,这一步是构件模块化部件复用的指导。matrix分的依据是所在的高度相同的元素、部件为一级。说起来简单,但是到一些复杂建筑上可以看到切分层级十分多,不过也正是因为这些不同的模块使得建筑看起来丰富有趣而不单调乏味,实际上之前我写建筑装饰分析总结也是大致在用这种思路。在切分建筑时,作者团队发现即使一眼看上去很简单的建筑实际上也很复杂。现实中的建筑为了迎合地形与周边环境,它的四个面的特征的尺寸规格往往是不一样的(这里的意思应该是在说不同方向上的房型),远处看上去一样,但是尺寸规格不同。尽可能合并大小差不多的模块包括立柱、窗户。或者让模块的宽度翻倍。当确定了一种建筑风格所有的模块的形状后,使用自定义模块模板生成器来创建各模块的代理(低模)。模块模板生成器还能定义模块名称、尺寸、地面、变体(不太理解这里的地面、变体是什么意思,这里所谓的基于houdini的模块模板生成器是从houdini engine里搞出来的东西吗?)。我在sidefx官网上下载了unreal starter kit,导入了一个houdini hda文件启动houdini session,可以看到选中houdiniAssetActor后编辑面板里面有houdini的参数,不过这些参数和matrix项目中的不一样,暂时不清楚这个是在unreal中创建的还是说在houdini中创建的然后导入到ue(我偏向于后者)。所有用于搭建那24个独立建筑的模块化模板像joe garth教学中的asset zoo那样排开,这一套是用来完成其中一个建筑的。作者团队用这些模板作为起点,用来打造各种建筑风格(就是将他们排列组合),并构思程序化建筑生成器的原型。并且用这些模块化模板在maya中做高模,模板限定了基本形状和尺寸。由于每个建筑由上百个模块组成,为确保团队的一致性,他们开发了一个自定义导入器,批量导入建筑模块。团队说他们有个building look development的talk我暂时没找到。团队做的24个独立建筑包含了2333个部件,2558个纹理和5707个材质实例。团队利用kits存储模块和props的元数据,来生成BDF,它相当于生成建筑的工作台。模块的描述:举例corner模块,它又被分为这些类别:当所有模块都完成后,利用一套语法规则来把它们组合起来形成建筑外立面。它支持水平方向的排列、重复、循环、定义规格缩放,另外也可以对垂直方向做排列,其中蓝色、红色不可重复,紫色为楼顶、绿色可重复。作者团队手动在模块上添加了一些道具锚点,道具被注册到模块和分组,以便程序化生成,随机赋予道具锚点和道具。道具库的分类:前文一直提到的metadata(元数据),就是houdini engine中的parameters,在生成对象后会储存为其tags,目前暂时不知道houdini engine的使用方法,不清楚是如何转换的,bake 又是什么意思?是生成对象实例吗?坐标轴的位置也很重要,之前很多做建筑场景的教学都是手动在blender、maya、max里面将其置于左侧角落,这样方便吸附对齐各个模块。之前提及的形状语法、排列语法以json形式用houdini的building generator构造建筑。暂时没有找到这里所谓的程序化生成城市的讲座在哪儿。群落是指屋顶和街道上的一些道具,比如路灯、长椅等,这些是用ue5的新功能“level instance packed blueprint”实现的,我不知道这个是不是和joe garth的蓝图创建一个地块街区是同一个东西。这里提到artist-generated意味着这些组件的拼装是手动而非用语法规则生成的,这里还包含hero building,这个概念和ue artstation中提到的hero asset应该是一个意思,就是重点展示的资产对象,这些对象是场景中的焦点,包含更多的细节。值得注意的是biomes和hero buildings在整个城市的创建中也是通过houdini的city generator去排布的,并非手动指定位置。当城市生成后,点云(point cloud)会保存到alembic文件中,根据chatgpt介绍:Alembic文件是一种用于三维计算机图形的开放文件格式。它主要用于在不同的计算机图形软件之间交换场景、模型和动画数据。Alembic文件以.abc扩展名保存,它可以包含几何体、材质、动画和其他相关信息。Alembic文件的主要优势在于它是一个独立于特定软件的中间格式,可以方便地在不同的计算机图形软件之间进行数据传输和共享。这使得艺术家和技术人员能够使用自己喜欢的软件创建内容,并将其传输到其他软件中进行进一步的处理和渲染。Alembic文件可以包含复杂的几何体,如网格和曲面,以及这些几何体的拓扑结构和变形信息。它还可以捕捉动画数据,包括骨骼、变形器和相机的动画。此外,Alembic文件还可以保存与几何体和动画相关的其他属性和元数据。许多专业的计算机图形软件,如Autodesk Maya、Pixar RenderMan、SideFX Houdini等,都支持Alembic文件的导入和导出。这使得不同软件之间进行场景交换和协作变得更加容易,无论是在电影制作、电视动画、游戏开发还是其他领域。在matrix这个案例中,Alembic文件包含点信息和创建建筑、街道、碰撞物体所需的几何体。这里提到的open world工具主要有两大功能world partition和one file per actor,可能在下面这个视频里有针对性的介绍。初步来说这里面涉及level(关卡)相关的东西,根据位置动态加载actor(可能是考虑到性能?),作者说这样做就可以不用考虑子关卡的复杂逻辑(不懂)来控制场景中被激活的区域。one file per actor可以解耦actor和关卡,让多人同时编辑一个关卡。似乎这部分是用来方便团队协作用的。[功能介绍]UE5中的大世界:一个全新的(开放)世界(官方字幕)_哔哩哔哩_bilibili以下为chatgpt对ue中actor和instance概念的解释。在Unreal Engine中,Actor(角色)和Instance(实例)是两个不同的概念。Actor是Unreal Engine中的基本实体,代表游戏世界中的一个独立个体。它可以是可见物体(如角色、道具)或不可见的逻辑实体(如触发器、游戏规则等)。每个Actor都有自己的位置、旋转和缩放,并可以在游戏世界中自由移动和交互。Actor可以具有各种组件(Components),用于赋予其外观、行为和功能。Instance(实例)是指使用实例化技术复制并生成的具体实例。在Unreal Engine中,当需要在场景中生成多个相似的对象时,可以使用模型实例化技术(Model Instancing)来生成实例。这些实例共享相同的模型资源,但可以具有不同的位置、旋转和缩放。通过实例化,可以减少资源开销并提高性能。区别:Actor是一个基本概念,代表游戏世界中的独立实体,可以是可见物体或不可见的逻辑实体。Instance是指使用实例化技术生成的具体实例,用于减少资源开销和提高性能。Actor是一种通用概念,而Instance是一种特定的生成方式。Actor可以直接使用蓝图或代码进行创建和控制,而Instance是通过模型实例化技术生成的。一个Actor可以有多个Instance,每个Instance可以具有不同的位置、旋转和缩放。总之,Actor是表示游戏世界中的独立实体的概念,而Instance是一种特定的生成方式,用于复制和生成具体的实例。作者说101959actor还不包含交通人流,这里提到的instances包括所有建筑模块、道具、道路、交通,我理解为一个建筑是一个actor,而它包含了许多的建筑模块instances。暂时不清楚有了nanite为什么还有HLOD的概念,以下是chatgpt对HLOD的解释。在Unreal Engine中,HLOD是"Hierarchical Level of Detail"(分层细节级别)的缩写,它是一种用于优化大型场景和复杂模型的技术。HLOD系统通过在远处使用较低的细节级别并逐渐增加细节来实现更高的性能和更好的渲染效果。HLOD的工作原理是将场景或模型分解成多个层次结构,每个层次结构都具有不同的细节级别。在远处观察场景时,HLOD系统会选择使用较低细节级别的代表性网格来代替原始高细节网格。这样可以减少渲染和计算的负载,并提高帧率。当玩家接近一个HLOD对象时,系统会逐渐替换为更高细节级别的网格,以提供更多的细节和更真实的外观。这种逐级细化的过程可以通过使用静态网格合并技术来实现,将多个网格合并为一个单一的网格,从而进一步减少渲染调用。通过使用HLOD,开发人员可以在不牺牲画面质量的情况下处理更大规模和复杂度的场景,同时保持较高的性能和流畅的游戏体验。这对于开发开放世界游戏或需要处理大量细节的环境非常有用。场景的加载控制在方圆128米的范围内。HLOD0用蓝色表示,范围是方圆768米,在128-768米范围内都是HLOD层级的。HLOD1为超过方圆768米范围的区域,以红色表示。作者说在了解open world的机制后就可以开始设定rule processor来生成城市。可以发现rule processeor是window菜单下的一个选项卡,但是经查阅,这个功能在ue中并不存在,插件也没有,在官方论坛上目前说是city sample这个项目专属的。关于city sample创建点云、生成城市、导入ue,在中文网络中有5篇系列介绍,可以说是手把手带的。《WorkWithUE5》CitySampleZoneGraph剖析系列另外在youtube上有一个系列的视频教学关于如何利用city sample使用houdini生成城市.Generate
your custom City With Houdini and Unreal Engine 5根据中文的那篇文字教程来看生成一次城市要“睡一觉”,可见其中的计算非常复杂。在制作团队的介绍中,一共生成了50座城市,我这里推断他们是反复修正用于这个项目的城市,这也验证了文字教程所言非虚,不过他马上又补充每天会生成几次城市,这似乎让结论又有了偏差,只能到时候做了再说。building look development:在视频27分左右貌似就是前文我说没找到的building look development.项目要求近景、行人视角、远景都看起来很好,团队考察了18个建筑参考,并将他们拆解成建筑模块部件。一个建筑的外立面可以被拆解成70-500左右的部件数量。这18个建筑最后拆解出了2333个建筑部件,也就是说要对2333个部件做着色(纹理、贴图、材质)。这里还提到了灯光校准,暂时跳过。重点好像是hdri环境贴图和后期体积处理(postvolumnprocess).当我们开发一个模型外观时可以把他分解成3个独立步骤。base substance从quixel megascan的一个tiling textures库中获取,移除了部分重复,增加了一些特征。导出4k的rgba albedo(rgb) normal(rgb) aormd(rgba这个我猜是ao roughness metalness displacement)贴图。作者接着说将这些贴图作为虚拟流纹理(virtual streaming textures)回传到ue,这个概念前文提到过,暂时不清楚。使用virtual streaming textures可以避免内存中纹理数的限制,接着通过这些贴图创建ue的材质。这里提到一个概念Pixel Inspector(像素检查器),作者认为虽然离完成版的材质还有很多工作要做但在这一阶段要时刻用Pixel Inspector来校准颜色,以下是chatgpt的介绍:在Unreal Engine中,Pixel Inspector(像素检查器)是一种用于分析和调试像素级别信息的工具。它提供了一种可视化方式,可以查看渲染过程中每个像素的详细信息,包括颜色、深度、法线等。Pixel Inspector可以帮助开发人员识别渲染问题、优化渲染性能以及进行纹理和材质调试。使用Pixel Inspector,您可以选择在编辑器或游戏运行时查看像素数据。以下是Pixel Inspector的一些常见用途:颜色调试:您可以选择检查屏幕上的特定像素,并查看其RGB颜色值,从而分析渲染结果是否符合预期。这对于检查材质的颜色输出或光照计算等方面非常有用。深度调试:您可以查看像素的深度值,了解哪些物体位于其他物体之前或之后。这对于检查深度缓冲区的正确性以及遮挡关系非常有用。法线调试:您可以查看像素的表面法线信息,以确保光照计算和着色器的法线变换正确无误。纹理调试:您可以查看像素采样的纹理信息,以便识别纹理映射问题、纹理采样错误或纹理过滤等。Pixel Inspector可以在Unreal Engine的Viewport(视口)中使用,通过选择相应的模式或工具栏选项来激活。具体的操作方式可能会根据不同的Unreal Engine版本而有所不同。使用Pixel Inspector,开发人员可以更深入地分析渲染结果,并进行调试和优化,以获得更好的图形效果和性能。manufacturing阶段例如砂浆线和砖块颜色变化可以从两个砖块贴图中提取。block variation给每一个砖块不同的数值,砂浆线指示砖块是如何砌成的。除此之外还需要一些缝隙遮罩来达到水渍、风化的效果。这些会在第三阶段环境影响建筑表面上进一步提及。把这些贴图组合在一起,不清楚bc7纹理压缩是什么东西,这里应该是4通道混合。不得不说技术虽然不断在更新,但妄想上来就可以很舒服的用新技术是不可能的,这其中必然包含了许多以往的工作流、老技术,毫无基础直接啃这个系列,光这个视频我从昨晚到现在几乎一天了都只推进了半个小时,可见其信息量之大。作者选取了5种石块和3种砖块纹理贴图,提问要如何保存这些图案,我不明白是什么意思,推测是同一个模块上要混用这些纹理,因此要将这些纹理合并起来,于是提到了udim 纹理的概念。每个图案有10个变种把它放在2x5的格子里。每个砖边缘都用相同的砖块使他们之间的衔接是无缝、和谐的。进一步,作者把5个图案各自的10个变种一起放到udim里。接着处理模型的uv,作者说这里用到的方法是trim sheet,这应该是个业内的术语,在youtube上搜有一堆教学.将模块unwrap之后平铺在巨大的uv island上。目标是使模块的表面纹理具备细节,可以和多种砖块无缝衔接。之前似乎也看过几个类似的视频,到时候操作的时候见招拆招吧,目前对建筑面片上面的uv盖如何展,浮雕又怎么处理都是一头雾水。添加函数来使用砖块图案的udim纹理,这里似乎并不是说材质函数。这里提到了perinstancerandom随机挑选不同的udim排列移除变化和重复(我不明白为什么移除变化?),参考chatgpt:"PerInstanceRandom" 是 Unreal Engine 中的一个材质节点(Material Node),用于在每个实例化对象之间生成随机数值。当在场景中使用实例化技术(例如实例化静态网格组件)生成多个实例化对象时,每个实例的材质可以使用 "PerInstanceRandom" 节点来生成独立的随机值。这些随机值可以用于实现一些效果,如随机化颜色、位置、旋转等,使每个实例化对象具有一定的差异性。"PerInstanceRandom" 节点生成的随机数基于每个实例的唯一 ID(Instance ID)和材质实例的随机种子。这确保了相同实例多次渲染时生成的随机数值是一致的。您可以将 "PerInstanceRandom" 节点与其他材质节点(如颜色节点、变换节点)结合使用,以实现更多样化和随机化的效果。使用 "PerInstanceRandom" 节点,您可以在材质中为每个实例化对象创建一些独特的变化,以增加视觉上的多样性和细节。这对于创建自然环境中的多样化元素(如植被、岩石等)或随机化场景中的物体(如杂草、碎石等)非常有用。最后用了4个udim virtual texture解决了2000多个建筑部件的石块、砖块建造纹理。对于环境侵蚀表面,作者说添加另一套uv来应用环境贴图,通过烘焙生成ao、curvature、position贴图,再把他们打包起来做成一个rgba贴图?每个模块都有自己的环境侵蚀贴图,作者说这些都可以自动生成而不用艺术家去做,不知道是咋搞的,纹理贴图材质这块还欠缺很多。}

我要回帖

更多关于 图像渲染引擎有哪几种 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信