toruのブログ

月1くらいで記事書きたい。

DaVinci Resolve の Fusion で Rectangle Mask を使いアンチエイリアシングが発生しない矩形を描画する

背景と目的

筆者はテストパターンを作成している時、Rectangle Mask を使った際のアンチエイリアシングが非常に気になった (図1 参照)。

図1. Rectangle Mask を使って 16x4 の矩形を描画したところアンチエイリアシングが発生した様子

以前にブログで書いた通り、DCTL を使えばこうしたトラブルは防げるのだが Rectangle Mask は地味に使用頻度が高いので、筆者は回避方法を欲していた。

少し試行錯誤したところ、比較的簡単にアンチエイリアシングの発生を防ぐことができたので、備忘録として記事を残すことにした。

Rectangle Mask を使った際のアンチエイリアシングを防ぐ方法

はじめに前提条件を3点述べておく。

1点目。Rectangle Mask の Width、Height は整数のピクセルであるとする。 例えば (Width, Height) = (7px, 1px) や (Width, Height) = (8px, 2px) であるとする。

2点目。ノードは図2 のように接続されているとする。

図2. ノード構成

3点目。本記事ではプロジェクトの解像度は 1920x1080 であるとする。この後に 1920 や 1080 がマジックナンバーとして出てくるが、それは解像度情報であることにご留意頂きたい*1

それでは、具体的な方法を以下で述べていく。Width、Height が偶数ピクセルの場合と奇数ピクセルの場合とでやり方が異なるので、以下で別々に説明する。

Width、Height が偶数ピクセルの場合

Rectangle Mask の Center, Width, Height パラメータを 図3 のように設定する*2。 この例では中心座標を (X, Y) = (976, 506)、大きさを (Width, Height) = (16px, 4px) としている。

ポイントは Center の X, Y 値がピクセルの端に来るように 1920 と 1080 で割っている点である。 こうすることで Width、Height がピクセルからはみ出すことが無くなり、結果としてアンチエイリアシングの発生を防ぐことができる。

図3. Width、Height が偶数ピクセルの場合の設定

Width、Height が奇数ピクセルの場合

Rectangle Mask の Center, Width, Height パラメータを 図3 のように設定する。この例では中心座標を (X, Y) = (976, 506)、大きさを (Width, Height) = (15px, 3px) としている。

ポイントは Center の X, Y 値がピクセルの中心に来るように、0.5 を加算した後に 1920 と 1080 で割っている点である。 こうすることで Width、Height がピクセルからはみ出すことが無くなり、結果としてアンチエイリアシングの発生を防ぐことができる。

図4. Width、Height が奇数ピクセルの場合の設定

参考情報

図3 や 図4 のビューアーのように Nearest Neighbor 拡大および Pixel Grid の表示を行うには、ビューアで右クリックし 図5 の設定をすれば良い。

  • Smooth Resize -> Off
  • Show Pixel Grid -> On

図5. Nearest Neighbor拡大および Pixel Grid 表示を行う設定

考察というか感想

ビューアーの Pixel Grid 表示が大変便利だった。マニュアルを読んでいたら偶然に見つけることができた! マニュアルも少しずつ読み進めて知識を蓄えていきたいところである。

*1:従って、例えば UHD のプロジェクトで同様のことを行いたい場合は 1920 -> 3840、1080 -> 2160 と置換して試して頂きたい

*2:なお、今回は数式が見やすいように Expression を使っているが、Expression を使わなくても実現可能である。