画像生成時のアンチエイリアシング

CG

ラスタ化 では、連続的な図形を画素の格子に落とし込むため、本来なめらかな線や輪郭が階段状のギザギザになってしまいます。こうしたギザギザはどうすれば目立たなくできるのでしょうか。
このギザギザを低減して輪郭をなめらかに見せるための手法がいくつかあります。

アンチエイリアシング
CG

ラスタ化によって、斜めの直線や多角形の境界部分に、階段状のギザギザ、すなわちジャギー が生じることがあります。他にも、細い線や細かい物体が寸断されてしまうこともあります。
このような、ラスタ化によって滑らかさが失われたり、ノイズが乗ったりする現象は、エイリアシング と呼ばれます。

そして、このようなエイリアシングを目立たなくするための処理がアンチエイリアシングです。

例えば、ジャギーに対するアンチエイリアシングでは、ジャギーそのものを消し去ることはできませんが、輪郭付近の画素の色をうまく調整することで、人の目には輪郭がなだらかにつながって見えるようにする手法があります。

画素の寄与率
CG

ジャギーの原因は、斜めの線や境界部で、画素を塗るか塗らないかの二択で色を決めてしまうことです。
線と背景の中間の明るさや色で塗った画素を輪郭付近に配置することで、ジャギーの目立たない画像を作ることができます。完全に塗らないのではなく、「薄く塗った」画素を輪郭付近に配置し、線を濃淡でぼかすことで、なめらかに見せるわけです。

色が変わる境界付近(図形の輪郭など)の画素は、その境界が分ける隣接領域の中間色で塗ることが効果的です。その中間色を決める基準として、図形が各画素をどれだけ覆っているかという割合を使います。これを画素の寄与率といい、0から1の値で表します。

図形が画素を完全に覆っていれば寄与率は1、まったく覆っていなければ0、半分だけ覆っていれば0.5になります。つまり、画素への寄与率は「図形が画素の面積をどれだけ覆っているか」という面積比です。

そして、輪郭にかかる画素を01かで割り切るのではなく、寄与率に応じて図形の色と背景の色を混ぜ合わせます。図形が7割を覆う画素は図形の色を7割、背景の色を3割の比率で混ぜた色にする、といった具合です。

こうして輪郭付近に中間的な色の画素が並ぶことで、階段の段差がぼかされ、なめらかな輪郭に見えるようになります。

アルファブレンディング
CG

色を混ぜ合わせる処理は、フレームバッファ上で行われます。フレームバッファにすでに置かれている色を混ぜ合わせて、最終的な画素の色で置き換えていきます。

フレームバッファは、コンピュータでデジタル画像を画素の集まりとしてそのまま記録するメモリです。同じ画素に対して新しくデータを書き込むと、それ以前に書き込まれていたデータは失われるという性質があります。

このとき、画素の寄与率を透明度(値)として扱い、図形の色と背景の色を混ぜ合わせる処理をアルファブレンディングといいます。
直感的には、寄与率の分だけ図形の色を、残り(1から寄与率を引いた分)だけ背景の色を混ぜる、という操作です。画素の最終的な色をC、図形の色をC_fg、背景の色をC_bg、寄与率(値)をとすると、次のように書けます。

このように画素値を決めると、寄与率1に近い画素ほど図形の色が、0に近い画素ほど背景の色が強く出るようになります。

スーパーサンプリング法
CG

単純な輪郭に限らず、複雑な図形やテクスチャを含む画像にもそのまま使えるアンチエイリアシングの手法として、スーパーサンプリング法があります。

スーパーサンプリング法は、まず画面を実際よりも高い解像度でレンダリングし、それを縮小して元の解像度に戻すという手法です。

具体的には、1つの画素を細かく分けて複数の点(サンプリング点)を取り、それぞれの点を新たな画素とみなして画像をレンダリング(色を計算)します。そして、元の画素から取ったサンプリング点の色の平均値を、元の画素の色とします。

このように、高い解像度で細かく色を求めてから平均することで、輪郭付近には図形と背景の中間色が自然に現れ、ジャギーの目立たない画像が得られます。