3Dグラフィックスでは、ゲームのレベルや映画のシーン、アニメーションがぼやけたりピクセルだらけにならないように、テクスチャフィルタリングが静かに支えています。テクスチャフィルタリングは重要ですが、あまり注目されない技術です。3Dを始めたばかりの人も、レンダリングに慣れた人も、テクスチャフィルタリングの仕組みを理解することは、鮮明でリアルな画像を作るために欠かせません。
テクスチャフィルタリングは、3Dモデルに貼った画像(テクスチャ)が、距離や角度、大きさが変わったときにどう見えるかを決める処理です。2Dのテクスチャを3Dの表面に貼ると、テクスチャのピクセル(テクセル)と画面のピクセルがぴったり合わないことがあります。フィルタリングがないと、テクスチャはブロック状に荒く見えたり、ぼやけて細かさが失われたりします。フィルタリングは、遠くや斜めから見ても、それぞれの画面ピクセルの色を近くのテクセルから計算して、きれいに見えるように調整します。
3Dグラフィックスでよく使われる代表的な3つのテクスチャフィルタリング方法を紹介します。それぞれの方法は、前のものよりも複雑で、見た目のクオリティも高くなります。
ニアレストネイバーサンプリング(最近傍補間)は、最もシンプルで処理が速い方法です。サンプリングしたい位置に一番近いテクセル(テクスチャのピクセル)1つを選び、その色をそのまま使います。
バイリニアフィルタリングでは、ピクセルに最も近い4つのテクセルをサンプリングし、それらの間で線形補間を行って、よりなめらかな表示を実現します。
この方法は、正面から見る2Dテクスチャには効果的ですが、奥行きや回転が加わると効果が弱まります。
トリリニアフィルタリングは、1つのミップマップレベル内のテクセルだけでなく、2つの異なるミップマップレベルの間も補間(ブレンド)します。これにより、異なる詳細レベルの切り替えが目立たなくなり、より自然な見た目になります。
異方性フィルタリングは、最も高性能なテクスチャフィルタリング方式です。斜めから見たときや遠くの道路や廊下のような視点でも、テクスチャをシャープに保つことができます。
現在の多くのゲームエンジンでは、異方性フィルタリングを最大16倍までサポートしています。これは、Direct3DやOpenGLのパイプラインで高品質な描画を行うための標準機能となっています。
ミップマップとは、あらかじめ作成された縮小版のテクスチャです。レンダリングのパフォーマンスを向上させたり、エイリアシングを低減するために使われます。それぞれのミップマップレベルは、前のレベルの半分のサイズになっています。
たとえば、2048×2048のテクスチャがあると、ミップマッピングによって、1024×1024、512×512…と1×1までの縮小版が自動で作られます。描画の際、GPUはカメラからの距離に応じて最適なサイズのテクスチャを選びます。
フィルタリングとミップマップを組み合わせることで、画面上でテクスチャが小さく表示される「縮小(ミニフィケーション)」の処理を、よりきれいでスムーズに行えるようになります。
異方性フィルタリングは、斜めから見たときでもテクスチャの細かい部分をはっきりと保ってくれます。たとえば、遠くまで続くタイルの床を想像してみてください。異方性フィルタリングがないと、模様がにじんで見えてしまいます。異方性フィルタリングを使えば、どんな角度からでもテクスチャがシャープに見えます。テクスチャの情報をより賢くサンプリングすることで、エイリアシングを減らし、グラデーションをなめらかにし、バンプマップなどの表面ディテールもきれいに見せてくれるのです。その結果、どの角度から見ても、クリーンでシャープなレンダリングが可能です。
ゲームエンジンでは、テクスチャフィルタリングがゲーム中の画質を保つために欠かせません。これにより、以下のことが可能です:
例えば、石畳の道を歩くとき、異方性フィルタリングを使えば、カメラの角度が変わっても石がブレたり揺れたりしません。
建築やプロダクト・工業デザインのレンダリングやリアルタイムプレビューにおいて:
フィルタリングは、プロトタイプを見せたり、リアルな画像で関係者を納得させたりするのに特に役立ちます。
アニメーションやシネマティックシーンのような事前レンダリングされたコンテンツでは:
没入型環境では、快適さとリアリズムのためにテクスチャフィルタリングが重要です:
テクスチャフィルタリングがうまく機能しているときは気づきませんが、うまくいっていないとその問題がはっきり見えます。3Dアーティストにとって、フィルタリングをマスターすることは、見た目の良さと技術的な最適化の両方で重要です。レンダリングを始める前に(自分のPCでもレンダーファームでも)、良いテクスチャフィルタリングが作品の仕上がりを左右することを覚えておきましょう。レンダリングの段階での悪いフィルタリングは、後からいくら編集しても完全には直せません。