👾

Unity認定Associateコースウェアの進め方 その2

2024/01/11に公開

前回の記事に引き続き、Unity Certified Associate Courseware」(以降コースウェアと呼ぶ) の受講記録を残します。

コースウェアでは、三人称視点のクラシックなサバイバルスタイルのアーケードゲーム『Zombie Toys』の制作を通して、Unity を使ったエンド・ツー・エンドのゲーム制作の理解を深めながら進めていくことになります。(公式説明)

1章-3章

なお、1章はゲーム開発全般における一般的な知識についてのお話で、実際に手を動かす部分はなかったので説明は割愛させていただきます。ただ、Unityの概要やゲーム市場について、ゲームの種類、ゲーム開発組織における役職(アートディレクター等)が何をしているのか等について具体的に説明していたので、気になる方はぜひコースウェアを受講してみてください。
2章ではUnity EditorのUIについて、基本的なことが説明されています。こちらも実装を行うことはないので、説明は割愛します。3章は基本的なGame Objectやアセットの操作でしたが、こちらも既にある程度知っていたので、飛ばして4章から開始しました。

学んだ単語集

  • Gizmo: Unityにおけるgizmoとは、シーンビュー上でオブジェクトを編集する際に表示される、デバッグや開発作業を補助するためのビジュアルツールのことのようです

4章-5章 プロジェクトとアセットの管理と準備

ここから本格的に ZombiToys を制作していくことになります。
まずアセットストアから、ZombieToys 01-03 を My Asset に追加してからUnityのPackage Managerで開き、ダウンロードしてから自身のプロジェクト (ここでは MyZombieToys とする) にインポートします。
ダウンロードした ZombieToys は、全てが含まれた一つのプロジェクトなので以下の警告が出ましたが、気にせずインポートを実行しました。プロジェクト自体の最終更新日は2022年だったので、新しめのUityでも問題なく動きそうです。

インポート後の Project は以下のようになりました。

Assets管理の方法を学んだ後に、テクスチャについてのおさらいをしました。

マテリアルとライティング

3DCGの技術では物体の描画を行うときに、そのマテリアル(material)とライティング(lighting)の相互作用によって、その物体の見え方が変わります。内部的には、マテリアルは複数の調整可能な変数(パラメータ)を内包した数理モデルとして表現されており、このパラメータを変更することで、開発者の望むように見え方を変化させることができます。詳しくは公式ドキュメントに記載されているので、詳細を知りたい方は見てみてください。

シェーダ/Shader

上記のマテリアルを利用して物体の見え方を決定する要素としてシェーダ(shader)があります。これは、CG全般において、レンダリングの際にオブジェクトの表面や光の効果を計算するプログラムを指す総称です。シェーダには、以下のような様々な種類があります。上記で登場したマテリアルはシェーダによって描画(render)されますが、シェーダの種類によってその描画のされ方も変わってきます。
Unityにおける最も標準的なシェーダはStandard Shaderです。これは初めからUnityに含まれているシェーダの一つで、殆どの"現実世界"の素材に対応できます。例えば、石や木、ガラスやプラスチック、金属などの硬い素材は勿論のこと、肌や髪、布などの柔らかい素材にも(ある程度?)使えるようです。
シェーダは様々なパラメータを持っており、その値によってどのようにマテリアルを描画するか計算します。パラメータの例には、色やテクスチャ、光沢や金属感、透明度や反射などがあり、以下の図ようにマテリアルの Inspector Window で変更することができます。以下は Standard Shader を使用する際の設定画面の例です。

マテリアルの見え方の変化例

マテリアルの Standard Shader の設定項目で一番上にある Rendering Mode は、そのマテリアルがどのようにレンダリングされるのかを決定します。具体的には、そのマテリアルが設定されたオブジェクトが透明度を持つかどうかや、透明度を持つ場合のブレンディングモードを選択するパラメータと言えます。Rendering Modeには以下の4種類があります。

  • Opaque: 透明度を持たないオブジェクトに使います。最も高速で描画されます
  • Cutout: 透明度がある一定の値以下の部分を完全に透明にするオブジェクトに使います。例えば、木の葉やフェンスなどです
  • Fade: 透明度がある部分を半透明にするオブジェクトに使います。例えば、ガラスや炎などです
  • Transparent: 透明度がある部分を半透明にし、反射や屈折も考慮するオブジェクトに使います。例えば、水滴や宝石などです

Rendering Mode はマテリアルの Inspector から変更できますが、C#コードからも変更できます。

シェーダのパラメータと例

ここでは Standard Shader の持つ幾つかのパラメータを変更しながらどのように見え方が変化するのかを説明します。なお、以降で説明するのは Rendering Mode = Opaque の場合です。
Opaqueなマテリアルにおいて、何もパラメータを設定していないデフォルトのマテリアルは以下のような見た目です。

  • アルベド/Albedo
    オブジェクトの表面の基本色を制御するパラメータ(\in RGBA = N[0, 255]^4)です。Albedo には、単色や画像(テクスチャマップ)を指定できます。画像を使うと、オブジェクトの表面に細かい模様や色合いを付けることもできます。
  • メタリック/Metallic
    表面がどれくらい金属的かを決定するパラメータ(\in R[0.0, 1.0])です。Metallicが高いと、表面は周囲の景色を反射し、Albedoの色は見えにくくなります。Metallic が最大になると、表面色は環境からの反射によって決まります。Metallic を 1.0 に設定した例を以下に示します。
  • スムースネス/Smoothness
    表面の「微細な凹凸」や滑らかさを制御するパラメータ(\in R[0.0, 1.0])です。Smoothnessが高いと、表面は鏡のように光沢があり、反射が鮮明になります。低い場合は、表面はざらざらしており、反射がぼやけます。
    前述したmetallicとの違いは、metallicは表面が金属的かどうかを決めるパラメータであり、smoothnessは金属的であってもなくても適用されるパラメータであることです。smoothnessの組み合わせによって、様々な質感を作り出すことができます。下図の左は Metallic=0.0, Smoothness=1.0 の例で、右図は Metallic=1.0, Smoothness=1.0 の例です。
  • 法線マップ/Normal Map
    表面の凹凸を表現するためのテクスチャの一種です。Normal Map を使うと、物体のジオメトリを変更せずに、光の反射や陰影を作り出すことができます。Normal Mapは、物体の法線ベクトル(表面の向き)をRGBで符号化したものです。以下は Normal Map=1.0 を適用した例です。
  • オクルージョン/Occulusion
    モデルのどの部分が間接照明を受けるかを設定するためのパラメータ(\in R[0.0, 1.0])です。Occlusion Mapというテクスチャを使って、モデルの凹部や隠れた部分に暗さを加えることができます。例えば、服の折り目や首回りなどは、周囲の光をあまり反射しないため暗くなります。Occlusion Cullingとは別の概念であることは注意してください。以下は Occulusion=1.0 を適用した例です。

上記の全てのパラメータに適当な値を設定した時の例です。

上記以外には Rendering Mode を Cutout や Transparent 等に設定すると、異なるパラメータが表れて、開発者の好みに合わせてマテリアルの見え方を調整できます。ぜひ、いろいろ試してみてください。これらのモードを使用するときには、Albedoとして設定する Texture は Alpha 成分を含んでいる必要があるので、Photoshop 等の外部ツールでTexture を作成する際に、透過する画像 (png等) として出力する必要があることには注意してください。

記事一覧

  1. 1章~3章:連載の背景 & コースウェアの購入の仕方など
  2. 4章~5章: アセット管理やマテリアル、シェーダの基礎 ←イマココ!
  3. 5章~6章: ZombieToysの仕様と開発準備について

Discussion