発生事例(アンチエイリアスOFF) | ミップマップをOFFにした場合(アンチエイリアスOFF) |
| |
見えづらいですが、左の発生事例の画像では黒いモデルの中心と左右の耳の付け根に白い線が出ています。
こちらは逆に、チラつかずカメラを引くと現れてカメラを拡大すると軽減、または消えるのが特徴です。
原因として、ミップマップ(異方性フィルタ、異方性テクスチャとも呼ばれる)の原理上の弱点とテクスチャの塗られ方です。
ミップマップの仕組みを簡単に説明すると、テクスチャの縮小版(低解像度版)を予め作っておいて遠くからモデルをカメラに写した場合などテクスチャが縮小状態で表示される時に、予め作っておいた縮小版(低解像度版)テクスチャを表示させる...という仕組みです。
リアルタイム描画時などに演算リソースを節約しつつテクスチャを滑らかな状態で描画できる、という利点があります。
(リアルタイムにテクスチャを高品質に縮小するのは負担が大きく、低品質に縮小するとテクスチャが滑らかでなくなる)
一方、欠点として描画した際にテクスチャの正確さ(鮮明さ)が多少劣る(ボヤける)、ビデオカードのメモリ容量を消費する...などが挙げられます。
このため、最終的なレンダリング時に速度よりも品質を重視する場合(3DCGソフトウェア等)ではあまり利用されず、ゲームエンジンなどリアルタイム性を求められる場合によく使われます。
テクスチャとUV展開図 | GIMPで元テクスチャの拡大表示 | GIMPで縮小処理(キュービック補間)した際の拡大表示 |
| | |
ただ、弱点としてテクスチャの縮小処理を行う際に、テクスチャに塗られた(ポリゴンに表示させる)部分の近接ピクセルの色が混じってしまい、ミップマップの(縮小されたテクスチャの)使用時にUVの切れ目(シーム)に混じった色が表示されてしまって結果として線として表示されてしまう事になります。
上記の画像では例としてGIMPで縮小処理を行い、拡大表示していますがポリゴンに表示される黒い色の部分と背景の白色の中間色である灰色が境目付近に出来てしまっています。
この灰色がこのモデルに出てくる線の正体です。
ほとんどのモデルの場合、テクスチャにはUVシームの外側に余白部分を確保していて、UVシームの内側の色などで余白部分を塗ってあるのでこのミップマップの問題は発生しません。
こちらも対処方法がいくつあります。
この方法はおすすめ出来ません。極端にカメラを引かなくても描画されるテクスチャが汚くなるからです。
ミップマップON | ミップマップOFF |
| |
上記画像を全画面表示で見比べるとストッキングの縦縞模様の白い部分が汚くなっているのがわかります。
こちらの方法もあまりおすすめ出来ません。
PmxEditor(&
どるる式UVエディタ)か、Blender(&
mmd_tools)で、UVの島(アイランド,UVシームで区切られた塊)のサイズを一つ一つ縮小させる..という方法です。
手間がかかりますし、UVの島を縮小させるのでテクスチャに描かれた模様などが元のモデルと比べて大きくなったりします。
GIMP等の画像編集ソフトを使い、テクスチャを改変、修正します。
他の方法と比べると簡単に行えるのでおすすめですが、
MMDモデルの規約によっては改変(テクスチャ含む)を禁止しているモデルもあるのでご注意ください。
具体的な方法としては、上記の
テクスチャとUV展開図の画像を例にすると背景の白色を実際にポリゴンに表示される部分の黒色で塗りつしてしまいます。
テクスチャにグラデーションがかかっていたり模様が書き込まれている場合は、UVの島の縁にあたる部分の色で塗り潰せばOKです。
厳密に同じ色でなくても近い色であればほとんどの場合、気にならない(実用上問題のない)程度にまで改善されます。(上記の
テクスチャとUV展開図を例にすれば黒色で塗り潰さなくても、濃いグレーで白い背景を塗り潰せばミップマップによって生じる線が目立たなくなる)
- Blenderなどで(場合によってはUVマップを作り直して)テクスチャをベイクする
他の方法と比べて非常に手間がかかる(場合がある)方法ですが、UVの島と島の間が無いか間隔を十分に確保でていないマテリアル(材質)を持つモデルに対して有効です。(例えば肌材質と衣服材質が同じテクスチャにまとめられていてそれぞれのUVシームが非常に近接している場合など)
また、UVシームの内側の色で外側(余白部分)を指定ピクセル数で自動的に塗ってくれるので、すでにUVの島の周辺に余白空間が十分に確保されている場合でも、”テクスチャを改変して修正する”方法と比べるとより正確な色でUVシームの外側が塗られます。
ただしこちらも
MMDモデルの規約によってはMMDやその派生ソフトウェア、PmxEditor以外のソフトウェアにモデルデータをインポートしたり、改変を禁じているものもあります。ご注意ください。
編集メモ:Blenderへ改変するモデルをインポート→(場合によっては)UVマップを作り直す(ちゃんと余白があれば自動で良い)→改変元モデルを追加で(同じスケール値で)インポート→ディフューズ→”選択物→アクティブ”→”ベイク元(追加インポートした元のモデル)→ベイク先(改変するモデル)”の順に選択→ベイク(ノイズが乗る場合は”レイの最大距離”などを微調整)
近いうちにBlenderでベイクするページ作成してリンクを貼る