本記事は『図解まるわかり メタバースのしくみ』の「第5章 メタバースを作るプログラミング~プラットフォームによる開発手法の違い~」から抜粋したものです。掲載にあたって一部を編集しています。
5-1 メタバースを作るためのプログラミング
コンピュータを構成する要素
メタバースはPCやスマートフォンなどのさまざまなコンピュータで動作しています。さまざまなコンピュータで動作させるためには、どういった理解でプログラミングを行う必要があるのでしょうか。
実は、どのようなコンピュータも制御、演算、入力、記憶、出力という5つの機能を備えています。これらを五大機能と呼びます(図5-1)。
また、五大機能を含め、コンピュータを物理的に構成するすべての要素をハードウェアといいます。五大機能を知ると、プログラムの命令は大きく「入力せよ」「記憶せよ」「演算せよ」「出力せよ」の4種類しかないことがわかります。
この4種類の命令を目的に合わせて記述することがプログラミングです。
プログラミングをなぜ行うのか?
ハードウェアはあくまでコンピュータに必要な機能を備えているのみです。ハードウェアを動かすための動作を命令するのがソフトウェアです。ソフトウェアではコンピュータ上でアプリケーションが動く環境を作るOS(基本ソフト)、OS以外のソフトウェアをアプリケーションと分類します(図5-2)。
作られたアプリケーションはOSがハードウェアとの仲介役となり、同じOSであれば異なるハードウェアを使う場合でも動作します。もし、すべてのコンピュータが同じOSで動作するのならば1つのアプリケーションで完結しますが、多種多様なOSがあるため、使用するOSに対応したプログラミング言語を使用してアプリケーションを作る必要があります。
5-2 デスクトップアプリの開発
PC向けのアプリケーション
PCの中で動作するアプリケーションをデスクトップアプリと呼びます(図5-3)。
デスクトップアプリの特徴は、使用するアプリケーションとPC内のOSが合っていればハードウェアに関係なく動作することです。現在、最もユーザー数の多いメタバースアプリの1つ「VRChat」もデスクトップアプリです。
デスクトップアプリの特徴
現状、VRゴーグルなどのハードウェアの多くはPCでの動作を対象にしています。デスクトップアプリのメリットとして、メタバースの世界内でヘッドマウントディスプレイなどのXR系ハードウェアを使用したい場合に、他のアプリケーション環境に比べて比較的簡単に連携させることができます。また、ハードウェアを細かく操作するためにはOSごとのセキュリティが問題になりますが、デスクトップアプリは比較的柔軟になっているので操作しやすいです。
また、高性能なPCのみを対象にできるのなら、他の環境よりもリッチな3D表現を行い、現実に近い世界観や派手な演出を表現することもできます。
しかし、デメリットも存在します。デスクトップアプリを動作させるには、インストールやコピーをする作業が必要になります。実際の開発でデスクトップアプリを採用する場合には、インストールやコピーを行うハードルを考慮する必要があります(図5-4)。PC内で動作させるため、OSに大きく依存し、違うOSでは基本的には動作しません。違うOSで動作させたい場合は、OSに合わせて別に提供する必要があります。
5-3 スマホアプリの開発
スマートフォン向けのアプリケーション
スマートフォンは年々進化し続けています。今では、スマートフォンさえあればPCほどではないですがたいていのことができるようになりました。スマートフォンで動作するアプリケーションをスマホアプリといいます(図5-5)。
スマホアプリの特徴
スマートフォン内には便利なハードウェアが多く内蔵されており、さまざまなハードウェアを組み合わせて体験することがスマートフォン1台のみで行えます。インストールさえしてしまえば事前の準備が必要なく、ある程度の体験が行えます。例えば、高性能ディスプレイを2分割し、スマートフォン内に搭載されているジャイロセンサーを組み合わせれば即席のVRゴーグルになります。
また、多くのユーザーがスマートフォンを所持していることも見逃せません。多くのユーザーが所持しているということは多くのユーザーに体験してもらえる可能性が高いということです。
一方、ユーザーごとにスマートフォンの性能に差がある場合や、スマートフォン内のOSによっては動作できないなど完全な共通化はされておらず、すべてのスマートフォンに対応させることが難しい側面もあります。加えて、デスクトップアプリと比べてもスマートフォンの性能には限界があり、使用できるメモリやグラフィックス表現、VRヘッドマウントディスプレイの性能の差などがあり、同じ体験を行うのは現状では困難です。
また、OSごとに専用のストアが存在し、スマホアプリを公開するためには各ストアに申請を行う必要があります。申請が通らない限りアプリケーションを公開できない点にも注意が必要です(図5-6)。
5-4 Webアプリの開発
Webブラウザ向けのアプリケーション
デスクトップアプリやスマホアプリは、初めて使用する際にインストールやコピーが必要な手間が発生します。これではユーザーに体験してもらうハードルが上がってしまい、気軽に体験しにくいコンテンツになってしまう可能性があります。
そのため、最近増えているものが、インターネット上で提供されるサービスです。FacebookやTwitterなどのSNSだけでなく、Amazonや楽天などのネットショッピング、GoogleやYahoo!といった検索サービスなどが挙げられます。その中でも、Webブラウザ上で動作するアプリケーションをWebアプリと呼びます。WebアプリはWebサーバー上で稼働し、ユーザーはWebブラウザがあればすぐにサービスを体験できます(図5-7)。
Webアプリのメリット・デメリット
メタバースをWebアプリとして開発するメリットは、何よりその手軽さにあります。アプリケーションをストアへ登録する必要がなく、Webサーバーへアプリケーションデータをアップロードするだけで手軽にコンテンツを公開できます。また、基本的にWebブラウザが動作するデバイスであればコンテンツを表示できるため、1つのアプリケーションの開発でさまざまなデバイスやOSへ対応させることができます(図5-8)。
その一方で、Webアプリにはいまだ課題も残ります。Webブラウザは非開発者でも安全に使用できるようにさまざまなセキュリティ対策が施されており、ハードウェアをうまく制御できないことがあります。また、メモリや3D表現の制限など、Webブラウザ自体のさまざまな制限にも気をつけなければいけません。
5-5 メタバースで使用されるプログラミング言語
OSによって使用される言語
プログラミング言語は使用するOSや環境によって変わります(図5-9)。スマホアプリを例に出すと、Androidでは、Kotlin、Java、C#などが候補に挙がります。iOSではSwift、C#などが候補に挙がります。
C#はどちらのOSにも対応していますが、KotlinやSwiftなど言語によっては一部のOSのみに対応している場合もあります。
このような言語を複数のOSに対応させるためには、OSに応じて違うプログラミング言語を使用するため開発工数が増えてしまいます。メタバースはさまざまなOSで動作できるように開発することが多いため、1つの言語で複数のOSに対応することが可能な言語が主流になっています(図5-9)。このように複数のOSに対応させることをマルチプラットフォームと呼びます。
スクリプト言語とネイティブ言語
図5-10のREALITYとClusterの言語にはC#の他にKotlinとSwiftも使用されています。C#のみを使用すればスマホアプリは1つの言語で完結しますが、なぜ使用しているのでしょうか。
KotlinとSwiftはスマホアプリ向けの言語です。この言語はC#とは違い、直接CPUから実行できるネイティブ言語と呼ばれています。逆にネイティブ言語ではないものはスクリプト言語と呼びます。ネイティブ言語は対応するOSが少ない代わりに、実行速度の面で有利だったりOSに搭載されている機能を使用できたりします。
最近では、基本はスクリプト言語を使用しつつ一部をネイティブ言語で開発することで、開発コストの抑制と処理パフォーマンスを両立させる手法が増えてきていることも覚えておくとよいでしょう。
5-6 ゲームエンジンを利用した開発
メタバースに多く採用されるゲームエンジンを用いた開発
現在のメタバースのほぼすべてがゲームエンジンを使用して開発されています。ゲームエンジンとは、ゲームを開発するために作られたソフトウェアです。
ゲーム開発にはグラフィックス描画、入力、サウンド、物理シミュレーション、アセット管理、AIなど共通した要素が多く、それらを簡単に実装できるしくみが用意されています(図5-11)。ゲームエンジンを利用すると、簡単なプログラムを書くだけでゲームエンジンに用意された高度な開発システムを使用できます。一部処理はコードを記述しないノーコードでの実装や制作途中でも実行して動作確認することも可能です。結果、効率的に開発時間を短縮し高クオリティなコンテンツを提供しやすくなります。
ゲームエンジンを選ぶ利点
メタバースは3DCGの利用が当たり前になりつつあります。3DCGのモデルを作って自由に動かすことは昨今のゲーム開発と近い概念です。ゲームエンジンを使うとそのしくみを利用しながら効率的な開発が行えるため、メタバースの開発にゲームエンジンが採用されています。
また、メタバースはさまざまな機器で動作させることが増えてきています。スマホアプリに限っても、iOSやAndroidなど、それぞれのOSに対応したプログラミングが必要です。そこで、各OSに対応するゲームエンジンを使って作成すれば、アルゴリズムを変更する手間を省けるため、効率的に複数端末に向けてアプリケーションを開発するマルチプラットフォーム化を行うことができるという利点もあります(図5-12)。
5-7 最も使用されているゲームエンジン
世界一使われているゲームエンジン
UnityはアメリカのUnityTechnologies社が提供するゲームエンジンです。現在のメタバースの開発で最も使われているゲームエンジンです(図5-13)。ゲームアプリ、VR/AR、2Dゲームなど幅広いジャンルに対応し、ゲームエンジンに必要な基本的な機能が網羅されています。VRChatなど知名度の高いメタバースアプリはすべてUnityを利用して制作されています。
Unityのプログラミング方法
UnityのプログラミングにはC#とVisual Scriptingの2種類があります(図5-14)。
C#では従来通りプログラム用のファイルを作成し、テキストエディタからコードを記載していきます。Unity内で事前に用意された機能を利用しながらプログラミングを行うため、通常のC#の機能の他に、Unityの機能を簡単に使えるようになっています。例えば、図5-14のC#のプログラムにおいてStartという機能は最初から用意されており、Startという部分の中に記載したプログラムは起動時に自動で実行されます。
2つ目の方法は、コードの代わりにブロック単位の命令文(ノード)を使うVisual Scriptingです。ボックス間をノードでつなげることでプログラミングしていきます。コードではなくノードをつないでプログラミングすることをビジュアルスクリプティングといいます。ビジュアルスクリプティングは比較的新しいプログラミング手法です。元々、ビジュアルスクリプティングは非プログラマーでもプログラムを行えるようにするために開発されたものなので、習得はC#に比べて比較的容易になっています。
2つとも同じ機能を実装できますが、実装が速く実際に動いている状態を可視化しやすいのがVisual Scripting、幅広くパフォーマンスよく機能を自由に実装できるのはC#です。どちらにもメリットがあるため状況に応じて選ぶとよいでしょう。