もとこ
白猫
  • New SBS
    ミスった
  • New SBS
    ミスった
  • New SBS
    とりあえず,今まで通り,モーションで動かしながら,スプリングボーンの調整を行う機能はいれるとして,新しく
    ・WebGPUを使ってVRM1.0に対応
     クジラに乗るスクリプトで一応出来てるから,なんとかなる?
    ・モーションのVRMA対応
     まぁ,これは当然必須ですね
    ・重なってるスプリングボーンのマージ
     NEOKETスクリプトと同じ機能が使えるかな?
     ボーンを削除するとクリーチャーが生まれることがあるので
     普通のボーンに変換しちゃう方向で...
    ・コライダーの追加・移動・削除
     これは,なんとなくできそうな気がします(できるとは言ってない)
     カプセルコライダーにも対応しないといけない?
     VRM0.0でエクスポートするときは球コライダーに変換すればいいか?
    ・ボーンの追加・移動・削除
     ボーンを追加・移動するとウエイトも買えないとだめですよね
     そしてボーン削除は,クリーチャーが生まれませんように
  • UVから3D座標を求める
    let foundPosition = null;
    // 三角形ごとにUV座標をチェック
    for (let i = 0; i < indexAttribute.count; i += 3) {
    const uv1 = new THREE.Vector2().fromBufferAttribute(uvAttribute, indexAttribute.getX(i));
    const uv2 = new THREE.Vector2().fromBufferAttribute(uvAttribute, indexAttribute.getX(i + 1));
    const uv3 = new THREE.Vector2().fromBufferAttribute(uvAttribute, indexAttribute.getX(i + 2));
    // THREE.Triangleを使ってUV座標の三角形内判定を行う
    const uvTriangle = new THREE.Triangle(uv1, uv2, uv3);
    if (uvTriangle.containsPoint(targetUV)) {
    const pos1 = new THREE.Vector3().fromBufferAttribute(positionAttribute, indexAttribute.getX(i));
    const pos2 = new THREE.Vector3().fromBufferAttribute(positionAttribute, indexAttribute.getX(i + 1));
    const pos3 = new THREE.Vector3().fromBufferAttribute(positionAttribute, indexAttribute.getX(i + 2));
    // `getInterpolation`メソッドを使用して3D座標を補間
    foundPosition = uvTriangle.getInterpolation(targetUV, pos1, pos2, pos3, new THREE.Vector3());
    break;
    }
    }
  • UVから3D座標を求める
    New text... let foundPosition = null;
    // 三角形ごとにUV座標をチェック
    for (let i = 0; i < indexAttribute.count; i += 3) {
    const uv1 = new THREE.Vector2().fromBufferAttribute(uvAttribute, indexAttribute.getX(i));
    const uv2 = new THREE.Vector2().fromBufferAttribute(uvAttribute, indexAttribute.getX(i + 1));
    const uv3 = new THREE.Vector2().fromBufferAttribute(uvAttribute, indexAttribute.getX(i + 2));
    // THREE.Triangleを使ってUV座標の三角形内判定を行う
    const uvTriangle = new THREE.Triangle(uv1, uv2, uv3);
    if (uvTriangle.containsPoint(targetUV)) {
    const pos1 = new THREE.Vector3().fromBufferAttribute(positionAttribute, indexAttribute.getX(i));
    const pos2 = new THREE.Vector3().fromBufferAttribute(positionAttribute, indexAttribute.getX(i + 1));
    const pos3 = new THREE.Vector3().fromBufferAttribute(positionAttribute, indexAttribute.getX(i + 2));
    // `getInterpolation`メソッドを使用して3D座標を補間
    foundPosition = uvTriangle.getInterpolation(targetUV, pos1, pos2, pos3, new THREE.Vector3());
    break;
    }
    }
  • UVから3D座標を求める
    New text... let foundPosition = null;

    // 三角形ごとにUV座標をチェック
    for (let i = 0; i < indexAttribute.count; i += 3) {
    const uv1 = new THREE.Vector2().fromBufferAttribute(uvAttribute, indexAttribute.getX(i));
    const uv2 = new THREE.Vector2().fromBufferAttribute(uvAttribute, indexAttribute.getX(i + 1));
    const uv3 = new THREE.Vector2().fromBufferAttribute(uvAttribute, indexAttribute.getX(i + 2));

    // THREE.Triangleを使ってUV座標の三角形内判定を行う
    const uvTriangle = new THREE.Triangle(uv1, uv2, uv3);
    if (uvTriangle.containsPoint(targetUV)) {
    const pos1 = new THREE.Vector3().fromBufferAttribute(positionAttribute, indexAttribute.getX(i));
    const pos2 = new THREE.Vector3().fromBufferAttribute(positionAttribute, indexAttribute.getX(i + 1));
    const pos3 = new THREE.Vector3().fromBufferAttribute(positionAttribute, indexAttribute.getX(i + 2));

    // `getInterpolation`メソッドを使用して3D座標を補間
    foundPosition = uvTriangle.getInterpolation(targetUV, pos1, pos2, pos3, new THREE.Vector3());

    break;
    }
    }
  • CatmullRomCurve3
    3Dのスプラインカーブが引けるらしい。
    CatmullRomCurve3
  • Material設定
    マテリアルの設定JSON => Three.js
    _alphaTest: 0.5 => _alphaTest: 0.5
    => materialProperties.floatProperties._Cutoff: 0.5


    transparent: false => alphaMode: "MASK"
    => materialProperties.floatProperties._BlendMode: 1
    side: 2 => doubleSided: true
    => materialProperties.floatProperties._CullMode: 0


    name: "N00_004_01_Shoes_01_CLOTH (Instance)" => name: "N00_004_01_Shoes_01_CLOTH (Instance)"
    => materialProperties.name: "N00_004_01_Shoes_01_CLOTH (Instance)"



    uvAnimationRotationSpeedFactor: 0
    => materialProperties.floatProperties._UvAnimRotation: 0
    uvAnimationScrollXSpeedFactor: 0
    => materialProperties.floatProperties._UvAnimScrollX: 0
    uvAnimationScrollYSpeedFactor: -0
    => materialProperties.floatProperties._UvAnimScrollY: 0
  • New subject
    New text...
  • Blenderセットアップ
    Blenderは Download blender.org から
    VRM Add-on for BlenderはVRM Add-on for Blenderから
    VRM Add-onをアップデートするには,
    無効化→削除→インストール→有効化
    Githubのリリースノートのファイルはバージョン番号がついているので,こっちをインストールしておくと全バージョン残しておいて有効/無効で切り替えることができそう。
  • 髪型アイテムバージョンアップ案
    ・選択アイテムの表示方法 黄色くなるやつ
    ・FBXモーション VRMAにしろって話も
    ・ボタンのアイコン化 押しやすくする
    ・メッシュ一覧を狭くする
    ・再度クリックしても選択済みアイテムが外れないようにする?
    あれか、追加選択が標準で、解除ボタン押してクリックで選択解除とか。シフト+クリックもいいかも
  • A VRMお人形遊びのポーズ画像をUnityで使う方法
  • スプリングボーンの構成
    VRM0.0は,vrm.json.extensions.VRM の下に"secondaryAnimation": {
    "boneGroups": [{
    "comment": "Bust",
    "bones": [5, 7], "colliderGroups": [3, 4, 5],
    "dragForce": 0.05, "stiffiness": 0.75,
    "gravityPower": 0, "gravityDir": {"x": 0, "y": -1, "z": 0},
    "hitRadius": 0.00314638764, "center": 0
    }],
    "colliderGroups": [{
    "colliders": [{
    "offset": {"x": 0, "y": 0, "z": 0},
    "radius": 0.114335567
    }],
    "node": 2
    }]
    }

    colliderGroupsを設定する→boneGroupsにcolliderGroupsを登録する


    VRM1.0は,vrm.json.extensions.VRMC_springBone の下に

    "VRMC_springBone": {
    "specVersion": "1.0",
    "colliders": [{
    "node": 2,
    "shape": {"sphere": {"offset": [0, 0, 0], "radius": 0.114335567}}
    }],
    "colliderGroups": [{
    "colliders": [0, 1, 2]
    }],
    "springs": [{
    "name": "Bust",
    colliderGroups[0, 1, 2],
    "joints": [{
    "node": 5,
    "hitRadius": 0.00314638764,
    "stiffness": 0.75, "dragForce": 0.05,
    "gravityPower": 0, "gravityDir": [0, -1, 0]
    }, {"node": 136}]
    }]
    }
  • ポーズ画像ファイルの読み方分かった
  • MMDの長さの単位
    PMXの長さの単位は0.126cmセンターが8っていうのは、1mくらい
    そんなもんかな
  • フリー・無料イラスト
    素材っちのフリー素材、イラストはすべてが無料♪ 商用もロイヤリティフリー!!
  • Face Cap.
    顔をキャプチャするiOSアプリ Face Cap.
  • Clusterでアウトラインが消し飛ぶ現象
  • VRoidのテクスチャ
    VRoidはアルファ0.5でカットされるって思ってる人多いと思うけど、それは髪と衣装の話で、顔は結構透過テクスチャを使ってる。Iris, highlight, eyeline, brow, eyelashもかな?このうちIrisとeyeline はQueueが3000だから同じマテリアルが使える
  • VRoidのアトラス化
    テクスチャを見る限り,顔のテクスチャはそのままじゃなくて2倍のサイズでくっつけただけみたい。体の方は,縦横1/2のサイズ,ノーマルマップはさらに1/2になっているみたい。ノーマル使ってないところ多いんだから,もったいない気がします。
  • NEOKETアバタの制限
    フォーマット (VRM 0.0のみ)
    年齢制限 (全年齢のみ):
    ポリゴン数 (70000以下):
    メッシュ数 (16以下):
    サブメッシュ数 (32以下):
    マテリアル数 (16以下):
    テクスチャ数 (16以下):
    ボーン数 (200以下):
    ブレンドシェイプ数 (128以下):
    バウンディングボックス (2.5m×2.5m×2.5m以下):
  • 透過画像の設定方法
    とっても詳しく書いてあったデザイナーのための半透明の描画順
  • VRoid Hubの使い方
    まとめるほどのことないかもだけどVRoid Hubの項目案
    • VRoid Hubでできること
    • ユーザー登録
    • 見る
      • トップページ
      • モデル
      • 写真・動画
    • モデルのアップロード
    • 写真・動画の公開
  • MToon透過設定の差分 VRM0.0
    "alphaMode": "MASK",
    "alphaMode": "BLEND",
    "renderQueue": 2450,
    "renderQueue": 3000

    "tagMap": {
    "RenderType": "TransparentCutout"
    }
    "tagMap": {
    "RenderType": "Transparent"
    }
    "keywordMap": {
    "MTOON_OUTLINE_COLOR_FIXED": true,
    "MTOON_OUTLINE_WIDTH_WORLD": true,
    "_ALPHATEST_ON": true,
    },
    "keywordMap": {
    "_ALPHABLEND_ON": true,
    "_ALPHAPREMULTIPLY_ON": false,
    "MTOON_DEBUG_NORMAL": false,
    "MTOON_DEBUG_LITSHADERATE": false,
    }
    "floatProperties": {
    "_BlendMode": 1,
    "_SrcBlend": 1,
    "_DstBlend": 0,
    "_ZWrite": 1,
    "_AlphaToMask": 1
    }
    "floatProperties": {
    "_BlendMode": 2,
    "_SrcBlend": 5,
    "_DstBlend": 10,
    "_ZWrite": 0,
    }

    "vectorProperties": {
    "_ShadingGradeTexture": [
    0,
    0,
    1,
    1
    ],
    "_RimTexture": [
    0,
    0,
    1,
    1
    ],
    "_OutlineWidthTexture": [
    0,
    0,
    1,
    1
    ],
    "_ReceiveShadowTexture": [
    0,
    0,
    1,
    1
    ],
    "_UvAnimMaskTexture": [
    0,
    0,
    1,
    1
    ]
    }
    "vectorProperties": {
    }
  • uvAnimMaskの交換
    uvAnimMaskTextureを交換しても,反映できない。
    一旦VRMを作ってPreviewするとOKになった。
  • テクスチャを変えられるアプリ
  • VRMお手軽ポーズ
    VRMお手軽ポーズのポーズURLは,ポーズをリンクで送れるから便利
    写真は,けしごむさんのぐっど!ポーズ
    参考:VRoid Hubのアートワーク
  • しっぽと羽根の作り方とか
    前からまとめておこうと思ってた「しっぽの作り方・付け方」と「羽根の作り方」をやっと書きました。

2024 Ringo🍎🍎🍎, @ringo3apples, All right reserved.