サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
買ってよかったもの
blog.oimo.io
気が付いたら年が明けていました。あけましておめでとうございます。 さて、この記事では年末から制作を始めて先日公開した Drops の解説と制作背景を書いていこうと思います。どうしても SIMD が使いたかったので、ついに WebAssembly に手を出すことになりました。 そのおかげでシミュレーション部分が CPU で高速に動くようになったので、余った GPU パワーを使ってレンダリングパートにも力を入れてみました。 ソースコードはこちらから見られます。 You can find the source code from here! 全体の構成 全体の構成は以下のような感じになっています。 シミュレーションパート シンプルな SPH + 表面張力モデル 4 回の substep で 1 フレーム コア部分は WebAssembly で計算 JS からでは使えない SIMD で計算をベクト
最近は The Blob Toy や Pudding など、position based dynamics (PBD) を使った作品をいくつか作っています。 これらの作品ではいずれも通常の陰解法の代わりに substepping を用いているのですが、その効果が想像していたよりもはるかに強力だったので、実際どれほど強いかというのを解説していこうと思います。 Substepping 自体の詳細な説明は元の論文[1]を読むと分かりやすいです。 陽解法と陰解法 代表的な時間発展の方法の種類に陽解法と陰解法があります。Substepping がどう強力なのか理解するのに必要なので、バネや弾性体の計算について考えたときの両者の特徴について大ざっぱに説明します。 陽解法 陽解法では、あまり難しいことを考えずに素直に速度と位置を公式に従って更新します。例えば計算対象がバネで繋がれた質点なら、現在の自然長
正直なところ言及したくない話題なのですが、最近あまりにもひどい動きが散見されるので今の私の考えを書き留めておくことにします。 予めこの記事で「しないこと」について記しておきます: 丁寧な背景説明 現行の教育方針に対する是・非の判断 何が問題なのか? 客観的な事実 数 a と数 b があったとき、a\times b と b\times a は同じ結果をもたらします。両者は等号で結ばれるものであり、両者に数学的な違いは存在しません。これ自体は疑いようのない事実であり、誰の目にも明らか[1]です。 注意すべきなのは、このことを理解するために高度な数学の知識は全く必要がないということです。つまりここで「実数体の乗算の性質が」とか「可換環が」とか言い出すのは追加の情報を与えないので無意味な行為です。 そしてそれは同時に、高度な数学の知識を有していることがこの問題に向き合うにあたってアドバンテージにな
数学に関するポエム的な記事です。特に技術的な内容ではありません。圏論の知識があると共感が得やすいと思いますが読むために必須ではありません。 定義は詳細に説明しませんし数学的に厳密な話でもありませんが、明らかに間違ったことを書くつもりもないので、どこかが明らかに間違っていたら指摘してくれると助かります。 追記: 極限の左右を間違えていたので修正しました 随伴と逆 数学をやっていると随伴という概念に遭遇します。随伴というのは逆を緩めた概念です。 逆関数 逆関数を例に逆という概念と性質について説明します。分かっている方は読み飛ばして大丈夫です。 随伴という概念には遭遇していなくても、逆という概念に遭遇した方は多いと思います。例えば関数 f\colon\mathbb{R}\to\mathbb{R} に対する逆関数 f^{-1}\colon\mathbb{R}\to\mathbb{R} です。関数
公開からだいぶ時間が経ってしまいましたが、Life Universe の技術解説を書きます。 English version is here. Life Universe について その前に、いくつか知っておくとよい事柄があるので先に説明します。 OTCA Metapixel について ライフゲームの説明については割愛します。ライフゲームはチューリング完全なので様々なパターンが存在し、その中に OTCA Metapixel というものが存在します。OTCA Metapixel は(メタ)セルのオンとオフの状態が視覚的に分かる特殊なパターンで、ライフゲームのみならず outer totalistic なルール[1]で動く全ての[2]2次元セルオートマトンを再現できます。 つまり、ライフゲームの中で動くライフゲームを見ることができます。 こちらは有名な動画ですが、実際にこういう計算が可能になり
VRChat world "Just a Pool" has been released! 少し前に Just a Pool という VRChat のワールドを公開しました。この記事では裏の色々な話や技術解説などを書いていこうと思います。 ワールド探索系の話でなくて恐縮なんですが、この記事は VRChatワールド探索部 Advent Calendar 2022 の20日目の記事になっています。 ワールドについて 名前の通りプールが置いてあるだけの小さなワールドなんですが、水がリアルに動きます。そして触れます。 ただ「リアルな水とVRで触れ合いたい!」という欲望のために作られたようなワールドで、心ゆくまで水遊びを楽しむことができます。水鉄砲やポータルといった遊び道具も置いてあるので、多人数でわいわいするのにも向いているかと思います。よくみんなで遊んでいる様子が Twitter に流れてくるの
最近参加していたプログラミングコンテストの HACK TO THE FUTURE 2026 (AtCoder Heuristic Contest 056) でなんとまた優勝することができたので、参加記と解法の解説を書いていきます。 最近コンテストの記事ばっかりになっていて恐縮なんですが、本当に楽しくてつい熱中してしまい…… これを見ている皆さんも興味があればぜひ! Heuristic Contest の人口はもっともっと増えてほしいところです。 Read more… AHC056 参加記 & 1位解法解説
人間の描いたイラストか AI によって生成された画像かを判別する Human or AI に挑戦したところスコアが低くて悲しかったため、AI の癖を徹底的に分析して自動生成されたイラストを見抜く方法をまとめました。 追記: 2024 年 7 月 この記事を執筆してから 2 年ほどが経過しました。 まあ予想通り AI 技術は進展しており、生成されるイラストの品質も向上しています。いまだにこの記事には結構なアクセスがあり、内容の妥当性についてここで再度言及しておくことは価値がありそうです。 結論から言うと、この記事の内容は現在の AI においても概ね適用できると考えていいでしょう。恐らくはパラメータ数の増加に伴って AI の地力とも言える性能は執筆地点から大きく向上していますが、一方で定性的な得意・不得意の傾向については変わっていないように見えます。 なので、全体的な傾向についての記述は概ね信
ググっても出てこなかったので。 2つの楕円が接している(内接 or 外接)かどうか判定する方法についてです。ついでに衝突判定もできます。 衝突判定だけしたい方 以下で説明する方法でも判定自体はできますが、非常に非効率です。悪いことは言いません。GJK法などを使いましょう。凸同士なので簡単にできます。 どうしても接触を判定したい方 心して読み進めてください。 事の発端 まだそんなにバズってないけど宣伝していいらしいので. AI でも普通のプログラマーでもない優秀なプログラマーたる皆さんは,もちろん楕円が接するか判定する方法を知っていますよね? 私は一昨日実装しました.各位の解法に興味があります.よろしくお願いいたします. — 青い楕円形のぜろ (@0_uda) October 4, 2022 もちろん楕円が接するか判定する方法を知っているので、書くことにしました。 楕円の表現方法 楕円とはい
最近 Unity で暴れるジョイントを鎮めました。意外と一般的に役立つテクニックではないかと思ったので、原理とともに解説しておきます。 English version is here. チェーンやロープのようなものを Joint と Rigidbody で作ろうとして上図のようになった方、結構いるんじゃないでしょうか。自分もなりました。 こういう場合に使える、あまり知られていなそうな解決策があります。 実際に暴れさせてみる Unity を起動し、図のようなシーンを作成しました。 灰色のキューブは Kinematic、黄色の球と赤いキューブは Dynamic に設定してあります。また、各剛体の接点に Character Joint をセットしてチェーンを作ってあります。さらに、黄色の球の質量をそれぞれ 1.0、赤のキューブの質量を 10.0 に設定しました。 再生して赤いキューブを少し横に引
タイトル通りです。丸一日消滅したので同じことが起きないように書き残しておきます。 要約: filter-branch を使うのはやめよう。filter-repo を使おう。 背景 個人の進捗管理用に使用しているリポジトリの容量が肥大化してきており、過去にコミットしてしまった大きなファイル(オセロの自己対戦ログとか学習済みパラメータとか!)や不要なファイル(実行可能ファイル、トランスパイルされた巨大なソースコードなど)を歴史から抹消してリポジトリをスマートにしようということになりました。 調べてみると、git_find_big.sh をダウンロードしてきて大きなファイルを見つけ、git filter-branch コマンドで各コミットに対し git rm 等のコマンドを適用して歴史から消すという方法が多数ヒットします。自分もこれに従いました。 問題 とにかく遅い まず git filter-
欲しかったので作ってしまいました。HGSL 開発リポジトリはこちら。Haxe の環境を VSCode に導入すれば誰でも使えます。 以下開発経緯や言語の特長、技術的解説、苦労した話などが続きます。 なぜ作ろうと思ったか AltGLSL が欲しかったからです。Works にあるように以前から WebGL を用いた作品で GLSL を書いてきましたが、 GPGPU のような複雑なロジックを書こうとするとなかなかしんどい 実行したときにブラウザ上でエラーが判明するのがしんどい int から float への暗黙の型変換すら存在しないのがしんどい [1] typo がその場で判明しないのがしんどい など様々な不満が毎日少しずつ蓄積していきました。文字列としてプログラムに埋め込んでいるのが悪いと言えば悪いのですが、メインのプログラムと uniform 変数の名前を揃える必要性もあり、String を
このページを最初にブックマークしてみませんか?
『おいもログ | shr's tech diary』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く