スキップしてメイン コンテンツに移動

UE4 4.22 Preview 1 のリアルタイム・レイトレーシングを動かしてみた。

[自己メモ] So What ? 実現したい、究極のゲームについて


実現したい究極のゲーム、それは、自分自身の探求ができるゲーム

実現したい、究極のゲームは、Role Playing Game (RPG)であり、”本当の自分”を発見するための冒険と世界をプレイヤーに提供して、プレイヤーは、人生(日常)をより豊かに過ごせるようになるゲームです。

その実現(Goal)のために、手が届く目標(Sub Goal)とマイルストーンを設定して、少しずつ確実に進めていきます。

Q1. そんな冒険を可能にするには、どんな世界を用意すればよい?

”あなただけの物語”が生み出される世界。
マズローの欲求段階説に基づけば、5段階ある。それを段階的に発見して満たせるような世界を用意する。例えば、法が緩やかだけど、生死が日常にある、弱肉強食の世界。その時、プレイヤーは、世界に、detail を望むだろう。そこをいかに自然に感じさせるか。AI と人、AI とAI の相互作用が物語生成の鍵、と考えている。

世界観の候補

  • 西部開拓時代 (e.g., 米国ドラマ West World, イーストウッドの許されざる者)
  • 恐竜が闊歩する白亜紀 (e.g., Lost World)
  • 中世ヨーロッパ (e.g., Time-Line)
  • 現代(e.g., The Walking Dead, タルコフスキー監督のノスタルジア)
  • 現代ミュージカル体験 (e.g., 米国ブロードウェイ)
  • 未来(e.g., パンドラの少女, ダイアモンドエイジ, 惑星ソラリス)

例:West World の特徴
ヒトと見た目も振る舞いも、そっくりな、Turing test  をパスした、AI ロボットが実現出来た世界。舞台はAI ロボットが、おてもなしする、西部劇の世界を完全に体験できるテーマパーク。富豪な人々が、別の自分を発見したくて、そのテーマパーク(世界)に参加する。多くの参加者が、ガンマンになって、ヒロインを助けたり、悪党になって、世界を牛耳るというような体験を楽しんでいる。AI ロボットは、世代交代していくうちに、かすかな記憶が蓄積され、自我(感情)を持つようになる。参加者は、デカルトの方法序説よろしく、AI ロボットに自我を認識してしまい、恋に落ちる者も出てきてしまう。

Q2. So What? で、それってゲームなの?

従来 CRPG の不満点は、物語が固定されており、ユーザーはゲームに遊ばされている感が、常につきまとっていた。マジックの種が、見えてしまうような、がっかり感。ユーザーが、ゲームのレベルを上げても、ヒトとしてのレベルは上がらないw、など、消耗品、嗜好品でしかなかった。それは、単なる数値ゲームだから。もう一段階上の”何かを考える”、というのが欲しかった。

Q3. やりたいことは、わかった。実現に必要な技術は何だ?

以下、制限が少ない、デジタル空間での話。
イメージは、世界生成→相互作用の要素生成→種をまく→世界が渦巻き、機能する→参加
1. 生き生きとした、美しい世界を生成する、天地創造の方法
2. 生き生きとした、自然な人々を生成する方法
3. 神話、物語、シナリオ、クエスト、AI同士の相互作用を動的生成する方法
4. 世界の法則を生成する方法(物理法則、社会、いくつかの階層生成)
5. 快適な操作系の構築

Q4. まずは、手に届くところから始めようか

1. Sub Goal お題:ヒトとAI (ロボット)を見分けることができるか
タイトル「追われるものと追うもの」
銃が撃てる西部開拓時代で、Wanted ゲーム。
ヒトはAI の振りをして、AI はヒトの振りをして、生き抜く。
ヒトは、AI を撃てる。AI はAI を撃てる。AI はヒトを撃てない。
ヒトが誤って、ヒトを撃つと、自分が追われる立場になる。
追われるものは、追うものを撃てば、追われなくなる。

実験環境:Unreal Engine 4 でプロトタイピング
1. プレイヤーと箱と床、簡単なゲームのメインループを構築する
2. プレイヤーは、銃を撃って、箱に銃弾を当てることができる。
3. シンプルな物理法則を入れたステージを作る
4. AI を作る。ヒトとみなすAI とロボットとみなすAI
5. AI 同士が相互作用するルールを作る
6. ヒトとAIが相互作用するルールを作る
7. ゲームのルールを入れる

2. Sub Goal お題:天地創造
地形生成、都市生成、24時間の時間変化と天候変化
→ グラフィクス。もっと分解する。

参考文献

[1] 天地創造, wikipedia
https://en.wikipedia.org/wiki/Genesis_creation_narrative

[2] マズローの欲求段階説, wikipedia
https://en.wikipedia.org/wiki/Maslow%27s_hierarchy_of_needs

[3] デカルト方法序説, wikipedia
https://en.wikipedia.org/wiki/Cogito_ergo_sum

[4] West World, wikipedia
https://en.wikipedia.org/wiki/Westworld_(TV_series)

コメント

このブログの人気の投稿

Houdini で2D 平面の地図から3D ポリゴンの街を生成する

Houdini, Houdini Game Development Toolset, Open Street Map (OSM) を使って、現実の地図から、街の建物を生成してみました。ノードベースは、生成変換の過程がわかるのが良いですね。 図 2D平面の地図(OSM) から、建物のみを3D ポリゴンに変換した結果 図 Open Street Map 2D 平面の地図 2D平面の地図(OSM) から建物の領域だけを抽出して、ランダムに適当な高さを与えて、3Dポリゴンに変換しています。地図に対応した等高情報(いわゆる Height Map)があれば、よりリアルな街並みになるでしょう。地上から地下までを階層的に生成するなど。 味噌 建物だけを抽出する際、OSM 地図データのアノテーションを使い、建物以外を抽出して削除しています。幾何情報だけでなく、意味情報を使っています。 実践としては、そういうやりかた(戦術)は、筋が良いと思います。とはいえ、地図にアノテーションが存在しない状況もあるので、幾何情報と現実の何らかの情報から3D ポリゴン生成する頑健な手法を考えておきたいところです。 課題 3D ポリゴン生成時の法線の向き 現行は、入力情報が二次元しかないので、3D ポリゴン生成時に、頂点法線が反転してしまう領域があり、そのような領域を抽出して、法線を反転して強制的に修正しています。研究的な視点だと、その等高情報を画像から推定して生成する、のは面白いと思います。 3Dポリゴン化した建物へのテクスチャマッピング(UV 座標) 3D ポリゴン化した建物の用途は、レベルデザインでのグレーボクシングと構造の把握程度までとしておきます。グラフィクスも考慮する最終レベルでは、事前にテクスチャマッピングした High Level of Detail の建物に置き換えます。 道路など建物以外のポリゴン化 建物は凸形状なので、ポリゴンの押し出し(Extrude)で容易に3D 化できました。 道路は、曲線もあります。碁盤の目である京都の街並みになら、やりやすいかも(笑) 階層化 地上から地下までをレイヤー化して、街をプロシージャル生成します。 よりリアルで自然な街並みを生成するには 長期の時間経過、自然現象

Falcor で遊ぶ。導入編。NVIDIA Real-Time Rendering Framework

はじめに NVIDIA が公開した  Falcor Real-Time Rendering Framework  で遊んでみました。 Denoising 1spp Path Tracing, Foveated Rendering など、技術研究プロジェクトで使われたフレームワークです。DirectX12 / Vulkan に対して薄い抽象化レイヤを提供しています。オープンソースで、実験的な機能をさくさくとRAD 実装するのに使えると思い、触ってみました。今回は、フレームワークのビルドとサンプルを起動するまでの、導入メモです。 図 HDR のテスト 特徴 物理ベースのシェーディングシステム DirectX12 と Vulkan の薄い抽象化レイヤ 現代的グラフィクス技術のモジュール化されたライブラリ OpenVR を使ったステレオレンダリング カメラ、光源、メッシュのパスアニメーション ビデオキャプチャ FBX, OBJ などを含む一般的な3D アセットファイルフォーマット対応 シーンエディタで各種オブジェクトのオーサリング可能 NVIDIA のGPU でなくても、動作します。今回は、Intel Iris Plus です。 Ray Tracing など、CUDA を使う機能は、そのままでは使えないかもしれません。 Radeon Ray か、Embree か、OpenCL に置き換える、というライフワークが生まれますw 今回の動作環境 Visual Studio 2015, Windows 10 SDK 10.0.15063.0 です。 Microsoft New Surface Pro Core-i7, 16GB RAM, Iris Plus です。 step 1. GitHub から ソースコード入手 https://github.com/NVIDIAGameWorks/Falcor step 2. Falcor とサンプルのビルド 2.1. README を参照します。 Visual Studio 2015, Windows 10 SDK 10.0.14393.795 こちらの環境は、10.0.15063.0 です。 各自の環境に合わせて、プロジェクトのSDK 設定を変更してく

いきなり!Ray Tracing on Houdini VEX 2

Ray を可視化してみました。 可視化 図 Pinhole Camera から、Teapot へのRay と Reflection Ray を VEX で可視化 解像度比較 図 左 32 texels (primitives), 右 256 texels (primitives) ネットワーク 図 Simple Ray Tracer Wrangle 出力先は、screen です。 シーンは、sceneGeometry です。 今回は、Utah Teapot のみです。 manyLights は、光源へのポインタです。 morishgieGI は、大域照明(実験)へのポインタです。 raytraceWrangle が、Ray Tracing を実行するOperator です。 VEX コードの格納先です。 Ray 可視化 VEX コード raytraceWrangle で、ray がシーン内のジオメトリと交差した際、 ray の点とプリミティブを生成しています。 追加削除が、簡単に動的にできるのは、VEX スクリプトの強みですね。 // ray を可視化する 点とプリミティブを生成 // geoself(): 出力先(screen) int newPt0 = addpoint(geoself(), rayOrigin); int newPt1 = addpoint(geoself(), hit); addprim(geoself(),"poly", newPt0, newPt1); // reflection ray を可視化する点とプリミティブを生成 vector r = reflect(rayDir, surfaceNormal); int newPt2 = addpoint(geoself(), hit + r); addprim(geoself(), "poly", newPt1, newPt2); 追記:addpoint() や addprim() の第一引数は、geometry handle です。 現在の geometry に出力する場合は、geoself() を使いましょう。 現在の geometr