BlenderのUIとランタイム:GPUIよりもはるかに高速
Blender's UI and Runtime: Much Faster Than GPUI (github.com)
要約
BUI(Blender UI)は、Blenderの最適化されたUIツールキットを抽出し、Python、Rust、JavaScriptなどの複数言語で利用可能にするライブラリです。Blenderのような直感的な操作性、高速なCPU/GPUレンダリング、そして多様な開発言語に対応しており、効率的で使い慣れたUIを他のアプリケーション開発に活用できます。
全文翻訳
BlenderのUIとランタイム:GPUIよりもはるかに高速
URL: https://github.com/ppmpreetham/BUI
本文:
[画像: BUI Logo]
Blenderのユーザーインターフェースを、Python、Rust、JavaScript/React、C、C++、Dear ImGuiから利用できるライブラリとして分離。
人々は何十年もかけてBlenderのGUIを構築し、最適化してきました。それはバッテリーとメモリ効率が良く、非常に高速です。私たちはそれを分離し、誰もがそれを使って独自の製品を構築できるようにしました。複数の言語とフレームワークをサポートしているため、開発の遅れはありません!
[画像: PyPI] [画像: Python] [画像: crates.io] [画像: @blender-ui/react] [画像: Wheels] [画像: License: GPL-2.0-or-later] [画像: Platforms]
ウェブサイトと完全なドキュメント: bui.preetham.top
[画像: BUIのBlenderコンポーネント:パネル、数値スライダー、ベクトルフィールド、チェックボックス、カラーサンプル] [画像: 未変更のtkinterプログラムがBUI上で実行されている様子]
このREADMEは小さな本です。全体像を掴むには最初から最後まで読んでください。必要に応じて章にジャンプしてください。各章は、 docs/ のより長いガイド、またはウェブサイト (https://bui.preetham.top/) にリンクしています。
目次
- インストール
- 最初のアプリ:tkinter
- 最初のアプリ:Blenderコンポーネント
- 最初のアプリ:Qt構文
- 最初のアプリ:Rust、rsxとgpuiビルダーで
- 最初のアプリ:JavaScriptとReact
- 最初のアプリ:Dear ImGui
- 最初のアプリ:C
- 仕組み
- Blenderのウィジェットとインタラクション
- 3つのルック:HTML、styled、Blenderコンポーネント
- CPUとGPUでのレンダリング
- ダメージレンダリング
- ウィンドウホスト
- テキストとフォント
- テーマ:ダークとライト
パートI:ようこそ
1. BUIとは
BUIは、Blenderのユーザーインターフェース(ウィジェット描画、インタラクションルール、ルックアンドフィール)を、小さなCコアを持つスタンドアロンUIライブラリに変換します。あなたのコードはウィジェットツリーを構築し、コールバックを処理します。レイアウト、入力、描画、表示はすべて高速なネイティブコードで、CPUまたはGPU上で行われます。
BUIの中核はキットです。これはCで書かれた小さなランタイムです。キットはすべてのウィジェットを1つのツリーに保持し、それらをレイアウトし、マウスとキーボードを処理し、Blenderと同じように描画します。描画コードはBlender自身のウィジェットコードのCポートであり、インタラクションはBlenderのルールに従います。キットの上にはバインディングがあります。これは、Python、Rust、JavaScript、C++、Dear ImGuiがキットと通信できるようにする薄いレイヤーです。
BUIではないもの:
- Blenderではありません。UIコードに必要なBlenderの部品を含み、それ自体で構築されています。Blenderをインストールする必要はなく、使用するためにBlenderを知っている必要もありません。
- ブラウザではありません。RustとJavaScript側はHTMLとCSSをUI言語として使用しますが、ブラウザエンジン、ウェブビュー、ネットワークはありません。
- 再考案ではありません。ウィジェット描画はBlenderの
interface_widgets.ccからポートされ、Dear ImGuiサポートは実際のDear ImGuiを実行します。
2. BUIが存在する理由
Blenderのインターフェースは、その感触で有名です。数値フィールドを押してドラッグすると、カーソルが消え、値が手に吸い付くように滑り、画面の端に到達することはありません。フィールドに2*piと入力すると、それは機能します。メニューに「ad cu」と入力すると、「Add Cube」が見つかります。何百万ものアーティストがこれらの習慣を手にしています。
そのインターフェースは高速で倹約的でもあります。変更された部分のみを再描画し、何も変更がない場合はスリープし、ミリ秒単位で起動します。BUIは、あらゆる言語のあらゆるアプリがこれら両方を持つことができるように存在します:Blenderの感触とBlenderの効率。
3. 誰のためのものか
- tkinterアプリを構築していて、1998年風に見えるのを避けたい場合。BUI上で、変更なしで実行してください。
- すでにBlenderを知っているアーティスト向けのツールを構築している場合。彼らの手に期待されるパネル、スライダー、ショートカットを提供してください。
- RustまたはReactを書いていて、ブラウザを配布せずにネイティブデスクトップUIが必要な場合。
- Dear ImGuiを使用しており、Blenderのように見え、感じられるようにしたい場合。ビルドフラグ1つで。
- UIツールキットの仕組みに興味がある場合。ソースは読みやすく、コンセプトは平易な言葉で説明されています。
4. 多様な入り口
BUIは多くの方法で駆動できます。それらはすべて同じCランタイムを共有するため、すべて同じウィジェットとインタラクションを取得します。
| あなたが書くもの | あなたが得るもの | ステータス |
|---|---|---|
| tkinter コード、既存のプログラムさえも変更なし | Blender風アプリ;すべてのtkinterおよびttk API | 完了 |
Qt風 Python (QWidget, レイアウト, clicked.connect) | Qtウィジェットの共通サブセット | 部分的 |
Blenderコンポーネント (Panel, NumberSlider, PieMenu、ノードエディタ...) | 45個のネイティブBlenderウィジェットとエディタ、Pythonから;そのうち10個はRustとJavaScriptからも | 完了 |
Rust:HTML + CSS + Tailwind、HTML風マークアップ (rsx! / view!)、フック、またはgpui / zopra構文 | ウェブ風フレームワーク:ブラウザのHTML風に見えるHTML、styledでBlenderのルック、Blenderコンポーネント(<NumberSlider>, <Button>...) | 動作中 |
| JavaScript / React Node.jsまたはBun上:DOM風APIまたはJSX | 同じエンジンとコンポーネントをネイティブウィンドウで、napi-rs経由で;Reactのフックはシグナルでバックアップ | 動作中 |
| Dear ImGui C++、C、Python、またはRustから | BlenderテーマのBUIウィンドウ上の実際のDear ImGui、またはImGuiのウィジェットがBlenderのウィジェットであるビルド | 動作中 |
C (BUI_kit.h) | キット自体:ノード、ウィジェット、ウィンドウ | 動作中 |
| MyGo | MyGo | 未対応(近日公開) |
どれを選ぶか迷っていますか?すでにコードがある場合は、それに一致する行を使用してください。ゼロから始める場合は、PythonではBlenderコンポーネントが最も親しみやすいです。
5. 主な機能
Blenderのウィジェットとインタラクション
- 隠された連続カーソルでドラッグする数値フィールド:Shiftで精度、Ctrlでスナップ。
- 数値フィールドでの計算、Blender独自の式評価器を使用:
2*pi、min(4, 3)、round(1.7)、x if c else y。 - Ctrl+ホイールで値をステップ、Ctrl+C / Ctrl+Vで値をコピー/ペースト、Backspaceでリセット。
- チェックボックスをドラッグしてすべて設定。
- プレス・ドラッグ・リリースメニュー、パイメニュー、Blenderのあいまいメニュー検索:「ad cu」で「Add Cube」を検索、タイポは許容、最近の選択肢が最初にランク付け。
- すべてのUI編集でCtrl+Z / Ctrl+Shift+Z、テキストフィールド内での入力中も;Tabでフィールド間を移動。
- Blenderの浮動小数点表示精度、複数フィールドの垂直ドラッグ、Blenderのアニメーションで折りたたまれるパネル。
- HSVカラーホイール、カラーランプ、カーブ、ツリー、リスト、テキストエリア、キャンバス、ノードエディタ、Blenderのファイルブラウザ。
- Blenderのダークとライトテーマ、実行時に切り替え可能。
Python、4つの方法で
- tkinter:tkinterとttkの公開名すべて7,846個。9つの実際のプログラムが標準ライブラリとBUIで同一に動作します。
- Qt構文:ウィジェット、レイアウト、シグナル、
QPainter、メニュー、タイマー。 - コンポーネント:45個のBlenderウィジェット、エディタ、テンプレート。
- Dear ImGui:
from blenderui import imgui、pyimgui風。 - 1回の
pip installで、QtやTkのウィジェット描画は不要です。
Rust:ネイティブなウェブプラットフォーム
- すべてのHTML要素113個をブラウザのように描画;
styledは任意のサブツリーにBlenderのルックを与え、Blenderコンポーネント(<NumberSlider>,<Button>,<ColorSwatch>...)は実際のBlenderウィジェットです。 - モダンCSS:flexbox、名前付きエリアを持つgrid、テーブル、
calc()とすべての数学関数、var()、oklch()とcolor-mix()、:has()、ネスト、@layer、@media範囲、@container、::before/::after、カウンター。 - エフェクトとモーション:
@keyframesアニメーションとトランジション、フィルター、backdrop-filter、ブレンドモード、clip-path、マスク、2Dトランスフォーム、border-image。 - Tailwind CSS v4:`class=