CG小苏 发表于 2024-5-11 23:41:23

虚幻引擎5!制作卡通角色材质渲染 4 部分流程分享!-丨CG小苏

“CG小苏 ”再点右上角“ ...”最后设为星标 ★
-------------------------------------- | CG小苏 | 分享最前沿的CG技术-游戏开发-CG自媒体平台 |

大家好!!!我是 Spark Creative Co., Ltd. 的小林。从这次开始,我们将通过三个部分来介绍使用引擎修改的单元着色。文章目录
什么是引擎改装?优点过失改装引擎是最后的手段在你开始之前使用 DCC 工具和 Unlit 创建所需的外观Unlit 中难以表达的事物添加着色模型操作确认*根据EULA(Unreal® Engine最终用户许可协议)第4条a.的内容,更改了发布代码的方式.
什么是引擎改装?引擎修改是重写虚幻引擎Engine文件夹中包含的源代码和着色器以扩展现有功能、实现原有功能或进行修改的行为。

您通常使用的虚幻引擎是从 Epic Games Launcher 或存储库获取的,称为vanilla ,是指其纯净或原始状态。优点从第1部分发布的图片中可以看到,引擎修改是极端的,只要资源和技术能力允许,任何表达都可以实现。

▲系列第一部分介绍的三种cel Shader实现方法过失缺点是相对于另外一个游戏引擎Unity来说,实现过程过于复杂,为了达到想要的表达效果,不值得。除了复杂之外,网上的资料也不如图纸和材料那么多,而且即使能找到相关资料,根据引擎版本的不同,兼容性也可能会丧失,所以这并不是每个人都可以完成的任务。可以轻松做到。目前没有这种情况。另一个问题是构建源代码和编译着色器需要很长时间。而唯一的解决办法就是加强构建机器,这是一个财政困难。

▲目前的情况是,构建时间随着每个引擎版本的更新而增加。

▲编译着色器改装发动机是最后的手段虽然与“利用发动机改装”的内容相悖,但考虑到维护成本,应避免从一开始就接近发动机改装。最好从最简单的项目实现开始,然后是比较困难的插件实现和扩展,最后是引擎修改。这将是理想的情况,但在渲染方面,很多情况下您别无选择,只能从一开始就修改引擎。
与本系列的主题“Toon Expression”相关,Unreal Engine是一款擅长写实表达的游戏引擎,从最近的Lumen、Nanite、Substrate等更新趋势中你可能已经猜到了。另一方面,当涉及到单元格样式表达式时,标准支持和功能很弱或不兼容。
你可以克服部分与你的精神不兼容的问题,但诸如缺乏绘制路径之类的根本问题无法解决,除非修改引擎。
如果您对外观很挑剔,通过修改添加功能可能比在现有功能的框架内工作更容易。
在你开始之前
现在我们已经解释了发动机改装的概念,我们可以继续实施。以下是先决条件。・虚幻引擎 5.2.1
・支持延迟渲染・不支持前向渲染・兼容 PC・PS4、PS5 和 Xbox 应该可以工作,但未经测试・不支持移动设备和 Switch・不支持 Lumen、Substrate・Stat 与分析器的兼容性as 和 PixelInspector 被省略。使用 DCC 工具和 Unlit 创建所需的外观首先,使用 DCC 工具或 Unlit 创建所需的外观。在 Unlit 中编写更容易,因为将实现移植到引擎端着色器时它通常是兼容的。
如果使用DCC工具实现了最好的外观,那么就需要工程师来整合它,所以我希望你尽力而为并考虑一下。
这次,我想顺便接触一下 Unlit 的一些功能,所以我会用 Unlit 来创建它。遮荫

使用smoothstep使法线方向和光线方向的内积更接近二进制值。通过使用 smoothstep,您可以创建明暗边界稍微模糊的外观。如果你想让它完全二进制化,你可以通过用step节点替换smoothstep节点来实现。
基础颜色(浅色)和阴影颜色(阴影颜色)


使用“底色”绘制受光照射的区域,使用“阴影颜色”绘制未受光照射或有阴影的区域。这是一件简单的事情,但由于您无法在 UE 中指定阴影颜色,因此它是一个重要的元素。在除 Unlit 之外的着色模型中,阴影颜色由天空光颜色(通常是环境颜色)、基色和漫反射颜色相乘的结果确定.

▲阴影颜色取决于天空光颜色(亮度)的影响

▲阴影颜色取决于Sky Light Color(颜色)的影响虽然它会自动计算颜色,但它的缺点是无法产生艺术家想要的色调。这次,我们将尝试通过指定阴影颜色和修改天光处理来解决这些缺点。镜面反射

应用于头发和衣服的高光表达。通过将BRDF计算结果传递给smoothstep,我们故意降低真实感,使其看起来像卡通表情。
BRDF中使用的函数在BRDF.ush中进行了总结,所以如果你有兴趣的话,看一下可能会很有趣。
头发亮点,天使戒指。


虚幻引擎5!制作卡通角色材质渲染2 部分流程分享!-丨CG小苏中介绍的天使环表达式。通过伪转移球形的法线,您可以创建更漂亮的圆形,但由于调整需要时间,因此这次我们将使用顶点法线进行粗略的表示。脸部阴影

这是一种任意表现脸部阴影形状的方法。在第 2 部分中,我们使用法线传输来调整阴影,但这次我们将使用不同的方法,称为“面部阴影”。粗略地解释一下,我们计算脸部的前向量和左向量与光向量的内积。这允许您计算倾斜度。
之后,就可以像NoL一样,参考Face ShadowTexture(写入了阴影阈值的纹理)来绘制阴影。

脸部阴影纹理顺便说一句,我觉得Shade是一个比Shadow更合适的名称,因为它是使用内积计算来计算的,但常用的函数名称是Face Shadow,所以我使用了它。边缘光

一般来说,这种方法是在有逆光的情况下提亮轮廓,但这次我们提亮轮廓并不局限于逆光。卡通表情的明暗层次很窄,因此图像看起来很平坦。通过不断地用边缘光照射它,可以欺骗它,但它是在添加平面感。
大纲


对于轮廓线,请使用您喜欢的方法,无论是第2部分介绍的背面方法还是第3部分介绍的后处理方法.虚幻引擎5!制作卡通角色材质渲染2 部分流程分享!-丨CG小苏虚幻引擎5!制作卡通角色材质渲染 3 部分流程分享!-丨CG小苏
Unlit 中难以表达的根据以上因素调整外观。根据UE的照明规范,第二行的整体亮度是正确的,但第一行也有清晰的对比度,这是我喜欢的,所以我将其作为变体包括在内。



UE 是唯一一家可以仅使用 Unlit 创建此类图像的公司。虽然UE强调真实表达,但它是优秀的游戏引擎之一。像这样的表达式很容易创建。有些表达方式和事情是Unlit不擅长或做不到的。下面我将介绍其中的一些内容,如果您能通过它们了解发动机改装的优点和必要性,我将非常高兴。不亮灯定时Unlit 和其他着色模型的光照时序不同。

除了 Unlit 之外,照明所需的参数被写入称为 Base Pass 的地方的称为 GBuffer 的专用缓冲区中,并且照明是在称为 Lights 的地方完成的。另一方面,Unlit 使用 Base Pass 进行光照,并且仅将着色模型 ID 和位标志写入 GBuffer,而用零值填充其他元素。
这表明Unlit虽然是延迟渲染,但它以类似前向的绘制处理方式进行操作。也正因为如此,有很多事情做不到,也有很多事情很难做。这种规范是万恶之源。
影子不落下Unlit 可以投射自己的阴影,但 Unlit 本身不受阴影影响。在图像中,右侧附着 Unlit 的球体的阴影正在下落,但您可以看到它并没有受到后面柱子阴影的影响。

阴影可以通过引用称为“阴影贴图”的纹理来投射,该纹理包含照明期间的阴影信息。

写入阴影信息的Shadow Map

使用阴影贴图投射阴影创建阴影贴图需要两条深度信息:场景深度(从主相机看到的深度)和阴影深度(从灯光看到的深度).

从主摄像头看到的景深,Scene Depth

从光处看到的深度,阴影深度生成时机根据 PrePass 等设置而有所不同,但在 UE 的初始设置中,Scene Depth 在 Base Pass 处创建,Shadow Depths 在 Base Pass 之后创建。然后,根据此深度信息,在照明之前创建阴影贴图。

可视化场景深度、阴影深度和阴影贴图的生成时序在 Unlit 照明的基础通道中,尚未创建阴影深度,因此无法投射阴影。没有点光源或聚光灯照射在它上面.未点亮的灯不能用定向光以外的任何光照亮。

由于延迟渲染,每个灯光都会创建并点亮一次通道。

照明时序可视化照明需要有关光参数和光照射位置的信息。例如,阴影计算中使用的法线,以及确定纹理的金属度和粗糙度。这些法线、金属等都存储在 GBuffer 中。Unlit 不应该执行 Base Pass 之外的任何操作,因此 GBuffer 除了着色模型 ID 之外都用零填充。我认为如果至少存储法线就好了,但即使法线也可以用零填充。

左边的球是亮着的,右边的球是不亮的。GBuffer的写入仅在Unlit部分为空*选择轮廓颜色为GBufferA(我不在乎名称不同)顺便说一句,分配给 Unlit 的着色模型 ID 是零,而 Unlit 中基本上没有设置其余的位标志,因此很少会写除零之外的任何内容。这样,即使你尝试对其进行光照,目标上的信息都是空的,因此你无法对其进行光照。
难以表达反思
Unlit 无法执行反射表达,无论是实时还是通过烘焙。

光线可以反射

Unlit 中无法进行反射表达原因是即使在尝试计算反射时,材质信息也是空的,就像它不能应用于除定向光之外的任何东西一样。如果您是烘焙而不是实时,似乎可以使用 Base Pass 进行计算,但它不作为标准支持,因此您需要设置自己的节点。无法在后处理中创建复杂表达式第3部分中介绍的复杂后处理基于Unlit无法实现。

再一次,后处理中复杂表达式所需的 GBuffer 信息完全不存在,就像不可能应用除定向光之外的任何东西一样。可以仅将表达所需的元素写入您自己的渲染目标并引用它们,但考虑到负载,这被排除在选项之外。你需要安静并使用Unlit以外的东西,或者修改引擎并写入GBuffer。简化图表我总结一下,方便大家快速查看。

添加着色模型介绍很长,但让我们进入主题:发动机改装。添加专用的着色模型以合并您之前创建的外观。可能有点晚了,但是着色模型就是 Unity 中的着色器。在Unity中,您可以通过右键单击和左键单击轻松创建一些东西,而在UE中您需要经历各种过程。要添加的着色模型的名称是ToonLit,位于 Lit 和 Unlit 之后。发动机改装规则修改引擎时,包含注释是一条隐含规则。但是,描述没有固定的格式,因此它会根据您所在的项目和公司而有所不同。我希望您能够理解下面代码中的注释,作为其个性的一部分。//// cgw @kobayashi-arata 2023/09/16 ////#if 0    // 改造前のコード    // 改造前のコードを全部残すことで、エンジンのバージョンアップ時、差分比較が簡単になります。    autoFlags=0;#else    // 改造後のコード    autoFlags=1;#endif//// cgw @kobayashi-arata 2023/09/16 //// //// cgw @kobayashi-arata 2023/09/16 ////    // 改造前のコードを編集することなく、新しいコードを挿入するだけの場合は、囲いません。    autoNewCode=...;//// cgw @kobayashi-arata 2023/09/16 ////
如何获得引擎关于如何获取存储库的官方指南很有帮助。https://www.unrealengine.com/ja/ue-on-github建议选择并获取任意版本的分支。不建议进行分支切换,因为分支太大,容易发生事故。最好尽量直接把文件放到根目录下,避免惹Git生气。

如果能成功获取的话,大约是2.0到3.0GB。你可能觉得不多,但这仍然是第一种形式。接下来,点击Setup.bat ,然后点击GenerateProjectFiles.bat,然后再次构建,它就会变成一个怪物。

图片是5.3,但也大致相同要构建,请将 UE5 设置为启动项目,选择 Development Editor,然后重建解决方案。仅第一次需要重建解决方案。基本上,第一次之后就不需要构建解决方案了。当然,如果您在UE5以外的项目下编辑文件并希望反映结果,则情况有所不同。

构建所需时间取决于开发环境和引擎版本,但第一次至少需要一个小时。我的建议是在出门前将其放入。构建成功完成后,您将看到常见项目的模板。随意选择模板没有问题,但是需要注意项目的放置位置。基本上就是放在引擎所在的目录下。你可以把它放在外面,但是穿过它会很痛苦,所以最好不要这样做。

如果您基于模板创建项目,然后返回 Visual Studio,系统将提示您检测文件更改并选择“重新加载”

当您选择它时,一个项目将被添加到解决方案资源管理器中,因此通过将其设置为启动项目,您将能够安全地启动基于您自己的引擎的项目。

如果误选了【忽略】,点击GenerateProjectFiles.bat任意更新解决方案信息都没有问题




1                                  END
声明:本文章中所有的图片和视频都归原作者所有,仅供大家参考学习和交流,不作商业用途,侵删。如果你喜欢这篇文章,欢迎转发!谢谢!更多学习和交流可扫描下方二维码哦!

页: [1]
查看完整版本: 虚幻引擎5!制作卡通角色材质渲染 4 部分流程分享!-丨CG小苏