コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
やきはた ◆pmVfuH0n4Kcn
2019/10/19 6:20
情報交換
プチコンへのセルオートマトン導入をあれこれ
プチコンにセルオートマトン系の技術を導入することでゲームの見た目を良くする情報交換が出来たらと思います。

セルオートマトンとは近傍の状態からある地点の次の状態を決定するシミュレーション技術であり、水面や炎などを描画できるようです。

取りあえず水面のサンプルコードを試行錯誤してみました。
湖の絵の中にこのコードの表示結果を埋め込めば揺らぐ水面などを描けると思います。
移し間違いなどがあるかもしれません。
Y=I,X=J
で脳内変換してください

dim CA[3,12,20] 'セルオートマトンのデータ、[(ひとつ前のターン、現在、次のターン)、y座標、x座標]
dim turn=0
dim turnn'次のターンを指す変数
dim turno’前のターンを指す変数
dim h'計算用の一時変数
ACLS
for y=0 to 11
for x=0 to 19
ca[turn.y,x]=rndf()'水面の高さの初期値として乱数を入れる
next
next
while 1
turnn=(turn+1) mod 3
turno=(turn+2) mod 3
for i=0 to 11
for j=0 to 19
'1セルの次の状態の計算開始
’周囲4セルの平均+今の高さ-前の水面高さで水面の高さを計算しそれを色に変換する処理
h=0.0
h=h+getcell(turn,i-1,j)
h=h+getcell(turn,i+1,j)
h=h+getcell(turn,i,j+1)
h=h+getcell(turn,i,j-1)
h=h*0.25’周囲4セルの平均
ca[turnn,i,j]=h+ca[turn,i,j]-ca[turno,i,j]’過去の高さと今の高さを考慮
'画面いっぱいに描画
GFILL J*20,i*20,J*20+20,I*20+20,RGB(8,f(ca[turn,i,j],32,96,64),f(24,32,192))
next
next
inc Turn
turn=turn mod 3
vsync 10
wend
def f(h,m,a,d)
'水面の高さを色に写像する処理
dim h2
h2=floor(h*m)+a’色に変換
if h2>255 then h2=255
if h2<d then h2=d’RGBから飛び出ないようにかつ色が黒くならないように
return h2
end
def getcell(t,y,x)
if y<0 or y>11 or x<0 or x>19 then
return 0.0'画面外なら0を返す
else
return ca[t,y,x]'でなければ指定セルのデータを返す
endif
end
思ったより計算量と描画が重いので1セル辺りを大きくとっています。
プチコン4では高速に実行できるかも。

コメント

アバター
ツララ 2019/10/19 6:40 ◆ArUdBYOYME1V
セルオートマトンって近接マスは上下左右の4つだけじゃなくて
斜め方向も含めた8マスくらい考慮に入れないと
単純すぎて固定パターンの繰り返しになるような気がする。
ってGodotさんのHexライフゲームで遊んでて思った。
波紋のシミュレーションをHexでやるとどうなるんだろ?

見た目を良くするだけなら繰り返し現れるパターンを探すのにセルオートマトンを使って
テクスチャとして再現した画像データを使った方が良い気がする。
アバター
やきはた 2019/10/19 7:12 ◆pmVfuH0n4Kcn
なんかいきなり否定されてる感じもしますが、可能性を追求することが大事だと思います。
4マスでも結構綺麗な感じですね。
CKKKY3GY
外側になるほど外側の水面の色に近づける(マンハッタン距離で判断)処理を入れてみたら背景として使うのに問題ないレベルのものが出来た気もします。
利点
容量を削減できる。
リアルタイム処理なのでシミュレーションに介入することで描写をどんどん変化させることが出来る
(風をふかしたり、水の範囲を拡張したり、工夫すれば斜め描写で奥ほど小さく描写もできる)。

絵心がなくてもそれっぽいものが出来る(私と同じ絵心がない人には一番大事)。

自作で使ってどこまで使い物になるか試してみたいと思います。

できたらこのスレでできる人のレスを見てみたいですね。
アバター
あきと 2019/10/19 14:12 ◆qGd5dQw2g3a2
パーリンノイズで自動マップ生成してる人はいましたね。セルオートマトンで生成した画像をどこで使用するのでしょうか。背景?アニメパターンでしょうか。
アバター
やきはた 2019/10/19 14:29 ◆pmVfuH0n4Kcn
返信ありがとうございます。
取りあえず背景を綺麗にするのに使う予定です。
絵が描けないので数式をいじくって何とかしたいわけです。

他にリアルタイムで燃焼物や冷気と空間の温度を計算して、表示とゲームでのダメージを連動させるとかいろいろ考えています。
リアルタイムで充満する煙と排出を計算して煙幕効果がゲームに影響を与えるようにするとか。


パーリンノイズ検索してみましたが標準的な技術なんですね。
勉強になります。
こういうレスがあるのを期待してスレを立てました。

無知無学なので検索しても肝心の数式や計算方法が出てこなかったり、詳しい方から教えてもらう感じです。

水面描写を擬似3D画面の背景として擬似テクスチャぽく埋め込んでみて、使えそうだったら自作に活かす予定です。
今日は埋め込むための座標計算を検討してます。
アバター
やきはた 2019/10/19 23:59 ◆pmVfuH0n4Kcn
普通に技術のある人たちのやってることをまねることから始めるのもよさそうですね。
自作ゲームに水面表示処理を埋め込んでみたら曇り空のどんよりした水面を正方形の板で近似しましたみたいな良くないものが。
一応半日頑張ったので明日公開キーをこのレスでUPします。

取りあえず主人公の動きと作りかけの背景が出来ました。

生きた水切り石を主人公にした作品。
湖水にあふれた小さな魔物をジャンプ攻撃で退治するという話になる(予定まだ魔物は実装されてない)
公開キー
QRQXEEED
ゲームにセルオートマトンを使ったサンプル。
水面の表示にセルオートマトンを使ってみた。
水面にいるときは十字キー左右で移動、十字キー上下でジャンプ角度決定。
Bボタンでジャンプ。
ジャンプ中は上下で次のジャンプの角度を決定
着水時タイミングよくBボタンを押すと勢いが強い連続ジャンプへ。
水面の上から2層目でボタンを押すと良いです。
失敗すると水面からやり直し。
まだ敵とかきっちりした背景はできていません。

反省点
小さな四角形ほど1フレームでたくさん表示できるので水面にもっと細かい四角形を使っても良かったかもしれない。
水面が機械的に見えるので画面中心部だけにセルオートマトンを埋め込むなど埋め込み方に工夫が必要かもしれない。
アバター
やきはた 2019/10/21 19:02 ◆pmVfuH0n4Kcn
https://ipsj.ixsq.nii.ac.jp/ej/?action=pages_view_main&active_action=repository_view_main_item_detail&item_id=38767&item_no=1&page_id=13&block_id=8

プチコンで煙を表示したり、グライダーゲームなどで使えそうな風、プレーヤを押し流す流れる水を表現するのに使えそうな気もする論文。

こういう論文から専門用語を検索する形で、セルオートマトンを調べるのもよさそうです。

学がない身としては具体的な手順や構築も知りたいのに、論文だと汎用的なモデル構築用に微分を使った式(これを自分の使いたいものに応用しましょうという事なんでしょうね)とかで抽象化されてることが多いようです(この書き込みだけでも私がどれだけ学がないかばれそうです)。

理屈だけ情報だけ言っててもあれなので
まだリンク先の詳細は検討してませんが休日(今週の休日は病気の症状が重たく無理でした来週の休日頑張れるかな、、、)にリンク先の煙を実装してみようかと思っています。

128*128セルを4セル単位計算する形で32*32を1フレームでリアルタイムで計算するのは大変そうなので。
1フレームで1/8ずつ計算するとか工夫してみる必要があるかもしれません。
実際に動かして自然に見えるか検討してみないと分かりませんね。

プチコン3号は10*10正方形を1フレームで7000枚以上描画できるようです。
大きな四角形を多数描写すると遅くなり小さいとより多く描画できるようです(要検証)

画面全体で描写するとしても240*400は10*10なら24*40枚で960枚と意外と現実的に使えそうです。

例えば水面のサンプルを上手に組み込んでcraig reynolds boidsのアルゴリズムの2次元修正版で魚を制御すれば見下ろし釣りゲームが作れます。

グラフィック面で四角形を描画がする形でセルオートマトンの計算結果を描画すれば、結構使えるのではないでしょうか?
8*8フォントをカラー指定で定義できる命令と組み合わせればコンソールでセルオートマトンの結果を表示することも可能かもしれません?

プチコン4号ならもっと処理が早いでしょうし、セルオートマトンがかなり現実的手段になるのではないでしょうか?
アバター
やきはた 2019/10/27 20:52 ◆pmVfuH0n4Kcn
今日のプチコン成果。
煙のシミュレーション。
1 マップをマス目で分割する
2 四角形で分割したセルを2*2範囲単位で見ていく
3 2*2マスの中で衝突判定をする(ランダムな2マスを選択しその2マスに煙の粒子があれば衝突後の速度を計算)
4 x方向+1か-1動く確率y方向へ+1か-1動く確率を計算に基づきランダムで移動する
5 移動後1マスに粒子が2つ以上集まる可能性があるので矛盾を解消するための処理を行う
6 毎ターン煙を定量発生させる
7 最後に乱流を追加する
1,2,3は実装出来ましたが、4,5,6。
3はリンク先にある衝突の式をsin,cos回転行列と理解して実装。

4は実装時間が足りませんでした
5は具体的な処理が思いつきません。
6は簡単です。
7は全く未知です。
今日の成果でした。

5を計算する方法をお知りの方がいれば教えていただきたいです。
(世の中の99%の人は私より賢いと思っているので)

一応2*2マスの粒子の速度が速い順に決定すれば計算量を抑えられると書いてはあるのですが、具体的に何をどうすることなのかさっぱりです。
アバター
マツコウ (MIKE猫Soft) 2019/10/29 20:19 ◆M1HxkK9fMI2A
マツコウです。このスレで技術移植或いは高速化、最適化等の手助けになればと思います。
余り、オートマトンで何をすれば良いか分からないので、宜しくお願いします。
アバター
やきはた 2019/10/30 8:00 ◆pmVfuH0n4Kcn
歓迎。
といってもスレ立て主である私も、勉強しながら泥縄方式で前進することに方針転換してるので、ゆっくりのんびりしていってください。

プチコンでセルオートマトンを使えますよというのを今は実装を通して表現しようとしているので5の調べものを手伝ってほしいです。
(探しても見つからない場合は、試行錯誤で作ってみることにします)

取りあえずこのスレでは、セルオートマトンかその周辺技術でプチコンに移植できそうな技術を探してきて自作ソフトかサンプルで上げるのがいいと思います。
アバター
マツコウ (MIKE猫Soft) 2019/10/30 11:12 ◆M1HxkK9fMI2A
Wikipediaから自分なりに解釈をかさね、その上で詳しく調べようと思います。
 5に関しては、セル・オートマトンの概要も知らない状態で調べるのはかなり苦しいですから。
アバター
マツコウ (MIKE猫Soft) 2019/10/30 12:04 ◆M1HxkK9fMI2A
アバター
やきはた 2019/10/30 17:50 ◆pmVfuH0n4Kcn
テキストファイルUnixかMacで作りましたか?
Winでは改行されてませんでした。
勉強していただいてる雰囲気は伝わりました。
情報がでないので煙の方は試行錯誤で作ってみることにします。

取りあえずこんな感じで・
2*2セルで粒子があれば早い順で移動を試す。
1つの粒子に対して
A 粒子は移動先のセルに粒子がなければそのセルに移動。
B Aが駄目なら移動前のセルのまま
C Bが駄目なら残り2マスの内移動前のセルの上下左右のどれかのセルに移動
D Cが駄目なら最後の1セルに移動
と考えてみました。

少しずつでも出来る範囲を広げたいですね。
このスレではセルオートマトンに詳しい人をお待ちしております。
当分このスレは書籍などでセルオートマトンをゆっくり勉強しながら進める予定です。
アバター
やきはた 2019/10/31 20:19 ◆pmVfuH0n4Kcn
煙の計算できました。
プチコン3号で動くサンプルはこちら。
当初予定よりも簡素なシステムで計算しました。

C15XW334

計算が重いので計算範囲を狭くするか大雑把にして計算結果の絵を拡大して使えば何とかなりそうな気がします。
論文に会った障害物がある場合を組み合わせれば、2Dゲームでマップ構造に合わせて煙が動く何かの煙ゲーム(脱出とか2Dゲームの視界邪魔とか)を作れるのではないかと思います。

今回はセルオートマトンがプチコンでどれだけ重いか感覚を確かめるための実装でした。
アバター
やきはた 2019/11/2 14:45 ◆pmVfuH0n4Kcn
セルオートマトンの本を本屋まで買いに行ったら一冊もありませんでした。
ネットで買うしかないようです。
来週の土日購入予定。

再度煙のサンプル
C15XW334
サブプロシージャ化して一部変数以外ローカル変数にすれば何とかゲームに埋め込めると思いますが変数の数が多いのでローカル化漏れがあると大変な感じですね。
サンプル煙の発生時上方への勢いを減らすと少しもやっとした広がり方をします。
もっとモクモクした感じを出したいですが他の資料に当たる必要がありそうです。
計算に乱流が考慮されてないので煙突の煙というより焚火の煙かボヤの煙みたいな感じになってます。
アバター
やきはた 2019/11/9 16:00 ◆pmVfuH0n4Kcn
セルオートマトンの本が届きました。
しばらく勉強モードの日々です。
勉強が終わったら本の内容を元にプチコンで何か作れたらいいなと思います。
このスレ需要がないのかな。
15*25のBG面の上にグラフィック命令で煙を30*50の網目でセルオートマトンを設定し1フレームで2ラインずつ処理すれば全く重みをかけずに煙の拡散をゲームで扱えたりすると思うのです。

水面セルオートマトンサンプルを使った真上見下ろし釣りゲームの実装を考えてみます。
まあ需要がなくても枯れ木も山の賑わいって感じで行けるかな?
駄目?

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -