Blenderで透視図から魚眼への変換

今日は3Dソフトを使って透視図を魚眼へ変換する方法について説明したいと思います。使うのはBlenderというフリーソフトです。バージョンは2.71を使いましたが、現在の最新版2.74でも恐らく同じ手順でいけるのではないかと思います。

以下の手順を試してみたい方は、Blenderのダウンロード&インストールを先に行ってください。やり方は「Blender」で検索すれば、すぐに見つかります。

 

Blenderは初心者に優しくなく、GUIを適当にいじっていればそのうち分かるタイプのソフトではないので、初めての方でも操作可能なように説明していきたいと思います。そのため、説明はちょっと長くなりますので、ご了承ください。(操作自体は上から下まで実行しても5分でできる程度のものです。慣れていればですが)

1.Blenderの起動

 Blenderを起動すると、初期状態は次の状態になります。画面は複数のウィンドウに分かれており、起動直後は「Info」「3D View」「Timeline」「Outliner」「Properties」の5つが表示されます。(Timelineは今回は使いません)

f:id:reminica:20150411070624p:plain

 各ウィンドウは左上または左下にウィンドウ種別を切り替えるアイコン(図の赤丸)が表示されており、このアイコンの形で現在どのウィンドウが表示されているかが分かるようになっています。

アイコンをクリックすると、下図の「ウィンドウ選択」メニューが表示されます。ここでメニュー項目を選択すると、ウィンドウの中身が切り替わります。 

f:id:reminica:20150411072707p:plain

 一番上に表示されているInfoウィンドウには重要な要素が詰まっています。FileメニューのSave Asを選ぶと、現在編集中のblenderファイルを保存することができます。上書き保存する場合はSaveを選んでください。拡張子はblendです。

このメニュー項目は表示された画像を保存するものではなく、あくまでも現在の編集状態を保存して、のちに再開するためのものです。ある意味一番重要なので、覚えておいてください。

アプリを終了するには右上の×ボタンかFileメニューのQuitを選んでください。

2.レンダリングの実行

 InfoウィンドウのRenderメニューでは、レンダリングの実行を行うことができます。レンダリングとは、3次元の物体をあるカメラ視点による2次元の絵に変換することを指します。つまりこれが3Dソフトの一番重要な機能であると言えます。これを行うには、最低でも3Dオブジェクトの配置、カメラの設定、光源の設定が必要です。しかしBlenderは初期状態でも最低限の設定が行われているので、いきなりレンダリングすることができます。

3D Viewウィンドウに上図(右下)のカメラが表示されているのが確認できると思います。レンダリングを行うと、画面中央にある立方体に対して、このカメラから見た2D画像を作るわけです。試しに実行してみましょう。

f:id:reminica:20150411074442p:plain

InfoウィンドウにあるRenderメニューのRender Imageを選ぶと、レンダリングが実行されます。キーボードのF12キーでも同じ結果を得ることができます。レンダリングが実行されると、3D Viewウィンドウが自動的にUV/Image Editorウィンドウに切り替わります。画面には上図のようなレンダリングされた立方体が表示されると思います。

ここで、この画像を保存するにはUV/Image EditorウィンドウにあるImageメニューのSave As Imageを選択してください。FileBrowserウィンドウが表示されますので、上段のテキストボックスに保存先のフォルダ名を入力します。続けて下段に画像ファイルのファイル名を入力します。例えばtest.pngと入力してください。Save As Imageボタンをクリックすると、指定されたファイル名で保存されます。正しく保存されたかを確認するため、指定フォルダに作成された画像ファイルを他のアプリで開いてみてください。

UV/Image Editorウィンドウを3D Viewウィンドウに戻すには、手順1の赤丸の部分をクリックして、3D Viewを選んでください。

3.魚眼のための環境設定

f:id:reminica:20150411075615p:plain

Blenderが持つ標準のレンダリングエンジンでは魚眼レンダリングを行うことができません。そこで、レンダリングエンジンの切り替えを行います。今回はCyclesというレンダリングエンジンを使います。CyclesレンダリングエンジンはBlender2.61以降で標準搭載されています。InfoウィンドウにあるBlender Renderという部分をクリックしてください。プルダウンメニューが表示されますので、Cycles Renderを選択してください。これをやっておかないとレンズ設定の段階で魚眼を選ぶことができません。また他の設定項目も変わってしまうので、必ず最初に切りかえておいてください。 

4.平面オブジェクトの作成

f:id:reminica:20150411075906p:plain

初期状態で表示されている立方体(Cube)は邪魔なので削除します。画面右上のOutlinerウィンドウにあるCubeと書かれた箇所を操作します。Cubeの文字を右クリックしてDeleteを選択しても良いのですが、ミス操作があると怖いので、図に示す3つのアイコンをクリックして淡色表示の状態にしてください。目のアイコンが薄いときは3D Viewに表示されなくなり、矢印のアイコンが薄いときはオブジェクトが操作不可になります。またカメラのアイコンが薄いときは、レンダリング対象から外されます。

 

邪魔者が消えたところで、今回使うオブジェクトを生成します。3D Viewの左上にあるCreateタブをクリックし、続けてPlane ボタンをクリックしてください。

f:id:reminica:20150411080236p:plain

3D Viewの中央に上図のような平面(Plane)の板が表示されたかと思います。またOutlinerウィンドウにもPlaneという項目が追加されます。 

5.テクスチャの貼り付け

さて、ただの平面では無地の板切れが表示されるだけなので、ここに変換対象となる透視図を貼り付けます。3Dオブジェクトに貼り付ける画像のことをテクスチャと言います。

最終的には好きな画像を使ってもらって良いのですが、ここでは変換が正しく行われたかを検証するため、次の画像をダウンロードしてお使いください。これは10°ピッチで描かれた透視図の視円錐です。

f:id:reminica:20150411081148p:plain

以下の操作を行う前にOutlinerウィンドウのPlaneの文字が白くなっている(選択状態にある)ことを確認してください。白くなっていなければ、Planeの文字をクリックしてください。

Propertiesウィンドウの上部、Material アイコン(下図の赤枠)をクリックし、続けてNewボタンをクリックします。さらにSurfaceの中にあるColorをクリックします。ポップアップが表示されるので、Image Textureをクリックしてください。

さらにColorの2段目に表示されたOpenをクリックします。ここでテクスチャとして使用する画像ファイルを指定します。File Browserウィンドウの操作方法は先に説明した通りです。ここでは視円錐の画像ファイルを指定してください。最終的にColorの2段目に画像ファイル名が表示されていればOKです。

f:id:reminica:20150411080801p:plain

6.UV Mapの設定

(以降の手順もOutlinerのPlaneが選択されているという前提です)

このままではテクスチャが表示されないので、UV Mapの設定を行います。PropertiesウィンドウのDataアイコン(逆三角形の形をしたアイコン)をクリックし、UV Mapsの+ボタンをクリックします。枠の中にUVMapと表示されればOKです。

f:id:reminica:20150411103139p:plain

 

テクスチャが張り付いたかどうかを確認してみましょう。InfoウィンドウのRenderメニューからRender Imageを選択してください。(あるいはF12キーを押してください)

下図のように平面に指定された画像が貼りついていればOKです。

f:id:reminica:20150411082641p:plain

7.レンズの設定

このままでは普通の透視図にしかなりませんので、レンズを魚眼に切りかえます。まずOutlinerウィンドウでCameraを選択してください。3D Viewウィンドウもカメラが選択状態となります。(といっても、ここでは操作しませんが)

続けてPropertiesウィンドウの右から3番目のアイコン(Data)をクリックします。Lensの中のPanoramicをクリックします。ちなみにPerspectiveが普通の透視図、Orthographicは平行投影(垂直投影)、Panoramicが魚眼または円筒(パノラマ)です。

f:id:reminica:20150411083211p:plain

次にTypeでFisheye Equidistantを選択します。初期状態はEquisolidとなっており、これは等立体角射影という射影方式を意味します。そちらを使っても構わないのですが、ここでは検証のしやすさのため等距離射影(Equidistant)を使うものとします。

ちなみにこの選択項目は手順3に示すCycles Renderを選択しておかないと、現れないので注意してください。

8.解像度の設定

レンダリング(F12キー)を実行してみてください。次のような円形の画像が作られるかと思います。これが魚眼パースです。

f:id:reminica:20150411084059p:plain

ただし、このままでは視円錐が楕円になってしまいますので、縦横比の変更を行います。Propertiesウィンドウの左にあるカメラのアイコン(Render)をクリックしてください。DimensionsのResolutionでXとYを同じ値にしてください。ここでは1000pxに設定するものとします。解像度の高い画像が欲しい場合はもっと大きな値を設定してください。ただしレンダリングに時間がかかるようになるので、動作確認が取れるまでは1000やもっと小さい値を使うことをお勧めします。

f:id:reminica:20150411084226p:plain

再びレンダリング(F12)を実行してください。像が円形になったのが確認できるかと思います。

9.カメラの設定

(以下の手順はPropertiesウィンドウのObjectアイコン(立方体の形をしたアイコン)にも同じ項目が存在します。そちらを使っても構いません)

最初にOutlinerでCameraを選択状態にしてください。次にOutlinerウィンドウの左側の+と表示された箇所を左側にドラッグしてください。現れたウィンドウの一番上にTransformという項目がありますので、LocationのXとYを0に、Zを1に設定してください。またRotationはXYZをすべて0に設定してください。この設定でカメラは(X,Y,Z)=(0,0,1)の座標に行き、向きは真下(0,0,-1)方向を向きます。

f:id:reminica:20150411084501p:plain

Zの値は用意する透視図の画角によって変更する必要があります。Z=1は画角90°を意味します。値はあとで変更しますので、まずはZ=1のままレンダリング(F12キー)してください。

f:id:reminica:20150411085141p:plain

左図のような結果になったと思います。本来この視円錐は右図に示すような等幅にならなければなりませんが、そうならないのは透視図が想定している画角と実際の画角が一致していないためです。これを合わせるにはZの値を0.08749に変更する必要があります。この値は画角170°に相当します。一般には画角をθとしたとき、Z=1/tan(θ/2)の値を設定すれば良いです。(原理は下図の通りです)。さてもう1度レンダリングしてください。今度は右図のような等幅の円になったと思います。これで魚眼の設定は完了です。

f:id:reminica:20150411085544p:plain

10.背景色の設定

視円錐の色がくすんでしまうのは、標準の背景色が灰色に設定されているためです。これを変更するには、PropertiesウィンドウのWorld(地球儀のアイコン)を選択し、Surfaceの中のColorをクリックしてください。RGBの値は0.051になっていると思いますが、これをすべて1に変更してください。(あるいは右端のバーを白い部分まで上げてもOKです)。再びレンダリング(F12)してみてください。画像が明るくなったのが確認できるかと思います。

f:id:reminica:20150411085716p:plain

設定は以上です。あとは手順5の後半に示す通りPropertiesウィンドウのColorの2段目のOpenボタン(×の隣)をクリックし、本命の画像ファイルを選択すれば指定した透視図を魚眼に変換できるようになります。画角に合わせてカメラのZ値を変更するのを忘れないようにしてください。Zの値が間違っていると、まったく意味のない変換になってしまいます。

画像ファイルに関する注意点です。画像は必ず正方形(縦横のピクセル数が同じ)とし、画像の中央に視心が来るようにしてください。(普通のカメラで撮影した写真であれば、自動的に画像中央が視心になっているはずです)。さらに画像に内接する円が何度の視円錐に相当するかを事前に調べてください。カメラの場合は、レンズの仕様を確認すれば分かると思います。

また自分で描いた透視図の場合は、1点透視図であれば対角線の消失点を画像の端に来るよう調整すれば、その画像は90°視円錐相当ということになります。詳しくはパースフリークスの画角の測り方(1~3点透視の章にあります)を参照してください。写真の場合でもズームレンズの場合は、画角が分からないかもしれません。その場合もパースフリークスのやり方は使えるので、参考にしてください。

なお魚眼の効果は広角にならないと明瞭に現れませんので、最低でも90°以上、できれば120°から170°程度の広角画像を用意することをお勧めします。普通の画角で描かれた絵(多くは60°程度)では、ほとんど効果がありません。

 

あまりいいサンプルではないですが、以下に変換例を示します。各サンプル共、左が透視図、右が魚眼です。

SAMPLE1:90°視円錐相当(サイコロ)

f:id:reminica:20150411091005p:plainf:id:reminica:20150411091019p:plain

 SAMPLE2:155°視円錐相当(平面グリッド)

f:id:reminica:20150411091219p:plainf:id:reminica:20150411091321p:plain

SAMPLE3:122°視円錐相当(平面グリッド+立方体)

f:id:reminica:20150411094156p:plainf:id:reminica:20150411094213p:plain

視心に向かう直線は魚眼であっても曲がりません。つまり1点透視図の消失点に向かう線は、魚眼パース上でも直線になります。絵を描く際には押さえておかなければならない重要ポイントです。

 

さて、この技術をお絵描きで使う方法ですが、1つは普通に透視図で描いたものを最後に変換する方法が挙げられます。しかし極端に広角の絵は普段描かないと思いますので、意外と手こずるかもしれません。もう1つは透視図でグリッドだけを描いて、それをBlenderで変換したのち、変換されたグリッドを頼りに絵を描く方法です。この方が魚眼で絵を描いているという感じがして良いような気がします。(私自身が実践していないので無責任な発言ではありますが)

汎用のグリッドは多分使いにくいので、自分の描きたい絵に合わせてグリッドを起こした方がいいと思います。例えば室内を描くのであれば、部屋の壁を描いて、そこに分割線を入れるイメージです。