【デザイナー向け】アルファをしきい値で2値化する【AlphaCut】【AlphaClip】【Cutout】
ゲームのデータ制作において、テクスチャをアルファ値で透過する際に、『しきい値』を用いて、それより下なら非表示にして、上なら描画するという手法がある。
本来はグラデーションになっているアルファ を『透明』か『不透明』かの2択にするアレだ。
図解すると、
こんな感じ。
この再現方法を
- Maya
- Blender
- Unity
の3つで解説する。
ちなみにこの機能、やり方をネットで検索しようとすると、ある問題に直面することとなる。
『ツール+機能名』で検索すると何も出てこない問題
自分がゲーム業界で働き始めた時からすでに使われていた(PS2くらい?)のだけど、現在でも頻繁に使われていて、とても息が長い。
初めは各社独自にその機能を実装していた。
自分で考えた人、インターネットでやり方を見つけた人、様々だったろうが、渡り歩いた数社で、呼び名は見事にバラバラだった。
そして、ゲーム中でしか表現できない間、デザイナーは大変困っていたので、DCCツール上で再現する機能を作る人が出てきた。
Softimageの時は、これをOpenGLビューで再現するノードを作っていた人が海外にいて、その名前は『AlphaTest』だった。
今現在、
Maya2019では、『AlphaCut(アルファカット)』。
Blender2.80では、『AlphaClip(アルファクリップ)』。
Unity2019のシェーダにあるこの機能は『Cutout』と呼ばれている。
(あと公には言えないツールもあったがそれも違っていた)
もはや各社ワザとやっているのではないか。
いまさら他のところの呼び方に迎合できるかという意固地さを感じる。
そう、名前が違い過ぎて、検索に引っかからないのだ。
そんなわけで、この記事では知る限りの名前を書き連ねている。
願わくば、このやり方を知りたい人がここにたどり着けますように。
Maya2019
とんでもないところにある。
ビュー > レンダラ > ビューポート2.0オプション > パフォーマンス > 透明度のアルゴリズム > アルファカットに変更
ビューの設定なので、マテリアルごとに変更することはできない。
しきい値は【透明度の精度】で調整する。
ちなみにデフォルトの『簡易』はZソートしないので、半透明オブジェクトが奥に並ぶと表示順序がおかしくなる。
これを避けるために使用することが多い。
影もアルファで抜きたい場合は、【透明なシャドウ】にチェックを入れる。
【ライティング】で『全てのライトの使用』と『シャドウ』にチェックを入れるのを忘れずに。
Blender2.80
マテリアルの設定で変更できる。
エディタタイプ【プロパティ】 > コンテクスト【マテリアル】 > ブレンドモード【アルファクリップ】
【影のモード】も『アルファクリップ』にすると、アルファを抜いた形の影が落ちるようになる。
Unity2018(2019でも一緒)
【Cutout】が使えるシェーダは限られている。
- Standard
- Unlit/Transparent Cutout
- Legacy Shaders/Transparent/Cutout/
Standard
Standardシェーダは、【Rendering Mode】を『Cutout』に変更する必要がある。
ちなみに、
- Opacue:不透明
- Fade:半透明
- Transparent:透けてるけど透けてない(ガラスとか)
となっている。
Unlit/Transparent Cutout
【Unlit】はとてもシンプルなシェーダだ。
テクスチャは1枚しか割り当てられない。割り当てたら『Alpha cutoff』の値でしきい値を変更する(また変な名前が)。
気をつけたいのは、【Unlit】シェーダは『ライトの影響を受けないシェーダ』だということだ。
テクスチャそのままの色が表示され、ライトの影響を受けず、よって影も落ちない。
Legacy Shaders/Transparent/Cutout/
【Legacy Shaders】の【Cutout】には複数のシェーダがあるが、【Diffuse】だけ紹介する。
といっても中身はほとんど【Unlit】と一緒だ。『Alpha Cutoff』でしきい値を変更する。
ただしこちらは、ライトの影響を受け、MainColorの値を乗算する。
どうせなら3DSMAX、UnrealEngineなども紹介したかったが、使ったことがないので書かない。
UnrealEngineは、使う機会があったら調べて追記しようと思う。
さいごに
テクスチャは、前回の記事で紹介した【CC0 Textures】のものを使用した。感謝。
前回の記事