HN 日本語サマリー

← 一覧へ戻る
プログラミング

BlenderのUIとランタイム:GPUIよりもはるかに高速

Blender's UI and Runtime: Much Faster Than GPUI (github.com)

148 pointsby ppmpreetham57 コメント

要約

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/) にリンクしています。

目次

パートI:ようこそ

  1. BUIとは
  2. BUIが存在する理由
  3. 誰のためのものか
  4. 多様な入り口
  5. 主な機能
  6. ギャラリー

パートII:始め方

  1. インストール
  2. 最初のアプリ:tkinter
  3. 最初のアプリ:Blenderコンポーネント
  4. 最初のアプリ:Qt構文
  5. 最初のアプリ:Rust、rsxとgpuiビルダーで
  6. 最初のアプリ:JavaScriptとReact
  7. 最初のアプリ:Dear ImGui
  8. 最初のアプリ:C

パートIII:コンセプト

  1. 仕組み
  2. Blenderのウィジェットとインタラクション
  3. 3つのルック:HTML、styled、Blenderコンポーネント
  4. CPUとGPUでのレンダリング
  5. ダメージレンダリング
  6. ウィンドウホスト
  7. テキストとフォント
  8. テーマ:ダークとライト

パートIV:言語別ガイド

  1. Python
  2. Rust
  3. JavaScriptとReact
  4. Dear ImGui
  5. Cと埋め込み
  6. ドキュメントの場所

パートV:パフォーマンス

  1. 数値を読む前に
  2. 起動時間とバッテリー
  3. フレームタイム
  4. JavaScriptとReact:起動とアニメーション
  5. ベンチマークを自分で実行する

パートVI:リファレンス

  1. プラットフォーム
  2. 環境変数
  3. ソースからのビルドとCMakeオプション
  4. カバレッジ
  5. リポジトリレイアウト
  6. 例

パートVII:プロジェクト

  1. ステータスとロードマップ
  2. FAQ
  3. 貢献と公開
  4. ライセンスとクレジット

パート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)キット自体:ノード、ウィジェット、ウィンドウ動作中
MyGoMyGo未対応(近日公開)

どれを選ぶか迷っていますか?すでにコードがある場合は、それに一致する行を使用してください。ゼロから始める場合は、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=