虚幻引擎5!数字艺术家灯光背后的科学基础知识的深入文章分享!
您需要 登录 才可以下载或查看,没有账号?注册
x
CG小苏 ”再点右上角“ ...”最后设为星标 ★
-------------------------------------- | CG小苏 | 分享最前沿的CG技术-游戏开发-CG自媒体平台 |

作者: Arthur Tasquin 作者网站:https://www.artstation.com/artwork/LRK6zP

Arthur Tasquin 与我们分享了一篇关于数字艺术家照明背后的科学基础知识的深入文章,讨论了它在虚幻引擎中的应用,并介绍了一套自定义工具集以简化物理照明过程。
介绍
大家好,我叫 Arthur Tasquin,是 VFX 行业的首席虚幻艺术家。我对世界构建和环境设计充满热情,闲暇时,我喜欢在虚幻引擎中创建视觉效果。我还开始撰写有关电影和视频游戏中的视觉理论的文章,以便更好地了解是什么让视觉变得有趣。今天,我将深入探讨我上一个项目的制作过程以及我对照明背后科学的理解。
Arthur Tasquin 提出了 Look Up Doodles 项目,这是一系列致力于研究物理照明及其背后科学的场景。为了进一步了解照明及其背后的科学原理,3D 艺术家 Arthur Tasquin 创建了一系列渲染图,以不同的风格和天气条件呈现同一个城市场景。该项目包含七个变体,探索逼真且风格化的场景:日落、早晨、阴天、蓝色时刻、恐怖、霓虹灯和雾蒙蒙:
此外,这些图片中的小家伙也显得很放松,让学习过程变得更加有趣:
https://80.lv/articles/realistic-stylized-lighting-studies-made-with-unreal-engine-5/
参考
这个项目始于我上班途中拍摄的几张照片。我总是喜欢在晨曦中欣赏屋顶。我喜欢阳光投射出的阴影,我知道我想在我的作品中描绘出这种景象。使用 Quixel Assets,我开始组装一个小场景,我意识到通过创建多个照明场景来改善照明对我来说是一个很好的机会。从我的照片中,我仍然需要找到要重现的情绪。第一个是Marcin Martynowski的这幅令人惊叹的阴天渲染图。我还发现了一些真正捕捉到我想要的灯光研究:Lucas Uny的《海边小镇的重光》或Ted Mebratu的作品。
https://www.artstation.com/artwork/29g1Oa
在整个研究过程中,我决定尝试 7 种不同的情绪:早晨、日落、阴天、蓝色时刻、恐怖、霓虹和雾蒙蒙。对于前 4 种场景,我的目标是采用一种现实主义的方法,以激发人们对更多了解照明物理的渴望。最后几种场景风格化且更具戏剧性,只是一种有趣的练习。该项目的目标首先是照明,所以我不想花时间从头开始创建任何资产。为了实现这一点,我决定坚持一个特定的框架:大多数镜头都是低角度的,只关注建筑物的上部。通过隐藏街道,我让整个项目非常容易设置。
使用 Megascans 和我从 Marketplace 获得的Modular Seaside Town中的一些道具,我开始装饰场景。关卡实例在这方面非常有用,因为我可以在一栋建筑上工作并根据需要复制它,而不会使大纲过于拥挤。这是一个非常干净的工作流程,而且是迭代的:任何时候你想对关卡实例进行更改,它都会复制到场景中的每个其他实例上。
https://www.unrealengine.com/marketplace/en-US/product/modular-seaside-town
结构
如果不遵循正确的工作流程,处理七种照明情况可能会导致混乱。我本可以使用 World Partition 和数据层系统,但由于场景相对较小,而且我不打算与其他人在同一级别上工作,所以我使用了旧的子级别工作流程。如果您不了解它,这只是将场景划分为一组不同级别的一种方式:主场景称为持久场景,其子场景称为子场景。此技术的好处是,您有一个专门的窗口,专门用于照明场景,并且您可以通过蓝图或 Sequencer 来调整它们的可见性。[micxp_wxonkey]wxv_3531012781993345030[/micxp_wxonkey]由于每个光照场景都应具有相同的环境(略有调整),因此所有主要资产都包含在持久级别中。每个光照场景都有自己的子级别,我可以打开和关闭它们。 即使最终结果是图像,我通常也会使用 Level Sequencer 来迭代取景或灯光位置。它可以帮助我比较多个想法,并防止我迷失。在进行基于镜头的项目时,您总是希望根据场景来完善细节:窗户位置、遮光器、灯光位置、材料等等。关卡序列器的另一个很棒的功能是关卡可视性轨道。对于每个关卡序列器,您可以选择要隐藏的关卡和要加载的关卡。对我们来说,自动化此过程非常重要,以便在渲染阶段节省一些时间。您不想手动编辑这类内容,尤其是当您有很多变化时。
我在 Sequencer 中经常遇到的一个问题是无法在渲染帧时使它们不可见。有时,我不喜欢关卡实例的阴影形状,我想在特定镜头中禁用它,但对我来说唯一的解决方案是在关卡实例详细信息面板中完全删除与关卡的链接。
灯光
我从一开始就知道天空氛围不足以实现我在这个项目中想要实现的目标。我唯一一次使用它是通过超级动态天空来拍摄日落场景。该项目的其余部分主要依赖于 HDR 背景、屏幕空间雾、光反射器、流明和常规灯光。在搜索 HDR 时,我偶然发现了这个网站,它提供了很多免费的各种 HDR。
https://locationtextures.com/panoramas/results/search,free/?page=1对于照明本身,我非常喜欢矩形灯,除了日落和早晨场景中的定向光外,它几乎是我在这个项目中使用的唯一一种光。
我也大量使用了 Lumen,与我们拍摄电影的方式类似,我使用反光板来调节它。如果你不知道,反光板是我们用来反射光线(如果是白色)或吸收光线(如果是黑色)的织物。在我们的案例中,在局部空间中调低或提高流明非常有用。我经常使用它来使失焦的前景变暗,并将重点放在框架的主体上。在下面的图片中,您可以看到一个白色反射器反射光线,一个黑色反射器(也称为旗帜)减少了主体上的光线,这些都来自Studio Binder 的《电影照明终极指南》。
https://www.youtube.com/watch?v=r2nD_knsNrc
我在画框外使用简单元素的另一种方法是塑造太阳的阴影。事实证明,在早晨的心情下,这种方法非常有效,可以让我的照片更接近真实。雾通常在我的作品中扮演着重要角色。我非常喜欢《银翼杀手 2049》的拉斯维加斯风格,所以当我听说Screen Space Fog Scattering插件可以创建逼真的深雾效果时,我赶紧试用了一下,现在我已经离不开它了。
https://www.unrealengine.com/marketplace/en-US/product/screen-space-fog-scattering您可以使用一些控制台命令对其进行调整,但它通常开箱即用。以下是 SSFS 开启和关闭时的同一场景:
关于这项技术,我尝试使用光线追踪阴影,但效果并不好。阴影的质量与它带来的性能成本相比并不那么重要。将光线追踪阴影与 Nanite 结合时,一个常见问题是奇怪的阴影伪影,这是由于光线追踪使用 Nanite 的预览网格来投射阴影的方式造成的。网格和阴影之间存在这种不匹配,您可以使用以下控制台命令消除它:r.RayTracing.Nanite.Mode 1但要小心,因为此控制台命令可能会导致性能问题。
渲染
就像每个项目一样,这是一个迭代的问题。你尝试了一些东西,但它不起作用,所以你尝试了另一种方法并不断改进它,直到它起作用。对于 Look Up Doodles,我从构图到灯光本身做了大量的变化,让我可以尽可能多地进行实验,直到我对结果感到满意。
当您需要渲染同一场景的多个版本时,电影渲染队列非常有用。通过使用预设,我成功创建了一个即插即用的解决方案,可以使用所有良好的设置快速渲染出合适的氛围。第一步是根据所用技术创建设置预设:打开和关闭光线追踪阴影和反射。第二步是创建一个队列预设,链接到所有正确的序列器及其特定的预设设置,并进行一些调整。这非常强大,因为我只需加载一个预设,然后选择我想要渲染的场景。
我注意到,当前景失焦时,虚幻的景深可能会产生伪影。我尝试了一些控制台命令,但很快切换到路径跟踪,这大大改善了结果。不过,我只将它用于霓虹灯场景。
照明科学
照明可能是一个庞大的课题,特别是如果你了解其背后的科学原理。以下部分旨在让任何数字艺术家都能理解这个问题。我坚信,了解事物内部的运作方式可以提高结果的质量。 请记住,我不是科学家,本部分仅与想要掌握照明科学基础知识的数字艺术家相关。为了简单起见,我采取了一些不会影响引擎结果的捷径和近似值。但是,如果有人有更深的理解并想添加一些内容,我很乐意聊天!为什么首先要使用物理精确的数据?在数码相机中,曝光由 3 个参数定义:ISO(传感器对光的敏感度)、光圈(让光进入的直径有多大)和快门速度(传感器暴露在光线下的时间长度)。这些参数的组合称为 EV(曝光值),作为视觉设计师,您的工作就是根据场景的光线匹配正确的值。该图表 来自Studio Binder 的免费书籍《曝光三角》 :https://www.studiobinder.com/blo ... ve-jump-181f05408c8
阳光明媚的午后需要较低的曝光量以避免眩目,而寒冷的夜景则需要较高的曝光量。从实际意义上讲,这意味着如果您将场景中的光强度加倍并将曝光量除以 2,您将获得相同的结果。虚幻引擎的工作原理相同:曝光决定了关卡对光线的敏感度。只要你小心处理曝光,你完全可以在不使用单个物理精确值的情况下进行管理。那么我们为什么还要费心呢?答案是一致性:在灯光之间创造令人愉悦的平衡。光强度的尺度非常大,数字可以从 0.001 到 100.000,具体取决于光源(蜡烛还是太阳)。使用任意值,您很可能不会遵守场景中灯光之间的正确比例。这对于像我一样尝试了解灯光工作原理的初学者尤其有用。它可以让你了解现实。多年来,你会对这类事情有敏锐的洞察力,你可以相信自己的直觉来判断什么可行,什么不可行。使用真实值也会显示相机的局限性。与真实相机类似,如果您为室内场景校准镜头,您的窗户将曝光过度。这是很多电影摄影师必须处理的问题。没有任何参考,您可能会试图减少过度曝光的部分并增加曝光不足的部分,但这不是相机的工作方式。对于特定的 EV 数,它们具有理想的照度范围。高于该范围的所有内容都会受到限制。在虚幻中,您可以使用自动曝光来获得动态曝光。在哪里停下来?使用物理上准确的数据是一个好的开始,但它永远无法取代你的艺术眼光。你的想法、情绪板和参考资料胜过技术性。最终,唯一重要的是结果,而不是你如何达到结果。仅仅依靠科学将一事无成。如果你花了最后一个小时试图将两个值强行拼凑在一起,这意味着你迷失在细节中。我链接到本文的数据库应该只用作比例参考,但我将在值部分解决这个问题。如果是故意违反物理规则,那也不算错。电影和视频游戏都是障眼法。它们使用大量技巧来提升视觉效果。月光场景就是完美的例子:月亮对于相机传感器来说不够亮,所以我们总是需要使用放置在画面之外的额外电影照明。我们也习惯了夜晚的蓝色色调,即使现实生活中并非如此。总结:不要让物理值阻止你实现你想要的特定外观、情绪或想法。仅将其用作起点并根据需要进行调整。
单位
说到照明,您应该知道 4 个主要单位:坎德拉 (cd)、流明 (lm)、尼特 (cd/m2) 和勒克斯 (lx)。以下定义来自维基百科:坎德拉(符号:cd)测量光源在特定方向上发射的每单位立体角的光功率;流明(符号:lm)是光通量的单位,是衡量光源发射的可见光感知功率的标准;尼特或亮度(符号:cd/m²)是光在给定方向上传播的单位面积发光强度的光度测量单位。它描述了穿过、从特定区域发射或从特定区域反射并落在给定立体角内的光量;勒克斯或照度(符号:lx=lm/m²)是照射到表面上每单位面积的总光通量。同样,光发射率是从表面发射的每单位面积的光通量。如果你迷茫了,别担心。当我试图理解这个理论时,我也遇到过同样的情况。我们一起分析一下。我们可以做的第一件事就是将单位分为两类:与表面相关的单位(尼特和勒克斯)和其他单位(cd和lm)。
让我们从坎德拉 (cd)开始,它是测量发光强度的单位,也是国际单位制中的基本单位。您会在上面提到的所有单位中看到它,因为它是一切的基础。坎德拉考虑了扩散角度,这意味着它与光线的扩散程度成反比。像铅笔手电筒灯这样的窄光束的坎德拉值将高于几乎 360° 扩散的传统白炽灯泡。虽然坎德拉是基本单位,但在日常生活中您很少见到它。 另一边的流明是您在购买的每个灯具或灯泡上都能看到的单位。它是光源发出的光量,即亮度。它是最容易理解的单位,因为它与角度或表面无关。
光密度=光密度*光密度光密度=流明/秒流明和坎德拉之间的关系是,1 流明等于 1 坎德拉乘以球面度。如果您不知道,球面度只是一个角度,但在 3D 中,换句话说,是一个圆锥体。如果您考虑光的球形扩散(“360°”),1 坎德拉等于 12.56 流明。
实际上,虚幻中的大多数灯光都可以用坎德拉或流明来设置,但我建议使用流明,因为你可以在互联网上找到该单位的参考。亮度和照度都将表面引入方程式。我发现它们的维基百科定义令人困惑且难以区分,因此我专注于单位的实际应用,以下是我的结论:亮度以尼特 (nt) 为单位计算,以坎德拉为单位,这意味着它既考虑了扩散角度,也考虑了光发射的表面。它是从表面发射的光的量度。在日常生活中,您会在屏幕等发光设备的包装上看到它。从实用的角度来看,亮度是通过将一种称为点测光仪的设备直接指向光源来计算的。
照度以勒克斯 (lx) 为单位计算,以流明为基础,这意味着它只考虑“接收”表面和光源的亮度。它是照射到表面的光量的量度。在日常生活中,您可以在相机的规格上找到它,即主体照明范围(相机可以记录令人满意的图像的范围)。从实用角度来看,照度的计算方法是将一种称为入射计或勒克斯计的设备放置在要测量的位置。摄影师和电影摄影师使用它来确定人像或产品摄影所需的正确光量。以下是《盗梦空间》片场对测光仪的使用:
亮度=cd/m²流明/平方米总结:坎德拉(cd)是考虑扩散角度的基本单位;流明 (lm) 是衡量光亮度的单位;亮度(尼特)是从源计算的;照度(勒克斯)是根据光源照亮的环境计算的;我们主要使用流明和照度。
虚幻引擎中的单位
Unreal 中的光照非常有限。您只需调整光照本身、后期处理体积和项目设置。虽然局部光照可以设置为流明或坎德拉,但 HDR 背景(天窗)、发光表面和定向光无法更改。前者以尼特 (cd/m²) 为单位,后者以勒克斯 (lm/m²) 为单位。如果您想自己检查,Epic对此制作了一份相当详尽的文档。https://dev.epicgames.com/docume ... ication_version=5.3在进行任何照明工作之前,您应始终检查项目设置。应选中“在自动曝光设置中扩展默认亮度范围”。它位于项目设置>引擎>渲染>默认设置中。截至今天,在虚幻引擎 5.4 版本中,它已被弃用,这意味着它已经被选中。尽管如此,如果您使用的是旧版本的引擎,情况可能并非如此。我通常做的另一件事是将照明基本单位设置为流明而不是坎德拉。您可以在与上一个相同的部分中找到此设置。
此外,可以在演员的详细信息面板中单独调整每个光源的单元:
规则EV100 与站点正如我上面提到的,EV 是其组成部分的组合:ISO、快门速度和光圈。我不会介绍曝光三角的基础知识,但如果您迷茫了,我强烈建议您阅读Studio Binder 的《终极指南》。这是一个非常好的起点。https://www.studiobinder.com/blo ... graphy-video-guide/那么 EV 是如何受到其零部件的影响的呢?在它们各自的值范围内,每个值都可以增加或减少一档。一档只是两个相邻值之间的差值。例如,如果您想将快门速度增加一档(1/125),您将得到 1/250。此值的变化将使整体曝光量增加 2 倍。每次更改上述值时,您都会将曝光量增加一倍或减一倍。为了方便操作,我们通常会锁定一个或两个组件,然后调整其他组件。最常见的做法是将 ISO 保持在 100,然后更改快门速度和光圈。从现在开始,我们将仅使用 EV100,这表示我们将 ISO 锁定在 100。EV100 也有自己的值,与快门速度和光圈(也称为 f-stop)的几种组合相匹配。在下图中,您可以看到特定 EV100 值的所有可能组合(在左栏)。例如,如果我们取 EV100=5,我们可以通过 1/30 和 1.0 或 1/2 和 4.0 的组合来实现。
它有什么用处?从这些数字中,我们得出了经验法则:适合任何照明条件的理想 EV100;照明对比度规则;Sunny 16 规则及其变体。EV100 和照明条件每个 EV100 都有自己的理想照明条件。场景越亮,EV100 就越大。您可以在下面找到一些主要示例,但我已将它们全部列在数据库中。
照明对比度规则照明对比度是明亮(主光)和黑暗(阴影)之间的光圈差。在阳光照射的户外场景中,对比度会随着一天中的时间而变化。在中午时分,物体向阳的一面比阴影处亮 4 档(16:1);下午,物体向阳的一面比阴影面亮 3 档(8:1);在晚上,物体向阳的一面比阴影处亮 2 档(4:1)。请记住,这些值高度依赖于天空和周围环境。为了验证这一假设,我自己采样了一些数据(参见“值”一章),并意识到我旁边的白墙对结果的影响是 2 档。在 Unreal 中,流明会使您的阴影变亮,因此这些数字应该谨慎对待。在电影院中,照明对比度主要取决于电影的艺术指导。在 Justin Phillip 的这段视频中,我们可以看到无论照明条件如何,电影之间的对比度都有怎样的不同:[micxp_wxonkey]wxv_3531034228761542658[/micxp_wxonkey]阳光 16 法则阳光 16 规则是摄影中一个非常简单的规则,可以帮助您估算日光的正确曝光设置。规则如下:在阳光明媚的日子,将光圈设置为 f/16,将快门速度设置为直射阳光下的拍摄对象的 ISO 值的倒数。如果我们以 100 ISO 拍摄,这些数字将是 f/16、1/100 和 100.根据此规则可得出以下几种照明条件的衍生结论:
价值观当我开始研究这个项目时,我被缺乏公开数据所震惊。在对这个问题进行了一些研究之后,我决定将我能找到的每一点信息都收集到我自己的数据库中。https://docs.google.com/spreadsh ... LQ/edit?gid=0#gid=0
通过比较多个网站,我可以验证我的数据并消除看似不一致的内容。尽管如此,我仍然缺少一些场景,我想参与这个过程,了解天气如何影响光线,并了解我周围的环境有多亮。所以,我买了一个测光表,随身携带。
我了解到,有很多参数会影响这个方程。数字取决于天气、污染、一天中的时间、季节、位置、周围环境和云层。如果我们将我自己的数据与网上的数据进行比较,我们会发现在明亮的阳光下,光照强度为 58,000 lx,而光照强度为 100,000 lx。此外,与我们人类感知和工具的局限性相关的一些其他参数也会改变结果。由于我们的视锥细胞的工作方式,感知到的亮度取决于光的颜色。我们每个人看到的颜色都不同,有时差别更大(色盲)。根据我们在哪里采样天空数据,即使天空均匀无云,数字也可能会发生变化。该网站重点介绍了不同天气条件下天空亮度的分布:
那么如果数据差异这么大我们为什么要使用这些数据呢?这是规模问题。阳光照射下的室外光照度为 100,000 勒克斯,而家庭厨房的光照度可能为 300 勒克斯。我们可以为每种场景定义一个值的范围,并根据我们的场景进行调整。例如,办公室的理想照度范围在 300 到 500 勒克斯之间,绝不会超过 5000 勒克斯。如果您以适当的 EV100 作为起点并在每个数据的范围内工作,那么您已经拥有一个可以进行迭代的正确曝光的场景。
工作流
现在我们已经了解了理论,我们终于可以看到如何在虚幻引擎中应用它了。 曝光可以在两个地方设置:后处理体积 (PPV) 和相机。由于我通常喜欢在关卡中四处移动以通过多个 POV 查看光照,因此我建议直接在 PPV 中输入数据。如果您制作多个光照场景,请为每个场景创建一个 PPV 并正确命名。
在虚幻引擎中,有两种方法可以实现曝光:相机设置或 EV100 值。对于第一种方法,您可以使用 Sunny 16 规则及其派生规则;对于第二种方法,您可以使用 EV100 图表。我个人喜欢 EV100 方法,因为您只需关注 1 个值即可驱动整个曝光,这种方法快速而简单。然后您可以通过更改曝光补偿值对其进行轻微调整。如何在虚幻引擎中测量亮度和照度我们看到,可以在“详细信息”面板中以流明或坎德拉为单位设置局部光的光强度,以尼特和勒克斯为单位设置天光和定向光的光强度。但我们如何验证数据呢?与测光仪类似,我们如何对场景的亮度或照度进行采样?AutoExposure 视图模式是一个非常有用的工具,可以回答所有这些问题。它包括两个小方块,分别对照度(上方)和亮度(下方)进行采样。第一个小方块带有 RGB 值,指出照明的颜色分布。第二个小方块具有当前样本的 EV100 理想值。您还拥有大量与自动曝光系统相关的信息,但由于我们将其锁定在 PPV 中(最小 EV100=最大 EV100),因此这些信息并不那么重要。我通常在拍摄特定镜头时锁定自动曝光,但此功能对于游戏和电影来说确实很有趣。
现在让我们一步步看看如何创建物理上准确的照明。如果说这篇文章中有一件事你应该记住,那就是这个工作流程:脚步根据 EV100 图表将您的 EV100(在 PPV 中)设置为正确的近似值,或根据 Sunny 16 规则等设置相机设置(在 PPV 中);根据数据库设置您的 HDRI并验证亮度(通过自动曝光视图模式进行粗略估计);根据数据库设置定向光并验证照度(通过自动曝光视图模式进行粗略估计);根据数据库设置本地灯光(如果有);可选:根据目标光对比度调整值;调整灯光来匹配您的艺术指导/参考。使用曝光补偿稍微调整 PPV 中的曝光玩转灯光布置、旗帜和反光板调整流明和光强度
提示与技巧
有了所有这些规则和数据,我们经常尝试将一种方法与其他方法进行比较,但结果却不一样。这是我在学习期间遇到过几次的事情。如上所述,这是由于参数数量太多,如果您尝试将一个值与所有规则匹配,您将一无所获。有时它不匹配,所以选择视觉上效果最好的那个。根据 HDR 采样的位置,结果可能会有很大差异。如上所示,天空的光强度并不均匀。尝试找到一个不太靠近太阳或地平线的最佳位置。由于虚幻默认值在物理上并不正确(即定向光强度为 10 勒克斯),当您设置 EV100 时,您的场景可能会一片漆黑。别担心,这是正常的,当您调整 HDR 和灯光时,您会得到不错的照明。如果您使用发光材料,请不要忘记考虑流明。GI 会提升您的阴影,从而降低照明对比度。即使您的 EV100 已设置,也不要犹豫在稍后的流程中对其进行调整。工具
我目前正在开发一套工具来简化物理照明过程。以下原型允许您选择照明场景并从我的数据库中检索数字,而无需离开引擎。还有一些其他工具,如 EV 计算器或开尔文转换器。结构已经存在,但我想通过以下方式改进它:添加有关物理照明的基本理论(当您有疑问时可以刷新您的记忆);将我自己几个月来收集的样本输入数据库(为了准确性);改进 UI 和 UX;添加一些其他工具;创建调试视图模式。如果您想要此工具或者想要其他功能,请随时与我联系。
结论
整个过程可能让人不知所措,而且感觉太技术化了,但一旦你做了几次,它就会变得更加自然。我真的认为,了解幕后发生的事情可以提升你的工作水平,因为你对这个过程有了更深入的理解和联系。就像在任何艺术学科中一样,一旦你知道了规则,你就可以改变它们或完全打破它们。然而,请记住,这不是唯一的照明方式,选择最适合你的方式
1 END
声明:本文章中所有的图片和视频都归原作者所有,仅供大家参考学习和交流,不作商业用途,侵删。如果你喜欢这篇文章,欢迎转发!谢谢!更多学习和交流可扫描下方二维码哦!
相关知识
光照与氛围:虚幻5专业自然环境打光指南
艺术与自然的交融:植物艺术家分享动植物王国的奇妙之美
为什么花朵会‘消失’?揭开科学背后的秘密!
探访三位数字艺术家的虚拟花园
花的科学基础知识,生物基础知识
深入探索:AI 驱动的 PDF 布局检测引擎源代码解析
广东网络运营:打造数字经济的引擎(广东网络运营是什么)
艺术家的摄影创作心得(优秀24篇)
揭秘玫瑰:美丽背后的科学故事
深入理解移动应用开发:从概念到实践
网址: 虚幻引擎5!数字艺术家灯光背后的科学基础知识的深入文章分享! https://m.huajiangbk.com/newsview838400.html