いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

隠線処理、zバッファ法

f:id:Inuosann:20190901092622p:plain

 3角形が4角形の手前にあります。3角形は一部が4角形に隠されて見えます。コンピュータで描画する場合、隠れて見えないはずの線や面を描いてはいけません。隠線処理、隠面処理と言います。方法はいくつかありますが、すぐ思いつくのは視線の通る3角形上の点Aと4角形上の点Bで、視点に近い点のみを画面に描画する、という方法でしょう。これはZバッファ法と呼ばれます。皆さんが3Dのゲームをやっているとき、通常は隠線処理・隠面処理されているはずですが、Zバッファ法が使われているかも知れません。画像の1点1点を調べなければ重なっているかどうかなんて分かりませんから、大変な労力(パソコンの)がかかっていることが分かるでしょう。下の波紋みたいな図は三角関数を使って描きました。左右とも使った式は同じですが、左は隠線処理なし、右はあり。

f:id:Inuosann:20190901092913p:plain

あえて透過させて、左みたいな効果を出したい場合もありますが、まあ普通は右みたいに見せたいですよね。なお、ここではZバッファ法でなく、max・min法というのを使っています。
 今では3Dのゲームなんかを作るときはDirectXOpenGLといった「ライブラリ」というのを使うことが多いと思います(どちらも内部でZバッファ法を使っている)。この手の面倒な処理は全部肩代わりしてくれるので、その意味では理屈など理解している必要はないとも言えます。それでも知っておいた方がいいと思いますし、(ぼくもそうですが)自分の力でできないなんてイヤだ、という人もいるでしょう。そうそう、大学生の時、情報の研究室のドアに帽子かなんかの隠線処理した絵をパソコンで描いた大きなポスターが貼ってありました(昔はこういうことをやっていたのです)。「どうやって描いたんだろう……??」と思っていました。隠線処理を知らなかったのです。他にもマンガのキャラクタを文字(「あ」とか「い」とか)で大きく描いたポスターとか(表現が難しい……)、あったなあ……。今なら「やれ」と言われればできるけれど当時は不思議でした……。懐かしいです。