Max/MSP/Jitter 官方教程翻译14 - 颜色查找表

公众号:ArtxCode

00 翻译自 Cycling74 的 Max/MSP/Jitter 官方文档:Tutorial 12: Color Lookup Tables

本教程将讲解如何使用颜色查找表(lookup tables)重新映射 Jitter 矩阵内的数据。jit.charmap 对象是为此而设计的。我们还将研究生成查找表矩阵的不同策略,包括 jit.gradient 对象。

查找过程

查找表(通常称为传递函数/transfer functions)是一个数组,以数字为表的索引。检索存储在该索引(地址或位置)的数字来替换原数字。任何函数 graph - 每个 x 值(地址)有相应的 y 值(输出)- 都可以用作查找表。Max 对象如 funbufftable 和 MSP buffer~ 对象是常用的查找表。本教程将以类似的方式使用 Jitter 矩阵。

打开教程 patch 读取图像

image

patch 左上角有一个 jit.movi​​e 对象,读取两个文件。初始化对象(通过 loadbang)并加载文件 colorwheel.pct。也可以点击 rain.mov 消息加载视频。可以随意切换两个图像源。

单击 patch 顶部的开关启动 metro。色轮同时出现在顶部和底部的 jit.pwindow。底部第三个(矩形)jit.pwindow 中出现渐变。

image

jit.charmap 的输出和查找表矩阵

patch 底部有一个jit.charmap 对象,用它来重新映射图像中的单元格值。对象有两个入口,左入口连接到顶部的 jit.movi​​e。右入口连接到 jit.matrix colortable。名为 colortable 的矩阵只有一维共 256 个单元,有四个 char 型数据平面。这是jit.charmap 用来重新映射左边矩阵中单元格的颜色查找表。带有名字 ctable 的receive(一般缩写为 r)对象从 patch 的其他位置接收数据并发送到 jit.matrix。打开顶部的开关发送一个 bang 到 jit.matrix colortable,它将矩阵消息发送到jit.pwindowjit.charmap

jit.charmap 用输入(左)矩阵中的值,指向(右)矩阵中对应的位置并复制那里的值,生成输出矩阵。如果发送给jit.charmap 的矩阵包含一个在四个平面中值为 100 50 35 20 的单元格。如果查找表在平面 1 第 100 个单元格的值是 73,平面 2 第 50 个单元格的值是 25 ,平面 3 的第 35 个单元格的值是 0,平面 4 第 20 个单元格的值是 203,输出单元的值是 73 25 0 203

jit.charmap 查找表是有 256 个单元格的一维矩阵,其平面数量与要重新映射的矩阵相同。因为 char 矩阵的值范围是 0~255,因此需要 256 个数字来覆盖查找表。

生成查找表

patch 的右上侧包含三个 multislider,可以设计 colortable 查找表矩阵 1-3 平面的传递函数:

用 multislider 的值填充查找表矩阵

multislider(有 256个 整数 slider,范围为 0~255)把列表发送到下面的 jit.fill对象。它用 multislider 的值替换 colortable 矩阵当前存储在平面1-3(即红,绿和蓝)的值。当矩阵采用新值时,jit.fill发出 bang 到 patch 左边连接到 jit.charmap 右入口的 jit.matrix。这里忽略了平面 0,因为只有将 4 平面矩阵视为视频时,它才包含 Alpha 值。

patch 中的 jit.matrixjit.fill 的名称相同(colortable)。这样两个对象从同一矩阵读取和写入,一个对象(jit.fill)生成另一个对象(jit.matrix)可读取的数据,而不必在两个矩阵之间复制数据。这跟许多 MSP 对象(例如 peek~play~groove~)可以共享存储在单个 buffer~ 中的样本数据类似。关于命名矩阵请参见教程 13,18 和 19。

multislider 中随意绘制一些形状,看它如何影响查找表(较小的jit.pwindow)和 jit.movi​​e 的输出图像。可以来回切换两个图像源。

如果想重置任一平面为 y = “x” 传递函数(使所有值保持不变的固定斜率直线),可以单击相应 multislider 上的按钮。名为 p clear 的子 patch 用 uzi 初始化了 multislider

要点:与许多 Max 对象一样,Jitter 对象会保留存储在一个入口中的矩阵,即使另一个入口接收到了新矩阵。所以这个 patch 的 metro 只需要触发 jit.movi​​e。包含查找表jit.charmapjit.matrix 只需要在所存储的数据发生变化时输出值。

以下是一些查找表及其结果:

三组 ``multislider``及其生成的颜色查找表和输出颜色轮

例 1 中,红色和蓝色查找表调换而绿色正常。结果是输入图像中较大的红色和蓝色值在输出时变小,反之亦然。所以色轮的白色背景现在看起来是绿色的(单元格值 0 255 255 255 映射为 0 0 255 0)。

例 2 设置绿色平面为 0(查找表在整个输入值范围内设置为 0)。红色和蓝色平面如果超过阈值也设置为 0,这时值会突然上升(红色比蓝色上升得更明显)。结果是色轮大部分都是黑色的(特别是在绿色区域)。红色平面仅在非常高的值(即色轮背景中的品红色)中可见。

例 3 正常映射红色平面。绿色平面是抛物线形状,极值映射为高,中间阴影映射为低。蓝色平面除了中间调中被归零的范围,其余正常。这种非线性表现为贯穿彩色轮顶部和右侧的红色“断层线”。

有无数组合可以重新映射矩阵单元格的值。接下来研究另一个以更精确方式重新映射颜色值的对象。

jit.gradient 对象

打开 Duotone 子 patch,它显示了使用 jit.gradient 生成查找表的方法:

使用 ``jit.gradient`` 对象

jit.gradient 生成两个单元格的值之间平滑渐变的单维 char 矩阵。startstop 属性是指定这些单元格的值列表。例如,start 属性 0 0 0 0 和 end 属性 0 0.5 1.0 0.5 将生成从黑色(矩阵中的单元格 0)到浅绿色(矩阵中最后一个单元格)的渐变。

我们已经用参数指定 jit.gradient 为 256 单元宽,这样当它改变时可以存储在 jit.matrix colortable 中。请注意, jit.gradient 在属性列表中使用浮点数来指定 char 值(即属性中用值 1.0 指定 char 值为 255)。

swatch 对象输出的 RGB 列表转换为 ARGB 浮点数来获得格式化属性。将属性发送到 jit.gradient 对象后,它接收触发对象发出的 bang,将矩阵输出到 patch 左侧的jit.matrix

尝试在 swatch 中选择颜色。start 和 end 属性指定查找表的边界,所以输入图像的值表现为在两种颜色之间变化的双色调外观。patch 顶部的 multislider 将反映 jit.gradient 所生成的查找表。

使用颜色渐变作为查找表

例 1 是翻转的图像。查找表的 start 是白色(start 0 1.0 1.0 1.0),end 是黑色(end 0. 0. 0. 0)。结果是输入值 0 映射到 255,反之亦然(y = 255 - x)。

例 2 和 3 是双色调渐变,将色轮的光谱重新映射到红色和橙色(例 2)以及橄榄色和青色(例 3)之间。请注意,根据色轮中不同点的原始颜色,渐变曲线变得更陡峭或更和缓。

jit.gradient 的另一个属性是 cheby,它指定在矩阵开始和结束值之间的变形曲线。cheby 属性的参数列表是浮点数。这些参数是 Chebyshev polynomials(见下文的切比雪夫多项式)不同阶数的振幅。使用查找表时,这些特殊功能曲线会产生不同的效果。patch 中设置 cheby 属性的 multislider,可以指定前 8 个 Chebyshev polynomials 曲线的相对振幅,形状如下(如果将它们视为从黑色到白色的过渡):

用 Chebyshev orders 1-4(顶行)和 5-8(底行)生成的梯度

技术说明:切比雪夫多项式通常用作数字合成算法中波形整形音频信号的查找表(它们的特殊属性可以将正弦波形扭曲成等效于不同阶数幅度的谐波频谱)。MSP lookup~ 对象可以与加载到 buffer~ 中的函数一起来完成音频信号处理(跟本教程中的图像处理类似)。更多内容请参阅 MSP 手册中的教程 12:综合波形整形。

复位 gradient 中开始和结束点(单击上面的消息框),缓慢调整 multislider控制的 cheby 属性。观察颜色轮在颜色消失并在不同区域重新出现时如何变化。

jit.gradient 中使用 cheby 属性时,即使将渐变起点和终点保留为黑色和白色,也可以得到一些非常有趣的颜色变形效果。以下是视频剪辑 rain.mov 的一些例子:

不同梯度曲线对雨水彩色频谱的影响

左边图像显示 rain.mov 中未处理的静止图像。中间图像显示了当使用二阶切比雪夫多项式(图像中最暗的区域现在位于色谱的中间)生成梯度时色谱的变化。右侧图像显示更复杂的梯度,色谱显示多个峰和谷。

patch 顶部的 multislider反映查找表的当前状态(由 jit.gradient 生成的矩阵被发送到 p showit 子 patch 中的 jit.iter,在那里数字被组合以设定 multislider 的状态)。尝试生成渐变,然后调整 multislider 手动修改查找表。这样 jit.gradient 就作为更复杂的查找表的起始点。

image

小结

使用 jit.charmap 映射 char 矩阵中单元格的值。jit.charmap 的右入口接收 256 单元矩阵来定义要用于输入矩阵数据的查找表(或传递函数)。可以使用多种方法定义查找表,包括使用 jit.fill从 Max 列表生成矩阵,或使用 jit.gradient 对象根据 cheby 指定的曲线形状,在开始和结束单元格值之间生成颜色渐变属性。



友情提示:独自折腾 Max 易患上癔症……不妨入群互助

👇👇👇

公众号:ArtxCode

00 的文集

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容