Mamoset/SkyshopはUnity上でHDRIを利用できるライブラリ。クオリティの高い表現は定評がある。Tutorial: Introduction to Skyshop | Marmosetを参考に、Marmoset/Skyshopを触ってみる。
まず当然のことだがSkyshopを購入し、unitypackageを読み込む必要がある。
パッケージを読み込んだ状態。
HDRIデータを準備する。Skyshopが扱うのは、2DまたはCube(立方体)の360°パノラマ・テクスチャ。ファイル形式は.HDR形式または.PFM をインポートできる。
今回はDOSCHのHDRI素材を使うことにした。
トップメニューのWindowにSkyshopという項目が追加される。これはシーンに環境マッピングを設定するためのツール。これを使って、HDRI画像をDiffuseとSpecularのマップに変換し、シーンに配置するまでをやってくれる。
これを選択すると、Skyshopのインスペクタが開く。一番上の'INPUT PANORAMA'にHDRI画像を適用すると自動的にCubemap(SKYBOXとSPECULAR OUTPUT)が作られる。が、まず最初にSKYBOXとSPECULAR OUTPT、それぞれで'New'をクリックしてダミーデータを作っておかなければいけないようだ。
すると、Assetの直下にシーン名と同じフォルダが作られ、その中にSkyboxとSpecular Outpuのファイルができる。こんな状態。
さらに、Assetの中にHDRI画像データを読み込む。Texture Typeは'Advanced'または'Texture'、MaxSizeは4096とした。(これがベストの設定かどうかはわからない)
画像の解像度は任意だが、Skyshopのサンプルシーンでは2048X1024pixelの矩形画像をつかっているので、これを踏襲。DOSCHの場合は'SN'シリーズに相当。(DOSCHのHDRIデータは末尾の2つのアルファベットで画像の種類と解像度を表す)
一番上の'INPUT PANORAMA'スロットのSelectボタンをおし、該当するHDRI画像データを選択する。
Mipmapは不要、というエラーが出たら'Fix Now'をクリック。
INPUT PANORAMAにHDRI画像データが読み込まれる
次にSkybox、Specular Outputを自動作成する。これをおこなうにはSkyShopインスペクタの'Compute'ボタンをクリックする。(GPU Computeでもいい。こちらのほうが速い)
このとき、Basic OptionsのQualityで品質を変えられる。とりあえずは'Medium'でやってみる。
しばらくするとSkybox, Specular Output画像ができる。'Add to Scene'をクリック。
新規作成の場合、'Sky Manager'がない、というメッセージが出るので'Create'。
プロジェクトの他のシーンでSkyMangerを使っている場合はエラーメッセージがでないので、マニュアルでSky Managerを加える。
この方法は、ヒエラルキービューで作成したSkyObjectを選択し、Component-Scripts-mset-SkyMangerを選択。これでMainCameraにSkyObjectが表示される。
これでシーンにHDRIが適用される。シーンのメインカメラにComponent-Scripts...からFree Cameraを適用すれば360°ビューを見ることができる。
ためしに鏡面反射するSphereオブジェクトをおいてみる。
シーンにSphereをつくり、プロジェクトにあらたなMaterialを追加、名前をChromeTestとでもしておく。
このMaterialのShaderを、Marmoset/Specular IBLに設定。Diffuse Colorを黒、Specular Colorを白、Specular Sharpnessを1近くに設定する。
このMaterialをSphereに適用すると鏡面反射するオブジェクトが表現できる。
※補足
Marmoset/SkyshopパッケージのAsset/Marmosetフォルダ内のShaderForgeExtension.zipを解凍すると、次のエラーが出る。
継承しているSF_Nodeクラスがない、というエラーのようで確かにSF_Nodeクラスは見当たらない。。。?
なお、ShaderForgeExtensionはShaderを改良・作成するためのツールのようでなくてもSkyshopは機能する。とりあえず解凍せずに使っている。