Unityな日々(Unity Geek)

Unityで可視化アプリを開発するための試行錯誤の覚書

Marmoset Skyshopを使う

f:id:yasuda0404:20150126155741p:plain
Mamoset/SkyshopはUnity上でHDRIを利用できるライブラリ。クオリティの高い表現は定評がある。Tutorial: Introduction to Skyshop | Marmosetを参考に、Marmoset/Skyshopを触ってみる。

まず当然のことだがSkyshopを購入し、unitypackageを読み込む必要がある。
パッケージを読み込んだ状態。
f:id:yasuda0404:20150126161733p:plain


HDRIデータを準備する。Skyshopが扱うのは、2DまたはCube(立方体)の360°パノラマ・テクスチャ。ファイル形式は.HDR形式または.PFM をインポートできる。
今回はDOSCHのHDRI素材を使うことにした。

トップメニューのWindowにSkyshopという項目が追加される。これはシーンに環境マッピングを設定するためのツール。これを使って、HDRI画像をDiffuseとSpecularのマップに変換し、シーンに配置するまでをやってくれる。
f:id:yasuda0404:20150126161850p:plain

これを選択すると、Skyshopのインスペクタが開く。一番上の'INPUT PANORAMA'にHDRI画像を適用すると自動的にCubemap(SKYBOXとSPECULAR OUTPUT)が作られる。が、まず最初にSKYBOXとSPECULAR OUTPT、それぞれで'New'をクリックしてダミーデータを作っておかなければいけないようだ。
すると、Assetの直下にシーン名と同じフォルダが作られ、その中にSkyboxとSpecular Outpuのファイルができる。こんな状態。
f:id:yasuda0404:20150126164102p:plain

さらに、Assetの中にHDRI画像データを読み込む。Texture Typeは'Advanced'または'Texture'、MaxSizeは4096とした。(これがベストの設定かどうかはわからない)
f:id:yasuda0404:20150126164626p:plain

画像の解像度は任意だが、Skyshopのサンプルシーンでは2048X1024pixelの矩形画像をつかっているので、これを踏襲。DOSCHの場合は'SN'シリーズに相当。(DOSCHのHDRIデータは末尾の2つのアルファベットで画像の種類と解像度を表す)

一番上の'INPUT PANORAMA'スロットのSelectボタンをおし、該当するHDRI画像データを選択する。

Mipmapは不要、というエラーが出たら'Fix Now'をクリック。
f:id:yasuda0404:20150126175441p:plain

INPUT PANORAMAにHDRI画像データが読み込まれる
f:id:yasuda0404:20150126175510p:plain

次にSkybox、Specular Outputを自動作成する。これをおこなうにはSkyShopインスペクタの'Compute'ボタンをクリックする。(GPU Computeでもいい。こちらのほうが速い)
このとき、Basic OptionsのQualityで品質を変えられる。とりあえずは'Medium'でやってみる。
f:id:yasuda0404:20150126175853p:plain


しばらくするとSkybox, Specular Output画像ができる。'Add to Scene'をクリック。
f:id:yasuda0404:20150126180839p:plain

新規作成の場合、'Sky Manager'がない、というメッセージが出るので'Create'。
f:id:yasuda0404:20150126181100p:plain

プロジェクトの他のシーンでSkyMangerを使っている場合はエラーメッセージがでないので、マニュアルでSky Managerを加える。
この方法は、ヒエラルキービューで作成したSkyObjectを選択し、Component-Scripts-mset-SkyMangerを選択。これでMainCameraにSkyObjectが表示される。
f:id:yasuda0404:20150128190010p:plain


これでシーンにHDRIが適用される。シーンのメインカメラにComponent-Scripts...からFree Cameraを適用すれば360°ビューを見ることができる。
f:id:yasuda0404:20150126181201p:plain


ためしに鏡面反射するSphereオブジェクトをおいてみる。
シーンにSphereをつくり、プロジェクトにあらたなMaterialを追加、名前をChromeTestとでもしておく。
このMaterialのShaderを、Marmoset/Specular IBLに設定。Diffuse Colorを黒、Specular Colorを白、Specular Sharpnessを1近くに設定する。
f:id:yasuda0404:20150126182548p:plain

このMaterialをSphereに適用すると鏡面反射するオブジェクトが表現できる。
f:id:yasuda0404:20150126182743p:plain



※補足
Marmoset/SkyshopパッケージのAsset/Marmosetフォルダ内のShaderForgeExtension.zipを解凍すると、次のエラーが出る。
f:id:yasuda0404:20150126173846p:plain
継承しているSF_Nodeクラスがない、というエラーのようで確かにSF_Nodeクラスは見当たらない。。。?
なお、ShaderForgeExtensionはShaderを改良・作成するためのツールのようでなくてもSkyshopは機能する。とりあえず解凍せずに使っている。