Power节点/背后数学原理、调整颜色对比度、控制菲尼尔效果的外观、优化Power Ben20...
节点教程功率Game艺视界原创 15074 0
实名

通过了实名认证的内容创造者

发布于 2022-3-21 21:58:46

您需要 登录 才可以下载或查看,没有账号?注册

x
b64e78dc188da7f93a16111abbb1eb9.png

本期内容
今天我们将讨论 unreal 和 unity 中的power节点让我们开始吧!

160f890bb78d1f924c6c4255da53a0c5.png


我将开始今天的视频解释Power(功率)节点的作用以及Power(功率)节点背后的数学一旦我已经完成了这个解释我们将继续做一些你可以在着色器中使用Power(功率)节点做的事情


好吧!让我们看一下你可以看到功率节点有两个输入,基数和指数基值是进入幂节点的主要值和指数是你要提高主要值的幂,如果你回想高中数学当你提高某事物的幂时,这意味着你正在拿你的原始数字并将其乘以自身 x 次并且该 x 数字是指数,所以如果我有一个值为 2 的值并且我将其提高到 2 的幂这恰好是默认值,您可以看到两个在这里2乘以它自己2,就会得到4如果我传入一个2,就会得到一个4 果我传入一个值 4 并把它提高到 2 的幂4 乘以它自己4是16 的结果。所以如果我将 4 乘以 4 那么我得到 16。所以随着输入的值变得更高如果我将它的值提高到 2 的值或 2 的幂输出的值会呈指数增长好吧!然后同样我也可以增加我的指数值这样我就可以把我的 2 乘以它自己三倍所以如果我将 2 的值传入并提高它,并给它一个指数或将它提高到三的幂我最终会值为 8因为2 乘以 2 是 4然后 4 乘以 2 又是 8


让我们看看 unreal 中的同一节点输入被称为基数和指数在unity中它们被称为 a 和 b但实际上这些节点正在做同样的事情这是主要输入a这是指数b所以我取第一个值 a 将其乘以第二个值的次数

好吧所以我知道你们中的很多人都想可视化的,所以让我们看一下图表看看它究竟是如何工作的所以这是一个名为 desmos 的网站它有一个真正的很好的图形计算器功能我将用它来直观地向您展示(00:03:02视频讲解)

让我们跳回到虚幻和unity中看看我们如何做的几个例子,可以在第一个示例中使用我们Power(功率)节点的这个漂亮的弯曲属性,我将向您展示如何使用Power(功率)节点来增加或减少颜色或图像的值的对比度。让我们从这里的值开始我已经得到了0.5的值我只是要直接连接到我基色节点,你可以看到我的颜色是怎么来通过它在这里应用到我的我的预览立方体它所以现在看起来有点灰我只是直接传递我的 0.5 值

实际上这可能会显示好一点如果我来这里,并将其设置为不亮是的我们没问题所以我只是将我的 0.5 值传递到我的Power(功率)节点,然后通过功率转换为基色的结果现在我的指数已设置到一个所以以这种方式使用Power(功率)节点基本上什么都不做我将我的值 0.5 提高到 1 的幂如果我增加我的功率,如果我来到这里以恒定指数这将给我 0.5 的结果如果我现在将我的力量增加到2我最终会得到一个 更暗的灰度值

因为如果你还记得我们在 desmos 中查看曲线时,我的曲线在开始时变平且缓慢然后迅速上升所以我的值正如我之前所说的 0.5 被推低。所以我提高我的力量越高我的 0.5 值就会越低所以点左右 4 的值驱动它更暗8的值驱动它更暗,如果我们变得更高更漂亮很快我们将开始接近 0 的值。因为我的值是 0.5然后随着我的值接近1因为我的输入值接近 1它会迅速上升以满足一个值,所以我已经将这个功率曲线应用到我的 0.5 值并且它显着地拉低了它坦率地说让我们在这里用一种颜色尝试同样的事情

如果我们将其设置为灰色可能会更有趣,所以让我们将其传递给我们的电源节点和你可以再次看到它显着变暗,让我们将我们的指数改回1你可以看到我得到了一个紫色的值但是我的指数越高我的紫色值越暗,我的紫色值就会好起来它也会反过来

所以如果我将Power(功率)节点设置为 0.5 的幂我们的曲线向上扩展而不是向下当你使用Power(功率)节点时,它总是很有用的记住该曲线总是非常有用并记住指数高于1 越高曲线开始越慢然后在结束时加速当我们低于1到 0.3 或 0.4 之类的值时曲线将向外弯曲并向上弯曲反方向


所以我们是红色的对比一下好吧!让我们继续看看当我们将它与图片一起使用时我们的电源节点会发生什么所以我在这里有一张漂亮的花瓶图片让我们将它连接到我们的Power(功率)节点

现在我是要把它提高到 2 的幂,你看到黑暗是如何变得更暗了吗?我们仍然可以我们仍然有这些漂亮的明亮的黄色、粉红色和红色嗯但是黑暗的区域变得更暗那是因为我们的曲线向下弯曲

所以如果我们现在将它提高到3的幂它会变得更暗的,4次幂随着我们的值变得更高所有暗的值都会被压入那个黑色区域,并注意到原本明亮的值变得更亮、更饱和所以我们对这个电源节点所做的基本上类似于photoshop中的对比度操作我正在增加对比度

如果我们现在将其设置为0.9您可以看到区域那是黑暗的变亮了

所以我们在这里降低了对比度。它的值更亮了 0.6你看它是如何变得更亮整体,这里仍然有一些暗区因为我们的原始值 0 仍然像我们看到的那样,固定为零在曲线上我们的原始值 1 或白色仍然固定在 1 但中间的值向上弯曲除了 0 和 1 之外的所有东西都将变得更亮。所以我们在这里随着指数值的变化增加亮度低于 0 和 1 之间的 1 的值,所以这个节点真的是它真的很有价值

你可以用它做什么,我想指出一件有趣的事情。尽管关于Power(功率)的性能让我们来看看在我们这里的统计数据中通常我建议您不要使用指令计数来判断着色器的性能。因为它不是很准确我会在以后的视频中解释为什么会有这么多细节我需要解释但是我想在这里展示给你们,我要移动了这个纹理,我想在这里向你展示的是有时最好不要使用幂节点。因为当你使用当你将一个对象提升到某个任意幂时必须进行一些相当复杂的数学运算,而且它可能有点贵所以如果你知道你想要将某个东西提升到 2 的幂,示例让我们将其设置为 2 的幂注意这里我们的基本通道着色器是 153 条指令

让我们将其设置为 2 的幂你有没有注意到我们的着色器是如何下降到 151 条指令的,我们仍然拥有相同的着色器节点为什么它在引擎盖下突然变得更便宜了,着色器编译器正在做优化它知道我们使用的是硬编码值2

所以它在引擎盖下所做的是用一个操作替换了这里的电源节点,那看起来像这样所以我们将原始值乘以它自己然后将其传递给现在关于图形硬件的事情,是它进行乘法的速度非常快这很有趣它现在下降到149 条指令诸如此类这就是我想说的有时电源节点可能比以另一种方式做同样的事情更昂贵所以在这里我将我的图像乘以自身这和取2的幂是一样的结果

但与 151 相比当我用Power(功率)节点做同样的事情时,我在这里得到的指令更少149 如果我想将图像本身相乘,如果我想提高到 4 的幂我可以把这个乘法再加一个现在我有 150 条指令所以你可以看到这些指令中的每一条都是一条指令所以我提出了到一个权力 4

而如果我使用电源节点并将其提高到 4 的幂您现在可以看到 152 所以如果我知道我想使用硬编码的 2 或 3 的幂我将如何做 3 的幂

让我们来看看例如我可以使用它,然后再次乘以原始值这会将它提高到 3 的幂,所以如果我知道我想使用 2 次幂的硬编码幂 3  power 4 我可以只使用乘法。它最终比我使用Power(功率)节点本身便宜一点通常当你有一个你想要的Power(功率)节点时,你想将它提高到某个任意值在这种情况下可以使用Power(功率)节点,但在某些情况下您希望将对比度增加到特定的硬编码量在这些情况下最好使用乘法,但这些是边缘情况我只是我认为很重要的一点是,电源节点本身可能比使用多图形硬件要贵一点在做乘法时真的很快,但是计算幂的公式有点复杂。所以当你想使用某个任意值时应该使用幂,当你知道你有一个硬编码时,你应该使用乘法值好吧!

这里我们是unity的我想给你们展示一下同样的事情也适用于这里,我已经把我的纹理连接起来了连接到b 输入端口。所以这是我的指数这是我的纹理值为 1 我只是要获取图像本身,但如果我现在将其提高到 2 的幂你可以看到就像在虚幻中一样我正在增加对比度

如果我在下面调高了亮度,对比度就降低了0.5-0.1

因此在下一个示例中它的工作方式与虚幻中的效果相同,我将向您展示我们如何使用电源节点来控制我们正在使用的掩码的结果,在这里生成我有视图方向和法线向量。我将它们传递到点积中基本上这是在测量角度或物体如何指向相机,所以无论表面在哪里我的物体指向相机我将 获得白色值,无论它指向垂直或远离相机的任何地方我都将获得黑色值,这是视图方向和法线的点积矢量正在这样做,所以你可以看到我将结果传递到我的基色和我的发射中基本上我在这里得到的是一个菲涅尔术语。所以当模型面对时它会是白色的、相机和黑暗因为模型垂直于相机。但我的菲涅尔术语不是很明显你可以看到边缘有点暗但没有我想要的那么暗


所以我可以做的是使用我的Power(功率)节点调整我的面具的结果。我将把我的点积的输出连接到我的Power(功率)插座上,然后把它连接到我的基色和发射中现在传入的浮点值为 1 正如 我们所说这只是会给我和我一直有的结果一样,但是当我开始增加指数的值时会发生神奇的事情所以这里我已经提高到 3 的幂到 4 的幂。你可以看到当我增加这个值时我正在沿着边缘拉出那些真正孤立的黑暗,并将它们拉出并向中间移动这样我就可以调整这个蒙版的结果以获得更多,我正在寻找的效果将它们提高到更高值的结果即 5 的幂或 6 的幂 。现在就像我一分钟前向您展示的那样请记住电源节点可能会贵一点,如果我确切地知道值是多少值相加,特别是如果它是一个整数比如两个或三个我可以使用乘以自身以获得类似的结果这样做会便宜一点

但是如果我想使用任意值例如,如果我想在这里公开我的指数值,用户可以在材质中进行调整,那么我肯定需要使用power节点,它只会稍微贵一点,这很好,但是你可以看到这里使用了power节点,从我的视点方向和法向量创建一个稍微好一点的结果,我已经创建了一些更有趣的东西,所以你们可以使用这种Power节点来调整蒙版的结果。这可以是任何类型的蒙版它可能与相机蒙版有一定距离它可能是定向遮罩衰减遮罩,这里我使用的是菲涅尔遮罩但您可以使用Power(功率)节点来调整遮罩的输出以更接近您正在寻找的结果


还有一个我想要的最后一个示例给你看或者如何使用Power(功率)节点这与近似伽玛校正有关 让我们在这里看看我们的纹理一分钟我要切换到 们的花瓶纹理你可以看到这里有这个复选框 称为srgb每当我们有一个纹理代表物体的颜色时漫反射或反照率纹理这个 srgb 复选框需要打开
那是因为伽马校正需要应用于任何代表颜色的数据,有很长的解释需要解释什么是伽马嗯我现在不想讨论这个但也许我会在描述中放一个链接,指向比我能更好地描述它的东西。但基本上颜色需要调整为补偿监视器正在执行的伽马校正表示蒙版或法线的数据不需要应用此伽马校正因为它只是纯数据,而表示颜色的纹理他的对象需要这个伽马校正应用。所以这意味着我们正在检查这个 srgb 框所以现在有一些情况你可能需要使用线性纹理或非伽马校正纹理,来表示颜色你的材料还有其他情况你有一个像这样的伽马校正的纹理你需要调整它以便它很好地代表线性数据


一种真正用来进行这些调整的快捷方式是使用一个有源节点因此如果我有处于线性模式的数据并且我需要将其转换以补偿伽玛,我可以将该数据提高到 2.2 的幂然后将其传入您将看到的是这些数据实际上这不是一个很好的例子,因为这个数据实际上已经应用了伽玛。所以现在我将它应用两次我想告诉你如果你有线性数据,你可以调整它并将它用作颜色通过 2.2 的幂并且在 类似的方式如果您的数据已经处于 srgb 模式或伽马校正并且您需要将其与线性数据一起使用

您可以进行调整如果您将其传递到电源节点并将其提高到 0.45的幂,那么幂为 2.2 将线性数据转换为 srgb 0.5 0.45 的幂将 srgb 数据转换为线性,就像我说的如果您需要绝对精确和完全准确的数字这只是一个快捷方式或近似值您想使用更复杂的公式从线性到伽马以及从伽马伽马到线性的转换,比仅仅提高到 2.2 的幂或 0.45 的幂要复杂一点。但这是一种近似它的不错且快速的方法,因此您可以使用电源节点如果你需要的话进行这个转换

今天的教程结束我希望你已经学到了一些关于使用电源节点和将数据提高到指数的东西,我希望这个视频对你有帮助,我在视频的早些时候提到过有很多解释解释了为什么指令计数不是判断性能的准确方法我将深入了解这些细节和我们将讨论在着色器中测量性能的方法,以及为什么指令计数不是很准确,无法很好地衡量着色器的性能,这是一个有趣的话题我希望你下周回来看看在此期间大家度过了愉快的一周我们将在下一个视频中看到你




               

本帖被以下画板推荐:

微信公众号:Game艺视界
使用道具 <
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表