« アンチエイリアシング(2) | トップページ | ペーパープロトタイピングでできるスマートフォンアプリデザイン »

アンチエイリアシング(3)

|

アンチエイリアシングの原理は、図形の輪郭部分にあたる画素(小さな正方形)の一部が図形に、残りが背景に重なる場合、その輝度を図形と背景の中間の値にすることです。中間の値を具体的に計算するには、図形の面積と背景の面積の比を使います。

Aaintersection_2

この例は前回示した例の中で薄緑で囲んだ画素(一辺1で面積1)です。図形は白(輝度255)で背景はグレー(輝度128)の設定です。この場合、左図の点Pの位置が下から1/3のところにあることは計算できます(詳細略)。すると白い直角三角形の面積は1/6と計算でき、画素の輝度も計算できます。結果は

255×(1/6)+128×(5/6)≒149

で、輝度は149です。

この交点Pを求めるアルゴリズムは、すべての画素とすべての図形の組合せという膨大な回数になると時間がかかります。近似でよいから面積比を高速に求めるために、以下の図で示すような標本化を行います。この方法(マルチサンプリング・アンチエイリアシング;MSAA)が現在使われる基本的手法です。

1画素の中で複数(数個から数10個)のサンプル点(図中の白丸)をなるべくまんべんなく選びます。各点で、その点が図形の中か外かを判定します。全部について判定したら、中の個数と外の個数との比を面積比と見なします。

Msaa24

この場合、サンプル点25個のうち白が5個、グレーが20個です。輝度の計算結果は

255×(5/25)+128×(20/25)≒153

です。正解は先ほどの149なので、誤差は2.7%程度ですね。

もっとサンプル点を減らしてみます。

Msaa8

まず、画素を4×4の16個の領域に分け、各領域中心のうち8個だけサンプル点として選ぶことにします。なるべくばらけるようにテキトーに選びました。これだと輝度計算結果は

255×(2/8)+128×(6/8)≒159

です。誤差は6.7%です。1個の画素は極めて小さいので、人間が見てもまず気づかない誤差です。

この処理は膨大な数の画素について行います。各画素の輝度は、結果的にはそれぞれの正解の前後におおむね集まります。そもそも原理的に真の図形は表現できないため輝度調整でごまかすのがアンチエイリアシングですから、「正解」と言っても擬装にすぎません。そこから数パーセントずれても実用上は問題ありません。

ところで、サンプル点が8個であっても通常の8倍というのは時間かかりすぎるでしょう、というツッコミがあるかもしれません。確かに処理時間は増えますが、もともと図形の塗りつぶしを計算するために極度に特化した超高速ハードウェア(GPU)をフル活用するので問題ありません。最後の例で領域を4×4の等間隔格子にしたのは、GPUでの判定効率が良いからです。

また、サンプル点が8倍になっても、処理時間はもっと少ない倍率(例えば3倍とか4倍)でしか増加しません。家族が8人でも生活費が8倍にならないのと似た理由です。

メディア学部 柿本正憲

おもしろメディア学」カテゴリの記事

在学生向け」カテゴリの記事

授業紹介」カテゴリの記事

高校生向け」カテゴリの記事

« アンチエイリアシング(2) | トップページ | ペーパープロトタイピングでできるスマートフォンアプリデザイン »