全国ゲーム制作部合同ゲームジャムに参加しました & SpecularColorバッファを使ったマスク表現
先週末は全国ゲーム制作部合同ゲームジャムでした。
自分は東京で参加しました。
運営の方々と参加された方々、お疲れ様でした。
全国ゲーム制作部 合同ゲームジャム@東ゲ部 - 関東ゲーム制作部 | Doorkeeper
全国ゲーム制作部 合同ゲームジャム@関ゲ部 : ATND
全国ゲーム制作部 合同ゲームジャム@名古ゲ部 - 名古屋ゲーム制作部 | Doorkeeper
ゲーム部合同ゲームジャム in 沖縄琉ゲ部会場 - IGDA琉球大学 | Doorkeeper
当日の様子
いえーい。(りんごジュースです。梅酒なんかじゃないです。) #東ゲ部 #ゲーム部合同ジャム pic.twitter.com/DbHJflZB7k
— ほげたつ (@HogeTatu) 2016年3月20日
Leapを酒に固定だ! #東ゲ部 #ゲーム部合同ジャム pic.twitter.com/QRGmqNBzbW
— ほげたつ (@HogeTatu) 2016年3月21日
非常に楽しませて頂きました。
今回作ったゲーム
東京はテーマが「しろくろ」と「さけ」だったため、真っ白な世界に黒インクを塗って徐々に世界が見えていくといったものを作りました。
ゲームの目的としては真っ白な中に見える全ての銅像をぶっ壊すといったものです。
(たぶんそのうちパッケージされたものが公開される…はず)
自分の担当の一つが上記の白黒表現だったため、下記の様なものを作ってました。
進捗。デカールを貼られているところのみ表示する。デカールはポストプロセス用のマスク処理に使っているだけなので、例外オブジェクトを作ることもできる。使わないスペキュラチャンネルちゃん大活躍。 #東ゲ部 #ゲーム部合同ジャム pic.twitter.com/tc9dHdwgNy
— ほげたつ (@HogeTatu) 2016年3月20日
今回はこれについてもう少し詳しく書きます。
Unlitなマテリアルにデカールを貼ってみる
今回は完全にディテールが無い白い世界に色を塗っていくという仕様だったため、まずは単純にUnlitな白いマテリアルに黒いデカールを貼ってみました。
表示されない…!
試しにUnlitをやめてDefaultLit+EmissiveColorにしてみると、
薄い…!
ブレンドモードを変更すれば対応できるかと思ってドキュメントを読んで色々とやってみたものの、なかなか改善されません。
ちなみにDefaultLit+BaseColorであれば、
となるため、EmissiveColorのみのマテリアルとデカールは相性が悪そうです。
(この辺りドキュメントを探してみたが見つからず…。詳しい方がいれば)
スペキュラバッファをマスクとして使用する
この結果では問題があったため、別のアプローチを考えます。
今回はこちらの絵をベースに検証していきます。
ポストプロセスでマスクできれば解決できそうなので、SceneTextureで選択できるものの中から使えそうなバッファを探します。
ざっと見て使わなくても表現に影響が出にくそうなものを探していると、SpecularColor が目に入りました。
今回はSpecularを効果的に使用した絵作りの予定は無かったので、このバッファをマスク用に使います。
背景マテリアル(真っ白にしたいもの)のSpecularを 1 に設定し、デカールのマテリアルでは逆に 0 を設定します。
ただし、今回は線路は最初から表示しておいて欲しいとのことだったので、線路のマテリアルのSpecularは 0 を設定します。
この状態でポストプロセスマテリアルにてSpecularColorを出力すると、
ほぼ黒ですが、うっすらと出ているようなのでMultiplyしてコントラストを出してみます。
これでマスク範囲を出せました。
あとはベースの絵にマスクをかけたものを出力としてあげれば終了です。
今回はテーマが「しろくろ」だったため、背景マテリアルは黒一色にして黒いインクを表現しましたが、このように元の色を出すこともできます。
これを実現するポストプロセスマテリアルも非常に簡素なものです。
終わりに
今回作ったSpecularColorバッファを用いたマスク表現は本来の使い方ではないため、同じように使えるゲームは限られると思います。
ただエンジンを拡張すれば、ノンフォトリアルなゲームで全体としてUnlitしか使わないものであれば、今回みたいにSpecularを潰して自由に使えたりしないかなとふわっと考えたりしてます。(それよりバッファを新設する方が簡単なのかもしれませんが)
ちょっと特殊な使い方ですが、何かの参考になれば。