ゲームエンジン基礎

ゲームエンジンは、ゲームシステムを作るときによく使う各種演算処理ライブラリの提供=ゲームエンジンと、そのライブラリでコンピュータプログラムを作るためのツール をまとめたもの。 コンピュータプログロムの基礎知識がある方が習得しやすい。

1.コンピュータ知識

コンピュータは、扱う情報を0,1(無いか在るか)のディジットの組合せで表すことで、情報を正確に高速に処理することができる。
0か1のどちらかを表す1単位ビットを、時系列に順番に処理する。 複雑なパターンの情報を表すには多数のビットが必要になるので、8ビット、16ビットなど一回にまとめて処理する。

コンピュータで0,1(無いかあるか)の羅列による情報を記憶しておく場所をメモリという。
プログラム自体もメモリに記録された情報の一つになる。
メモリ内で指定場所を表す通し番号である番地をメモリアドレスという。
データの複雑さによってそれをメモリに格納するための長さが変わるので、扱う対象によって情報を格納する変数の”型”を変える。
情報を格納する変数の種類

画像情報

点(ピクセル)の明るさの強さを、幅W×高さHの羅列で記録する。
点の明るさはRGBの3原色の強さで表す。
RGB各色を1バイト(256段階)=3バイト24ビットで表すことが多いが、コンピュータのwordが32ビット、64ビットの場合に空席ができるので、4バイト目に透明度情報をアルファ・チャンネルとして追加する場合が多い。RGBA
人間の目には各色256段階で表せば十分足りるが、中間映像処理を行う素材として使う場合には256段階では劣化が問題となるのでさらに分解能を上げる。

HDRP(High-Definition-Render-Pipeline)Unityの高画質映像表現機能

コンピュータ映像は、最終的に画面の明るさ諧調で表現されるので、コンピュータプログラム内でも、かつては画面の明るさ諧調を表すのと同じ数を使って表現していた。
しかし、これでは最終的な見栄えをわかって作業を進めなくてはならず、人によって考え方が変わる。
そこで、物理世界の光と同じように、光を表し光学的に正しい物理量で記述表現するようになった。
こうしておけば、グラフィクス処理のハード、ソフトの性能や特性が変化しても、扱う数字は変わらない。
扱う人に依存せず数字が決定されるので分かりやすい。
Unityは、エディタにビルドインされているのも物理レンダラーだが、HDRPでは記述単位が物理量に変わっている。
人間の皮膚を透過、拡散する光を計算しているので、HDRPサンプルでは逆光の人物の耳たぶが赤く透けて見える。

音声情報

音(気圧変化)の強さを一定周期時間置きに羅列して記録する。
チャンネル数×分解能×サンプリング周波数
音楽CDでは毎秒、2ch×16bit×44.1kHzの連続データ
インタラクティブアプリケーションでは、作った世界の中でリアルタイムに発生する音を再現するため、小さく区切った音源データをいつでも再生できる準備しておいて、指定したタイミングと音量で再生する。準備しておくスロットが512、1024と多数あれば沢山の音が同時に鳴っても対応できる。
3D空間での音の再現は、音源の方向と距離によって主観位置に届くまでに壁などの途中の遮蔽や反射などを計算し、立体感のある音響としている。

入出力装置

初期のコンピュータは、ビット情報をスイッチの並びで入力し、ビット情報をランプの光やパンチ穴の並びで出力していたが、 その後、入力はキーボードで入力するようになり、出力はプリンターからテキスト文字を表示するスクリーンに代わった。
ミニコン(日本ではオフコン)時代に、現在のデスクトップPCのような形のスクリーンとキーボードを備えるターミナル(端末)が普及した。
ターミナルにはプロンプト(入力待ち記号)が表示され、そこにコマンドを打ち込むと、文字で出力が戻るという形となった。
現在のPCは、ミニコン時代のマルチユーザー・マルチタスクのO/Sを始祖に持つためターミナルという考えが残っている。
ターミナルにコマンドを対話的に都度打ち込むのではなく、予め実行したい手順を書いて(スクリプト)それを入力して実行させる方法が使われた。
スクリプトを解釈して実行するものがシェルであり、Cシェルで使われたスクリプトを元に生まれたコンピュータ言語のC言語から、Java、C#などのスクリプト言語が現在使われている。Unityでは、手順の記述にC#を使う。

2.プログラミング知識

最近はプログラミング言語を記述するコーディングを(表で)行わないノンコードプログラミングが増えている。
UNITYではC#スプリプトを用いるが、ノードベースのVisualSprictingが2021からビルドインされた。
また、C#スプリプトでも変数をPublicで外に出しておけば、Unityエディタから変数の値を直接入力できる。
C#スクリプトを読み解いたり書き換える時に、C#またはC、C++の知識が少しはあると便利。
C言語系の基本として、コンピュータ処理コマンドの基本は関数の呼び出しで行われる。
左辺の変数 = 右側の関数(引数);
右側の関数が、引数に値を入れて呼び出されると、所定の処理を実行して、戻り値を返し、左辺の変数に戻り値が書き込まれる。
  • global, private
    スクリプト全体で見えるglobalと、関数記述内だけで見えるprivate
  • INPUT(コード入力)とState(接点状態)
    文字列や数値、ボタンが押されたかどうかを入力情報として得たい場合はInput=入力値を確認する
    今まさにキーが押されているのか、センサーの現在値はどうかなどを得たい場合は、State=状態を確認する
  • フローチャートとイベントループ
    スタートからエンドまで、順番に処理を進めていく。選択分岐やジャンプはあるが、基本的に処理の流れはつながっていくのでフローチャートで表現できる。
    リアルタイム、インタラクティブ系のプログラムでは、どんな順番で何が実行されるか都度変わり動くまで判らない。
    何が有ったら何をする。という条件を多数決めて置いて、何か起きるまで監視を続ける無限ループを回す。
    終了条件が満たされた場合に、定められた終了手順を実行してプログラムは終わる。
  • 3.3D知識

    3Dアプリケーションのプログラムとは、3次元座標計算を大量に行う計算処理である。
    ただし、行列計算等の3次元座標計算の中身を直接指示する必要は無く、関数の呼び出し、構造体の値の確認だけでよい。

    4.3Dモデリング知識

    一般的な3DCADは3D図形を数学表現で表すが、DCCツール、ゲームエンジンでは、3D図形を点の繋がりで作った図形の集合として表す。

    5.アプリケーションで創る世界感

    主人公には、ボールや玉などの物体、車や飛行機、人などがある。
    工場バーチャルレビューは、主人公が人(オペレーター)のTPSシーン。
    FPS視点を、VRゴーグルやHololensを使って目の前で映すと仮想現実に没入体験できる。
    参考シーン⇒Unity Standard Assets

    Unity でのモデル読み込み

    キャラクターモデルの変更


    return