原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

【Unity】マスクによる切り抜きのエッジ部分をソフトに表示するSoftMaskForUGUI

お前の可愛いを全員が好きだと思うなよ

Twitterのアイコンが生意気そうな柴犬から元の青い鳥に復活して一安心な皆さんこんにちは。PCで呟こうとすると人を小馬鹿にしたような柴犬のアイコンを見なくてはならず一時はTwitter自体を辞めようかとも思ったのですが、無事に復活して良かったです。いくら経営者だからといって自分の趣味趣向を何の通告もなく一方的に押してけるのは止めて頂きたいものです。

 

画像(Image)の切り抜き

以前からUnityでは画像(Image)に対して任意の形状で切り抜いて表示するMaskという機能がありました。
これにより大きな画像の一部をボタンの模様にしたり、画面転換の演出の一部として使うことができるのですが、CutOffのような形で切り抜くので切り抜き画像のエッジ部分が非常に目立ってしまい、その為使用用途が限られていました。

 

しかしUnity2020バージョンからはRectMask2Dコンポーネントに「Softness」のパラメータが追加になり、画像を矩形に切り抜く場合にはSoftness」のパラメータを変更することでソフトマスクとして切り抜くことが出来ます。

上記の通り「Softness」のパラメータに0以上の数字を設定すると

こんな感じで周囲をぼかすような形で矩形に切り抜くことができます。

 

SoftMaskForUGUI

とはいえ、矩形だけでは色々な使用ケースには対応できないので、できれば任意の形で切り抜きを行いたいと思います。
その為の任意の形でのソフトマスクを実現するパッケージがGitHubの方で公開されています。

github.com

こちらのパッケージはお使いのPCがGitHubを導入している場合はPackage Managerから上記のURLを指定することでインポートできます
GitHubを導入してない場合は、ReleaseタブからSource.zipをダウンロードして、展開したフォルダの中にあるShaderフォルダとScriptフォルダをUnityEditorのProjectウィンドウへDrag&Dropすることで導入することができます。(事前にmetaファイルは削除した方が良い)

 

使い方

このパッケージはRectMask2Dのようなパラメータでソフトマスクを実現するのではなく、Mask画像のアルファ値を適用することでソフトマスクを実現しているのでソフトマスクの元となるMask画像は自分で用意する必要があります。今回は以下のような画像を作りました。

 

次に通常のMaskと同様に切り抜きを行いたい画像(Image)をMask画像の子オブジェトとします。

Mask画像側に「SoftMask」という2つのコンポーネントをセットし、Imageには上記のMask画像を設定します。

次にマスクしたい画像(Image)にSoft Maskableというコンポーネントを追加します。

すると下図のとおりきれいなソフトマスクが作れます。

 

【Unity】AudioMixerを使った音量の一括調整

シン・仮面ライダー

事前情報を入れずに劇場にいったら入場者特典とやらで色紙サイズのサインペーパー(2枚)を配られ、鞄の中に仕舞い切れず扱いに困った皆さんこんにちは。これから観に行かれる方は大きめのバックを持っていくことをお勧めします。
映画の内容は、無駄に高いところから現れるヒーロー、ポーズを取るたびに何処からともなく鳴り響くSEや、ご都合主義&ぶった切りのストーリー展開といった70年代の昭和ヒーロー物をリスペクトする内容で、元ネタを知っている方ならニヤニヤするような小ネタが沢山仕込まれているヲタク向けの同人映画、といった感じでしょうか。
「何だこの力は?一体僕はどうしてしまったんだ!」から「僕はこの力で人類を守る」まで10分も掛からずに心変わりしますが昭和ヒーローとはそういうモノなんです。だから大きな不満はありませんが、戦闘場所は必ず山奥の採石場であちこちで爆発が起こる、といったこれも昭和ヒーローのお約束が無かった事が唯一残念だった点でしょうか。

 

unity1week

前回の更新時には制作中だったunity1week向けのゲームですが、その後無事に投稿することができました。
今回はリズムゲームで、且つ音ゲーのようなノーツが振っているタイプではないゲームにする、という事を目標にゲームデザインを考え、結果、一筆書きと組み合わせたようなゲームを作成しました。

unityroom.com

相変わらず閲覧数や評価数が少なくので結果はもう諦めているのですが、「タイミングがシビア」という感想を頂き、自身では全く気付かなかった事なのでやはり第三者から感想をもらう事は重要なことなんだなぁ、という事を改めて認識しました。
気になった方は上のリンクから飛んで遊んで見て下さい。それも面倒くさい、もしくは難しくてクリアできない、という方のためにプレイ動画を下に作成したので、ちょっとでも見てやってください。

youtu.be

 

音量調整機能

unity1weekは(基本的に)1週間でゲームを作り上げるイベントなので、個人的にはゲーム本編とそれに伴う必要な機能を作るだけで十分だと思っているのですが、unity1weekのゲームを評価する人の中には、音量調節機能の有無がゲーム評価を左右する、との考えを持っている方がいるようで、音量調節がない場合は無条件に(サウンドの)評価を一段階低くする、といった評価基準で採点されています。

この為、noteなどで見かける「unity1weekの攻略法」といった内容の記事では「音量調節機能は必須」などと書かれており、実際に最近の投稿作品の多くは音量調節機能が実装されています。
とはいえBGMやSE、ボイス等、ゲーム内で音を鳴らす箇所は様々複数存在するため、各それぞれにオプションで設定した音量の値を反映するのは非常に面倒で手間が掛かります。

Unityではこの手間を出来る限り少なくする為にAudioMixerという機能が用意されています。

AudioMixerAudioSourceの鳴らす音を一括管理する事ができ、且つ、各AudioSourceをBGM/SE/ボイスなどの音量は各カテゴリに分けて管理するといったことが実現できます。

 

作り方

最初にAudioMixerをプロジェクト内に作成します。

1.Projectで右クリックしてCreateからAudioMixerを指定します。

プロジェクト内にAudioMixerが作成されます。

 

2.AudioMixerを選択してInspectorに表示される「Open」ボタンを押します

AudioMixerのウィンドウが開きます。

 

3.Groupsの「+」を押してカテゴリ毎にグループを作成します。

 

4.AudioMixerにグループを作成したら、音量調整を行うためのパラメータを各グループ毎に追加して行きます。

各グループのInspector上から「Volume」を右クリック→「Expose 'Volume(of グループ名)' to script」を選択します。

 

5.AudioMixerウインドウの右上に「MyExporsedParam」が作成されるので、これを適切な名前に変更します。

 

6.すべてのグループにパラメータを追加するとこんな感じ。これでAudioMixer側の準備が完了しました。

 

スクリプト側の制御

スクリプトでAudioSourceとAudioGroupを紐づけます

スクリプトにAudioGroupを格納する変数とAudioSourceを格納する変数をそれぞれ用意

Inspectorからそれぞれに適用

AudioSourceのoutputAudioMixerGroupにAudioGroupを指定することで紐づけを行います。

後はAudioMixerにSetFloatで先程作成したMyExporsedParamの名前を指定し音量の値を設定します。

音量の値は-80~20となるようにします。

スライダーで設定したい場合は、スライダーのMin・Maxの値を-80,20に指定すれはスライダーの値をそのまま代入することができます。

 

注意点ですがAudioGroupのMasterは主音量を示しています。追加した他のグループの親となっているの為、Masterの音量を変更すると子である他グループもそれに追随して変更されるので注意してください。

上記までの対応によりゲーム内の各グループの音量を一括で変更できるようになります。unity1weekでも音量調整機能を実装したいと思う方は参考にして下さい。

 

「W.T.」では実装してるよ!

unity1weekでは今後も音量調整機能を実装するつもりはありませんが、先日体験版をリリースした「W.T.」ではオプション機能として音量調整機能は実装しています。

右のリリース作品欄のリンクからダウンロードすることができるので是非ダウンロードして遊んでください。(無料です。)

 

【雑記】終わったのに終わってないunity1week

治療

歯医者で虫歯の治療中に「これは長そうだね」(長そう!?)「一番太いの持ってきて」(一番太いの!?)という医者と歯科助手の会話が聞こえてきて逐一ビビっていた皆さんこんにちは。取り合えず無事に治療が終わって良かったです。

 

INDIE Live Expo 2023

体験版をリリースしている3D脱出アドベンチャーゲーム「W.T.」ですが(右のリリース作品欄参照)、コナミ主催のIndie Game Connent2023に落選してしまったので、気を取り直してオンラインイベントのINDIE Live Expo 2023に応募しました。

indie.live-expo.games

今回は応募用の動画にフルスクリーンサイズのものを求められたり、スクリーンショット以外にもメインビジュアルが必要だったりと少し手間が掛かりましたが、なんとか期限内に応募を完了することができました。

youtu.be

番組内で紹介されるのは最大200作品でそれ以上の応募があると審査選考となるみたいですが、なんとか選考を突破して紹介して頂ける事を願っています。

 

uniy1week

unityroomというサイトでunity1weekというイベントが開催されています。

unityroom.com

今回の開発期間(3/20~3/26)は学生さんにとっては春休み期間、社会人にとっても祝日が含まれている週という事もあって、同じ一週間でも幾分か余裕のある開発期間だったのではないでしょうか?
その為か評価期間初日(3/27)にはいつもより多めの182作品ものゲームが投稿されています。やはり期間に余裕があるとそれだけ開発もはかどりますよね。

まぁ、私はいつもの通り開発期間継続中なんですがね。

こんな気分(定期)

 

頑張ります

【お知らせ】3D脱出ゲーム「W.T.」体験版をリリース

トロッコ問題

倫理学の問題で有名な「トロッコ問題」について「一番にひき殺すべきは出題者」という回答に思わず膝を打った皆さんこんにちは。同じように昨今のポリコレや多様性について煙無いところに火をつけるオピニオンリーダー気取りの人間もトロッコに乗せてそのまま海に流してしまいたい気分です。Twitterは一時期正常化したと思っていたのですが、また「~に抗議します」「~を求めます」系のツイートがトレンドに上がるようになってきました。迷惑です。

 

体験版をリリース

そんなわけで作成中のゲーム「W.T.」ですが、現状、一人開発でテスターを雇うお金もなくて展示会にも落選して誰からもレスポンスを受けることができない状況の為、指摘やレビューをもらうために自作ゲームの体験版をリリースしました。

■フリーゲーム夢現:

freegame-mugen.jp

■ふりーむ!:

www.freem.ne.jp

■itch.io:

karvan1230.itch.io

フリーゲーム夢現、ふりーむ!とitch.ioでのリリースとなります。どれも同じバージョンのものですが、itch.ioの方は言語設定のデフォルトが英語となっています。

このゲームは全部で5章構成となる予定ですが、そのうち前半の2章を体験版として遊ぶことができます
プレイ時間は長くても30~40分程度だと思います。第1章の半分はチュートリアルなのでサクッと終わるし、その後の章も難易度的には特に詰まることなく進めることができると思います。

 

ゲーム内容について

"完全"は数学を知った者だけが可能とする

このゲームは一人称視点の3D脱出ゲーム、アドベンチャーゲームです。
白い壁と白い床と白い天井、色のない空間の中に独り取り残された貴方は出口を探して白い世界を探索する必要があります。

だが、決して出口にはたどり着かない、先に進んでいても元の場所に戻ってしまう。
そう、白い館内には色付けされた数々の仕掛け(パズル)が設置されており、それらを解かない限り館内の空間はループし続けます。

提示されるパズルは多種多様に渡りますが、運や直感によって解けるような問題は殆どありません。
それには論理的な思考と数学的な推論が必要となるのです。
まるで数学を知った者以外を拒むかのように。

貴方はそれらのパズルを解きながら、この白い空間が設置された意味と、なぜこの空間で貴方が独り彷徨っているのか、その理由を探ることになります。
そして"完全"とは何か?"完全"が可能とは?その言葉の真理に辿り着いて下さい。

 

お願いと注意事項

上記のようなストーリーと世界観で進むアドベンチャーゲームなのでホラーゲームではありません。
しかし、一部にジャンプスケア的な演出があります。心臓の弱い方や驚かされる事が苦手な方はご注意ください。(音量を小さくすると軽減されます)

体験版ではこのゲームの前半部分(5章中2章)を遊ぶことができます。ゲーム途中で終了のメッセージが表示されメニュー画面に戻されたら、そこまでがプレイして頂ける最長の場所となります。

 

前述した通り体験版は遊んで頂けた方からのレスポンスを貰うことを目的にリリースしています。
ゲーム内容について不具合や気になった点はもちろん簡単な感想でも頂けると幸いです
製品版の作成で参考にさせて頂きます。
細かいですが、不具合については不具合発生時のオペレーションも合わせて記載して貰えると調査の足がかりとなります。

 

感想や不具合のご報告はお問い合わせフォームにてお気軽にお知らせください。

https://www.karvan1230.com/InquiryForm

それでは、皆様なにとぞよろしくお願いいたします。

【Unity】スクリプトでHSVを指定してMaterialの色を変える

「W.T.」ふりーむ!版

休日のゲーム開発ははかどらないのに本業のリモートワーク中のゲーム開発は進捗が進む皆さんこんにちは。先日もそんな感じでふりーむ!に投稿するためのブラッシュアップ作業を行い、大体完了することができました。
後はセーブ機能に関する諸問題を解決するだけなのですが、解決できなかった場合でもセーブ機能なしで投稿すると思います。長くても30~40分程度の作品なので。
なので、3/10を目途にふりーむ!へ投稿しようと思っていますが、ふりーむ!は作品投稿後に審査があるようなので、実際にサイトに並ぶのは来週ぐらいになるでしょうか。
その時はTwitter等で告知しようと思います。

youtu.be

IGC2023落選

出展を応募していたIndie Games Connect 2023ですが、抽選の結果、残念ながら落選したようです。

www.konami.com

近々でユーザの方に直接自作ゲームをお披露目する機会がなくなったのは非常に残念ですが、落ち込んでもいられないので、次はオンラインイベントのIndie Live Expo 2023の出展を応募しようと思います。

indie.live-expo.games

こちらは番組中に15秒のスポットを流してもらう形になります。長時間イベント中の15秒なのであまり目立たないかもしれませんが、少しでもアピールする機会を頂けるのは大変ありがたい事だと思います。

番組は5/20,21らしいのでそれまでにはSteamにアーリーアクセス版がリリース出来ているよう頑張ります。

 

「ついてこれる奴だけついてこいッ!」なゲーム

「化勁」「不屈」「氣勢」「絶脈」このワードだけを聞いてそれぞれがアクションゲームの中でどんな役割を示しているのか想像できる方はいるでしょうか?古代中国三国志が舞台のゲームとはいえ、"パルスのファルシのルシがパージでコクーン"並みにユーザ側に理解努力を求めるゲームそれが「Wo Long Fallen Dynasty」だと言えます。

「NINJA GAIDEN」「仁王」シリーズを開発したTeam NINJAのゲームらしく、軽快で爽快感の高いハイスピードな高難易度アクションが楽しめます。各レビューサイトで散々言われているでしょうが、SEKIROの剣戟アクションに強く影響を受けており、本作ではSEKIROの「弾き」に似た回避アクション「化勁」を駆使することがゲーム攻略のカギになります。

こうした高難易度な「死にゲー」と呼ばれるジャンルは、ユーザ側がトライ&エラーを繰り返し強敵に対する攻略法を試行錯誤したり、ゲーム操作を上達させて達成感を楽しむゲームだと思いますが、「Wo Long Fallen Dynasty」の場合、"攻略法を試行錯誤する"という部分をバッサリ削って、"ゲーム操作を上達させる事"だけにフォーカスされたゲームバランスとなっています。
この為『"化勁"というアクションを上手く使いこなす』という事だけが難敵を突破する唯一の攻略法で、ハスクラ要素や魔法のような「仙術」、同行NPCもただの「色付け」としての存在にとどまり、ユーザが試行錯誤する幅が極端に狭いゲームとなっています。

その代わり"化勁"を上手く使えるようになると、それを起点に"氣勢"というゲージに注意を払えるようになり、"絶脈"や"武技"といった必殺技を駆使して強ボスでも華麗な戦いを演じられるようになって、以後のゲームプレイが非常に楽しくなります。
これは開発者側が「ついてこれる奴だけついてこいッ!」と宣言して「その代わりついてきたやつは十分に楽しませてやる!」という意気込みで作り上げられたゲームだと言ってよいでしょう。
"化勁により氣勢を溜め絶脈を発動、攻略には士気と不屈を上げて・・・"を楽しむ覚悟のある方は購入をお勧めします。

teamninja-studio.com

 

RGBとHSV

色を数値で表す場合、主に光の三原色RGBを使って表現することが多いと思いますが、ゲーム画面のデザインを考える場合は、色相(Hue)、彩度(Saturation)、明度(Value)で表される値を使った方が便利です。

これは同じ色合いを並べて統一感のある画面でも輝度、明度を変えると画面に奥行をだしたり、季節感を表現することが簡単になり、よりおしゃれな画面を作るとができます。ここら辺の下りについては、以前このブログでも記事にしています。

www.karvan1230.com

UnityのエディタではカラーピッカーのRBGの指定をHSVに変えると指定した色のHSV値を確認して変更することができます。

ゲーム制作時にMaterialを作成するときはこのカラーピッカーを使ってHSV値を変えて色を指定することができますが、ゲーム実行中にMaterialの色を変更したい場合、Materialに設定するColorクラスにはRBGしか扱えないため、彩度や明度を動的にスライドして変えたい場合はちょっとした工夫が必要になります。

 

RGBとHSVの変換

RGBとHSVとの値の変換は「各要素を足して3で割る」といった単純な処理ではないのですが、幸いにUnityEngine.Colorにはそれ用の変換メソッドが用意されています。

docs.unity3d.com

docs.unity3d.com上のリファレンスを読めばわかりますがHSVToRGBは戻り値がColorクラスとなっている為、戻り値をそのままMaterialのColorとして設定可能です。逆にRGBToHSVは戻り値はなく、H,S,Vの値をそれぞれ引数として渡す必要があります。

また、通常HSVの値は

  • H(色相):0~360
  • S(彩度):0~100
  • V(明度):0~100

上記のような範囲で指定しますが、HSVToRGBで指定する値、RGBToHSVで戻ってくる値は0~1の為、値を表示したり、画面から入力して指定する場合には考慮が必要です。

 

スライダを使って動的に変える

試しに画面上にHSVそれぞれの値を示すスライダを設置して、それを変更することでマテリアルの色を変更するようにします。
折角なら同じマテリアルを使用するオブジェクトすべての色を変更したいので、SharedMaterialの色を変更するようにします。
因みにSharedMaterialのColorを変更した場合、デバッグモードが終了しても変更した値がそのまま残るので注意が必要です。

 

    public Slider H, S, V;

    void Update () {
        GetComponent<MeshRenderer>().sharedMaterial.color = 
            UnityEngine.Color.HSVToRGB (H.value, S.value, V.value);
    }

 

最初にH(色相)を変えてみます。

 

次にS(彩度)

 

そしてV(明度)

HSVそれぞれのスライダーを調整することでオブジェクトの色合いに変化を付けることができました。

【Unity】小ネタ:コルーチンを途中から再開する

圧が強い

何気にYoutubeで「犬神家の一族(1976年版)」についての解説動画を視聴したら、それ以降Youtubeのホーム画面が助清で埋め尽くされた皆さんこんにちは。「犬神家の一族」を語る解説動画多すぎです。そして揃いも揃ってゴムマスク姿をサムネに使い過ぎです。地獄かと思った。因みに「犬神家の一族」には2006年版もありますが、そちらについて取り上げる動画は殆ど無いみたいですね。まぁ大柄な野々宮珠世とかちっとも不遇なヒロインに見えないので1976年版だけ見ていれば十分なのかもしれませんが。

 

終始不穏なゲーム

「和階堂真の事件簿」というアプリに似てるなぁ、と思いながらプレイしていました。

どちらもミステリーものでドット絵主体の横スクロールのアドベンチャーゲームですが、「和階堂真の事件簿」がフーダニット型の本格推理なら、こちらの「Loretta」はヒッチコック系のサスペンススリラーといった感じ。

store.steampowered.com

アイテムを探して謎解きを楽しむというよりはストーリーと演出を楽しむゲームだと思います。ふとした事から夫に殺意を抱いた主人公が現実と悪夢が入り混じった白昼夢のような世界の中でドンドン追い詰められていく様子がスピーディに展開していきます。終始不穏な雰囲気が漂う中、中だるみするような箇所はなく結末までハラハラな展開が続くのでプレイ自体に不満はないです。

まぁ、展開がスピーディな分、プレイ時間が短くなる(二時間半ぐらい)のは仕方ないのですが、その対策の為なのか、各キャプチャーの間にパズルゲームのようなミニゲームが挟まれています。これはちょっと蛇足でした。
値段が1,700円なので値段相応なのかどうかは判断が分かるところですが、ストーリー重視のゲームを作っているゲーム開発者の方はストーリーの展開の仕方や伏線の張り方など参考にすべき箇所は多いので購入する価値は十分あると思います。何気ない会話の中にドキッとするようなワードを挟むのは、ミステリーを形作る手法として上手いなぁと思わされました。

 

一時停止機能

自作ゲームの中で、ロボットにコマンドを発行して目的地まで誘導する、というパズルゲームを作っています。

 

これは下の図のようにコルーチン内で発行コマンド数分処理をループして実行する、という実装になっているのですが、ユーザ操作でゲームを一時停止させる場合、このコルーチンも停めないといけない。

ただ、コルーチンはStopCoroutineで停止することはできても、その後のStartCoroutineでは途中から再開させる事はできず、最初からの開始になってしまいます。つまり、上の図だとコマンド配列の取得Indexが0から再開されてしまう、これは非常にまずい。

 

色々調べた結果、まずコルーチンの処理を「IEnumerator型」のメンバ変数に保持して、

IEnumerator ProgramEra;

private void RunProgram()
{
    // IEnumeratorを保持
    ProgramEra = RunProgramPrc();
    
    // コルーチンの開始
    StartCoroutine(ProgramEra);
}

private IEnumerator RunProgramPrc()
{
    var delay = new WaitForSeconds(0.1f);

    // コマンド数分繰り返し
    for (int iCnt = 0; iCnt < CommandNum; iCnt++)
    {
        // コマンド実行処理
        
        
        while (ロボット動作中?)
        {
            yield return null;
        }
        
        yield return delay;
    }
}

StopCoroutineとStartCoroutineでそのメンバ変数を指定すれば良い事が分かりました。

/// <summary>
/// コルーチンの一時停止
/// </summary>
private void PausePrc()
{
    StopCoroutine(ProgramEra);
}

/// <summary>
/// コルーチンの再開
/// </summary>
private void RestartPrc()
{
    StartCoroutine(ProgramEra);
}

これによりStartCoroutineで再開しても、コマンド配列のIndex指定は停止前の値を引き継ぐことができるので正しく処理を再開することができました。

 

ふりーむ版リリースに向けて

自作の3D脱出ゲーム「W.T.」は全五章のうち前半2章を試行版としてふりーむにリリースする予定です。
リリース日は3月初旬予定で、現在はリリースに向けてブラッシュアップ中なのですが、そういう時に限って本編に関係のないギミックを作る作業にのめり込んでしまう・・・

最近作った「ビット演算時計」、無駄に時間が掛かった。

他にやることは一杯なんですがね。なんとか3月初旬にリリースできるように頑張りたいと思います。

youtu.be

そして明日から3月!

【Unity】アセット紹介:多様なエフェクトを使えるトゥーンシェーダー Toon Pro: Ultimate Stylized Shading

負け惜しみではない

今年もバレンタインは自主的に中止した皆さんこんにちは。昨今はポリコレ旋風に乗ってフェミ界隈の方々が各分野で猛威を振るっているので女性に経済的な負担をかけるようなイベントは当然中止にすべきですよね。何ならこの勢いのままクリスマスもハロウィンも中止にしてほしいものです。

 

Toon Pro: Ultimate Stylized Shading

トゥーンシェーダーと言えば、Unityでは「ユニティちゃんトゥーンシェーダー」や「lilToon」といったシェーダーが無料という事もあり使用されている方も多いと思いますが、今回紹介する「Toon Pro: Ultimate Stylized Shading」では一般的なトゥーンシェーダーに比べて多様なエフェクト機能を持つ事が特徴となります。

このアセットで実現される多様なエフェクトはサンプルシーンを実行すると確認することができます。

上の動画中に使われているマテリアルは全てアセット内に含まれているので、それを使うだけでもゲームの画面作りには役立つと思います。

 

使ってみた

では、実際に使ってみます。下の画面は全3DモデルがStandardシェーダーを使用しています。

これら3Dモデルのシェーダーをこのアセットのシェーダーに変更します。

元がフラットな絵だったのでわかりずらいかもしれませんが、ソファーなどの影の部分を見るとセルルックな画面になった事わかると思います。

このトゥーンレンダリングのベースとなるシェーディングタイプは3種類用意されており、上の画像は「Step」のモードを選択したものです。

モデルの陰影がトゥーンレンダリングらしくはっきりと付けられています。

もう少し滑らかな陰影をしたい場合は「DiffuseRamp」のモードを選択し、陰影の勾配を表すテクスチャを指定します。

すると、以下の図のように自然な陰影となります。

 

逆にもう少し陰影の段階を増やしたい場合は「Posterize」のモードを選びます。

陰影の段階数をパラメータで変更できるのでこの見合った設定に変更します。

 

特徴的なエフェクト

前述のようにこのアセットでは多様なエフェクトが用意されていますが、その中でも特徴的なエフェクトは「Halftone」と「Hatching」になるでしょうか。これらはどちらともポストエフェクト(カメラに仕掛けるエフェクト)としては良く見かけますがシェーダーとしてオブジェクト側に仕掛けるエフェクトとして用意されているのは珍しいと思います。

Halftone」は色々なパターン画像を使用して連続階調の画像を作るエフェクトです。

先程設定したマテリアルにHalftoneの設定を追加するとこんな感じになります。

 

「Hatching」は手描きまたはスケッチ効果を作成するために使用します。

一様なHatchingではなく、明かるい部分と暗い部分のテクスチャを指定することができます。

テクスチャの効果が強いので少しわかりづらいかも知れません。

「Pure Sketch」のチェックをONにしてテクスチャや色の設定を無視することもできます。その場合はOutlineと合わせて設定するとそれっぽい画とすることができます。

 

アウトラインについて

上の画像のようにOutlineもエフェクトとして用意されています。
以前の記事でも書いた気がしますが、基本的にシェーダを利用するアウトラインは角の部分で線が途切れたり表示されなかったり、と思ったような線が出せない場合もあります。
ただ、このシャーダーのアウトラインは描画方法によって3種類用意されており、オブジェクトの形状に合わせて設定することができます。

 

Normal」は一般的なアウトライン描画方法で、メッシュの法線方向にモデルを拡張した形状をベースにアウトラインを描画します。

この為、外環が滑らかな曲線を描くようなモデルだと綺麗な線となりますが、直方体など角のあるモデルだと線が切れたり、非常に細い線で描画されてしまいます。

 

Position」はオブジェクトの中心から各メッシュに向かう線上にモデルを拡張する方式で、こちらの場合は角のあるモデルの線は綺麗に繋がって描画されますが、逆にモデルによっては前面が塗潰されたような描画となってしまいます。

 

「UV Baked」はメッシュのUVチャンネル3にベイクされた法線方向に基づいた方式でBlender等で自作モデルを作る方には制御しやすい方式だと思います。

逆にモデルをアセットとから購入して使用する場合は、モデルによるのであまり使い勝手はよくないと思います。

 

最後に

Unityのアセットストアで発売されているトゥーンシェーダーは数多いです。このブログでは同様の他シェーダーを紹介したこともあります。

www.karvan1230.com

また、前述のように無料のトゥーンシェーダー(「ユニティちゃんトゥーンシェーダー」や「lilToon」)もあります。
それらと比べて完全に優位とは言いませんが、「Halftone」や「Hatching」といったエフェクトが使える事、また、アウトラインの方式も3種類用意されており、そういったエフェクトを他アセットで用意するよりは、このシェーダーで賄う方がお得なのではないでしょうか。

 

お知らせ

前回の記事でも告知した通り、現在制作中の脱出ゲーム「W.T.」を3月頭を目途に体験版をふりーむ!で、アーリーアクセス版をSteam等でリリースする予定です。詳しい日程が確定したら当ブログ内、及びTwitter等でお知らせしたいと思いますので何卒宜しくお願い致します。

youtu.be

・・・と、言いながら来週は更新お休みする予定なんですけどね。

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。