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

投稿

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

Keras 学習データセットからテクスチャアトラスを作る

Keras / Tensorflow で使う学習データセットからテクスチャアトラスを作成するコードを書きました。デバッグ、学習データセット作成の練習も兼ねています。 学習データセット CIFAR10 Small Images https://keras.io/datasets/ https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz 図 今回、生成したテクスチャアトラス(拡大) 図 生成したテクスチャアトラスの全体 8,000 x 6,400 texels (250 x 200 images) コード # source: https://github.com/keras-team/keras/blob/master/examples/cifar10_cnn.py # morishige, 2018 from keras.datasets import cifar10 # The data, shuffled and split between train and test sets: (x_train, y_train), (x_test, y_test) = cifar10.load_data() print('x_train shape:', x_train.shape) print(x_train.shape[0], 'train samples') print(x_test.shape[0], 'test samples') # for debug import numpy as np from PIL import Image def img_show(img, atlasX, atlasY): pil_img = Image.fromarray(np.uint8(img)) pil_img.show() img_name = 'cifar10_atlas_' + str(atlasY) + 'x' + str(atlasX) + '.jpg' pil_img.save(img_name) # get information im...

Keras で graphviz を使って、Neural Network のグラフを画像ファイルに出力する際の留意点

Keras で plot_model() を使って、下記エラーが出力された場合、 "Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work." 原因は、graphviz.exe が見つからないのが原因です。システム環境変数 Path に、graphviz.exe への Path を追加することで解決しました。 動作環境 Windows 10 Pro (64bit) Anaconda 4.3.0 Python 3.6 Tensorflow 1.4.0 Keras 2.1.2 手順 step 1. graphviz をダウンロードします https://graphviz.gitlab.io/_pages/Download/Download_windows.html step 2. システム環境変数 Path に graphviz.exe の場所を追加します C:\Program Files (x86)\Graphviz2.38\bin step 3. Neural Network を図として出力します import keras from keras.models import load_model from keras.utils import plot_model import os model_dir = os.path.join(os.getcwd(), 'models') model_name = 'keras_mnist_trained_model.h5' model_graph_name = 'keras_mnist_trained_model.png' model_path = os.path.join(model_dir, model_name) if os.path.isfile(model_path): model = load_model(model_path) print('Load trained model at %s ' % model_path) model_gra...

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 で実現するのが良いかも。 大きな目的は、種の存続です。それが達成できれば、手段は問いません。 プレイヤーの数だけ、人類の物語が生成される仕組みです。 一般的なプレイヤーは、まずは人類絶滅を回避する方法を探すことになるでしょう。 移住できそうな惑星が見つかったら、箱舟に相当する宇宙船を構築して脱出です。 あるいは、地球自体のテラフォーミングを行う解法もあります。 この場合は、安全な場所へ生き残った人類を誘導することになります。 地球 資源探査、惑星探査のための宇宙船を構築します。 宇宙船構築の資材集め、設計を実行します。 探査チームを組織します。 銀河と惑星 銀河の地図を作りながら、惑星を見つけて、着陸、探索します。 地球か宇宙ステーションへの帰りの燃料も考慮して探索します。 ...

いきなり!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...

いきなり Ray Tracing on Houdini feat. VEX

Houdini で、VEX お勉強のお題として、Simple Ray Tracer を作ってみました。 はじめに VEX とは、SIMD 型のスクリプト言語です。Houdini 専用です。 機械学習の応用やプロシージャル技術の実験環境として、Houdini は視覚的に検証ができるので、VEX のお勉強を開始しました。 実装方法 1.出力先のスクリーン Grid を64 x 64 で primitive に分割して、それぞれの primitive をtexel とみなします。 2.Ray Tracing 処理 Wrangle Operator に、VEX コードを書きます。 Attribute Wrangle か、Primitive Wrangle で良いです。 入力は、Grid と Scene Geometry を Wrangle に接続します。 3.VEX コード(後日、公開します。) texel から、primary ray を飛ばして、シーン内の geometry と交差判定して、texel あたりの平均輝度 (radiance)を計算しています。 SIMD ですから、texel は並列に計算されているはずです。 いわゆる、CPU シェーダです。 解像度 比較 64 x 64 texels と 512 x 512 texels の比較です。 Lambert BRDF, Sun Light (Directional Light) のみです。 図 解像度64 texels と 512 texels の比較 おわりに 今後 週末、Star Wars 最後のジェダイを観る前、Houdini の資料を読みながら、2時間ぐらいで、Surface で作成したものです。 とはいえ、アイデアをカタチにして、すぐに結果が見えるのは良いと思いました。 現状は、64 x 64 texels の解像度なので、ファミコンみたいですが、 少しずつ、Ray Tracer として仕立てていこうと思います。 Ray Tracing -> Path Tracing -> Photon Mapping

Image Watch を Visual Studio 2017 で動かす方法

自己メモです。 ImageWatch を Visual Studio 2017 で動かす方法 https://marketplace.visualstudio.com/items?itemName=WolfKienzle.ImageWatch  図 Spherical Harmonics の投影と復元、原画像との差分を ImageWatch で可視化したもの. 現在、Spherical Harmonics for HDR feat. Physically Based Rendering について気になることを書いています。自己メモも兼ねています。近々、公開する予定です。 手順 step 1. vsix を .zip にリネーム step 2. Unzip step 3. extension.vsixmanifest の line 11 を 14.0 から 15.0 に書き換える 15.0 に書き換えることで、Vistual Studio 2015 だけでなく、2017 も対象に含める step 4.  Zip  ファイル構造は、step 3 の manifest がルートディレクトリにくるようにしておく  ImageWatch ディレクトリ配下のファイルを全て選択、Zip 圧縮  ImageWatch ディレクトリ を選択して、Zip 圧縮すると、Zip 内に ImageWatch ができて、インストーラが manifestファイルを読み込めず、インストールが実行できない step 5. .vsix にリネーム step 6. .vsix 実行 おわり

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 化できました。 道路は、曲線もあります。碁盤の目である京都の街並みになら、やりやすいかも(笑) 階層化 地上から地下までをレイヤー化して、街をプロシージャル生成します。 よりリアルで自然な街並みを生成するには 長期の時間経過、自然現象...