OxiHuman

身長・体重・筋肉・年齢・性別。5つのパラメータを動かすと、パラメトリックな人体メッシュがブラウザの中で作り直される。採寸値を入れれば、そこに近い体型を自動で探す。

入力した数値も、生成された人体メッシュも、送信されません。計算しているのはあなたのブラウザです。

書き出せる形状は、常にボディスーツのみです(顔や手の作り込み、衣装は含みません)。年齢スライダーは、このパックの下限より下げられません。どちらもエンジン自身が強制しており、ページ側で外すことはできません。

生成された人体メッシュを WebGL で描画しています。パラメータの数値は下のスライダーで確認できます。

読み込みを開始しています…

0.50
0.50
0.50
25 歳
0.50

採寸フィット

書き出し

oxihumanv— (Pure Rust, Apache-2.0)
targetwasm32-unknown-unknown
wasm size344 KB (gzip 143 KB)
頂点数—
モーフ計算—
採寸フィット—
パック—
external requests—
server round-trips0
C / C++ / Fortran0 bytes

ページ読込後の外部リクエスト: — 件

外部リクエストの計測は、wasm とパック(バイト数は上のパック行のとおり)の読み込みが完了した時点から開始しています。パラメータの変更・採寸フィット・書き出しを行っても、この数は動きません。書き出しはブラウザ内のファイル生成であり、ネットワークには出ません。

形状データは CC0-1.0(パブリックドメイン相当)の MakeHuman アセットに由来します。由来の記録: /human/PROVENANCE-EXCERPT.txt

正直な制約

制約実際に何が起きるかなぜ
パラメータは5軸だけです身長・体重・筋肉・年齢・性別以外は動かせません。髪型や顔立ちの作り込みはできませんバンドルされているパックには、この5軸に対応するマクロターゲットと採寸ターゲットしか入っていません(衣装・ポーズ・表情・テクスチャは同梱していません)
書き出せるのはボディスーツ形状のみです衣装・アクセサリ・表情つきの出力はできませんこの制限はエンジン側(書き出しの入口)で強制されており、ページ側で外す手段はありません
年齢スライダーは18歳未満を選べませんスライダーの左端が、このパックが宣言する下限(18歳)で止まります未成年の体型を生成しないための制限で、エンジン自身が下限を強制しています
採寸フィットは反復探索です既定の反復上限では「収束」に届かず、打ち切りで終わります。Δ も完全にゼロにはなりません4つの採寸目標に対して4軸のパラメータを数値的に探す非線形探索であり、閉じた式で逆算しているわけではありません。「収束」は探索が自身の許容誤差に届いたかどうかの判定であって、フィットの良し悪しではありません。反復上限を上げれば収束はしますが、実測では所要時間が約3.6倍になり、最大誤差はむしろ0.66cmから1.26cmに増えました。良し悪しは上のΔ列で読んでください
身長・体重・筋肉・性別はcm/kgの実数値ではありませんスライダーは0〜1の正規化された重みで表示されますこの4軸は形状への寄与の重みであり、エンジンが実測しない限り正直に対応するcm/kg値がありません。年齢だけは、モデルの年数への変換式が公開されているため歳数で表示しています

実装コード

// crates/human-wasm/src/engine.rs:134-142 — verbatim, the code running above
pub fn from_pack_inner(bytes: &[u8], expected_sha256_hex: &str) -> Result<Self, String> {
    crate::hash::verify_sha256(bytes, expected_sha256_hex)?;
    let inner = oxihuman_wasm::WasmEngine::new_from_core_pack_bytes(bytes)
        .map_err(|e| e.to_string())?;
    Ok(Self {
        inner,
        macro_params: [None; 5],
    })
}

これがいま上で動いているコードです。