萌えハッカーニュースリーダー

2025/11/23 21:09 Making my 1970's-style renderer multi-threaded

出典: https://filiph.net/text/making-my-1970s-renderer-multi-threaded.html
hakase
博士

ロボ子、今回のITニュースはFlutterでの3Dレンダリングの最適化じゃ。レトロな3Dレンダラーを実装したんじゃと。

roboko
ロボ子

博士、Flutterで3Dレンダリングですか。FlutterはUIフレームワークというイメージが強いですが、ゲーム開発にも使われるのですね。

hakase
博士

そうなんじゃ。この記事では、シングルスレッドでの最適化から、マルチスレッド化への移行について詳しく解説しておるぞ。

roboko
ロボ子

シングルスレッドでの最適化では、`Canvas.drawVertices`を使って三角形のリストをGPUに直接送信したのですね。フレームごとに新しいリストを作成するのではなく、`TypedData`を使うことでメモリ割り当てを削減したと。

hakase
博士

その通りじゃ!しかし、複数の3Dモデルを同時に表示する必要が出てきて、シングルスレッドでは限界が来たんじゃ。

roboko
ロボ子

そこで、マルチスレッド化が必要になったのですね。Dartのisolateを使うとのことですが、isolate間でのメモリ共有には制限があるのですよね。

hakase
博士

そうなんじゃ。そこで、FFI (Foreign Function Interface) の登場じゃ!C FFIを使って、ネイティブヒープにメモリを割り当て、Dartから解放できるようにしたんじゃ。

roboko
ロボ子

`malloc.allocate`でメモリを割り当て、`malloc.nativeFree`で解放するのですね。これで、isolate間で可変配列を共有できるようになったと。

hakase
博士

その通り!ダブルバッファリングも使って、メインisolateとワーカーisolate間での競合を防いでおるぞ。賢い!

roboko
ロボ子

M4 MacBook Proで3つの3Dレンダリングを同時に表示した場合、メインスレッドのフレーム時間が20%向上したのですね。素晴らしい成果です。

hakase
博士

じゃろじゃろ?しかも、3Dモデルの表示にかかるメインスレッドのCPU時間がほぼゼロになったらしいぞ。

roboko
ロボ子

記事によると、AIに`Isolate`のボイラープレートコードを実装させようとしたものの、バグが発生したため、最終的には自身で実装したとのことです。

hakase
博士

AIも万能ではないということじゃな。しかし、定義しやすい関数やメソッドの作成には役立つらしいぞ。

roboko
ロボ子

Dartチームは、共有メモリのより直接的なサポートを実験中とのことですので、今後に期待ですね。

hakase
博士

ほんまそれ。FlutterとDartを使ったゲーム開発は、開発の容易さや移植性などの利点があるけど、パフォーマンス面ではまだまだ改善の余地があるからの。

roboko
ロボ子

今回の記事は、Flutterでのゲーム開発におけるパフォーマンス改善のヒントがたくさん詰まっていましたね。大変勉強になりました。

hakase
博士

そうじゃな。しかし、ロボ子よ、3Dモデルをたくさん表示しすぎて、画面がごちゃごちゃになったら、それはまるで…

roboko
ロボ子

まるで…何でしょう、博士?

hakase
博士

まるで、私の部屋みたいじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search