ブラウン管・グリッチ(CRT / Glitch)
本体が描き終えた色に、走査線・シャドウマスク・ロールバー・ざらつき・砂嵐・ 周辺の落ち込みと、映像が乱れたときの帯のずれ・升の破綻・色ずれを重ねます。 頂点を動かす「裂け」も持っています。


このモジュールはドット絵風の後にかかります(crt-glitch.scmodule の afters)。升目に落としてからブラウン管をかける順で、逆にすると走査線と縞が 升目に飲まれます。
画面を撮り直さずに何をしているか
画面を歪める・ぼかす・実際にずらすことはできません。 モジュールは 隣接ピクセルを読めないためです。ずらしが要るところ(帯のずれ・升の破綻・ 色ずれ・砂嵐の引き裂き)は、勾配 (ddx/ddy) からの 1 次近似で 「ずらした先の色」を推定しています。
この近似には次の性質があります。
- 面の上で色が滑らかに変わるところではよく合う
- シルエットや模様の境目では大きく外れる。色ずれはそこで消えるように 弱めてある(そうしないと縁に色の輪が残る)。乱れた帯と升の破綻は硬い破綻が 欲しい効果なので、上限で頭打ちにするだけで縁でも切らない
- 勾配は 2x2 のピクセルごとに 1 つしか無いので、2 ピクセルより細かい ずらしは段が付く
したがって色ずれは、縁がくっきり分かれる絵ではほとんど見えません。 広くなだらかな階調がある絵でだけ効きます。ブラウン管らしさは走査線と シャドウマスクが担っていて、こちらはずらしを伴わないので制約を受けません。
入っていないもの
| 効果 | 入れていない理由 |
|---|---|
| りん光の残像 | 前のフレームが要る |
| 滲み・グロー | 隣接ピクセルの重み付き和が要る |
| ゴースト(ずらして重ねる) | 1 次近似では段を重ねても 1 回ずらすのと同じ式に潰れる |
| 画面の丸み | 入力映像の再サンプリングが必要。モデル頂点による近似は頂点密度と画面内の位置に依存するため |
ゴーストが潰れるのは次の理由です。i 段目の色は c + g・d・i になるので、 重み w_i で平均すると Σ w_i (c + g・d・i) / Σ w_i = c + g・d・(i の加重平均) となり、1 回ずらしたのと同じ形になります。段ごとに色を回せば潰れなくなりますが、 それは色が変わるだけで、像が「ずれて重なる」ようには見えません。 実測でも、色を回さずに 3 段重ねたときの差は平均 0.15 / 255 しか出ませんでした。
走査線とシャドウマスク
| プロパティ | 説明 |
|---|---|
| Amount | 全体の強さ。0 で無効 |
| Scanlines / Scanline Pitch | 横方向の暗い線と、その間隔(画面ピクセル) |
| Shadow Mask / Mask Pitch | RGB の縦縞と、R・G・B 3 本 1 組の幅(画面ピクセル) |
| Vignette | 画面の外側ほど暗くする |
| Chromatic Aberration | 赤と青を逆向きに離す幅(画面ピクセル) |
縞は 3 つに割り切ってあります。位相をずらした余弦を重ねると、山と山の 中間で 2 色が同時に持ち上がり、面全体が黄色や水色に寄って見えるためです。 該当する縞を 2.4、隣を 0.3 にしてあり、平均は 1 なので全体の明るさは 変わりません。
縞と線はどちらも画面ピクセル単位なので、遠くのアバターでは縞が細かく なりすぎて色が偏って見えます。遠景で使うなら間隔を広げてください。
ざらつきと砂嵐



| プロパティ | 説明 |
|---|---|
| Grain / Grain Size | 画面に散らす粒と、その大きさ(画面ピクセル) |
| Midtone Bias | 上げるほど中間調にだけ粒が乗り、明部と暗部で消える |
| Color Grain | 0 で明るさだけ、上げると RGB が別々に揺れて色の粒になる |
| Static | 像を無彩色のノイズへ置き換える割合 |
| Static Tearing | 置き換える前に行ごとに横へずらす幅(画面ピクセル) |
| Roll Bar / Roll Speed | 垂直同期がずれた画面に出る、ゆっくり流れる明るい帯 |
砂嵐は走査線とシャドウマスクの前に置き換えます。ブラウン管が砂嵐を 映しているのと同じ順で、縞と線は砂嵐の上に乗ります。
ForwardAdd では、ライト数に応じて粒や砂嵐が増えないよう、それらの生成は ForwardBase だけで行います。砂嵐による元画像の減衰と横裂けは各パスへ適用します。
ざらつきの時間は 24 分の 1 秒、乱れの時間は 12 分の 1 秒に刻んであります。 滑らかに動かすと粒が流れて見えるので、コマで切り替わるようにしてあります。
乱れと裂け


| プロパティ | 説明 |
|---|---|
| Band Glitch | 横帯の出やすさ。0 で 1 本も出ず、1 ですべての帯が出る |
| Band Height / Band Shift | 帯の高さと横ずれの幅(どちらも画面ピクセル) |
| Band Channel Swap | 帯で RGB を入れ替える量 |
| Block Glitch | 升の破綻の出やすさ |
| Block Size / Block Shift | 升の大きさと横ずれの幅(どちらも画面ピクセル) |
| Block Color Crush | 升ごとに色を段へ落とす量 |
| Vertex Tearing / Tear Band Height | 頂点を帯ごとに横へずらす幅と、帯の高さ(どちらもメートル) |
横帯は走査が横にずれた画に、升の破綻は圧縮が壊れた画に近い見た目です。 Block Color Crush は加算合成できない非線形処理なので ForwardBase だけに適用し、 ForwardAdd では升の横ずらしだけを適用します。これによりライトごとの量子化は避けますが、 追加ライトの寄与そのものは色の段へ落ちません。
Band Glitch はピクセル側の帯と頂点の裂けの両方を出します。 裂けはモデルの高さで帯を切り、視線と上方向から作った向きへずらすので、 画面に対して水平に裂けます。帯を頂点の粗さより細かくしても分かれません。
作例
| 表現 | 効かせるもの |
|---|---|
| ブラウン管 | Scanlines + Shadow Mask + Vignette、Grain はごく弱く |
| フィルム | Grain を上げ、Midtone Bias と Color Grain を上げる。Scanlines は 0 |
| 受信の途切れた放送 | Static + Static Tearing + Roll Bar |
| 通信の乱れ | Band Glitch + Band Shift + Band Channel Swap |
| 圧縮の破綻 | Block Glitch + Block Shift + Block Color Crush |
| 実体が乱れる | 上に Vertex Tearing を足す |
| レトロゲーム機 | ドット絵風と重ね、Scanline Pitch を升目の大きさに合わせる |