simplestarの技術ブログ

目的を書いて、思想と試行、結果と考察、そして具体的な手段を記録します。

AI

オンラインゲーム化の準備

AI

昨年9月からAIに身体性を与えるためのマイクロワールドの構築を続けてきました。 趣味プログラムなので、やりたいことをやりたい順番で進めてきたわけですが、見積もりをしてこなかったが故にしっぺ返しが… さすがにブロック同士の相互作用を行う大気シミュ…

AIに身体性を与えるためのマイクロワールドの構築18:大気の循環

この世界で水が山頂の方から流れてくるのはなぜか考えたことはありますでしょうか? 大気は循環しており、その大気に水が含まれているため、その大気が雨を降らせ、山から水が流れてきます。はい、ということで今回は大気の循環をブロックのロジックを使って…

Task.Run:Unityマルチスレッド処理に引数を渡す方法

AIに身体性を持たせるためのマイクロワールド:ブロックロジックの可視化システムの実装メモです。 まずは結果動画をご覧いただきたい。www.youtube.com マルチスレッド処理にて空気に触れている土ブロックだけが確率的に消失(正しくは空気ブロックにマテリ…

Unity:C#で共用体ちっくなビットフィールドの利用:SimpleHexWorld17.8:適切にマテリアルを切り替えたい

前回、パフォーマンスを落とさないために、テクスチャ座標で異なるブロックの種類を表現できる仕組みを作ったわけですテクスチャ座標でブロックの種類を表現が、それでもマテリアルを切り替えたいときだってあります。そもそも四大元素や陰陽五行はマテリア…

AIに身体性を与えるためのマイクロワールドの構築17.7:Unityテクスチャ座標活用で描画負荷を削減

前置き Unity では一つのメッシュに対し、複数のマテリアルを面ごとに割り当てることができます。 利用するマテリアル数を増やしていくと、増やした分だけレンダリングパスが増えていき、描画時間が線形的に増加し、フレームレートが大きく落ちてしまいます…

AIに身体性を与えるためのマイクロワールドの構築17.6:Unityでのマルチスレッド処理の話

前置き AIに身体性をもたせるためのマイクロワールドの開発を進めていますが、マルチスレッドで処理しているため、期待と異なる結果になったり、パフォーマンスが極端に落ちたりすると、うまく原因を特定できません。 頼みのプロファイラーも抽象度の高い結…

AIに身体性を与えるためのマイクロワールドの構築16:風・土そして水

世界を構成する四大元素は風・土・水・火でした。 現在は風と土だけで世界が構成されていますので、水を作り出す必要があります。イメージとしてはこんな感じ 水は液体なので、固体である土と違ってより低い風ブロックの隙間へ移動していくものです。以前よ…

AIに身体性を与えるためのマイクロワールドの構築15:WorldCreation2

UnityでMinecraftライクゲーム作ってます。前回作った天地創造プラグインにパーリンノイズで高さを決定する機能を入れてみました。 こんな感じでみなさんの自由なアイディアをゲームに取り入れられます。www.youtube.comプラグインの実装はこちら↓ ノイズの…

AIに身体性を与えるためのマイクロワールドの構築14:WorldCreation

天地創造 ここのところメインスレッドが処理落ちしないよう、バックグラウンド処理でメッシュ構築を行う仕組みを作ってきました。 こちらが機能するようになったので、今回はいよいよブロックのロジックに入ります。さっそく適当な天地創造プラグインを書い…

AIに身体性を与えるためのマイクロワールドの構築12:ワーカースレッドの仕組み

前置き ゲームの描画ループを止めることなく、バックグラウンドで処理を行う作りにすることは、ゲーム体験を向上させる点で重要なことです。 マイクロワールドの表示において、ブロックのメッシュの更新がバックグラウンドで実行できないという Unity の厳し…

AIに身体性を与えるためのマイクロワールドの構築11:モデルベース駆動

モデルとしているデータ世界に更新を加えると反応して変化するビュー側世界を観測できるようにしました。地味ですが、ブロックを積み上げるデータ世界の出来事が、私たちが認識できる形で表示されています。 モデルを更新するとビューが反応する、当たり前で…

Unity:ビヘイビアツリーなどのAIアセットと、自作

今のところ、ゲームAIを実装するなら、複雑になってもロジックの可視性が高いビヘイビアツリー(Behaviour Tree)やステートマシン(FSM)を使って実装を管理していくのか良いとされています。 なぜなら、AIの振る舞いをデザインする人間はコードを書きたくない…

AIに身体性を与えるためのマイクロワールドの構築10:ブロック単位での移動

色々考えたのですが、エージェントはブロックの中心を結ぶ線分の上しか移動できないようにします。移動が自由過ぎると、今後のAIの振る舞いや、経路計算が複雑になってしまうので、思い切ってこんなことしてみました。制約はあれど、自然な操作で移動できる…

AIに身体性を与えるためのマイクロワールドの構築9:ブロックの破壊

www.youtube.comやっとブロックを指定して破壊できるようになりました。そろそろブロックの種類を決めていきたいと思います。

自由に歩き回る:AIに身体性を与えるためのマイクロワールドの構築8

今回は(も)、ただのゲームの進捗です。 AIは関係なし。www.youtube.com今回はユニティちゃんがマイクロワールドを駆けまわるだけの動画です。ちょっとブロックのサイズが合わなかったので、いい感じに合わせてみました。www.youtube.com 以下は、本人用の…

AIに身体性を与えるためのマイクロワールドの構築7

進捗を報告しておきます。www.youtube.com今後の予定ですが主要なブロックとして 水 土 石 砂 木 葉 芝 雪 溶岩あたりを用意して、まずはプレイヤーが操作できるキャラクターをコントロールして ブロックを破壊したり、ブロックを追加したりできるようにして…

AIに身体性を与えるためのマイクロワールドの構築6

まずは、どこまで移動しても4096ブロック進んだら、ループができる仕組みを作ります。チャンク単位で3次元配列を保持させます。 private int[][][] _chunkData = null; 持たせました! そのチャンクも2次元配列で保持させます。 Chunk[][] _chunkArray = nul…

AIに身体性を与えるためのマイクロワールドの構築5(構築といいつつまた構想)

AIに身体性を与えるためのマイクロワールドの構築5です。ビジュアライゼーションのパフォーマンス確認も一区切りのところまで来ました。 なんとか数百万ブロックまでなら30FPS出そうです。 ということで、モデルの方を詰め始めましょう!これまで生きてきて…

AIに身体性を与えるためのマイクロワールドの構築4

AIに身体性を与えるためのマイクロワールドの構築4です。 これといって技術的な要素はありませんので、単なる進捗報告とします。高さに応じてマテリアルを変えてみます。 UV座標も正しく設定してあげます。 縦軸についても、分割してみました。 頂点数を 213…

オープンワールドにおけるキャラクタAI(NPC)のあり方

ゲーム内のキャラクタを制御するAIを作る場合、周りから収集した情報を使って意思決定をし、実際に行動に移すまでの処理の流れを設計する必要がある。…という考え方から、すでに間違った方向へ思考が働いていた!という話画像の出典 www.jokeroo.com がリン…

六角柱を敷き詰めたマイクロワールドの構築(メッシュの結合とマルチマテリアル処理)

AIに身体性を与えるためのマイクロワールドの構築3です。マルチマテリアル処理と、オクルージョンカリングについて記載します。 まずは、パフォーマンスにどれだけ差が出るか、一番簡単で頭の悪い実装を行ってみたいと思います。以前パーリンノイズで、キュ…

Unity:テクスチャ付き六角柱メッシュをスクリプトだけで構築しました

AIに身体性を与えるためのマイクロワールドの構築2です。まずは三角形を、頂点データを構築することによって、表示してみたいと思います。参考にしたページはこちら www.shibuya24.infoただ三角形を表示するのも芸がないので、六角柱を作ってみました。作成…

マイクロワールドの試作1

今回は、こちらの記事の続きです。 simplestar-tech.hatenablog.com 具体的にマイクロワールドを作っていきます。 世界を構成している要素 構想で登場したものは以下の三つでした ワールド(ブロックによって敷き詰められた世界) ブロック(内部に複数のオ…

AIに身体性を与えるためのマイクロワールドの構想

およそ9ヶ月前の記事にて、AIが行動するマイクロワールドを作ることを宣言しました。 この記事では、そのマイクロワールドをプロシージャルに、つまり数式や処理を組み合わせて生成する方法について考察し、実践していきます。その記事というのがこちら↓ sim…

対戦ゲームで一喜一憂するAI

強化学習でまるばつゲーム(3目ならべ)を作ったことがありましたが、ふと相手の手や自分の手に関して一喜一憂するAIが作れるのではないかと思ったわけです。 作ってみます。AIには最近扱いに慣れてきたSDユニティちゃんを使わせてもらおうと思います。 感情…

3目ならべ(〇×ゲーム)で最強のAIを作る

AI

表題の通り、今回は3目ならべで最強のAIを作りました。 最も勝利確率の高いマスを赤く示してくれるツールとなっています。具体的にどうしたかというと 前回作った強化学習のコードの一部を次の通り、変更してみました。 変更の意図としてはBellman方程式のMo…

3目ならべで強化学習すると、どうなる?→こうなる

AI

前回の記事ははじめての強化学習ということで、Bellman方程式を使ってきわめて単純な経路分岐問題を解いてみました。 今回はもう少し複雑な経路問題を解いてみたいと思います。お題は「3目ならべ」です。先攻後攻が決まったら、まずは 3x3 のマス目の 9つの…

とっても簡単!強化学習の実践

AI

強化学習とは? それは、行動の結果得られる報酬が最も大きくなる行動を選択する仕組みにおいて その報酬を計算して求めることです。例えば「働けばお金がもらえる」という場合は「お金」が報酬となります。 報酬の設定のしかたは問題によって、また設定する…

強化学習の Value Iteration と Q-Learning の違い

AI

強化学習には Value Iteration と Q-Learning の2通りの学習方法が存在します。Value Iteration で登場する Model が既知か、未知かを見て 未知の場合は、試行錯誤を繰り返す Q-Learning しか選べません。Value Iteration にて登場する報酬は人間のさじ加減…

エピソード(思い出)を記録し、呼び起こす強化学習

AI

強化学習について(私が知識を増やすために)学んでいますが、Value Iteration と Q-Learning の違いを書く前に(この後書こうと思っています。) 一つ昔に高校時代の友人から教えてもらった、エピソードに紐づく知識というものとの組み合わせを思いつきまし…