ギリ嘘数学 | 三角関数(2) 弧度法 の練習問題
ここは、↓こちらの記事の「補足」となっております。
記事から飛んできてない方は、先に記事の方をお読みくださいー!

この図を見て考えていきましょう
問1・cos(2) はいくら?
答

2ラジアン、の示す点はこの位置ですね、
そしてcosなので、この点のx座標が、cos(2)の値だ、ということです。
ここで、目盛りを一生懸命読みたくなるところなんですが、
左側なので、「x は、マイナスの値である」ことに気を付けて下さい!
cos(2) = 約 -0.42 ・・・が答えになります
問2・sin(3), cos(3) はいくら?
答

座標よみにくいですよねー
x 座標に至っては、ほぼ-1です。実際、-0.989くらいだそうです。
まあまあ、大体で答えればいいので、だいたいで読んでおきましょう。
もう1つ、「xがcos・yがsin」です。「xがsin、yがcos」ではありません…。
学校のテストだとこれがミス多発ポイントの1つになってます。
そりゃミスりますよね。いや、まあ、ここは正直覚えてもらうしかないかもしれません。
以上を踏まえて
sin(3) = 約 0.14 cos(3) = 約 -0.99 を答えとします
問3・cos(2π) はいくら?
答

2πラジアン、ということは、360°になります。
・・・ということは!? そうです、1周まわって0°の位置に戻ってきてます。
そこの x 座標が cos(360°) つまり、cos(2π) ですから、
cos(2π) = 1 が答えです。 ※ もちろん sin(2π) = 0 となります。
ここで察されたかもしれませんが、0°・360°・720°・1080° …と、360°の倍数は、全て同じ座標を指しますから、
その cos や sin も、同じ値が出てきます。
cos(0°) = cos(360°) = cos(720°) = cos(1080°) = … = 1
sin(0°) = sin(360°) = sin(720°) = sin(1080°) = … = 0
ということだし、言い換えれば
cos(0) = cos(2π) = cos(4π) = cos(6π) = … = 1
sin(0) = sin(2π) = sin(4π) = sin(6π) = … = 0
とも言えます。
この辺りは、どうせ次回の記事でやるので、今は心配しなくて大丈夫です!
練習問題、そんなところで宜しいでしょうかー
Operator Snippets を一通り見てみた(TD2020)






「TOPによる画像処理、たまに生成」と、「COMPによるUI組み立て」に特化した、
つまり、グラフィクスエンジニアに特化したTDの「最速入門講座」が欲しいなと思い、
ちょっと、その叩きを作ってる次第です。
下書きというか「叩き」の段階では、この、はてなブログでいいかなと思っていて(一時的なアウトプットであり、拡散される気が全くなく、すぐに忘れられてもいい情報、…に関しては、私ははてなブログに貯蔵している)
一定クオリティ以上に達したら、note ないし Qiita に改めてまとめようかなと思っています。
よって、ここ、はてなブログにある以上は、これはまだ下書き段階です。
ブログ記事の段階では、5部構成くらいを見てます。
(・そもそもTDって何をするものだとグラフィクスエンジニアは解釈すればいいか)←この章は難易度高いので今は書く気なし
・スニペットを1通り見てみた
・分類
・最初の25個(←今日はここまで)
・後半40個
・エディタ画面のTips集(その小技さっさと最初に教えてよ編)
・UIの組み立て方(爆速でCOMPとPalette群を集結させる)
さて、スニペットにあるノードを概観し、スニペットに掲載されてるノード群の役割を1つずつ軽くさらっていく記事です。
一応TD初心者のために経緯を説明します。
TDとは、数値データor画像データor立体CGデータ、を、「ノード」と呼ばれる「ひとまとまりの処理が記述された箱」の組み合わせによって、データを加工するソフトウェアです。
もちろん、写真や動画、あるいはプログラミングで生成した2次元データを加工して、はたまた別の動画を書きだすこともできるし、プロジェクションやVJも出来ます。用途は様々ですね。
とにかく「ノード」というのが、様々な操作を語るうえでの「最小単位」となります。
超具体的に言ってしまうと、画像データに対してなら「ぼかし」「モノクロ化」「コントラスト強調」とか、そういう操作です。
その1つ1つがノードになっているということです。
だから「ノードを見ていく」というのは、TDでは「どんな操作ができうるのか」を、おさらいしていくことに他なりません。
そして、各ノードの使い方をまとめたヘルプとして、"Operator Snippets" という機能が、TDには内蔵されています。
そこには、500を軽く超えるノード群のうち、何割かの重要なノードについてのみ解説や用法例が掲載されています。
しかしながら、今回はグラフィクスエンジニアのための解説を考えますから、TOPノード(画像データを処理するノード)についてしか考えません。
さて私が1番慣れ親しんでいるTDバージョンは2020.20020ですが、最近インストールしたのは2023.12000です。
正確なリリース日で言うと、4年以上の隔たりがあります。この4年の間にHelpのスニペットも、どうやら沢山追加があったようです。
実際スニペットを見ると:
|
|
このくらい違ってました。
スニペットに掲載されてる数は、65ノードから90ノードに増えています。なるほどな。
しかし、各ノードに対する複数の用法例自体は、そこまで変化なしでした。
うーん…。悩みましたが、【まずは2020.20020に既に掲載されているほう】で、見て行こうかな?と思います。数が少ないから解説もラクだというのと、基礎的な所は結局、4年では流石に変わんないですからね。
分類について
ひととおり65ノードをなめてみましたが、10カテゴリーくらいに分けられるなあ、という考え方に落ち着きました。
そこで「その10カテゴリーとは何なのか?」をまずは概観することで、「そういうノリなのね」と
その、TDで絵作り自体をすることは私は少ないですし、実用的な使い方の勘に優れている自負はありません。とはいえ私も、短い1時代ながら、私がTDの知識によって会社の展示を支えてた頃もあり、実務経験者とは言えそうです。
なので「私のようなTD実務経験者から眺める、そして画像処理の用途に特化した人間から眺める」TDノードの分類、として眺めて頂ければハッピーです。
- ここから始まる系
- 0-1 constant
- 単色画像を出力するノード。1番分かりやすいかも
- 0-2 circle
- 円や楕円(正多角形や扇形やドーナツ型もいける)の画像を出す
- 0-3 text
- 文字がラスタライズされた画像を出力する。画像でUI作る時とかに便利かも
- 0-4 Noise
- 様々なNoise画像を提供します。複数の種類のノイズがあり、そして色んな動かし方できます。
- 0-5 Ramp
- グラデーションの画像を生成。Constantの上位互換かも。
- 0-1 constant
- 1-ブレンド系
- 1-1 Add
- 2つの画像の加算を返す。
- 1-2 Multiply
- 2つの画像の乗算を返す。
- 1-3 Over
- Input2の画像(半透明や一部透明を想定)を、Input1の上にのせ、アルファブレンドとする。
- 1-4 Inside
- Input1のRGBを使用するが、アルファにはInput2の画像を使用する。
- Input1-RGB, Input2-Aをマージする、とも言える
- 1-5 Difference
- 2つの画像の差の絶対値を返す
- 1-6 Switch
- 複数の画像を
- 1-7 Cross
- 2つの画像(2つとも不透明を想定)に対し、アルファを指定し、アルファブレンドする
- 1-8 Matte
- 1-SP Composite
- すべてのブレンドモードを選べる万能ノード。
*あれ?こいつだけでええやんか…
- 勘のいいガキは嫌いだよ
- すべてのブレンドモードを選べる万能ノード。
*あれ?こいつだけでええやんか…
- 1-1 Add
- 2- 時を超える系
- 2-1 Feedback
- 指定したTOPの、1フレーム前の結果を返す。時を超える系の中では初級編。1番気軽に使えるのでは。
- 2-4 Cache
- 第1Inputについて、指定したフレーム数ぶん、結果を保持し続ける
- 2-5 Cache Select
- Nフレーム分の履歴を保持したCacheから、1~Nの好きなフレーム番号を取り出す。
- やや複雑なので、時を超える系では中級編な気がする
- 2-4 3DTexture
- 過去Nフレーム分の画像出力を、連番データとして、3DTexture形式で保持し続ける
- 2-5 Time Machine
- 2-1 Feedback
- 3- エフェクト系
- 3-1 Anti Alias
- 3-2 Blur
- 画像をぼかします。ブラーです。
- 3-3 Luma Blur
- 画像内、地域によってブラーの強さを変えれます。
- 3-4 Edge
- エッジを強調します。元よりもギザギザになりがちです
- 3-5 Emboss
- エンボス加工、つまり、画像の色変化が立体情報となったモノクロ画像が返ってきます
- 3-6 Normal Map
- ↑のエンボス画像を面だと見立てて、それに対して法線を返した画像が得られます
- 3-7 Convolute
- 以上のエフェクト系は、畳み込み(Convolution)によって、自在に作れるわけです。
- EdgeやBlurのようなエフェクトを直接マニュアルに作りたい時はこのノードですね。わりと上級向け
- 4- RGB分解合体系
- 4-1 Chan Mix
- 4-2 Chroma Key
- HSVについて指定した範囲の色だけ選択し、残りを消去した画像、が得られる。
- 例えば「明度の高い部分だけ切り取る」「赤っぽい部分だけ切り取る」とかができる
- HSVについて指定した範囲の色だけ選択し、残りを消去した画像、が得られる。
- 4-3 RGB Key
- 4-2 Chroma Key のRGB空間編。なので、RGBについて一定範囲を満たす部分だけ切り取った画像を得られる。
- 4-4 Reorder
- RチャンネルはInput1のRを、GチャンネルはInput2のGを、BチャンネルはInput3のBをマージした画像を作る、みたいなのができる。
- Inputが4つもあるのが気持ち悪いノード。実際、きしょい操作だな~って思う(理解はしやすいけど)
- 5- メタ情報系
- 5-1 Select
- 同じ階層にないor遠いノードから、線を引っ張って繋げるのが面倒な時、ノード名の指定によってTOPを引っ張ってこれる。
- プログラマブルに接続ノードを変えたい・場合分けしたい時、とか、意外と便利ですよ
- 5-2 Resolution
- 画像の解像度を変更したい時とかに使う。
- 5-3 Chopto
- 数値や配列データ(CHOP)を画像(TOP)に変換する。音を画像にするときとかに便利
- 5-4 Analyze
- 画像の中での最も明るい点・最も暗い点・明るさの平均、を単色画像で出力してくれる
- 5-5 OP Viewer
- COMPの"OP Viewer"ノードとセットで使われる印象です。既にあるTOPノードをUIに表示させて、まじまじと眺めたいとき、に使われます
- 5-x Null
- スニペットには掲載されてないけど「何もしないノード」です。何もしないゆえに何の役に立つのか1番分かりにくいかもしれまえん。
- 個人的には、見通し良くノード群を構築するうえで最重要だと思うのですが、文面での説明が極めて難しいです。
- 存在は知っておいた方が良いのかなと思います。
- 5-1 Select
- 6- 補正系
- 6-1 Level
- いわゆるレベル補正をするノード
- Luma Levelと違い、数学的に素直な挙動なので、プログラミングの観点でいくとコントロールしやすいのがメリット
- 6-2 Luma Level
- 「色相・彩度を変えずに」レベル補正するノード。「あれ?Levelノードやると変な色相・彩度になっちゃうな」って時に使う。
- なので白黒画像(色相なし・彩度0)に対しては、基本、Levelと同じ挙動をする
- 6-3 Math
- 画像全体に対して、RGBを定数倍したり、定数分だけ足したりするノードです
- 特に「画像を数値データとして追いかけたい時」とかは重宝するはず。ChannnelMaskも併せて使用
- 6-4 Function
- 画像のRGB値に対して累乗をしたり変な算術関数を適用させて
- それで満足いかない時はGLSLへどうぞ
- 6-5 RGB2HSV
- 後述のHSV2RGBと併せて使い、「HSV補正」を自在にしたい時、使う印象です
- 6-6 HSV2RGB
- 前述のRGB2HSVと併せて使い、「HSV補正」を自在にしたい時、使う印象です
- 6-7 limit
- 6-1 Level
- 7- 変形シリーズ
- 7-1 Transform
- 回転・拡大・縮小、という、基本的な変形ができる。沢山お世話になるはずです
- ※アフィン変換行列の操作、のやや上位互換、とも言えそう。
- 7-2 Displace
- Remapより直感的に画像を歪ますことのできるノード。
- 第2Inputの明るさの分だけ、第1Input画像を縦または横に変形することができる
- 7-3 Remap
- UVマップを第2Inputに与えたら、第1引数をその通りに歪ます、という、汎用性高いノードです。
- Displaceのほぼ上位互換で、Noiseの第2引数への入力も、実はほぼ同じ話だったりする。
- 7-4 Corner pin
- 四隅の移動先を指定することで、長方形→任意の四辺形、への変形ができます
- この変形には有名な名前が付いてるんですが、忘れちゃいました。
- 7-1 Transform
- 8-切り貼りシリーズ
- 8-1 Crop
- 適当な長方形で画像の一部を切り抜くことができます
- 8-2 Fit
- 異なる解像度の画像Input2に合わせて、Input1をサイズ変更して貼りなおす感じです。
- 8-3 Flip
- 横に反転・縦に反転・対角線について反転(2通り)、ができます。単純だけどたまに欲しい奴。
- 8-4 Tile
- 反復して配置することで、単一画像によるタイリングができます。
- 8-1 Crop
- 9- IN/Out系
- 9-1 Movie in
- プリレンダー動画や画像素材を呼び出します。単純ですね
- 9-2 Movie out
- TD内で生成されたTOP(2次元データ)を、画像や動画として書き出します。
- 9-3 Video in
- 動画中継やらWebCamやらを
- 9-4 Point in (我々は使わないかも…SOPと併用が大半です)
- 9-1 Movie in
- GOD- 神ノード
- 選外(3Dレンダリングと併せてしか使わない系)
- 特に説明しません。SOP(3D情報をサポートするノード群)と必ず併せて使うので、我々には不要です。
- 3D-1 Cube Map
- 3D-2 Depth
- 3D-3 Projection
- 3D-4 Render
- 3D-5 Render Pass
- 選外(用途がマニアックすぎて普通使わんだろ系)
- SP-1 Blob track
- 動点を簡易的に検出する機構。ComputerVisionの文脈っすね。かなりマニアック。
- SP-2 Pack
- 多分、高品質な画質を保ったままネットワーク通信で画像を送受信したい・特殊な形式で画像書き出ししたい人が前提。
- 圧縮された特殊な画像を生成するノード
- SP-3 OpenColorIO
- SP-4 Nvidia Flow
- Nvidiaが提供してる流体計算システムを利用して、流体を計算する何かっぽい。
- 流体計算したかったらライブラリ使うかシェーダー書くかが良いと思うんだけどなあ…(そもそもTDでやりたくないよー)
- SP-5 Lookup
- Chopの波形と第1Inputに従ってRGBを生成できる。5-3のChopToみたいだけど、ChopToより少し複雑な生成方法。
- ノードでなされてる操作自体は、そこまで難解ではないと思うのだが、用途が分からん…。使いどころ、どこだ…?
- SP-1 Blob track
0. ここから始まる系
0-1 Constant
・個人的な解釈
とにかくベタ塗り単色を出す。
全ノードの中で1番役割が明快なんじゃなかろうか。
謎にInputが1個あるが、
1・単色をInputの上に半透明で乗せたい
2・画像の解像度やFormatを、Inputと同じものにしたい
あたりが目的になると思う。
・用例

0-2 Circle
・解説
ベタ塗りの円は当然出せるし、フチだけを線として出したり、
中心角を指定できるので、円弧や扇形も出せたりする。

あと、用法2がちょっと面白い

実は「円じゃなく、正多角形だったら何角形でも出せますよ!例えば3角形とか!」という主張ですね。
長方形はいけないけど正方形ならいけるというわけ。

なんなら、こんなのとかも、1ノードで出せたりする
(境界線を違う色にして太くすることで、2色で塗ってるみたいになってる)
・個人的な解釈
UIを構成するうえでマウスポインタの位置と連動させてカーソル表示に使ったり、
意外と自由度が高い(ドーナツ型・扇形・多角形などが可能)なので、その辺慣れると全然違うのかも
0-3 Text
直接テキストの文字列をノードに指定することはできて、
まあ、多くはその用法なんじゃないかな?と思うけど、
用例では「TextDAT, TableDAT, Chop、などから、便利に1手でテキストを取り出す方法を用意しときましたよ!」を丁寧に扱ってますね。
沢山サンプルがありますが
「Chopの値をデバッグ表示するのは、一瞬で出来るよう用意しましたよ!」
という小技の解説ですね。
0-4 Noise
ノイズを提供します。結構強力かもしれません
・第2Inputの謎
これはノイズのUVを歪ませるためのツールだった。R,G,Bが、offset(x,y,z) に対応してるっぽい。
試しに画像(R,G,B) = (vUV.x, vUV.y, 0)な画像を第2Inputに入れると、何もInputを入れないのと同じ状態になるあたりから察せられる。
「ノイズにノイズを入れると、さらにぐちゃぐちゃなノイズができる」のは、そのためであった。
0-5 Ramp
グラデーションを作っています。
ある意味、Constantノードの上位互換とも解釈できます
Tableに各Key、つまり「位置と色」の列、が入ってて、それを読み込んでます。
RampTOP側は、Tableを編集するUIを用意しました、という形です
・用法


つまり、Keysの間の補完は、線形補間以外も選ぶことができ、特にStepにすると、パキッとした色の配置が可能だというわけですね
極座標にしたうえで、θ方向のグラデ、r方向のグラデどちらも選べますし、
ただ、

この用例4だけは、何言ってるか難解かも。TDに多少慣れた人じゃないと読み解けない。
理解するには要点が3つほどある。
コンテナは、
・マウスクリックされたU,Vをテーブルに渡す
・hsvrgb1 のTOPを、背景に表示している
ことしかしてないです。わりと、なんの変哲もない箱ですね。
evaluateDATが少しくせ者で、「入力テーブルの各セルを、Pythonコードだと思って計算した結果を、各セルに表示させる」と言うノードですね
で、とにかくrampノードの参照するテーブルは、所定の5列の形式を満たしてればOKなので、それをプロシージャルに作ったという形です
で最後にhsv2rgbですが、画像のR,G,Bを順にH,S,Vだと思って色変換します。そのRGBを計算した結果を画像としています。
Rampは赤成分だけが変化してますから、HSVとしてはHueのみが変化しているため、Rが変化すると色相がどんどん変化することになります。よって生成後の画像は、色相をたくさんまたいだサイケデリックな画像になります
TDの初中級技をいくつも使ったこの用例は、TDを一通り1周してる人がようやく「あー、そんな使い方もありか!」と面白がるような用法だと思ってて、そんなのもあるんだなという気持ち
1.ブレンド系
Composite TOPが、ブレンド系ノード群のほとんど上位互換なのですが、
これらをひとまず識別除外するだけで「あーこいつら、ただのブレンドか」となり、
TOPノード群から結構な数が消え、一気に全体の見通しが少し良くなります
1-1: Add Top
Sample1 : "Add images rgb"
"The Add TOP can take 2 inputs and add their color values together."
【意訳】インプットは2個取るんだ、とにかくそのRGBの値を足してんだ、
…って言ってますね。その通りだと思います。単なる加算だからそれ以上説明しようないですよね。

Sample2 : "Add multiples in multi-Passes"
"A little-known occasionally-useful feature in TOPs is the Passes parameter that repeats an operation multiple times, in this case a repeated scale/rotate on a square.
You can also uses Passes to act as a Bypass by setting it to 0 or 1 based on an expression or an export."
【意訳】主旨としては
・マルチパス機能、あんまり知られてないけど便利だよ。
・2以上の値を入れると、複数回そのノードの処理をさせられて便利だよ
・回転拡大とか噛ませるとトリッキーなこともできるよ
・逆に「0」を使うとバイパス機能と等価なので、ここにエクスプレッションコードを挟むと、プログラマブルにバイパスOn/Offできますよ
…という所でしょうか。

加算(Add)の説明じゃなく、この用例、本質的には、「とにかくマルチパスの使い方を説明したい!」という話ですね。
マルチパスの説明をするためにたまたまAddノードを選んだ形です。
入門・初級、を飛び越えて、中級向けの題材だと思います。普通にトリッキーです。
いちばん頻繁に使うシチュエーションは「ぼかし」つまりBlurノードじゃないかな?と思います。
ちょっと喋りましょうかね。
まず、Commonタブにある、Passesという数値ですが、ふつうは「1」です。

Passes:1とありますね。ほとんどのTOPノードには、この項目があります。
で、意味はというと、
「そのノードを何回適用させるか?」に相当します
つまり2以上にすると、その数だけそのノードがコピーされた結果になります。
あんまピンと来ないですよね?図が必要だと思うので出しますが…
まず、1番シンプルなパターンは、これです。

ノード2について、Passes:3 とすると、
「出力を繰り返し入力に突っ込み、そのノードの処理を3回繰り返す」操作に相当します。
図、まんまです。
Inputが2つ以上あるノードでこれをやると少しややこしいですが、

基本的にはこうなります。
もう少し違う形の例も出すと

こうです。
さて、今回のサンプルはというと…


たった2ノードではありますが、複数Passのおかげで、非常にトリッキーなことになってます。
問題のAddに関しては、
・「Input1を7°回転させ0.89倍拡大した画像」「Input2そのまま」の2つを加算させる
・Passes:30なので、それを30回繰り返す
ということを、Addノードのパラメータは言ってます。
図に起こすと、こうですね。

加算が1回起こる度、次々に自己相似な形がくっついていく様子が分かると思います。
かなりトリッキーです。
Passesの使い方として、まあ、よくも考えたよなーって感想です
Sample3 : "Transform and Add"
"This example performs basic transform operations on the incoming signals."
【意訳】Addする際に、第1Inputを変形させて、第2Inputと足すことができるよ、
…って言ってますね。
どう考えてもSample2と順序が逆ですね。
これを見てからSample2を見ると、少し話が分かりやすいのではと思います。

Addに限らず、色んなノードに「とりあえずtransformも同時に出来るよ」という機能がくっついてるパターンが多いです。
しかし個人的には、各ノードの役割をしっかりさせる(設計でいう、単一クラス単一責任の原則)方が見やすいと思うため、
何かの操作とtransform操作を同時にやるのは避け、別途transformノードを設けるのが良いのではないかと思います
(それこそSample2のようにPassesを使ってトリッキーなことをやりたいだとか特別な意図があれば別ですが…)
AddノードとTransformノードを、別々に記述した方が、初見の人が「ああ、回転して足したいのか」と見た瞬間意図を汲み取れるため、そして時間が経ったときに自分も読みやすいため、可読性も考慮した配置がよいだろうと思います。
過激かもしれませんがLevelノードとかも、「ネガを取る」とか「コントラストやガンマ補正」など、役割が違う操作であれば、2個のLevelノードに分けて置く方が、見通し良くなるんじゃないかなと思います
(すみません、脱線しました)
また、FixedLayerをどっちにするの?の選択は大事で、最初は詰まりポイントじゃないかな?と思います

1番上の項目に「Fixed Layer」ってありますよね?
これが「解像度やアスペクト比を、入力1か2かどちらに合わすの?」って話になります。
何気に使う機会多いのでは?と思うので要注意です
1-2: Multiplyノード
Sample1 : "Multiply"
"The multiply TOP performs a multiply operation:
input1.rgba * input2.rgba
In multiply1 it is set to use to output the resolution of the first input. By default it outputs the resolution of the second input, like other 2-input combiners. "
【意訳】
・RGBAについて、それぞれのかけ算の値がOutputされるよ
という話と、もう1つ、AddのSample3と同様、
・Fixed InputはデフォルトだとInput2に設定されるから注意しようね、Input1に合わせたかったらFixed Inputいじってね
という話がされてます。

なんか、そのまんまですねえ…。
アルファも同様に乗算される点に注意です。
ちなみに「アルファは処理したくない!RGBだけについて操作したい!」みたいなとき

ここの下から2番目のChannnel Maskをいじるのが便利かなと思います。こいつも便利ですよ(初中級Tips)
例えば「RG」だけチェック入れると、RとGチャンネルだけ乗算をし、BとAは、Input1の値をそのまま持ってくることになります。
1-3 Over
基本的には、半透明部分や透明部分を含む画像(Input1)を、画像(Input2)の上に「乗せる」ノードです。
このノードの説明に関しては、Snippet内でどこにもされてません。「まあ察せるよね」と言わんばかりです
Fixed Layerによって、解像度をどちらに合わせるかの指定はありますが、
乗せる順序は固定で、明白に「Input1が上、Input2が下」という順序で乗せられます。(Under TOP は、この上下の順序を逆にしただけのノードです…)
しかし、Crop・Fit・Resolutionノードらの代わりとして使う小技もあります(Sample3で紹介されてる)
Sample1 : "Pre fit"
The Pre Fit parameters give you various options to how the compositing will occur.
【意訳】パラメータ「Pre Fit」で、2枚の画像のサイズの関係性を選べるよ、というところでしょうか。
「縦幅が合うように乗せるの?=Fit Vertical」「横幅が合うように乗せる?=Fit Horizontal」「どちらもはみ出さない最大サイズになるよう、横幅か縦幅かを自動的に選ぶ?=Fit best」みたいな感じですかね(瑣末な話なので、やってみてほしいです)
Verticalが縦方向、Horizontalが水平方向です。ちなみにHorizonが"地平線"だ

Snippets全体に言えることですが、ノード名にも注目です。ちょっとむかつきますが、ノード名が重要なメッセージを言ってることが、どうやら結構多いです。
今回だと、ノード名に"over_fit_best" "over_manual_position_scale_rotate"とありますね。
前者は、"Fit Best"を選ぶことで「自動的に」ピッタリ収まる配置をとったけど、後者は、Transform部分のパラメータをいじっくて、好きな位置回転拡大を指定して好きな所に配置しましたよ、という話ですね。
「ノード名からその意図を読み取ってくれ」って言ってるようなもんですね。
Sample2 : "Fit Outside"
Fit Outside is useful in situations where you'd like to overlay one image onto another completely, and removes the chance of any edges being missed.
Better yet, see the Fit TOP.
【意訳】Pre Fitに関して、Fit Outsideを選ぶと、余白を1ピクセルも周囲に残さずに、端いっぱいまで指定解像度に対して画像を敷き詰めることができます。
そんなシチュエーションありますよね? このように、Over TOPでもそれが出来ちゃいますが、Fit TOP の方が無難です。Fit TOPの用例を見て下さい
というところでしょう。

白いconstantノードの解像度を色々変えても、隙間なくmovie inの画像を貼れますよ、ということです
Sample3 : "Resolution"
A handy trick to scale content to a specific resolution is to use an Over TOP.
But you can more easily feed the Movie File In TOP to a Constant TOP, or more easily yet, use a Fit TOP.
【意訳】2つのInputの一方にもう一方の解像度を合わせたい時、Over TOPでやる小技があるよ、
例えば今回はMovie File InをConstant TOPに合わせてるが、こういう状況ではしかし、OverじゃなくFit TOPでやる方が簡単です
詳しくはFit TOPを見てくれ
という感じで、Sample2に引き続き、小技の紹介です。
「解像度を合わせる」のに、消極的理由でOver使った、という風に見えます。
で、確かに、この手の小技やる場合はFit TOPの方が良いので、説明はFit TOPに委ねましょう。

ここまで見る通り、Sample2,3は、本質的にOverの説明では全然なく、知る必要性も薄い小技です。 むしろ、Sample1も含め、「Overは使い方直感的に分かるよね?だからそこは説明せず、パラメータを用いた小技を紹介するわ」というのがとても伝わります。
1-4 Inside
Sample1 : "Insert image where alpha >0"
The Inside TOP places Input1 "inside" Input2. The alpha of Input2 is used to determine what parts of the Input1 image are visible.
See also the blendModes component in the palette.
【意訳】
・Inside TOPが、Input2の"内側に"(inside)、Input1を置くノードです。つまり、Input2の画像は、アルファのみが参照され、これを見て、Input1を表示するか否かが決定されます
・Paletteの中に"BlendModes"という便利コンポーネントがあるので、そちらも見るといいよ
とのことです。
素直に「Inside TOPとは何か?」の説明をする用例なのは、嬉しい所なのですが、
うーん…
RGBはInput1のみを採用するけど、アルファだけはInput2を考慮するよ、って感じですね。
逆に言えば、Input2の透明な場所を、強制的にInput1の画像上で透明に書き換える、ということです
【もう少し厳密な説明】
より厳密には、Outputのアルファは、Input1のアルファとInput2のアルファの積になるっぽいです。
Sampleタイトルが「アルファが0より大の場所に、画像を置く」とありますが、ちょっと悪質なタイトルだなと思います
【シェーダー分かる人へ】
結局、GLSLで言うところ、Inside TOPは、以下の1行と完全等価です。
return vec4(input1.rgb*input2.a, input1.a*input2.a)

用例を見る限りでも、それ以外の使い方は特になさそうな感じ。
ちなみに、Input1に半透明を含む画像の場合は、こんな感じになります

下図は、Input1もInput2も半透明を含む場合

下図はGLSLで等価再現

1-5 Difference
Sample1 : Difference
・内容
2つの画像の絶対値の差ですね。
Photoshopにも標準で入ってるブレンドモードだったりしますが、これみんな、どういうシチュエーションで使うのかな。
個人的には「この2つのノードってちゃんと同じ結果を吐き出してるかな?」を調べる、さらにそれを利用して「この2つの処理群は等価表現になってるかな?」というデバッグ目的で便利だと思っていますが、、
あと、2つの似た絵を作ったときに「どのくらい絵として寄せれたかな」の指標になったりとか・・・
・用例
もしかすると用例分かりにくいかも。しかも少しマニアックな使用法だと思うんよなあ…
この例の中では、本質的な部分はここですね。

ここでの「Cache」は、1フレーム前の、左のノードの画像を出力している。
CacheやFeedbackなどいくつかのノードは、フレームを超えて画像を記憶できる性質があります。
Diffは、2つの画像の差分の絶対値かな。
結果的に、switchの現在フレームと、switchの1フレーム前の画像との、差分を表示してますね。
で、適当なプリレンダームービーの場合と、WebCam使った場合とで、
内容的には同じ処理だけど、例を2つ見せてますよ、と言う具合です。
1-6 Cross
Sample 1 : Cross
The Cross TOP crossfades between its two inputs.
【意訳】2つの入力画像間をクロスフェードさせます。

クロスフェードですね。パラメータで画像1・画像2の間を移動します。この値をどう動かすかがカギです。
Inputが2つしかないため、2つの画像についてのみクロスフェードを行うこととなります(3つ以上は無理です)
そのため、多数のInputを受け付けてクロスフェードも可能な「Switchノード」の、下位互換となります。
Sample 2 : Transform
The Transform page of the Cross TOP allows you to do basic transform operations on the inputs, thus saving you from having to use a separate Transform TOP afterwards.
The Fixed Layer is Input 1 so the transform is only applied to Input 2, and the output resolution is Input 1, the Fixed Layer
【意訳】
Crossするにあたり、片方の画像にTransform(平行移動・回転・拡大)を適用させることができます
この例では、解像度をInput1に合わせて基準とし、Input2の画像を「下に270pxずらした上で」合成しています。

TDのTOPでは、非常にあるあるです。「ついでに片方をTransformできるよ」ってやつですね。
1-7 Switch
Sample 1 : No blend
This example snaps between inputs.
【意訳】ブレンドせず、順番にInput1~4を表示します

簡単ですよ、
![]()
ここですね。
"Blend between inputs"にチェックを入れた場合ですが、
Indexの値が整数じゃない時に「その値に応じたブレンド」がOutputされます
例えば1.2だったら、Index1とIndex2が8:2でアルファブレンドされてる状態ですよね。
逆に"Blend between inputs"にチェックがない場合、Sample 1のように
(Index値が中途半端な値を経て滑らかに遷移したとしても)ブレンドされずにパチパチと切り替わる形となります。
Sample 2 : Blend
This example blends between inputs smoothly in a cycle of 4 images.
It uses tricky technique to handle the case of going from the last image back to the first image without passing through the other 2 images. There must be a better way!
The switch_blend also forces the resolution to be 1280x720. Otherwise its output res switches between the various resolutions of the inputs
【意訳】
4つの画像間を滑らかにブレンドしています。
特に、画像0→1→2→3→0、と、サイクリックに遷移するため、3から0番に戻る時は、1番と2番を経由しないようにする工夫がしてあります。
でも流石にこれより良い方法があるに違いないです。
またSwitch TOPにおいて、解像度は1280x720で強制してます。強制がないと、Outputは色んな解像度を行き来してしまい、残念なことになります。

ノードたちが何をやってるのか非常~に読みにくいのですが、
"count2"と"filter2"ノードに対して、「値が4に到達したら強制的に0にリセットするよう値を書き換える」操作が、Python(chopexec1ノード)によって強制的に成されてます。
かなり強引ではありますが、4と0は同じIndexを表すため、「4になった瞬間0にしたい」わけですね。
それで、0~1~2~3~4(=0)を滑らかに遷移していくため、4枚の画像を滑らかにブレンドしながら切り替わることとなります。
Sample 3 : Simple switch
This is a better way to blend without using the expression and Execute DAT.
Note the expression in count1 to calculat ethe number of inputs to the Switch TOP. matt r
【意訳】
Pythonによる力業制御を無くした、マシな方法がこれです。
とはいえ、count1ノードには逆にPython記述を入れてみました(switch_blendに入力されてる画像の枚数を取得し、カウントを制御しています)

結局これも"Index"の値を、どう動かそうか?という話でしかありません。ので本質的にCHOPでの値の操作の話になってしまいます。
count3ノードでは、limit maxパラメータに、Pythonによる記述がありますね。
switch_blendに入力されてる画像の枚数によって、ここの値が自動的に変わるようなPythonが仕組まれています。
"lag1"ノードは、「入力してきてる数値変化に遅延を入れる」役割ですが、「増加時は遅延するのに現象時は遅延なく追随する」なんていう指定が出来ます。
つまりLagパラメータの 0.5 / 0.0 という値がそうで、各々、増加時と減少時、に対応した遅延時間です。器用なことをしますね。
1-8 Matte
Sample 1 : matte
This image in input1 is revealed by the luminance of the image in the 3rd input.
【意訳】Input1とInput2をブレンドさせますが、Input3の輝度によってその比重を変えてます。

Input3が、「Input1とInput2のいずれを採用するか」のMapのような役割をしてますね。 画像の、部分ごとにInput1が濃いエリア・Input2が濃いエリア、を指定できますが、その塗り分けMapをInput3で与えるというわけですね。 "Matte Channel"パラメータがあり、こちらでLuminance(輝度)を選ぶことで、今回のサンプルみたくなります。
Sample 2 : matte2
【意訳】In this case, the Alpha of Ramp1/3rd input controls the opacity of input 2. By default it uses the luminance of input 3.
この場合、Input3の「アルファ」が、Input1と2の比率を決めてます。デフォルトでは「輝度」です。

先程Sample1では、Input3の輝度をMapとしてましたが、今回は、Input3のアルファですね。 やはりこれも"Matte Channel"パラメータでAlphaを選ぶだけでOKです。
1-SP Composite
Compositeノード、これは、AddやMultiplyをはじめ、全てのブレンドモードの代用になれます。
実は、ほとんど全部(SwitchやCrossはブレンドとは少し違うので除く)のブレンドに関しては、このノードが上位互換になってます。
つまり
・3枚以上の画像も入力出来て
・ブレンドモードは全てプルダウンから選択できる
という、超強力なノードですね。
「じゃあAddとかMultiplyなんて使わなくていいじゃん!」というのも多少そうですが、
プログラミングの型みたいな話かもしれないです。(TypeScriptが好きという人も居るんだという話かもしれない)
つまり、わざわざ変更不可能で2枚しか入力できないAddを、Compositeの代わりに置くことで
「ここは加算処理しか入りようがない場所だ!将来変更はここに起こりえないはず!」
という強烈なメッセージを置くこともできます。「Add以外には絶対なりえないのだ!」という。
あとまあ、Addとかの方がプルダウン選ぶ操作が1つ省ける分、若干気軽というのがあります。
Sample 1 : All blend modes
After you look at the examples here, get the example Dialogs -> Tools called blend Modes.
https://docs.derivative.ca/Palette:blendModes
【意訳】"Blend Modes"という便利ツールが、Palette内にあるので是非使ってください
Paletteは、ノード群の組み合わせで作られてある、便利ツールのかたまりのようなものですね。
その中に Blend Modes という、大きい便利ツールがあります。
ご丁寧に幾つかのモードがあって「Selectモード」「Crossfadeモード」「VJモード」の3つだそうな(少なくともTD2023.12000で確認してる限りはそうです)

「全てのブレンドモードを一覧で眺めて選べる」のも凄い所ですし、「任意の2つのブレンドモードの間を動かせる」とかも凄い所です。

こんな感じで2次元状に動かせたりします。 この存在を知っておくと、ブレンドを色々試したい時にパッと手が動いて、大変便利なのではないでしょうか。 なお「VJモード」と言っても、これをVJに使うにはちょっと機能が心許ないので、実戦向きではないだろうなと思います。
Sample 2 : Methods
There are many different types of compositing algorithms available. Here are a few examples.
【ほぼ直訳】合成方法を沢山選べます。いくつかの例を示します。

2つの画像のブレンドではありますが、
順に、inside, multiply(乗算), outside(insideの逆ですね), divide(除算)、が並んでいます。
いやー…ところで、除算ってどういうシチュエーションに使うんだろうと謎ですが、
画像をデータとして扱ってる時とかは演算として便利な場面があるかもしれません。
Sample 3 : Many inputs
The Composite TOP can take many inputs and composite them simultaneously.
But if the operation is the same, it's better to use pattern matching.
【意訳】
Composite TOPは、3個以上のInputをとって、コンポジットすることができます。
しかし、Inputの名前に共通点がある場合、わざわざノードをInputにつなぐよりも、パターンマッチングを記述してノードを指定した方が早いです。


これ、めっちゃ面白くないですか…?
"image*"とすると、imageで始まる名前のノードは全てコンポジット対象になるということです。
なので、可変個のノードをInputにしたい場合とか、あとからどんどん追加したり頻繁に変更したりするとき、
わざわざノードを組み替えなくていいわけですね。
これは知っておくとお得な機能だと思います
Sample 4 : Transform
This example performs basic transform operations on the incoming signals. 【意訳】基本的なtransform(平行移動・回転・拡大)の操作を、Input2に対して施してます。

一方の画像をずらした上でコンポジットできる、という話ですね。
この用例では composite TOP が、ブレンドと平行移動を両方やってしまってるわけですが、
個人的には、composite TOPはコンポジットのみとして、別途 transform TOP を設ける方が、見やすくて&他人に意図が伝わりやすくて好きです
Sample 5 : Translate step
This example uses the Translate Step parameter to animate inputs 3 and 4.
First input is fixed/static, that is it is not translated. Also it means the output resolution is that of the first input.
The next input steps further than the previous.
【意訳】
Input画像が3枚以上あるという状況前提で、3枚目以降に位置オフセットを入れて「固定幅ずらしながら順次置いていく」ことが可能です。
つまり、Input1は画像全体を占める形で、ここにまずは画像の解像度を合わせるとして、
Input2は、固定位置Aに置き、Input3は位置A+B、Input4は位置A+2B、Input5は位置A+3B… に置いていく、という形で、
ここでいうBが、「ずらす量」すなわち「Translate Stepパラメータ」となります

ピンクと青が、白から多少ズレていますね。結果として等間隔に配置されます。
![]()
この"Translate Step"というパラメータがそれに該当します。
Sample 6-1 : More-1
more examples
a・simple composite of 2 TOPs via the color difference operand
b・simple composite of 2 TOPs via the color multiply operand
c・simple composite of 2 TOPs via the color Max operand
【意訳】
a: 2画像にdifferenceブレンドを適用しただけ
b: 2画像にmultiplyブレンドを適用しただけ
c: 2画像にmaxブレンドを適用しただけ

何のひねりもないです。普通です。
Sample 6-2 : More-2
d・composite of 3 TOPs via the color multiply operand
the image in the 1st input is only 1px x 2px and is repeated on the second inputs resolution to fill the the whole area.
For that the parameter "Pre-Fit Overlay" is set to "Native Resolution" and the Extend Overlay" parameter is set to "Repeat"
【意訳】
(2TOPの間違いかな… まじでTDのSnippetsタイプミスが多すぎる。すごい多さよ…)
2つのTOPの乗算処理ですが、input1が「1px * 2px」という非常に小さい画像です。
"Native Resolution"にすることでinput2の大きい画像の中でも、もとの解像度である「1px * 2px」を保ったまま重ねられるわけですが、
"Extend Overlay : Repeat"がここで効いてきます。当然input2に対し解像度が足りないので引き延ばしが行われますが、「繰り返しタイリング」で残りを埋めていくわけですね。
この2ピクセルの画像が「繰り返しタイリング」されると、結果的に、縞々の模様が全体に出来上がります。
そのような縞々模様を、Input2の写真に乗算で重ねてるわけです。結果としてご覧の出力となります。

結構トリッキーだと思います。
トリッキーゆえに初見で分かりにくいので、複数人開発だと他の人は面食らいそうですね。
あらかじめ縞々画像を用意してからブレンドしなさいよ!分かりにくいから!って思います。
Sample 6-3 : More-3
e・the first input texture to the Composite TOP is scaled to fit the second input textures resolution and then composited via the Difference operand.
f・the first input texture to the Composite TOP is scaled to fit the second input textures resolution vertically and then composited via the Difference operand.
g・the first input texture to the Composite TOP is scaled vertically to fit the second input textures resolution and then composited via the Difference operand. The "Extend Overlay" parameter is set to "Hold" repeating the first and last pixel column of the first input to the extends of the second input.
【意訳】
e,f,g いずれも、Differenceブレンドで、2枚の画像を重ねて、面白い模様を作っています。パラメータがそれぞれ少しずつ工夫してあります。
eは、Input1が、非常に横に細長い画像ですが、Input2の解像度に引き延ばして重ねています。
Input1もrampノードで「円形のグラデーション」を作ってて、少しクセのある画像ですね。
fは、Input1の縦幅をInput2に合わせた形で、transformタブ>Extend Overlayパラメータ、は"Zero"ですね。引き延ばした後の外側はゼロ(真っ黒)で塗られ、Input2に重ねられます。

基本的にはいずれも「Input1を、Input2の解像度に応じて加工し、Differenceブレンドで重ね合わせたよ」ということです。
個人的にDifferenceブレンドって「同じ画像を生成できたと思ったときに誤差がないか確認する」ようなデバッグ目的でしか使ってなかったのですが、
このように「模様を作る」際に、積極的に使って良いかもしれないブレンドモードであるということでした。
Sample 6-4 : More-4
the first input texture to the Composite TOP is scaled horizontally to fit the second input textures resolution and then composited via the XOr operand.
The "Extend Overlay" parameter is set to "Mirror" repeating the first input texture to the extends of the second input.
Via the "Rotate" parameter, the first input is rotated.
【意訳】
「回転」「ミラータイリング」「解像度Fitting」「xorブレンド」の4つが組み合わさった、巧妙な操作です。
まずInput1を、50°回転させてます。
その画像を、外側に繰り返し反復させタイリングで覆いつくす画像を作ります。
解像度はInput2に合わせて、Input2に対してxorというブレンドモードで重ねています。

xorブレンド、に関して、結構考察を試みたのですが、全然読み解けませんでした。
outputのRGBの値に、input2のAも影響しており、どんな式でブレンドされてるのか非常に難解に感じました。
xorというくらいだから、色の値を2進数に直してビット演算とかしてるのかな?と思いましたが(画像処理ソフトウェアでxorブレンドという項目があった場合、そういう操作で実装されてることが多いと思うのですが…)、全然そんなことなさそうです。
すみませんが「謎のブレンドモード」って思ってもらうしかなさそうです。あんまり深い意味を考えず適当に実装されたブレンドモードなのかもしれません。TDが、ルーズな分担体制で多人数開発されてるのだとしたら大いに有り得ます。
Sample 6-5 : More-5
This composite uses the "Translate Step" parameter to offset every input TOP except the first one by a specified amount.
To position the second input texture on the left side of the first input texture, the "Translate" parameter is used.
【意訳】
Composite ノードの「Translate Stepパラメータ」を用いて、Input2つめ以降に「位置オフセット」を入れています。
つまり、2枚目・3枚目・4枚目…に対して、指定量ずつ位置をずらして画像を置いていきます。
1番目のテクスチャが左端に来るよう調整するため、Translate Stepとは別に、Translateパラメータの方も微調整して合わせて下さい。

Sample5で紹介されたTranslate step用例の、応用です。
時を超える系
過去のフレームの画像情報を覚えられるTOPというのは、非常に限られます。
大きく3種類で、Feedback、Cache、Texture3D+TimeMachine、となります。 逆に言えばこの3種類以外は、過去のフレームの画像情報を、未来に引き継ぐことはでき「ません」。
そう考えると、ちょっとTOP群全体の見通しが良くなるのではないでしょうか。
2-1 Feedback
さて、Feedbackノードですね。
TDだと、Feedback芸、で1ジャンルが出来そうなくらい、Feedback TOPを用いた色んな表現が編み出されてるんじゃないか?と思いますが(でそれを紹介するのは私の仕事ではなさそうです)
「結局一言で説明すると、Feedback TOPって何?」という問いにはお答えしましょう。
ずばり「特定のTOPどれかひとつの、"1フレーム前の"画像を出力する」です。
Sample 1 : Time-blur
A simple feedback setup that gives fake motion blur by using a fraction (x) of the current image (transform1) plus 1-x of the prior frame's image.
With the Cross TOP, this has limited blending control.
【意訳】
・transform1の、現フレームの画像を 9%ほど
・最終出力の「1フレーム前」の画像を 91%ほど
で、クロスブレンドしたものを、最終出力の現フレームとしています。
Cross TOPの数値(=2つを混ぜる割合)を変えることで、モーションブラーの強さを変更できます

「時間的なぼかしを作る」=「モーションブラー」の作り方として、1番シンプルな方法です。
そして同時に、Feedback TOP からとってみても、用途としてモーションブラーは1番多いのではないでしょうか。
Sample 2 : Feedback blends
This takes the current image combined with a fraction (reduce_opacity) of the prior image.
You can try different Composite blend modes to control the mixing, and try both rectangle1 and fit1 into rotate:
Screen - tame, versatile, doesn't burn out
Add - more dynamic
Maximum - punchy
Over - will always show source but needs alpha
Difference - psychotic
If you change Source's resolution, change res on constant1 and press Reset on feedback1. Or connect your source into feedback1 and press Reset tomake it your starting image
【意訳】
Sample1では、Cross TOPによってモーションブラーを作ってましたが、他のブレンドモードでもモーションブラーを作れます。寧ろ、その方が自由度が高くて面白いです。
このSample2では、2か所、積極的に操作して遊んでほしいです
・"rotate"OPに、fit1 が差し込まれてますが、"rectangle 1"OPを差すと、素朴なモーションブラーを確認できます(何ならここに色んな画像を入れてみましょう。例のように透明部分が沢山ある画像のが面白いかも)
・"comp1"のブレンドモードを色々変えてみましょう。
もし解像度を変更した時は、Feedbackノードは「前フレームの解像度」を永遠に参照し続けるため、一旦"Reset"を押して初期化しないと、その辺りは反映されないです。
そのため、初期化に現在入ってる"constant1"の解像度を変更して"Reset"を押す、か、もっと早い方法としては、"source"を"feedback1"につなげて"Reset"を押す、などします。
なお、ブレンドモードは例えば以下のような選択肢があります
・Screen:無難で、白飛びを防げる
・Add :よりダイナミック
・Maximum:パンチが効いてる
・Over:「ソース画像で上塗りされる場所は常にソース画像の色に一致する」などの特徴こそありますが、透明部分がしっかりないと使えないブレンドモードです(逆に言えば、ソース画像の透明部分にのみモーションブラーが残ります)
・Difference:サイコな感じになります

英語の勉強ですけど、"burn out"てのが「白飛び」に相当する単語ですね。
「1フレーム前の出力を少し薄めたもの」と「現フレームのソース画像」を、適当なブレンドモードで合わせ、それを「現フレームの出力」とするのだ、と、
そういう言い方で一般化できます。
Difference思いついた人、すごいですよね。何食べたらここにDifference挟もうって発想になれるんでしょうね。
Sample 3 : Feedback fx
Feedback with more effects. alter nodes:
opacity: Opacity - fade out trail
lumalevel1: boost Gamma or Brightness
reduceHighRed - isolate colors
havadjust1 - Hue Offset, boost Saturation
transform1 - Scale, Translate - expand
displace1 - un-bypass, Displace Weight
noise1
blur1 - Filter Size to soften
edge1 - unbypass, Strength, Edge Color
comp1 - different blend modes
level2 - fill with black (Low A)
Change feedback1 Pixel Format to 16 bit fixed (and press Reset) for better color quantization, or to 32-bit float for better over-driving.
【訳は省略します。直訳はDeepLとかに委ねるし、このSample3の主旨は後述】

単なるモーションブラーに終わらず、Feedbackノードを使った絵の作例!と言う感じですね。
色調補正や微調整が沢山入ってて、沢山パラメータ調整されてて、作りこみを感じさせます。
このSample3も、積極的に操作して試してほしい点が幾つかありそうですね。
・"displace1"ノードと"edge1"ノードが「バイパス」されてます。バイパスを解除し、それぞれの効果を確かめてみましょう。
・ブレンドモード変えてみましょう。色調補正の値を色々変えて、絵の変化を見てみましょう
という所でしょうか。
個人的に、ここでのdisplaceは面白いなと思います。
displace TOPというのは、「Input2の画像に応じて、Input1を部分的に歪ませる」という感じです。
正確には「歪ませる」というよりも「参照をずらす」が近いのですが…。(GLSLで言えばdisplaceの正体って return input2(UV + (input1.rg-0.5)) ですもんね…。)
ともかく、いずれにしても「1フレーム前の出力に、適当な効果を加えた上で、現フレームのソース画像を加える」ということですね。
さて、この「適当な効果」にあたるものが、
・「拡大」の場合、Feedbackによって毎フレームに渡り拡大が繰り返され、結果的に、放射状に画像が拡大される効果となります。
・「ぼかし」の場合、Feedbackによって毎フレームに渡ってぼかし続けられ、結果的に、画像全体にソース画像がなじんでいく効果となります
・「青を強調」の場合、Feedbackによって毎フレーム繰り返されると、過去の残像ほど青くなるため、青いグラデーションが乗ったモーションブラーが出来上がります
…という風に、適当な効果を挟むことで、その効果が「蓄積してく」わけですね。
Feedbackに挟むことでどうなるか?を最初から全て見通すことは難しいため、Feedbackは何回も使い倒して体で覚えるものなのだろうなと思います(私は現場の人間じゃないので全然です)
2-2 Cache
Sample 1 : Basic
The Cache TOP can be used to simply delay images.
Here the Cache Size is set to 11 to hold the current image and the image 10 cooks ago.
The time-delay is not exact because it caches one image per timeline cook, so if you are running about 22 frames per second, it will be a delay of 10/22 seconds.
The Output Index is usually 0 or a negative number, like -10, as you think of the output image being from 10 frames ago.
【意訳】
Cache TOPは、指定したTOPについて数フレーム前の出力を取り出すことができます。
これにあたり「どのTOPをターゲットにして?」「何フレーム覚えておくか?」を指定しておく必要があります。
(Feedback TOPは「1」フレーム前のみ、でしたが、2フレーム以上前を選ぶことができます)
この例では、10フレーム前の画像を表示させるため、(0フレーム前である現在のフレームを合わせると)11フレーム分を保存しています。
FPSが不安定になると、遅延時間も不安定になり、遅延時間の指定が保証されなくなるので注意しましょう。
特にパラメータOutput Indexは「何フレーム前を表示させるか?」の数値に相当します。
つまり、0だと「現在の絵を表示」、負の値だと「そのフレーム数だけ過去の絵を表示」させることになります。

1フレームごとに番号が1変わっていく動画について、Casheされてますが、
実際、スクショの瞬間も、ちょうど10フレームずれてるのが確認できます
Sample 2 : Cache
You can pre-fill all the frames of a Movie File In TOP into a Cache TOP and then scrub through them.
The prefill needs to capture one image of the movie per timeline frame. Here this is done by making the movie play one index per frame, starting at the first frame of then movie (index 0).
You need to use me.time.frame to control what goes into the cache for a certain index. me.time.fame is the local timeline frame number (not absTime.frame):
The prefill is done by secretly moving the frame to 1 and stepping forward one frame per cache image. See the Index parameter of the Movie File In TOP.
The Transform TOP also uses me.time.frame to zoom up from about 20%.
Pre-fil機能は、リアルタイムに過去Nフレームを読み込むというより、予めNフレームを読み込んでそれを保持し続けるモードとなります。
この用例だと、Movie File In TOPの100フレーム分を最初に読み込んでおき、この100フレームを自由に引き出せる状態となります。
(細かい話ですが)me.time.frameとabsTime.frameは異なります。後者はアプリを起動してからの通算フレーム数ですね。
Movie File In TOPの解説の、Indexパラメータも注意しましょう

うーん… Pre-fil機能の説明という感じです。
ですが、transformで拡大が挟まってたりと、イマイチ、ぴんとこない用例かもしれません。
Sample 3 : Pre fill
Two Cache Select TOPs selecting from one Cache TOP.
You can pre-fill all the frames of a Movie File In TOP into a Cache TOP and then scrub through them using two Cache Select TOPs.
【意訳】
2つのCache Select TOPが、ひとつのCache TOPを参照してる状況です。
一旦Cache TOPにMovieの全てのフレームを予め入力(pre-fill) してから、2つのCache Select TOPで、異なるフレーム番号の絵を各々呼び出しています。

Cache Selectの役割を補足します。
沢山のフレームの画像を蓄えたCache TOPから、フレーム数を指定して1枚取り出すのがCache Selectというわけですね。
ですので、Cache Selectを沢山配置すれば、1つのCacheから異なるフレーム番号の絵を同時に沢山取り出すことができます。
Cache TOPだけからは、前の例に見たよう、1つのフレーム番号を指定して1枚の画像を出力することしか出来ません。
どっちかっていうと、Cache Select TOPの説明な気がするんですけどね~、この用例…。
Sample 4 : Trails
This example uses 2 Cache TOPs to create trails of the original image.
By setting the Output Index, you can adjust how close to the current frame the Cache TOPs output is.
【意訳】
2つのCache TOPは、各々、15フレーム・30フレーム前の画像を出力していて、
それらを元の画像に足すことで、トレイル(軌跡)のような表現となっています。
Output Index(=何フレーム前を取ってくるか?)をいじることで、トレイルの重なりを変えられます

トレイルって言い方が個人的にあんまピンと来てないですけど、まあ、間違いではないですよね。
10個くらいCacheを重ねると、「飛び飛びのコマ送り感」を感じさせず、ほんとにトレイル表現みたいになる気はします。
なお、2個のCache TOPは、どちらも同じ画像のキャッシュを蓄えてしまってるため、無駄が多いです。
「複数のフレームを選んで重ねる」みたいな今回の状況では、
まずは1つのCache TOPに過去連番画像を溜めて置き → 多数のCache Select TOPで所望の番号のフレームを取り出す、のが、普通のやり方かなって思います
Sample 5 : Time blur
This simply averages the last 4 frames, like a multi-exposure.
Try Composite TOP Operations Maximum.
This can be made more controllable by adding Level TOPs after each Cache Select TOP and adjust their relative Brightness (like .5, .33, .25, .2), then Add-ing them in comp1.
This would make the most recent frame more visible.
【意訳】
過去4フレームを取り出し、平均をとった画像を出力としただけ、が用例の上半分です。
写真でいう「多重露光」に相当します
ちなみに、Composite TOPのブレンドモードを、Average(平均)、ではなくMaximumに変更してみてください。これはこれで楽しいですよ。
次に下半分についての話ですが、
4フレーム分について「過去のフレームほど明るさを落とす加工」をしてから重ねてみると、
最新のフレームがくっきりしてくれるので、いいバランスのモーションブラーのようになったりします。

モーションブラーのような表現は、CacheではなくFeedback TOPで手軽に組むのが一般的かな?と思いますが、
何フレーム分で消したい・減衰を細かく調整したい、など細かい調整は、
Cacheを使って過去の複数フレームを直接取ってきた方が、やりやすいかもしれません。
Sample 6 : Temporal slope
work-in-progress. pixel > 0 if surface is coming toward camera.
【意訳】この用例は、まだ未完成です。
3Dレンダリングの、デプスカメラの結果について、
現在と1フレーム前との差分を比較することで、各ピクセルにおける「デプスの変化率」を取得できます。
つまり、そのピクセルで物体が奥に動いているか手前に動いているかのMapを生成できます。

1フレーム前の情報を単純に使うだけだから、Feedbackノードでよかろ?とはまず思ってます。
前フレームから現在フレームを引くことで、時間変化を見ることができますね。
一方、Cacheノードを使って2フレーム前・3フレーム前を取得して比較することで
2階微分・3階微分、のMapを作ることも出来ます(3階以上はあんまり意味もたない気はしますが)
でも確かにそうですね。「過去情報を取得」した後の大きな用途の1つには、やはり「微分情報の取得」がありますよね。
微積分が何か?を知ってる前提が必要ですが、↑の話は、
「プログラミングにおける数値微分」を調べてもらったら腑に落ちてもらえるかも?と思います
2-3 Cache Select
Sample 1 : Basic
The Cache Select TOP allows you to extract a frame from a Cache TOP.
First you need, on the Cache TOP, to turn Active on for a few seconds to fill the cache. Then the Cache TOP has enough frames to fetch with the Cache Select TOP.
In this case we can use the slider to scrub back through time and off-set the Cache TOP relative to the total number of frames in the original movie. Pausing the time line and using the slider to scrub backwards through time will help to illustrate how this works.
Note that you can have several Cache Select TOPs retrieving from one Cache TOP.
【意訳】
Cache TOPから、特定のフレーム番号を指定して取ってくるのがCache Select TOPです。
ので、注意点としては2つ、
・Cache Sizeが、指定したフレーム番号以上である必要がある(20フレーム前を取り出したいのであれば、そのCacheTOPは、常に過去20フレーム分以上保持してる必要がありますよね。保持してる枚数 = Cache Sizeパラメータは20以上である必要があります)
・Cacheが動き始めてからの時間経過が、指定したフレーム番号以上である必要がある(20フレーム前を取り出そうとしてるのに、起動後10フレームしか経過してないなら、そりゃ無理ですよね。Cache Selectが機能するには、Cacheが動き出してから少し待つ必要があります)
というところには留意です。
また、Cache TOP 1つに対して、複数のCache Select TOPを割り当てられることは一応述べておきます。(というか、そういう状態じゃないとCache TOP単品で事足ります)

Cache TOPで、Cashe Select TOPの説明は散々されてるため、特にそれ以上の情報はここにはないです。
用例では、スライダーで操作できる -100~0の値だけ、動画をオフセット(というか遅延)して、表示してますよ、ということですね。
フレーム番号の指定(Cache Index)は、Cache Size以内であれば、激しく自由に変動させても問題ないため、非線形な時間の動きを作れたりもします。
この辺りは工夫すると楽しい表現作れるところかもしれませんね。
2-4 Texture 3D
Cache TOPとほぼ同じ、というのが正直な所かもしれません…。
結局のところ、「N枚の画像が格納されてる」ようなノードです。
「第1フレーム目から第Nフレームまでの連続N枚を最初に取得して永遠に保持」または「直近Nフレーム分が格納されているように常に履歴を更新」か、どちらかである、というのもCache TOPと全く同じです
(なお前者をPre-fill モード、と呼ぶそうです。「事前に埋めつくしておく」が直訳ですね)
違いとしては、Time Machine TOPには、CacheノードじゃなくTexture 3D TOPしか受け付けないこと、くらいの、細かな所くらいです。
Sample 1 : 3D Texture from stills
完全にSOPやレンダリング中心の3DCGが題材なので、説明を割愛します!!
Sample 2 : 3D Texture from movie
To create a 3D texture, you need to fill it with a sequence of 2D images, in this case 32 of them.
The way it's done now is to imagine it's building the 32 images by going to frame 1 on the timeline,cooking the image that feeds into the tex3d1 TOP, then going to frame 2 and cooking the image again,until all 32 images are cooked.
So the way to make all the images different is to put "me.time.frame" in the OPs that feed into tex3d1.
In this case, moviefilein1 has me.time.frame in the Index parameter to get the first image of the movie ontimeline frame 1. That parameter's index units is set to "I" (index), in case the movie has a different frames per second (such as 25 images per second) than the timeline. So frame 23 is always going to be image 22 of the file (where index starts at 0, frame starts at 1). In this way, no images are missed or duplicated in the 3D teture.
The HSV Adjust TOP also has an expression involving me.time.frame, where it goes through the full color wheel in 32 steps.
You can leave Pre-Fill on, it will cook once after you start your .toe file, or you can click the Pulse button to cook it when you change OPs in your network feeding into the CHOP.
【意訳】
・とにかく、普通の2Dテクスチャが何枚も沢山詰められたのが、3Dテクスチャです
(この意味ではCache TOPと極めて似ています。ほとんどの人にとっては、同じと思って差し支えないかも)
・挙動は、Pre-filモードか否かで大きく違います。ここが躓きポイントです(Cache TOPも同じですが…)
☆ Pre-filモードの場合は、Pre-fillがOnにされた時やアプリ起動時に、「1フレーム目から順にNフレーム再生したベイク結果」をまとめて書き出し、その後、永遠に使い回します。なので、最初の瞬間に、Nフレーム分のノード群の処理を計算する非常に重たい操作が走ります。
☆ Pre-filモードじゃない時は、素直に、過去Nフレーム分(Step Size が1じゃない時は、Step Sizeフレームごとに過去N枚)の画像履歴を、常に更新し続けます。直近のN枚数分だけ格納されてます。
枚数NというのはCache Sizeです。
・工夫として、Movie File In TOPのインデックスを、F(フレーム)じゃなくI (インデックス)に指定してますが、そうしないと、動画ファイルのFPSとTDファイルのFPSが一致しない時に「1フレームに1枚ずつ読み込む」ことが出来なくなってしまいます(飛ばしたり、同じコマを2回拾ったりする)。なのでここは I を指定することも1つポイントです。

2-5 Time Machine
Sample 1 : Time Machine
The Time Machine TOP is always used with the Texture 3D TOP. (See the snippets for Texture 3D TOP.)
The 3D texture is loaded (via Pre Fill, which runs the timeline from frame 1 to frame (cache size * step size = 32 frames here) and puts it in a 3D texture.
The Time Machine TOP fetches from the 3D texture. Where level2 is black, it gets from the lower slices of the 3D texture. Where it is white it get from the upper slices of the 3D texture.
That is, each pixel of the output uses a slice of the 3D texture based on the grey-scale value of the 2nd input (the ramp).
You can adjust the lower and upper range of the ramp, which restricts which slices in the 3D texture it retrieves from.
【意訳】
Time Machine TOPは、常にTexture 3D TOPと併用します(Texture 3Dの用例も参照のこと)
まずTexture 3Dには、大量のスライスが常に貯蔵されているわけですが、
Input2には、グレースケールの画像を差し込まれ、これが「Texture 3Dのどの時刻のスライスを使うか?」を指示するMapとなります。
黒は下部(過去)のスライス、白は上部(現在)のスライス、グレーは黒に近いほど過去・白に近いほど現在、です。
用例では、Input1に32フレーム分の画像、Input2に「中心付近が黒、外側が白」の画像が差されてますが、「中心は32フレーム前の画像・外側は現在の画像・間はそれをグラデーションしている」という状況となります。
すなわち「画像内の地域によって表示する時刻 (過去or現在)を変える」「1枚の画像に、ある画像の"何フレームも前の絵"と"現在の絵"を混ぜることができる」とも言い換えられ、
Cache SelectやFeedbackより、随分とややこしい時系列操作をすることができます。

19
エフェクト系
3-1 Blur
Blur、ぼかしのことですね。
もう少し具体的に言うと、「自分のピクセル周りの平均」をとった画像を返す、みたいな方法が原始的です。
すると、「均され」ますよね? 極端な色のピクセルがあっても、平均を取られて潰れます。
それが「ぼかし」という操作に他なりませんね。
例えば、どんなにチクチクした地面でも「全地点、周囲半径10cmの平均を取った高さを、新たな高さにします」とすれば、チクチクは均一になるはずです。あれっ、この例示、伝わるのでしょうか…。
一方、どのような重みづけで平均を取るのか?何を以ってして平均と言うのか?は諸説あり、この値や種類によってBlurにも分類や呼び方があったりはしますが、そこは一旦考えないでおきましょう。
Sample 1 : Simple blur
The simplest blur with the Filter Size parameter.
【意訳】いっちばんシンプルなBlurで、Filter Size パラメータに注目です。
Filter Sizeを大小させることで、ぼかしの強さが変わることが確認できます。

Sample 2 : Preshrink and blur
A faster and more extreme blur by shrinking the image and blurring that.
It internally scales it up again.
【意訳】縮小した画像に対してBlurすることで、より早く強いぼかしを得られます。縮小画像は元の大きさに拡大して返されます。

Preshrinkとは「事前に縮小する」くらいに訳せると思うのですが、
内部の動きとしては
・パラメータの数値で割った解像度に縮小する(300x400 の画像で、preshrink=4 なら、4で割った75x100の縮小画像をまずは作る)
・その縮小画像をBlurする
・もとの解像度になるよう拡大する(75x100 -> 300x400、というふうに)
という3段構えの操作となります。
Sample 3 :Blur fraction of image
Assume you don't know what the incoming resolution is, but you know you want to blur 10% of the width of whatever image comes in.
The Filter Size parameter is expressed in pixels and will be the horizontal resolution * .1.
Try connecting butterfly128 to blur Fractiom.
【意訳】ピクセル数によって「ぼかす大きさ」を決めるのでは、大きい解像度/小さい解像度で入ってきた時で、ぼかす範囲に差が出てしまいます。
そこでFiliter Sizeに、入力画像の解像度に比例した値を入力すれば、入ってくる画像の解像度に関係なく、一定割合のぼかしを実現できる、というアイディアです。
例えば今回は、入力画像の10%の大きさを「サンプル範囲」として平均したぼかしとしてます。

強いて言うなら、入力解像度が大きいほど、平均を計算するのに要するサンプルピクセル数が多くなるため、処理がとても重くなるのに留意、という所でしょうか。
1辺の4乗くらい(=総ピクセル数の2乗くらい) に比例した処理負荷になります。直感以上に解像度の影響を受けますね。
Sample 4 : Sample step
The sample step controls the direction that the blur is applied.
【意訳】Sample stepパラメータによって、ぼかしの方向を操作できます。

もっと具体的に言うと、「1つ隣のサンプリングを、何ピクセル隣で取るか?」ですね。
「2,0」だと、横方向は2ピクセルおきにずらして集めたピクセルたちの平均を、ぼかしの結果としますが、
縦方向にはずらさずにサンプルを集めて平均を取る、ということですね。
色の情報を縦方向には均さないため、この場合は結果として、横方向のぼかしになる、ということです。
Sample 5 : Rotation
In this example the direction of the blur is rotated.
【意訳】この例では、ぼかしの方向を回転させてます。

パラメータ Rotate Kernel で、度数を指定すると、Blurの方向をその分だけ回転させれるということですね。
時間変化させたり、使い方工夫するとなんか面白い表現になるかもしれません。
Sample 6 : Quality
The Pre-Shrink and Filter size control the amount and quality of the blur.
Pre-shrink of 2 or 4 etc will first reduce the image resolution, then the blur is appled to the smaller image, and then it is scaled up. This is less accurate but much faster.
【意訳】
Pre-ShrinkとFilter sizeは、ぼかしの「質」と「量」をつかさどります。Sample2のPre-shrinkも既に少し話してます。
特にPre-shrinkパラメータは2や4なんかがよく使われて(ちなみにそれって2倍や4倍に縮小することに相当しますが)、
縮小されてピクセル数が大幅に減った分(4倍縮小だと、その2乗で、ピクセル数は16倍減ってますね)、ぼかしの処理に要する計算回数も減ってるということです。そりゃ小さい画像の方がぼかし処理に要する手数は少ないですよね。
ただその代償に、ぼかしの品質は落ちます。
用例で見せてる通りですが、Pre-shrinkも、軽量化したいといってやりすぎるとイマイチな絵になるので注意しましょう
だいぶ意訳ながら、そういう警告をしてるんだろうと思ってます

用例は、Pre-shrink=16としたBlurだと、ピクセルのゴツゴツが見えて、Blurではごまかせないレベルになっている、
ここまでやるとイマイチじゃない?という、悪い例を見せてるように見えます。
Sample 7 : Channel
You can control which channel the blur will affect on the Common page.
【意訳】どのチャンネル(R,G,B,A)をBlurするか、をCommonタブから選べたりもできます

これもアイディアの1つですね。 この例だと、R(赤)だけをブラーしているというわけですね。
Sample 8 : Dithering
You can use a Blur TOP to dither an incoming signal. This is helpful when working with low quality assets where there is color banding.
【意訳】インプット画像をディザリングする時にBlur TOPが使えます。カラーバンドが出現してるような画像素材を使うとき役に立ちます

ただ、用例中で作られたディザリングの結果が、あまりイケてない感じがします。
ディザリング作るなら「ホワイトノイズを閾値として元画像を二値化する」などのほうが良い方法になりそうだと思いますし、あんまりいい例とは思えません。
なお、ディザリングは、この辺り↓が説明の1つです。
e-words.jp
Sample 9 : Erode
Generates a softened alpha channel from the alpha of the original image.
blur1 determines how far to cut into the edge.
Near the edge, blurred alpha is about .5, so lookup eliminates alpha outside the border where alpha < .5.
lookup1 TOP is set to display alpha channel. In the Inside TOP, this alpha/Input 2 is used to determine what parts of the Input1 image are visible.
まず"erode"って単語、あんまり日常的に見ないと思うんですが、恐らく「浸食」って意味で使われがちですね。
たとえば水の波によって、海岸の岩や崖が、時間をかけてじりじり削り取られていくイメージです。
(英単語の実感がわかない時、そのワードで画像検索してみる、とか手ですよ。実際そういう画像が沢山でてきます)

Sample 10 : Bloom
Threhhold with a little softness. Could use Luma Level instead with Black Level raised.
Blur pre-shrink to spread out more with lower GPU cost. 16 bit on Pixel Format to avoid low-level stepping.
Luma Level vs Level to heep sue-saturation of glow closer to original. Could use a little Gamma vs increasing Brightness to avoid clipping at 1.
Screen in Composite to avoid the clamping that Level would give.
【意訳】
まず閾値以上の明るさの画素だけ切り抜きます。ここはLumaLevelで白黒パッキリさせる操作で代替してもOKです。

「ぼかしたものを、元の画像にAddかScreenかする」ことで、Bloom(明るい所の輝きが拡散するような効果)を実現できる、というのは、画像加工屋さんからすると、常套手段の1つじゃないでしょうか。
この例では具体的には
・ある閾値以上の明るさの部分を選び
・Blurを施して、その白色を少し拡散させ、
・レベル補正によって、拡散された輝きを強くして
・元の画像にScreenする
という手順を採ってます。
Blurに関しては、怒涛のサンプル10個でしたが、 1つ1つのサンプルは言ってるメッセージは少なく、Blurの色んなパラメータ・色んな用法を説明する感じでした。
次に紹介するLuma Blurノードのような「画像上の部分によってBlurの強さを変える」とかは出来なさそうですが、
逆にBlurノードの場合は、Sample Stepなどの「ぼかし具合にまつわるパラメータ」を結構操作できるということです。
どちらが優れてるというわけではなく、一長一短な関係になってそうです。
3-2 Luma Blur
Sample 1 : Filter types
These examples show the difference between using a white filter or black filter. See Black Filter Width and White Filter Width parameters.
They also have different blur Types applied.
【意訳】
ホワイトフィルターとブラックフィルターの違いをこの例で見せてます。
特に、2つのパラメータ:Black Filter WidthとWhite Filter Widthに注意してください。
2つのLuma Blurについて、それぞれ、黒の領域でBlurを強くするのか、白の領域でBlurが強くするのか、対照的な結果になっているのが見て取れます。
結局の所、Filter Widthというのが、「周囲何ピクセルにまたがってBlurを施すのか?」に相当します。
つまりこの値が強いほど、強いぼかしになるわけですが…
で、この値を、画像の部分ごとに変更できる!というのが、Luma Blurとなります。
どの地域を強くぼかすのか?に関しては、第2Inputの画像で指定をするわけです(Mapを与えるという言い方も出来ます)
2つのパラメータBlack Filter WidthとWhite Filter Widthに関しては、それぞれ、
・第2Inputにおいて、真っ黒である時、Filter Width(=ぼかしの強さ)をどうするか?
・第2Inputにおいて、真っ白である時、Filter Width(=ぼかしの強さ)をどうするか?
の指定となります。
その間、グレーの場合は、この2つの値の間を取られるということです(何らか補間されます)
Black Value / White Valueに関しては、重要じゃない上に説明面倒なので説明しません…。
基本的にデフォルトの0と1で不便しないはずです。

Sample 2 : Luma
This example uses the black and white Count.mov to blur the grid.
【意訳】単なるグラデじゃなくて、動画ファイルを第2Inputに使ってみました

見ての通りです。Sample1と変わった所は本質的には何もないです
なお、Blurノードの場合は「一方向へのぼかし」が可能ですが、こちらLuma Blurでは、 どちらか一方が完全に優れているわけではない、トレードオフな関係の2種類となっております。
3-3 Edge
Sample 1 : Basic edge
The Edge TOP finds edges in an image and highlights them.
For each pixel, it looks at the values at neighboring pixels, and where differences are greater than a threshold, the output's value is higher.
【意訳】
’
Edge TOPは、エッジを検出し、それを画像として出力します。
’
各ピクセルについて「近隣ピクセルとの差を確認し、差が閾値以上だったらそのピクセルはエッジに含まれてる」とみなし、着色し、
’
結果的に画像全体としてエッジを表す画像が出来上がっています。

Sample 2 : Edge facemelt
If you fancy yourself a mad lad, try putting an Edge Detect TOP in a feedback loop.
【意訳】Feedback内にEdge TOPを入れる、とかいう、とち狂ったやり方もありますよ

最初に見つけた人、よくこんな組み方しようとしましたよね。
最初になまこを食べようと思った人ってすごいよね、みたいな話かもです。
結局、ピクセル同士の差が激しい部分が「エッジ」と認定されます。
逆に言えば、なだらかに変化してる場合は、あまりEdge判定されないことになるため、注意です。
3-4 Anti Areas
Sample 1 : Anti-alias by edge detect
The Anti Alias TOP is used to smooth out rough edges on diagonal lines.
It works by performing an edge detection (which can be manipulated by changing the Quality parameter to Custom) then it uses that information to blur the edges.
【意訳】
Anti Alias TOPは、パッキリとした境界線(=空間方向の急激な色変化)を滑らかにします。
エッジ検出を行い、それをもとにエッジ周辺をぼかします。
「エッジ検出」については、検出のさじ加減を変えるパラメータ調整も可能です。その際はQualityで"Custom"を選んで下さい。

「ギザギザなドットが出てる線を、滑らかにする」という意味で、大昔からある用語なのですが、
「ぼかし=Blur と一体何が違うんだ?」と思ったことありませんか?私はあります。
これ、言い方を変えると、アンチエイリアスって結局「強いエッジ(=境界線)になってる部分だけを抽出し、その周辺だけBlur(ぼかし)をいれる」という、実は2段構えの操作なのですね。
Edgeとみなされてない領域では、ぼかしは行われないのです。
ですので、Edge・Blur・適切なコンポジット、を組み合わせることで、アンチエイリアスは再現できます。
3-5 Emboss
Sample 1 : Raised edges
The Emboss TOP creates the effect that an image is embossed in a thin sheet of metal. Edges in the image will appear raised.
【意訳】
Emboss TOPによって、薄い金属板が、インプット画像の形(というかEdge)に沿ってエンボス加工されたかのような効果を生めます。
エッジが浮き上がって見えることでしょう。

「エンボス加工が何か?」を知らないと説明キツイと思います。
硬い金属の型を、厚紙だとか柔らかい金属シートに「押し込む」ことで、半立体に浮き出てるような加工をします。
それを「エンボス加工」と言うのですが、知らなければ是非ググって下さい。CGに関係ない、工業の用語です。
Edge抽出だけでなく、Edgeの向きによって、それが明るくなったり暗くなったりしています。
まるで一方向から光が当たってるかのように、です。
3-6 Normal Map
Sample 1 : Fake Bump
We can use the Normal Map TOP to help enhace the appearance of dimension in our textures by "faking" some of the lighting of bumps in a texture.
Here we create a normal map from our input image, and then use this along with the original image in our Phong MAT.
An additional Level TOP has been used in this example to further draw attention to the effect of the Normal Map.
Use the button to toggle the Normal Map on and off in the Phong Material to better understand the effect of this TOP.
http://en.wikipedia.org/wiki/Normal_mapping
【翻訳は割愛 DeepLとか各々使ってください…】

完全に3DCGの用語なので、3DCGに関わる人ならピンとくる人も多いのかも。
「元の出力をまずモノクロ画像に変換し、それを凹凸とみなした時の曲面の法線を返してる」というのが、日本語での簡潔な説明でしょうか。
出力画像のRGチャンネルで、そこでの法線の方向を表示してます。
説明の仕方はすごく色んなアプローチがあるんですけどね。
「ノーマルマップとは何か?」を学んでもらうと早いかもしれません。
シェーダーっぽく説明するなら "return normalize(vec3(grad(luminance(image)), 1))"と一発回答できます
(もっとも実際のGLSLでは、gradを離散的に計算するのに最低3つのピクセルを参照するわけですが)
非常に簡潔ですね
近隣との色の差分をもとに、でこぼこした
なので、基本的にはXY平面を凸凹させた、z=f(x,y)で表現される曲面、に対して
法線を取ったMapが出力として返ってきます。
具体的には、たぶん(R,G,B) = normalize(vec3(grad(x,y), 1)) みたいなことじゃないかと思います。
例えば、何の変化もない=定数の画像を入力すると、全ての点で、法線は(0,0,1)になったりします。
でも、負の値は画像として表現したくないため、[-1,1]->[0,1]のアフィン変換(ある意味正規化かな)により、強制的に正の値として画像表現してます
なんか、グラフィクスエンジニアをある程度やってたら、この辺の文脈は「まあどうせそういうことやろ」と汲み取れそう。
NormalMapがそういう形式で供されることも多いというコンテクストですかね。
3-7 Convolve
Sample 1 : Combine Neighbors
The Convolve TOP uses a DAT table containing numeric coefficients. For each pixel, it combines its RGBA values and it's neighboring pixels' RGBA values by multiplying the values by the corresponding coefficients in the table, adding the results together. For example, if the table is 5 rows and 5 columns, the pixel and its 24 neighbors are combined.

ある意味、Blur, Edge, Embossといったやつらの上位互換ですね。 係数を適切に指定することで、どれにでもなれるわけです。
結局、Blur, Edge, Embossといった奴らは、自分のピクセルを計算するために、近隣のピクセルを覗かないといけないわけで、 差分を取るにも平均をとるにも、結局は、畳み込みの処理である、と一般化して言えるわけですね。
気持ちを分かるには、シェーダーの並列化の考え方くらいは分かる必要がありそうです。
ここまで26
4-1 Chan Mix
4-2 Chroma Key
4-3 RGB Key
4-4 Reorder
30
5-1 Select
5-2 Resolution
5-3 Chopto
5-4 Analyze
5-5 OP Viewer
35
6-1 Level
6-2 Luma Level
6-3 Function
6-4 Math
6-5 RGB2HSV
6-6 HSV2RGB
6-7 limit
42
7-1 Transform
7-2 Remap
7-3 Displace
45
8-1 Crop
8-2 Corner pin
8-3 Fit
8-4 Flip
8-5 Tile
50
IO
IO-1 Movie in
IO-2 Movie out
IO-3 Video in
IO-4 Point in
GOD-1 GLSL
55
X-1 Cube Map
X-2 Depth
X-3 Projection
X-4 Render
X-5 Render Pass
60
SP
SP-1 Blob track
SP-2 Pack
SP-3 OpenColorIO
??-1 Nvidia Flow
??-2 Lookup
65
Sample N : XXXXX
ギリ嘘数学 | 三角関数(1) の練習問題
ここは、↓こちらの記事の「補足」となっております。
記事から飛んできてない方は、先に記事の方をお読みくださいー!
※求め方の復習
結局、cos, sin は、作業的な手順で、求まるのでした。
- 「右端から」「反時計回りに」指定された角度だけ数える
- そこの x 座標・ y 座標 を読む
とにかく↑を間違えずに丁寧にやる感じですね。
4つほど例を出しますよ
問1: cos110°・sin110°は、いくら?
(図を見て、大体の値を答えてみて下さい)

答1
右端から数えて110°地点を考えましょう。
その点のx,y座標が、cos110°・sin110°になる、…のでした。

このように、円の左半分に角度が来ても、やることは全く以って同じです。
x座標がマイナスであることには注意しましょう!
x 座標は -0.34くらい、y 座標は0.94くらいとなります。
ので、「cos110° = -0.34くらい、sin110°=0.94くらい」が答えです。(ひとまず大体で大丈夫です!
問2: cos60°, sin60° は、いくら?
(図を見て、大体の値を答えてみて下さい)

答2
右端から数えて60°地点の、x,y座標が、cos60°・sin60°なのでした。

x 座標は、珍しく、なんと0.5丁度になります!
そうなのです、これ、本当に0.5丁度というのが数学的に正しく、こういう珍しいケースも実はあるのです。
y 座標は、0.87くらいになります。
ので、「cos60° = 0.5、sin60° = 0.87くらい」が答えです。
問3: cos180°・sin180°、はいくら?
(実は、綺麗な答えになります。今回は、どんな図が必要かを、自分で考えてみて下さい)
答3:
角度が大きくとも、やることは同じですね。
図がないので、点の位置はどこか?というのは、自力で考えてもらうことになります。 「右端から始めて」「反時計回りに」180°をとる、ということは、この位置にきませんか?

点の場所が分かりましたから、その座標の x, y を読んでみましょう。ちょうど (-1, 0)ですよね。
で、その点のx座標がcos180°、y座標がsin180°ですから
答えもきれいに、「cos180° = -1, sin180° = 0」ということです。
最後に、ひねった問題を1個くらい置いときます! わかんなくても凹まないで下さいね
問4: sinの値が0.9になるような角度はいくらか?を、0°~90°の間から答えて下さい
※図を見て、大体の値で結構です。
※0°~90°の分度器の図を貼りますね!

答4
sinというのは、ある角度の y座標、のことでしたね?
つまり、この問題は言い換えると
(円周上で) y座標が0.9となってるような点はどこ? その角度はいくら?
ということです。
それを図から探せばよいわけですね
円上で、y が0.9の場所といえば…

そしてyの目盛りが0.9の線と、円が、ぶつかってるところを見ればいいので…

こういう話になりますね!(今回は0°~90°だけなので、この範囲しか見ていません。)
その角度は…というと、どうです? 64°くらいに見えませんかね
よって答えは「64°くらい」で十分OKです。
※ちなみに…「0°~90°で」という制約が無いと、この問題、まあまあ凶悪になります
練習は以上になります!
記事へ戻る: note.com

