Unity上の発光表現とZepeto 3Dアイテムの発光表現について
発光表現の色々
Unity上でWorldやら3Dアイテムやら作っていると、オブジェクトが発光する様子を表現をしたくなることがあります。私は秋が近づくにつれて写植記号BA-90を発光させたくなったので、発光っぽく見える表現を色々試してみました。
この画像内で使っている発光っぽく見える表現は以下です。次回以降で、それぞれの設定方法と見え方の違い、ZEPETOでの利用について解説していこうと思います。
Emission
HDR+Post-Processingのbloom
HDR+Global Illumination
Alpha blendingを使ったParticle(で発光しているように見せる)
Lightsモジュールを使ったParticle
ZEPETOでオブジェクトを光らせるには?
上記では5つの発光っぽく見える表現を挙げましたが、これをZEPETO内で実現する場合、それぞれの表現には3Dアイテム側(Material等)での設定と、World側(CameraやScene等)での設定が必要になります。
例えばEmissionによる発光表現は、Materialを設定すれば実現できます。HDRやPost-Processingによる発光表現は、Materialを設定し、さらにWorld側のオブジェクト、Camara、Sceneにも設定を加える必要があります。
World内のオブジェクトを発光させる場合は、Worldを開発するScene上でMaterialやCameraやSceneを弄ればそのまま発光が表現されます。しかし3Dアイテムの場合は、3Dアイテムを作成したSceneとは別のSceneにアイテムが持ち込まれることになるので、発光の具合がWorld側の設定に依存し、意図しない見た目になる可能性があることを意識する必要があります。
3Dアイテムを作った時は光ってたのにWorldで光らない!
あなたの作成した3Dアイテムを購入したZEPETOユーザが、どのWorldにその3Dアイテムを持ち込むかは予測することができません。3Dアイテム製作者はZEPETOユーザーが訪問するWorldのオブジェクト、Camera、Sceneなどを弄ることは当然できないため、その3Dアイテムが意図したとおりに光るかどうかは、World側のCameraなどの設定に依存します。
言い換えると、3Dアイテム製作者が、Unity上の3Dアイテムを作る自分のScene内でオブジェクトやCameraにPost-Processingの設定を加えることは可能です。その環境の中であれば、自作の3Dアイテムを光らせることもできるでしょう。しかし、リリース時のプレビューではPost-Processingは有効にならないので、自作の3Dアイテムは光りません。当然、そのままリリースしたとしてもZEPETOユーザは様々なWorldに3Dアイテムを持ち込むのですから、持ち込み先のWorldでもPost-Processingが有効で、都合よい設定値になっていなければ光りません。
3Dアイテム製作者の視点では、Post-Processingを有効にした俺のWorldでは自作の3Dアイテムが光るのに、Post-Processingを有効にしていない一般的なWorldやBuild itで作成されたWorldでは思ったように光らない、と言った状況になります。World製作者が個々の3Dアイテムの都合に合わせて環境を作ることはないので、この3Dアイテムはどこに行ってもほぼ光らない3Dアイテム、という事になります。
具体例で示すと、俺のWorldでは左のように見えているのに、他のWorldでは右のように見える、という状況になります。
で、どうすればいいの?
失敗例を先に挙げてしまいましたが、逆に言えば、ZEPETO内のどのWorldでも発光する3Dアイテムを作りたい場合、発光表現のチョイスをWorldに依存しないものにすればよいです。例えば、先ほど挙げたEmissionは3Dアイテム側のMaterialのみで設定すればよいため、Worldに依存しない発光表現、つまりどのWorldでも発光して見える方法と言えます。
では、どれがWorldに依存しない発光表現なのか。どのWorldに行っても発光する3Dアイテムを作るにはどれを選ぶべきでしょうか?
で、どれを使えばいいの?
上記に挙げた5つの発光表現のうち、Worldに依存しない発光表現は、Emission, Alpha Blendingを使ったParticle, Lightsモジュールを使ったParticleの3つです。ただし、Lightsモジュールを使ったParticle については、Zepetoのアイテムリソースガイドラインに抵触する可能性があり、審査を通過できるかどうか分かりません(後述します)。
Post-Processing(bloom), Global Illumination※の2つは、World側の設定で有効にされている必要があります。Unityで作成したZEPETOのWorldや、Build itで作成したWorldではこれらの設定は基本的に無効であるため、3Dアイテム側でどう頑張っても光りません。
※ZEPETO指定のUnity 3.9f1ではBaked Global Illuminationがデフォルトで有効ですが、3DアイテムはWorld内で移動するため、GIの発光を表現するには、Realtime Global Illuminationが必要になります。Realtime GIはデフォルトで無効であるため、有効に変更する必要があります。
なお誤解されないように付け加えますが、Post-ProcessingやGlobal IlluminationをWorldに適用すること自体は、演出として普通に行われることです。例えば焚き火の光とか、ルームライトの光とか、霧による光の乱反射とか、チンダル現象とか。重くなるけど。Worldの外から3Dアイテムを持ち込んだ際、その3Dアイテムの複雑な表現は、Worldの設定に依存して意図しない見え方になる場合があるよ、という話です。
Post-ProcessingやGIをZEPETOのWorldの標準にしてよ!
無理でしょう。高負荷の3Dグラフィック処理を標準にすると、最低スペックの端末で遊んでいるユーザーを切り捨てる形になります。スマートフォンの中古市場が活発なアジア圏ユーザが中心になっていることもあり、ZEPETOとしてはやりたくはないはず。3Dアイテム製作ガイドやWorld製作ガイドでは端末にやさしい製作をしましょうという方向性が見て取れるのですが、今後もその路線が変更されることはないでしょう。
[Build it] '低仕様端末のプレイ不可'という事由で審査で拒否されました。
https://support.zepeto.me/hc/ja/articles/4404234997273
見よ。グラフィックの機能を制限をしているBuild itで作ったWorldですら、高負荷を理由に審査で拒否されることがあるのだ…。
なおZEPETOの後継とされているZTXの公式サイトを見ると、建物の形や光源が床面に移り込んでいるリッチな表現が見られます。ZTXではグラフィックの最低ラインが上がり、色んな表現ができそうですね。