防具をCBBE 3BBB化してみよう

体型・装備

基本の設定のままでは揺れ方がおかしいと感じる装備もあります。そこで、揺れ方をカスタマイズしてみました。

CBBE 3BA (3BBB)の登場で、CBBE SMP (3BBB)は過去のものになってしまいました。というわけで、以下の記事は古いものです。

装備の準備

今回はDX Crimson Blood Armor – SSE CBBE BodySlideで説明します。この装備はCBBEのBodySlide対応ですので、BodySlideで簡単に体型をカスタマイズできます。ただし、揺れには対応していませんので、リファレンス(素体)を入れ替えてWeightをコピーする必要があります。

まず、いつも通りにBodySlideでメッシュを生成してきちんと動作するか確認します。(体型をかえて揺らそう - CBBE編を参考のこと)

つぎに、CBBE 3BBB化して揺れるようにします。(防具をCBBE 3BBB化してみよう - 応用編(Dark Lilith Sexy Armor)を参考のこと)

そして、Outfit Studioでリファレンス(素体)の名前をCBBEからHOGEに変更します。BodySlideでメッシュを再生成して、ゲームで動作確認します。リファレンスのShape名をかえてしまったので、揺れなくなっているはずです。まだ揺れている時は何かを間違えていますので、見直してください。

HDT-SMPの設定ファイルであるCBBE.xmlをHOGE.xmlにコピーします。そしてdefaultBBPs.xmlに追記します。

こうすることで、再び揺れるようになるはずです。なんでこんな面倒なことをするのかと思うかもしれませんが、手順を間違えるとこのあともっと面倒な目に合うので、横着せず一歩ずつ進みましょう。

ちなみに名前は何でもいいのですが、CBBEで始まる名前は避けた方がいいです。どうやら前方一致で検索するみたいです。CBBE_Lowという名前にすると、HDT-SMPのDLLが読み込んでいるのがCBBE.xmlなのか、CBBE_Low.xmlなのかが分かりづらいので、ハマる可能性があります。

ツールの準備

WinMergeというファイル比較ツールを用意します。WinMergeを起動したら、メニューからファイル、新規(3ペイン)を選んで3ペイン画面にします。

こんな感じで3つのファイルを開きます。

  • CBBE SMP (3BBB)のCBBE.xml、揺れ方ノーマル
  • CBBE SMP (3BBB)のCBBE.xml、揺れ方Firmer
  • 自分で用意したHOGE.xml

こうすることで、まずノーマルとFirmerの違いがわかるので、どこをいじると揺れ方が変わるのかがある程度わかります。そして、自分がHOGE.xmlをどのように書き換えているのかもわかります。

ある程度編集したらF5でリロードすると色付けをやり直してくれるのでやりやすいです。

揺れ方を調整する

この装備は作者曰く硬いらしいので、あえて揺れないようにしてあるようです。でも、少しは揺れてほしいので、胸は控えめにしてみます。お尻は網タイツみたいで普通に揺れていいと思うので普通に揺らします。

ゲームを起動して装備したら、WinMergeに切り替えます。そしてHOGE.xmlを編集して保存したらゲームに戻り、装備を脱いですぐに着ます。これで変更点が反映されます。Skyrimをわざわざ再起動する必要はありません。

変更する時は、左右のどちらかだけを編集する方が、ゲーム内で違いをはっきりと確認できるのでオススメです。それから、キャラクターのWeightは100にしておきましょう。その方が揺れを確認しやすいです。

胸は揺れ幅を減らしたいので、linearLowerLimit要素を下げます。特にz属性が上下方向なので、これを思いっきり減らすといいです。

揺れのおさまり具合はlinearDamping要素で設定します。これはFirmerの値をそのまま使いました。お尻はFirmerをベースに、大きく揺らしてさっさと止めるようにしました。

HDT-SMPの設定例(とても古いので非推奨) (xml)

<generic-constraint bodya="L Breast01" bodyb="L Breast00">
    <frameinb>
        <basis x="0" y="0" z="0" w="1">
        <origin x="0" y="0" z="0">
    </origin></basis></frameinb>
    <uselinearreferenceframea>false</uselinearreferenceframea>
    <linearlowerlimit x="-2" y="-0.2" z="-6">
    <linearupperlimit x="1" y="0.5" z="3">
    <angularlowerlimit x="-0.05" y="0" z="-0.05">
    <angularupperlimit x="0.05" y="0" z="0">
    <linearstiffness x="900" y="900" z="1200">
    <angularstiffness x="900" y="0" z="900">
    <lineardamping x="2" y="2" z="20">
    <angulardamping x="2" y="2" z="2">
    <linearequilibrium x="0" y="0" z="0">
    <angularequilibrium x="0" y="0" z="0">
    <linearbounce x="0" y="0" z="0">
    <angularbounce x="0" y="0" z="0">
</angularbounce></linearbounce></angularequilibrium></linearequilibrium></angulardamping></lineardamping></angularstiffness></linearstiffness></angularupperlimit></angularlowerlimit></linearupperlimit></linearlowerlimit></generic-constraint>
<generic-constraint bodya="R Breast01" bodyb="R Breast00">
    <frameinb>
        <basis x="0" y="0" z="0" w="1">
        <origin x="0" y="0" z="0">
    </origin></basis></frameinb>
    <uselinearreferenceframea>false</uselinearreferenceframea>
    <linearlowerlimit x="-1" y="-0.2" z="-6">
    <linearupperlimit x="2" y="0.5" z="3">
    <angularlowerlimit x="-0.05" y="0" z="0">
    <angularupperlimit x="0.05" y="0" z="0.05">
    <linearstiffness x="900" y="900" z="1200">
    <angularstiffness x="900" y="0" z="900">
    <lineardamping x="2" y="2" z="20">
    <angulardamping x="2" y="2" z="2">
    <linearequilibrium x="0" y="0" z="0">
    <angularequilibrium x="0" y="0" z="0">
    <linearbounce x="0" y="0" z="0">
    <angularbounce x="0" y="0" z="0">
</angularbounce></linearbounce></angularequilibrium></linearequilibrium></angulardamping></lineardamping></angularstiffness></linearstiffness></angularupperlimit></angularlowerlimit></linearupperlimit></linearlowerlimit></generic-constraint>
<generic-constraint bodya="L Breast02" bodyb="L Breast01">
    <frameinb>
        <basis x="0" y="0" z="0" w="1">
        <origin x="0" y="0" z="0">
    </origin></basis></frameinb>
    <uselinearreferenceframea>false</uselinearreferenceframea>
    <linearlowerlimit x="0" y="-0.2" z="-4.5">
    <linearupperlimit x="0" y="1" z="1.2">
    <angularlowerlimit x="-0.5" y="-0.02" z="-0.3">
    <angularupperlimit x="0.1" y="0.02" z="0.1">
    <linearstiffness x="900" y="900" z="900">
    <angularstiffness x="900" y="900" z="900">
    <lineardamping x="2" y="2" z="14">
    <angulardamping x="2" y="2" z="8">
    <linearequilibrium x="0" y="0" z="-1.2">
    <angularequilibrium x="0" y="0" z="0">
    <linearbounce x="0" y="0" z="0">
    <angularbounce x="0" y="0" z="0">
</angularbounce></linearbounce></angularequilibrium></linearequilibrium></angulardamping></lineardamping></angularstiffness></linearstiffness></angularupperlimit></angularlowerlimit></linearupperlimit></linearlowerlimit></generic-constraint>
<generic-constraint bodya="R Breast02" bodyb="R Breast01">
    <frameinb>
        <basis x="0" y="0" z="0" w="1">
        <origin x="0" y="0" z="0">
    </origin></basis></frameinb>
    <uselinearreferenceframea>false</uselinearreferenceframea>
    <linearlowerlimit x="0" y="-0.2" z="-4.5">
    <linearupperlimit x="0" y="1" z="1.2">
    <angularlowerlimit x="-0.5" y="-0.02" z="-0.1">
    <angularupperlimit x="0.1" y="0.02" z="0.3">
    <linearstiffness x="900" y="900" z="900">
    <angularstiffness x="900" y="900" z="900">
    <lineardamping x="2" y="2" z="14">
    <angulardamping x="2" y="2" z="8">
    <linearequilibrium x="0" y="0" z="-1.2">
    <angularequilibrium x="0" y="0" z="0">
    <linearbounce x="0" y="0" z="0">
    <angularbounce x="0" y="0" z="0">
</angularbounce></linearbounce></angularequilibrium></linearequilibrium></angulardamping></lineardamping></angularstiffness></linearstiffness></angularupperlimit></angularlowerlimit></linearupperlimit></linearlowerlimit></generic-constraint>
<generic-constraint bodya="L Breast03" bodyb="L Breast02">
    <frameinb>
        <basis x="0" y="0" z="0" w="1">
        <origin x="0" y="0" z="0">
    </origin></basis></frameinb>
    <uselinearreferenceframea>false</uselinearreferenceframea>
    <linearlowerlimit x="-10" y="-10" z="-10">
    <linearupperlimit x="10" y="10" z="10">
    <angularlowerlimit x="-0.1" y="-0.02" z="-0.1">
    <angularupperlimit x="0.1" y="0.02" z="0.05">
    <linearstiffness x="900" y="900" z="900">
    <angularstiffness x="900" y="900" z="900">
    <lineardamping x="2" y="2" z="2">
    <angulardamping x="2" y="2" z="2">
    <linearequilibrium x="0" y="0" z="-0.8">
    <angularequilibrium x="0" y="0" z="0">
    <linearbounce x="0" y="0" z="0">
    <angularbounce x="0" y="0" z="0">
</angularbounce></linearbounce></angularequilibrium></linearequilibrium></angulardamping></lineardamping></angularstiffness></linearstiffness></angularupperlimit></angularlowerlimit></linearupperlimit></linearlowerlimit></generic-constraint>
<generic-constraint bodya="L Breast03" bodyb="L Breast01">
    <frameinb>
        <basis x="0" y="0" z="0" w="1">
        <origin x="0" y="0" z="0">
    </origin></basis></frameinb>
    <uselinearreferenceframea>false</uselinearreferenceframea>
    <linearlowerlimit x="-1" y="-0.2" z="-2">
    <linearupperlimit x="1" y="0.5" z="2">
    <angularlowerlimit x="-0.1" y="-0.02" z="-0.1">
    <angularupperlimit x="0.1" y="0.02" z="0.05">
    <linearstiffness x="900" y="900" z="900">
    <angularstiffness x="900" y="900" z="900">
    <lineardamping x="2" y="2" z="2">
    <angulardamping x="2" y="2" z="2">
    <linearequilibrium x="0" y="0" z="-0.8">
    <angularequilibrium x="0" y="0" z="0">
    <linearbounce x="0" y="0" z="0">
    <angularbounce x="0" y="0" z="0">
</angularbounce></linearbounce></angularequilibrium></linearequilibrium></angulardamping></lineardamping></angularstiffness></linearstiffness></angularupperlimit></angularlowerlimit></linearupperlimit></linearlowerlimit></generic-constraint>
<generic-constraint bodya="R Breast03" bodyb="R Breast02">
    <frameinb>
        <basis x="0" y="0" z="0" w="1">
        <origin x="0" y="0" z="0">
    </origin></basis></frameinb>
    <uselinearreferenceframea>false</uselinearreferenceframea>
    <linearlowerlimit x="-10" y="-10" z="-10">
    <linearupperlimit x="10" y="10" z="10">
    <angularlowerlimit x="-0.1" y="-0.02" z="-0.05">
    <angularupperlimit x="0.1" y="0.02" z="0.1">
    <linearstiffness x="900" y="900" z="900">
    <angularstiffness x="900" y="900" z="900">
    <lineardamping x="2" y="2" z="2">
    <angulardamping x="2" y="2" z="2">
    <linearequilibrium x="0" y="0" z="-0.8">
    <angularequilibrium x="0" y="0" z="0">
    <linearbounce x="0" y="0" z="0">
    <angularbounce x="0" y="0" z="0">
</angularbounce></linearbounce></angularequilibrium></linearequilibrium></angulardamping></lineardamping></angularstiffness></linearstiffness></angularupperlimit></angularlowerlimit></linearupperlimit></linearlowerlimit></generic-constraint>
<generic-constraint bodya="R Breast03" bodyb="R Breast01">
    <frameinb>
        <basis x="0" y="0" z="0" w="1">
        <origin x="0" y="0" z="0">
    </origin></basis></frameinb>
    <uselinearreferenceframea>false</uselinearreferenceframea>
    <linearlowerlimit x="-1" y="-0.2" z="-2">
    <linearupperlimit x="1" y="0.5" z="2">
    <angularlowerlimit x="-0.1" y="-0.02" z="-0.05">
    <angularupperlimit x="0.1" y="0.02" z="0.1">
    <linearstiffness x="900" y="900" z="900">
    <angularstiffness x="900" y="900" z="900">
    <lineardamping x="2" y="2" z="2">
    <angulardamping x="2" y="2" z="2">
    <linearequilibrium x="0" y="0" z="-0.8">
    <angularequilibrium x="0" y="0" z="0">
    <linearbounce x="0" y="0" z="0">
    <angularbounce x="0" y="0" z="0">
</angularbounce></linearbounce></angularequilibrium></linearequilibrium></angulardamping></lineardamping></angularstiffness></linearstiffness></angularupperlimit></angularlowerlimit></linearupperlimit></linearlowerlimit></generic-constraint>

理想は防具がほぼ揺れず、素体が防具からはみ出さないように揺れることなのですが、難しいですね。

タイトルとURLをコピーしました