アプリつくってみっか!趣味でiPhone/Androidアプリを開発し、日々勉強した事を書いています。オープンワールド系レースゲームをUnityで開発中です。この広告は、90日以上更新していないブログに表示しています。オープンワールドレーシングゲーム前回はテクスチャマッピングでCR-Xのボディやタイヤ・ホイールの色の塗り分けをしました。tf.hateblo.jpテクスチャマッピングで色をつけるとマテリアルを分ける必要がないのでドローコールが減ってUnityでの表示処理が軽くなるはずですが、そのままだと全体に同じ質感が適用されてしまいます。そのため、BlenderやUnityのマテリアルのパラメーターでボディのツヤや映り込みを適切に設定するとタイヤやボディパネルの隙間まで万遍なく艶やかになってしまいます。これではリアリティが無さすぎるので、今回はスペキュラーマッピングを施して車体の部位や材質によって適切な質感になるように改良してみました。Blenderで普通にSpecular、Mirrorの設定をした状態です。向かって左のライトに光が当たるようにしていますが、ライトの周囲の本来隙間になっている部分まで光を反射してしまっています。タイヤの側面が周囲の色を反射してまるで硬いプラスチックでできているように見えます。スペキュラーマップのテクスチャを適用してみました。ライト周囲の隙間の部分の反射が抑えられているのがわかりますか?この状態ではまだタイヤの質感はそのままなので、ボディの映り込み(Mirror)にもテクスチャを設定します。タイヤやドアモールの反射が抑えられました。抑えすぎな気もしますがまあいいでしょう。ドアとボディの隙間がつや消しになり、ちゃんと分離しているように見えます。お次はUnityです。UnityのスタンダードシェーダーではBlenderとは違い、1つのテクスチャで反射と環境マップの映り込みがコントロールされるので設定するテクスチャは1つだけです。適用後タイヤの質感が変わっているのがわかりますか?また、タイヤハウスの内側やバンパーの空気取り入れ口の反射も抑えられています。これらの質感の設定を実現するテクスチャの作り方ですが、私の場合は例によってこのソフトを使いました。見る多分他のペイントソフトにも同じような機能はあると思います。塗る場所を決めるために前回色付け用に作ったUVレイアウトを引き続き使用します。表現したい材質に合わせてグレースケールで色をつけます。反射する材質は白、全く反射しない材質は黒、その中間の材質は反射率に合わせた灰色といった感じです。BlenderのMirror用のマップとしてUVレイアウトの線画のレイヤーを非表示にして書き出します。次に、これをベースにBlender、Unity用のスペキュラーマップを作りたいので、レイヤーをコピーします。複数レイヤーに分けて作っていた場合は、それらのレイヤーをコピーしてから統合します。白黒の階調を反転します。最後に、編集→輝度を透明度に変換で白黒をアルファ値に変換します。ソフトによっては輝度を透明度に変換する時の扱いが逆(輝度=不透明度)だったり、変換した後のベースの色が白だったりするかもしれません。その時は階調反転と輝度の変換の順番を逆にするなど手順の調整が必要かもしれません。いずれにしましても、必要なのは黒ベースにアルファチャネルが乗った画像です。ShaderのMetallic設定、アルファチャネルがSmoothness設定に対応するので、ベースの色で表示結果が変わります。ちなみに白ベースのテクスチャーだとこのようにメッキをかけたような質感になります。Zガンダムに出てくる百式を再現する時にはいいかも知れませんね。UnityのStandardシェーダーにスペキュラーマップを設定するにはMetallicのテクスチャ用スロットにプロジェクトファイルにコピーしたテクスチャーファイルをドラッグ&ドロップします。setup)シェーダーの場合はSpecularのテクスチャスロットにドラッグします。私は環境マッピングによる映り込みがよりはっきりしているStandardシェーダーの方が良いと思いました。先ほど書いた通り、Unityではスペキュラーと環境マップの映り込みは1つのテクスチャ(アルファチャネルによるSmoothnessの値)で制御されます。アルファ値が高ければ表面がなめらかになり周囲の景色がはっきりと映り込みます。スペキュラーはより鋭く小さくなります。これが結構厄介で、アルファ値が最大だとスペキュラーが小さくなりすぎて逆に見えなくなり、ツヤ感が下がってしまいます。ペイントソフトでアルファ値を変更したテクスチャをいくつか作って比べてみました。アルファ値が100%の場合98%に下げた場合95%に下げた場合フェンダーのあたりのスペキュラーの大きさとボディに映る景色を比べてみてください。100%の場合はスペキュラーが全く見えません。95%に下げたくらいがちょうどいい感じですが、景色の映り込みが弱いので、私は間をとって98%に設定しました。Blenderの場合はまずMaterialのパネルを開いてからTextureのパネルを開き、テクスチャのスロットを一つ選び、Newをクリックします。Imageアイコンをクリックして前回作った色分け用のテクスチャを設定します。同様にSpecular用とMirror用のテクスチャも開きます。Intensityにチェックを入れます。MirrorのテクスチャはShading:Mirrorにチェックを入れます。以上の設定でBlender上でいい感じに表示されると思います。ここで残念なお知らせがあります。秋葉原を舞台にしたオープンワールドなレースゲームというコンセプトでこれまで開発してきましたこのゲームですが、モバイルデバイスでは満足できる処理速度が出ないことが判明しました。6を使い始めましたが、目標としてきた30フレームには届きませんでした。6sだと行けるかもしれませんが、最新機でしか満足に遊べないゲームというのも考えものです。アプリのサイズも問題で、現状200Mバイト以上あります。これではストレージの空き領域が厳しい16GBのiPhoneからは真っ先に消される運命でしょう。そこで、少しコンセプトをねじ曲げようかと考えています。舞台を秋葉原ではないもう少しシンプルな景色の場所にして処理速度を稼ぎやアプリサイズを小さくするという目論見です。するとオープンワールドという要素も置き去りになる可能性があります。いう訳で、完成がいつになるのか全く目処がつきませんが、コンセプトをリニューアルしてさらに開発を進めていきたいと思います。アプリこの商品を含むブログを見るプロフィールid:takujidev個人でiPhone/Androidゲームを開発しています。ミツバチ軍団vs昆虫軍団の縦スクロールシューティング。