Show HN: SvelteとThree.jsベースのWeb向け3Dフレームワーク
(threlte.xyz)- Threlteは、Webでインタラクティブな3Dアプリをすばやく作るために、SvelteのリアクティブなコンポーネントモデルをThree.jsの上に載せたオープンソースフレームワーク
<T.Mesh>のような宣言的コンポーネントでThree.jsオブジェクトを構成し、Svelteのライフサイクルを通じてイベント購読と状態変更を処理する- 標準ツールとして、Rapier物理エンジン、Theatre.jsアニメーションツール、
@threlte/gltf、@threlte/extrasをあわせて提供し、初期の3Dアプリ構成の手間を減らす <T>コンポーネントだけでは足りない動作は、型安全なPluginsでカスタムprops・イベントを追加して拡張できる- Svelteエコシステムで宣言的なTHREEライブラリやWebGLアプリ制作ツールを探す開発者にとって、ドキュメントと使いやすさが強みとして評価されている
Svelte流でThree.jsシーンを構成
- ThrelteはSvelteとThree.jsの上に作られたWeb向け3Dフレームワーク
- 宣言的・リアクティブなコンポーネントでインタラクティブな3Dアプリをすばやく構築することに重点を置く
- Svelteコンポーネントのライフサイクルを活用して、次の作業を処理できる
- イベントの購読
- 状態変更の処理
- コンポーネントベースの動作の接続
- サンプルコードでは、
<T.Mesh>の中にジオメトリとマテリアルを配置し、scale、position.x、onclickのようなpropsやイベントを直接指定する - 最初のシーン構成は Make Your First Scene で確認できる
同梱ツールと拡張方法
- Threlteは「batteries included」構成を掲げ、3Dアプリ制作に必要なツールをあわせて提供する
- Rapier: 物理エンジン
- Theatre.js: 本格的なモーションデザインツールセットを備えたアニメーションライブラリ
@threlte/gltf: GLTFファイルをThrelteコンポーネントへ変換するツール@threlte/extras: 開始に必要なコンポーネントとユーティリティ集
- Rapierの例では、
RigidBody、AutoColliders、<T.Mesh>を組み合わせて球体形状のコライダーとメッシュを構成する @threlte/extrasの例では、FloatとGLTFコンポーネントで/models/flower.glbモデルを読み込み、影・位置・スケールを指定する@threlte/extrasの使い方は Documentation で確認できる- Plugins は、
<T>にカスタムpropsとカスタムイベントを型安全に追加する拡張方法- サンプルプラグインでは、
injectPluginでlookAtpropを登録し、$effect内でargs.ref.lookAt(args.props.lookAt)を呼び出す - 高度な使い方は Pluginsドキュメント にまとめられている
- サンプルプラグインでは、
- スタートガイドとコミュニティリンクも用意されている
1件のコメント
Hacker News の意見
基本的には 2 つのことをしています。1 つは Svelte 5 対応で、Threlte はイベント処理をより効率的にしたり、DOM 要素ではなくコンポーネントに Svelte のトランジションを適用したりするために、コンポーネント内部にかなり手を入れてきたので、一般的な Svelte ライブラリより少し作業が多いです。こうしたものの多くは Svelte 5 に組み込まれ、トランジションのような残りのものは当面手放す必要があります
もう 1 つは Threlte Studio です。まだどう説明するのがよいか分かりませんが、コードを視覚的に編集できるようにするエディタと言えます。拡張可能なので自分のワークフローに合わせられますし、どこまで行けるのか楽しみです。興味があれば Discord http://chat.threlte.xyz や X https://twitter.com/threlte をフォローしてください
Svelte は本当に直感的なので、3D 環境も効率的に管理できそうだと自然に思い、それで「Svelte + three.js」を検索することになりました
PlayCanvas や Babylon.js を使ってきた身として、Threlte Studio の開発にはとても期待しています。DREI はすべてをディレクトリのように展開してくれる点が気に入っていますが、慣れ親しんだ「スタジオツール」を思い浮かべました。Threlte Studio の予定時期が気になります
特に好きなのは画像ギャラリーの例です。画像をクリックすると別の部屋、つまり別のギャラリーに入るように改造してみました
https://github.com/pmndrs/drei はサンプルとヘルパーの集まりです
いちばん印象的だったのは GLTF モデル、テキスト上の動画テクスチャ、反射などを使う例で、スタンドアロン版は https://bfplr.csb.app/ にあります
さらに印象的なのは、コードがそれほど多くないことを示すサンドボックスです: https://codesandbox.io/p/sandbox/ground-reflections-and-vide...
three.js の上にレイヤーを載せるには多くの作業が必要で、かなり頭の痛いことも経験しましたが、それでもポテンシャルは大きいです。three.js を使うことで、Web サイト開発の見方が完全に変わりました。Svelte を使っている人ならぜひ見てみる価値があります
Technical Outline、特に簡略化した 車両物理 の説明がかなり有益です。本質的にはトラックエディタまで備えた Trackmania クローンで、Svelte/Threlte の強みを最大限に活用した例に見えます
人々が本当に宣言的 3D を望んでいるのかは気になります。X3D/VRML は 25 年以上前からあり、A-Frame も 8 年になりますが、どちらもそれほど大衆的にはなりませんでしたし、他の形式もいくつか現れては消えました。一方で three.js と命令型/手続き型 3D は全般的にうまくいっているようですが、それがなぜなのか気になります
最適化が非常によくできているわけではなく、すべてのモデルは Sketchfab の無料モデルです。3D ゲーム環境なので、最近の PC があると助かります
多くの UI は 3D の活用 で恩恵を受けられると思います