ねこでじ(Nekodigi)

Nekodigi’s diary

学習中の気づきをまとめています。応援よろしくお願いします

【Minecraft Animation】走るアニメーションを作ってスムーズに繋げる

成果物

www.youtube.com
走るアニメーションを作って、歩くアニメーションのテクニックを合わせることで、足り始めて止まるところまでのアニメーションを作ってみました。

仕組み

I want to be an Animatorさんのチュートリアルを参考にしました。リアルなアニメーションを作るコツをほかの動画でも紹介しているので軽く見ておくことをお勧めします。
www.youtube.com
走るアニメーションは歩くアニメーションと周期は変わらないものの、左右にとどまっている時間が長いのが特徴です。
また、歩くアニメーションはこちらを参考にしてください。
nekodigi.hatenablog.com

【Minecraft Animation】ゴミ箱のアニメーションを作る

成果物

www.youtube.com
Mac嫌いの友達がRotten Apple Garbage Proというパソコン名にしていたので、そこから着想を得て作ってみました。(アニメーション内のゴミ箱は高級なただのゴミ箱であってそれ以外の何物でもありません)思いのほか高級感のあるゴミ箱に仕上がってよかったです。

参考

Rymdnisse's Blender Minecraft Rig Pack、ZAmination Rig、Minewaysの組み合わせで作っています。ごみ箱は自作です。
またMinecraft音源はこちらからダウンロードし、投げる効果音は効果音ラボからダウンロードしました。
www.mineimatorforums.com
プロジェクトファイルのダウンロードが出来るようにしたいのですが、CG関係は再配布になるので難しそうです。

【Processing】120 cellを作る

成果物

www.youtube.com
あまりに美しかったので驚きました。

仕組み

頂点はこのようになっています。Φは黄金比です。また、辺の長さは2/(Φ*Φ)です。
permutations of
(0, 0, ±2, ±2)
(±1, ±1, ±1, ±√5)
(±φ−2, ±φ, ±φ, ±φ)
(±φ−1, ±φ−1, ±φ−1, ±φ2)
and all even permutations of
(0, ±φ−2, ±1, ±φ2)
(0, ±φ−1, ±φ, ±√5)
(±φ−1, ±1, ±φ, ±2)
en.wikipedia.org
後は600 cell と同様に作成できます。
nekodigi.hatenablog.com

ダウンロード

120 cellという名前で追加しています。
github.com

【Processing】600 cellを作る

成果物

www.youtube.com
120 cellを先に作ったのですが、600 cellより圧倒的に美しかったので後で説明します。

仕組み

頂点はこのようになっています。Φは黄金比です。また、辺の長さは2/Φです。
The 96 even permutations of (+-phi,+-1,+-1/phi,0).
The 8 permutations of (+-2,0,0,0).
The 16 permutations of (+-1,+-1,+-1,+-1).
even permutationsは偶順列というものなのですが、要素が4つしかないので全パターン入力した方がコンパクトに収まります。
mathworld.wolfram.com
permutationも全パターン入力しています。
mathworld.wolfram.com
以下のプログラムを拡張して作りました。wの値に従って遠近法をかけています。
nekodigi.hatenablog.com

ダウンロード

600 cellという名前で追加しています。
github.com

【Processing】正十二面体を頂点情報だけから作る。

成果物

f:id:Nekodigi:20201015183857g:plain
120 cell, 600 cellを作るにあたって、辺、面の情報を手動で登録するのは不可能に近いので、頂点情報と辺の長さから辺を自動生成するようにしました。

仕組み

頂点はこのようになっています。Φは黄金比です。また、辺の長さは2/Φです。
絶対値符号の所は+-全パターンを入力します。
(±1, ±1, ±1)
(0, ±ϕ, ±1/ϕ)
(±1/ϕ, 0, ±ϕ)
(±ϕ, ±1/ϕ, 0)
en.wikipedia.org

ダウンロード

Simple Dodecahedronという名前で追加しています。
github.com

【Blender Animation】Minecraft Rigをリアルに歩かせる。

成果物

www.youtube.com
数々のアニメーターの中でも特にリアルな動きのZAminationさんのTutorialをもとに作成しました。Rigも配布しており、2.9にも対応したのでそちらも合わせて使っています。

分かったこと

まず、足が開いた2つ状態を設定しておき、その間を繋いでいくようにアニメーションを作ることがわかりました。私は端から順番に一気に細部までやってしまうのですが、初めに大まかな動きを作っておき、詳細は後から加えていくのがいいようです。また、普通はベジェ曲線で補間するのですが、足が地面についているときは線系補間にするようです。さらに、アニメーションのタイミングでも新しい発見がありました。手の先と腕は同時に動いているのではなく、遅れて動くので、キーフレームをずらすことで再現していました。

【Processing】穴の開いた毛細血管のようなパターンをConstrained Delaunay図の最短経路を大量に結んで作る。

成果物

www.youtube.com
ようやくConstrained DelaunayをA Starアルゴリズムで解くことが出来ました。これは、かなり重要なアルゴリズムで、ゲームのAIもこれと似た仕組みを使って障害物を避けながら移動しています。

仕組み

前回Constrained Delaunayのアルゴリズムを実装して、三角形を生成するところまでできました。今回は、その三角形をもとに点と点の接続情報を表すグラフを作成し、A Starアルゴリズムで解いています。
nekodigi.hatenablog.com
A Starに関してはこちらをご覧ください。
nekodigi.hatenablog.com

コード

Constrained Delaunay A Starという名前で追加しています。
github.com

【Arduino】一定の周期で繰り返すタイマーを作る。

成果物

f:id:Nekodigi:20201002155000j:plain
邪魔にならないように、黒く仕上げました。勉強するときに、25分勉強、5分間目を休めるという流れにしたいのですが、時間をはかるためだけにわざわざタイマーやタブレットを触っているとかなりのタイムロスなので、自動で行ってくれるようにしました。勉強時間になると青のLEDが光り、休憩時間になると、緑のLEDが光るようにしました。また、常に見張っておくわけにはいかないので、音でもお知らせしてくれるようにしました。

コード

LED、ブザーのピンは#defineで明記しているので、そちらを参照してください。
gist.github.com

【Processing】Constrained DelaunayからVoronoi図を生成してみた。

成果物

f:id:Nekodigi:20201003121800p:plain
Constrained Delaunayはそのままだと周囲との接続関係の情報を持たないので、何とか何とか登録して試してみました。面を張るところまではいきませんでしたが、線は生成することができました。おおよそConstraintに直交するようにVoronoi図ができていることが確認できてよかったです。

仕組み

まず、重複した頂点は同じ番号になるように番号を振ります。Convex Hullのコードの中に、面と面の接続を行うSimplex Connectorというものがあるのでそれを利用して繋ぎます。(先ほどの番号がここで使われています。)
Constrained Delaunayについてはこちらをご覧ください。
nekodigi.hatenablog.com

コード

Constrained Delaunay 2の中(メインファイル名、HalfEdgeData)にコメントアウトで書き加えています。見たい方はコメントアウトを外して実行してください。
github.com

【Processing】Convex Hull同士のMinkowski和を計算する。

成果物

f:id:Nekodigi:20201001174928p:plain
左上の物体Aを、真ん中の物体Bの周りで一周させ通った部分を物体Bに追加したのがMinkowski和です。これを使うと、危険物からXm以内の危険エリアを計算するといったことができます。また、Constrained Delaunayと組み合わせると、ある物体のXm以内に近づかない最短経路検索などといったことが可能になります。Convex Hull以外に対応させたり、Minkowski 差に対応させたりしようと思いましたが、あまりに大変だったので、今回は、これでとどめておきました。下の方にそちらの考察も書いておきますので、時間があるときに取り組ませていただきます。

仕組み

物体Bの各頂点で、物体Aの頂点を複製します。そして、複製された頂点のConvex Hullを求めると、Convex Hull同士のMinkowski和を求めることができます。

コード

4DのConvex Hullを使いまわしため、かなり長いコードになっていますが。3Dでも可能なので、よかったらトライしてみてください。
Quick hull minkowski sumという名前で追加しています。
github.com

Convex Hull以外、Minkowski差について

Convex Hull以外の場合、物体Bの辺ごとに、辺と物体AのMinkowski和をを計算する必要があります。(辺の始点に物体Aを複製し、辺の終点にも複製しConvex Hullを求める)ここまではいいのですが、辺は沢山あるので、Polygon ClippingのUnionを使って辺を接続する必要があります。既にコードはあるのですが、これが非常に難解なため、今回は、紹介しませんでした。
これで、物体Aと、物体Bの輪郭のMinkowski和を求めることができました。ここからは、この結果のPolygonを構成するリングに注目します。リングが元の物体Bの中にあれば削除します。多くの場合、これで完成です。ただ、例えば、物体Aが物体Bより遥かに大きい場合など、これでは正しく判定されない可能性もあります。残念ながら私は未だ解決策を発見できていません。
Minkowski差も大部分は同じで、違うのは元の物体B中にあるリングではなく、外にあるリングを削除するという点だけです。
github.com
JTSのライブラリが使われているので読むときにどうぞ。
github.com

【Processing】Constrained Delaunayを使って、文字でくりぬかれたVoronoi図を作る。

成果物

f:id:Nekodigi:20200927173236p:plain
今回は、前回のConstrained Delaunayを発展させて文字で行っていました。前回は一つの輪で切り取っていましたが、文字では多数の輪があり、切り取る輪、残す輪があるので、思った以上に難解でした。
最終的にPolygon in Polygonを使った後処理で解決することにしましたが、思いつくまでが長かったです。

仕組み

ベースは前回のConstrained Delaunayです。
nekodigi.hatenablog.com
まず、文字を構成する全ての輪を計算します。詳しくはこちらの記事を参照してください。
nekodigi.hatenablog.com
そして、Constrained Delaunayを輪に合わせて順に計算していきます。(この段階では切り取りません)
成形されたDelaunay図が出来上がったので、各三角形の中心が文字の内側か外側からを計算します。(精度が悪いので複数回実行)
外側だけを表示すると上の画像のようになります。

コード

Constrained Delaunay Textという名前で追加しています。
github.com
25ファイル…画面からはみ出ました(笑)。CSVに変換するコードを書いたらさらに増えそうです。

【Minecraft】Hypixel Zombiesで初めてDuo Winした話。

概要

f:id:Nekodigi:20201019223823p:plain
本当はスクリーンショットを貼りたかったのですが、Windowsの固定キーが発動して取れませんでした( ゚Д゚)。
www.youtube.com
※追記 80000Killの人と二度目のDuo Winをすることが出来ました。本当に良かったです。
4人、3人で勝ったことはあったのですが、Duoは初めてだったのでよかったです。10回ほど負け続けていたのでやっとできてよかったです。Bad Bloodをやってみようかとも思いましたが、プレイヤーも少なく難易度も高いのでここら辺でやめにしておきます。だいぶやりつくしたので、ゲームを超える面白いものを見つけて早く切り替えていきたいです。

気付き

やはり、序盤はShotgun1択で間違いないようです。序盤はWindowが直せずZombieで溢れかえったので非常に苦戦しました。味方さんはr10ほどで早めにZapperを引き当てていました(リスクは高いですが運がよかったです。)私はr15辺りでZapperを見つけ、その後ShotgunをSniperに置き換え最後まで使用しました。今回は、味方さんがGold Digger Vもそろえることができたので、それがカギになったと思います。
戦う場所は始めAlley(~r9)で、その後Hotel,Appertment辺り(~r18)を大胆に動いていました。かなり前の方に出ていたので驚きました。そしていつものPower Station(~r28)にいもりました。ここでもAppertmentの階段まで出ていたので心配になりましたが大丈夫でした。そして(~r30)はGardenに行きました。r20など、ボスのラウンドでも行った気がします。
Ammo Supplyはr20以降毎回行きました。Gardenにギリギリで行ったのはそこから距離が離れるためです。
Perkは二人ともQuick Fire, Extra Health, Fast Reviveです。

【Processing】Delaunay図を自在に切り取る!Constrained Delaunayを実装する。

成果物

f:id:Nekodigi:20200925212151p:plain
基本的なDelaunay図の最終形態とも言うべきConstrained Delaunayがとうとう完成しました!これを使うと、自由自在に穴をあけたり、線を入れたりすることができます。仕組み自体はシンプルですが、接続情報の変更が非常に複雑で、難しかったです。改良しようとやってみましたが、失敗したので、そのままのコードを翻訳しています。文字でこれを行ったり、複数の図形で行うととても綺麗なものが出来上がりそうなので、これからやっていきます!

仕組み

Delaunay生成

Constraint(必ず通っていなければならない線)を指定します。そして、Delaunay図の頂点にConstraintを追加して、図を生成します。※この状態では通らなければならない点を通っていません。

制約の追加

Constraintと交差している線を探し出し、交差がなくなるまで、Flip(面の張り直し)をします。張り直したあとは、きちんとしたDelaunay図になるよう調整します。

面の削除(任意)

三角形を伝うようにしてConstraintの中の三角形を削除しています。Constraintは時計回りだという想定のもと作られていますが、反時計回りにするとConstraintの外が削除されるようになります。

参考

Constrained Delaunayはこちらのコードをもとにしています。
github.com
元のDelaunay図作成はHull Voronoi 3Dを利用しています。(Flipなど他のアルゴリズムでも可能です)
nekodigi.hatenablog.com

コード

Constrained Delaunay 2という名前で追加しています。
github.com
エラーが多いですが、改良に成功すれば非常に便利になるConstrained Delaunay Testというものも追加しています。改良に成功したという方は報告お願いします。

【Processing】Worley Noiseに色を付けて、渋くてきれいなVoronoi図を作る。

成果物

f:id:Nekodigi:20200922154732p:plain
普通のVoronoi図を点からの距離が遠いほど黒くなるようにするだけで、人工的な雰囲気が緩和され、味が生まれました。コード自体も非常にシンプルです。
Worley Noiseについて
Worley noise - Wikipedia

コード

Worley Voronoiという名前で追加しています
github.com

【Processing】遊星ギアを作ってみる。

成果物

f:id:Nekodigi:20200922150948g:plain
アンパ…ではありません。簡略化のため歯をなくしたので遊星摩擦車的なものになってしまいましたが、これでも、動作する様子ははっきりわかります。

仕組み

  \begin{array}{l}
太陽歯車(外側)、遊星歯車、内歯車の角速度および歯数をそれぞれ\\
{\displaystyle \omega _{a} ,\omega _{b} ,\omega _{c} ;\sim z_{a} ,z_{b} ,z_{c} とする}\\
遊星キャリヤの角速度(遊星歯車の公転)を{\displaystyle \omega _{x} とする}\\
太陽歯車が固定されていて、\omega _{c} がわかっているとき\\
\omega _{x} =\omega _{c}\frac{z_{c}}{z_{a} +z_{c}}\\
\omega _{b} =\omega _{x} -(\omega _{a} -\omega _{x} )\frac{z_{a}}{z_{b}}
\end{array}
ja.wikipedia.org

コード

Planetary Gearという名前で追加しています。
github.com