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

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

2018 Happy New Year !

あけまして、おめでとうございます。
画像は、今後、創ってみたい Sci-Fi RPG のイメージです。
タイトル Vielfältiger Effekte とは、Manifold Effects の意味です。
ドイツ語表記の理由は、響きの良さですw(え

“There are days that define your story beyond your life, like the day they arrived.”
 - Dr. Louise Bank, 映画 メッセージ(原題: Arrival) より

世界設定

2045年、地球は異常気象と資源の枯渇によって、食糧難となります。
AI で最適な遺伝子の組み合わせを見つけ、クローンを使った食糧の養殖を試みるものの、種々の副作用で、人口は10% までに減少して、人類は絶滅の危機に瀕します。
(AI でヒト自体のクローン案が出るものの、成長の時間が現実的ではありませんでした。かわりに、アンドロイドをデザインして生成することになります。)
そこで、人類は、地球外で資源が豊かな惑星を求めて、初めての惑星探査、惑星移住を試みます。

SF といえば、未知との遭遇。この時、人類(プレイヤー)はどのような行動をとるか、で種の存続が決まっていきます。

ゲームシステム

メモ程度に書き出したものです。自由度の高いシステムです。
故に、Full 3D ではなく、2.5D で実現するのが良いかも。
大きな目的は、種の存続です。それが達成できれば、手段は問いません。
プレイヤーの数だけ、人類の物語が生成される仕組みです。

一般的なプレイヤーは、まずは人類絶滅を回避する方法を探すことになるでしょう。
移住できそうな惑星が見つかったら、箱舟に相当する宇宙船を構築して脱出です。
あるいは、地球自体のテラフォーミングを行う解法もあります。
この場合は、安全な場所へ生き残った人類を誘導することになります。

地球

資源探査、惑星探査のための宇宙船を構築します。
宇宙船構築の資材集め、設計を実行します。
探査チームを組織します。

銀河と惑星

銀河の地図を作りながら、惑星を見つけて、着陸、探索します。
地球か宇宙ステーションへの帰りの燃料も考慮して探索します。

惑星の文明レベルを決めて、都市と地形の長期間シミュレーションを行い、半自動生成されたマップを探査します。時間変化と天候変化があります。(昨年のSIGGRAPH 勉強会で紹介した手法みたいなのを使う)

生成した惑星から、生態系の構造、生物の知能レベルを決めて、長期間シミュレーションで成長させます。(遺伝的プログラムでベースを構築して、振る舞いを強化学習で獲得する。生態系を長期間シミュレーションして作ります。)

仲間AI とバトルシステム

バトルというよりは、環境と相互作用できるシステムです。
酸素と植生がある惑星では、木を切って、火をつけると燃えます。
生成した生物で、攻撃的、敵対的な生物もいます。
Third Person Action をイメージ。

ドラマとキャラクタ

未定

コメント

このブログの人気の投稿

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