运算节点

../../../_images/compositing_types_converter_math_node.png

运算节点。

运算节点 的功能是执行数学运算。

输入

第一个数值。可以输入三角法则定义的弧度数值。
第二个数值。这个数值不仅可输入三角函数值,还可以输入四舍五入及绝对值。

属性

操作
添加,相减,相乘(软件界面翻译成正片叠底,这个是在图层模式才有的说法),相除,正弦,反正弦,反余弦,乘幂运算,对数运算,最小值,最大值,四舍五入,小于,大于,模数,绝对值。
限定
限定输出数值的范围(0到1)。参看 clamp

输出

数值输出。

范例

自定义Z深度通道节点设置

../../../_images/compositing_types_converter_math_manual-z-mask.png

范例。

This example has one scene input by the top Render Layer node, which has a cube that is about 10 BU from the camera. The bottom Render Layer node inputs a scene (FlyCam) with a plane that covers the left half of the view and is 7 BU from the camera. Both are fed through their respective Map Value nodes to divide the Z-buffer by 20 (multiply by 0.05, as shown in the Size field) and clamped to be a min/max of 0.0/1.0 respectively.

“使用最小值”功能是依据靠近摄影机的像素将Z深度值选择出来;也可以选择矩形部分的平面Z深度值。背景有个初始的Z深度值,值限定为1.0(显示为白色)。在“使用最大值”范例中,矩形的Z深度值比图像平面要大,因此更靠近左侧,但是图像平面(FlyCam)渲染层Z值初始在右侧(对应于1.0),因此他们被选择。

使用正弦功能得到不断循环的变化数

../../../_images/compositing_types_converter_math_sine.png

在这个例子中,时间 节点,在101帧范围内生成一个从0到1的线性序列。垂直方向上的绿色曲线控件显示第25帧输出,或者说值为0.25的结果被输出。这个值被正弦节点进行 2 × pi运算转化为正弦范围内的1.0,如我们所熟知的:sin(2 × pi/ 4) = sin(pi/ 2) = +1.0 。因为结果值在(-1.0到1.0)之间,映射值 节点通过将输入(-1,1)限定在0.0到1.0区间内,再加上1(使其数值在0到2f范围内),将所得结果乘以二分之一(因此缩放值在0到1之间)。默认 颜色渐变 节点将这些数值映射到一个灰度值区间内。 引测,中度灰色和0.0值相匹配,黑色为-1.0,白色为1.0。我们可以看到, \(sin(pi/ 2) = 1.0\)。就像是有了用户自己的可见光颜色计算器一样!这个节点装配通过灰度范围提供了一个平滑周期性的序列值。

将这个功能引申,比如,图片的alpha通道形成渐入/渐出特效。改变Z深度通道的景深位置。改变颜色通道值使其有规律的进行色彩变化。

提亮/缩放通道

../../../_images/compositing_types_converter_math_multiply.jpg

范例中有一个 运算: 相乘 节点增加图像的亮度通道(Y)使其颜色变得更亮。使用 映射值 节点的 “使用最小值” 和 “使用最大值”复选框来限定颜色的输出值在合理的区间范围之内。用这个方法,用户可以在高动态范围图像(HDRI)上应用对数函数。在这个特定范例中,使用一个 亮度/对比度 节点 对亮度进行简单控制。

量子化/重限定颜色选取

在这个例子中,我们要重新限定颜色输出值为256色。运用这种设置使显示看起来就像是图像在手机中显示的效果。想实现这个效果,我们要重新将像素的R,G,B值限定在一个范围中,不如当三个光学三原色混合时,颜色结果值不会超过256种变化。颜色输出值的变化范围是三个通道值彼此相乘,Q = R × G × B。

现在有三个颜色通道256个颜色值,我们可以灵活的量化每个颜色通道的取值,因为有很多种 R × G × B的数学组合结果是256。比如,{R, G, B} = {4, 4, 16}, 然后 \(4 × 4 × 16 = 256\)。同理, {6, 6, 7} 给出的结果是252。在{4, 4, 16}和{6, 6, 7}颜色结果的差异是,将其首先设置为(4, 4, 16}产生一个带有少量红和绿,大量蓝的颜色结果。设置为{6, 6, 7}将产生一个个颜色通道平均分布的颜色结果。为了用较少的颜色值取得比较好的图像效果,图像中的颜色取值尽量以主要颜色为主。

理论

量化留个值的两种方法 <https://wiki.blender.org/index.php/File:Manual-Compositing-Node-Math_ColorBand>`__。

将图像量化到256色,设置三通道颜色值为{6, 6, 7}。切分出一块范围在0到1之间的连续范围(红色光谱)到六个值,我们需要构建当输入任何一个数值可以输出为六个数值的运算法则,就像如图所示的那样。将0值和黑色颜色值匹配,其他五个颜色在中间。如显示那样,这个方法产生{0, 0.2, 0.4, 0.6, 0.8, 1}。1.0被5除得到的结果是0.2,这个表明了量化值彼此之间的颜色差距离。

为得到平滑的颜色过渡,我们要将低于0.16的数值映射为0.0;在0.16和0.33之间的数值映射为0.2;在0.33和0.5之间的数值量化为0.4,在0.83和1.0之间的数值映射为1.0。

Note

函数 f(x)

此函数的数学功能由基本的数学操作(加,减,乘,正弦,余弦等等)对输入值进行运算,输出所需要的输出值。

电子表格表述此函数功能

此函数背后的理论是按比例截取数值。比如我们需要一个将数值限定在0到1这个范围的数学函数,比如0.552,但是输出值为,0.2,0.4等等。我们可以想象到我们将0到1范围之间的数进行乘方,比如从0此方到6次方,以便于将结果化为整数。因此将数值进行六次分离,我们要怎样操作呢?答案是对一个数值范围乘以6.运算节点的第一个数值是在0到6的范围内。为了得到平滑均等的分离效果,使用四舍五入功能(参看前文),我们可以将任何数值进行加减将整个数值四舍五入到那个数值。因此,我们将数值减去一半,整个操作就结束了。round()函数功能使数值范围限定在0到5之间。然后将数值除以5得到在0和1之间的取值范围,然后再将结果和其他颜色通道进行合并。因此我们得到的函数是 \(f(x, n) = round(x × n - 0.5)/ (n - 1)\),“n”代表可能的输出值,“x”代表输入的像素颜色值,函数 \(f(x, n)\) 是输出值。有个小问题,那就是数值等于1的时候,公式结果为1.2,这是个非法值。这是因为四舍五入函数是向上取整,5.5将取整为6。因此,当将此数值减去0.501时,将结果5.499向上取整为5.在其他光谱范围内,是纯黑色,或者数值表示为0,当0.501被减去时,向上取整为0,因为四舍五入函数Round()功能不会返回一个负数结果值。

有时候通过电子表格可以帮助用户这些节点放在一起计算出想要的结果值。通过公式 \(n = 6\)\(x = 0.70\),定位到电子表格相应位置,得到8-bit 颜色值179和R值0.7。乘以6得到结果为4.2。减去1/2得到结果为3.7,向上取整为4。将4除以5得到结果为0.8。因此, f(0.7, 6) = 0.8 或一个8-bit数值204。可以将一个范围的颜色输入值输出为同一个 8-bit输出值。

实际应用

考虑到上述节点设置在Blender的实际应用,将图像的连入分离RGB节点。比如红色通道,我们将运算节点连入获取每个红色的数值,乘以(比例缩放)其数值为六个单独部分,偏移0.5个数值,四舍五入到最近的整数值,然后将图像颜色像素除以5。将变化范围由{0 to 1} 改为 {0 to 6},减去中间的数值,数值范围变化为{-0.5 to 5.5}四舍五入到最近的整数,结果为{0, 1, 2, 3, 4, 5},因为函数向下取整,被5除后的六个数值分别为{0.0, 0.2, 0.4, 0.6, 0.8, 1.0}。

因为运算节点的四舍五入功能的缘故,输出值是固定范围中阶梯性的结果值。拷贝这个节点装配到绿色和蓝色通道。得到 6:6:7,我们设置三个进行相乘操作的运算节点为 {6, 6, 7},相除运算的节点设置为 {5, 5, 6}。

../../../_images/compositing_types_converter_math_quantize-red.jpg

如果将此节点装配放入一个群组节点之中,可以在不同的项目之间简单的重复使用这个功能。在操作中,考虑到一个运算节点要驱动不同的数值,其他的一些要手动设置,以避免出现误差。

总结

正常情况下,一个输出渲染值由32位或24位颜色位深,每个像素的颜色值取值在数百万色之中的某个值。这个节点装配范例将红,绿,蓝三个颜色通道的取值统一到一个很小的颜色区间内,当三个颜色通道的数值混合在一起,每种颜色只有256种颜色其中之一。

当这个节点装配使用 分离/合并 RGB节点创建一种具体的颜色。其他的 分离/合并 节点依然可以继续使用。使用YUV(一种颜色编码方法)值,记住U值和V值的变化范围在(-0.5,0.5),因此用户可以首先加上1/2使其区间范围在0和1之间,然后进行除法运算,减去1/2,使其颜色在标准范围区间内。

JPGPNG 图像格式依据颜色位深(比如: JPG 是 24位颜色位深)存储每个颜色值,但是生成图像体积非常小的原因是依据 JPEG 压缩算法减少颜色位深和量化颜色范围。

用户需要均匀的较少颜色的位深,比如,在一幅蓝色为主色调的图片上,保持图像的品质,需要减少红色通道值2个单位,绿色通道值4个单位,让蓝色颜色值为 \(256/(2 × 4)\) 或 值为32。如果使用HSV(一种颜色空间)色彩空间,用户需要通过乘以2和除以2分别减少饱和度和亮度2个单位(0或1.0),将颜色的色相值重新限定为64。

用户可以使用此节点装配量化任何通道:alpha,速度(矢量),z深度值等等。