hsimyu's diary

ゲームなどをします。

11/6 11月1週目まとめ

予備検討が無事に終わって三連休は妻とひたすらOvercookedしておりました(DLC分もクリアしてしまった)

Overcooked、操作が絶妙にシンプルな割にチームプレイで上手いラインを作っていく部分にやりこみ要素があってかなりいいです。

Switch版がオンラインマルチに対応していないのだけが悲しい。

おれはハンバーガーとハンバーガー作りてえよ。

 

Unityの進捗の方はこんな感じ。

https://www.youtube.com/watch?v=LKTScbq7PpA&feature=youtu.be


進捗1106

あまり進んでいないがAnimationの使い方を知り、単純な移動だったりリサイズをひたすら繰り返す部分を自分で書かなくていいのはGood

 

11月1週目に調べたことのまとめ

boost::multi_arrayの起点変更
 初期化またはresize時にmulti_array::extent_rangeで指定できる

 using array_type = boost::multi_array<double, 3>;
 using range = array_type::extent_range;

 array_type test_array[ boost::extents[range(-1, 10)][range(2, 5)][3] ];
 // サイズが[11]x[4]x[3]の[-1から10]、[2から5]、[0から3]のmulti_arrayができる

 もしくは reindex() を呼び出してもいい
 test_array.reindex(1); // 全て1始まりに変更

 boost::array<array_type::index, 3> bases = {{0, 1, -1}};
 test_array.reindex(bases); // 0始まり、1始まり、-1始まりに変更

 起点のインデックスは .index_bases() で取得できる
 auto bases = test_array.index_bases(); // boost::array<array_type::index, 3>が返ってくる

 std::cout << boost::format("bases = %d, %d, %d") % bases[0] % bases[1] % bases[2] << endl;

 終点のインデックスは bases[0] + test_array.shape()[0] - 1 になる

 

UnityのAnimation
 各コンポーネントのpublic変数の値とかを弄ることができる
 知らなかった……

 

流体シミュレーション
 https://twitter.com/shiropen2/status/926151161156997120
 http://www.gmrv.es/Publications/2017/BGAO17/SA2017_BGAO.pdf
 を読んだ

 最近のCG用流体計算は位置ベース力学(Position-Based Dynamics, PBD)が主流っぽい?
 先に制約のない場合の位置速度をu* ← u + f/m, x* ← x + dt u* で計算してから
 位置に関して制約を課して、 x ← Project x* to C(x) = 0
 そこから新しい速度を逆算する u ← (x - x_old) / dt

 で、この論文だと粘性を効率よく計算するために速度に関する制約 C(u) を課すことを提案してて、
 速度に関しても制約を課すレイヤーを追加した Doubly Constrainted PBD (DC-PBD) 法というのを開発したよ
 というやつ
 PBDに関するソルバーはJacobi法とかGauss-Seidel法でいいっぽいけど、
 C(x)についてはあんまり記述がなかったので、もうちょっと先行研究を掘る

 そもそも粒子位置を計算したあとそこからどうやってレンダリングするのかが分からん