2015年8月31日月曜日

Photoshop 3Dによる地球儀

昨日参加してきた,「DTPの勉強部屋 第37回勉強会」で,海津 ヨシノリさんによるPhotoshopを使った3D処理を見せていただき,触発されたので自分でも試してみる。
海津さん,ありがとうございました。

題材は,海津さんと同じ3D地球儀。ただ,一応学校教材出版社の中の人ということで,理科っぽくデータのソースにこだわってみた。

1. 作るもの

今回,作ってみようと思ったのは,海の水を取り除いてしまって,海底の地形が見えるようになった地球儀。また,標高に応じて凹凸が見えるようなもの。

2. 準備

2-1. ソフトの準備

今回,Photoshopが必要なのは当然として,テクスチャおよびバンプマップをするための画像を用意しないといけない。そのためのソフトとして,GMT (THE GENERIC MAPPING TOOLS)を使用する。
GMTは,名前の通り,各種データをプロット・マッピングするためのツール。特長としては,さまざまな地図の図法を使ってマッピングすることができるのだが,今回はテクスチャを作るだけなので,このあたりは活用しない。
Windowsユーザであれば上記ページからインストーラをダウンロードしてインストールする。

2-2. データの準備

このような図を描くためには,地球の陸上・海底の標高データが必要。
今は,いい時代で,こういうデータが簡単に入手でいる。インターネットは素晴らしい。

今回使用したのは,アメリカ海洋大気庁(NOAA)のNational Centers for Environmental Informationから提供されている「ETOPO1 Global Relief Model」というデータ。このデータは,1分角の解像度を持った地上および海底の標高データ。おまけに,上記のGMT用のデータ(netCDF形式)まで提供されている。
このETOPO1のWebページの「Download Whole-World Grids」からデータがダウンロードできる。今回は「ETOPO1 Bedrock」の方(南極などの氷床も取り除いた岩盤部分の標高データ)を使う。「grid-registered」と「cell-registered」の違いは,地球全体を見る程度であれば気にしなくてもいいと思うので,とりあえずgrid-registeredのnetCDF形式データをクリックし,「ETOPO1_Bed_g_gmt4.grd.gz」をダウンロードする。
ダウンロードしたデータは,gzip形式で圧縮されているので,7zipなど好きな解凍ソフトで展開すると,「ETOPO1_Bed_g_gmt4.grd」が得られる。これを使う。

3. テクスチャとバンプデータの作成

3-1. 各種設定

GMTを使ってテクスチャ(3Dの球体の表面に貼り付ける模様)とバンプ(3Dの表面の凹凸)のデータを作るための設定ファイルを用意した。
からダウンロードして,先程のETOPO1のデータと同じフォルダに置く。

テクスチャは,ETOPO1から標高別に色分けされたデータを作るが,その際の標高ごとの色分け設定が,globe2.cptというテキストファイルに書かれている。このglobe2.cptは,GMTが標準で持っているglobeという設定そのものなので,好みに応じて数値(R/G/B)を書き換えてやることで,色分けを変えることができる。

3-2. テクスチャとバンプデータの作成

plot.cmdというのがWindows用のバッチファイルになっている。
GMTにパスが通っていて,設定ファイル類とETOPO1_Bed_g_gmt4.grdが同じフォルダに入っていれば,このバッチファイルを実行することで,同じフォルダに「texture.eps」「bump.eps」の2ファイルが作成される。

3-3. Photoshopで加工

上記の手順で作ったepsファイル,epsという拡張子がついているが,実はメディアサイズを持ったpsデータ。なので,テクスチャ・バンプデータをバンディングボックスで切り出してやる必要がある。
  1. Photoshopでepsファイルを開く。
  2. Ctrl+A (MacはCmd+A)で全選択して,Ctrl+C(MacはCmd+C)でコピー。
  3. 新規ファイルをクリップボードサイズで作成し,ペースト。
  4. おそらく90度回転した画像になっていると思うので,その場合は正しい向きになるよう回転する。(GMTはデフォルトでlandscapeで書き出すが,Photoshopが開くときにportraitとして開くため)
  5. それぞれ,texture.psd,bump.psdとして保存する。

4. Photoshopで3Dに

これでようやく準備完了。
  1. texture.psdとbump.psdを開く。
  2. texture.psdを選択し,メニューから「3D→レイヤーから新規メッシュを作成→メッシュプリセット→球」を開く。
  3. とりあえず,3Dの球にテクスチャがマッピングされたオブジェクトが作成される。
  4. 「3D」パネルの「球_マテリアル」を選択し,「属性」パネルの「バンプ」から「新規テクスチャ」を開く。
  5. この時,texture.psdと同じピクセル数になっていることを確認。(なっていなかったら,なおす)
  6. bump.psdを選択し,全選択→コピーして,バンプのタブ(例:球_マテリアル-バンプ.psb)にペーストする。
  7. このタブを保存して閉じる。
以上で,とりあえずできあがり。
「バンプ」のスライダを調節することで,凹凸の深さが変わることが確認できるはず。
バンプ5%
バンプ30%
参考までに,完成品データはこちら

5. やってみて

実は,GMT自体で球面にマッピングすることは可能だし,凹凸による陰影をつけることも可能。なので,実はPhotoshopなしでも作ることはできる。ただ,光源を設定したり,その他3Dソフトとしての機能はGMTには無いので,そのあたりが活用できるとよさそう。
また,Photoshopの動画機能を使ったりすると,効果的かも。