hibitの技術系メモ

数学とか3Dとか翻訳とか

Blender触ったことないけど販売モデルを巨乳に改変したいという人へ

Blenderのバージョンはv2.79です

プロローグ

(遠慮がちに扉を開ける音)

―――おや、見ない顔だな。どうしてこんな辺鄙なところまで。

 なるほど、最近VRCを始めて、トラストも解除されて、アバターも買ったが、そのままだと味気ないから改変したい、と。ならgimpをDLしてテクスチャの色でも変えたらどうだ。何、それだけじゃ嫌だ? メッシュにも手を加えたい? おいおい、勘弁しろよ。ニ面図はおろか、イメージイラストも持たずに何を言ってやがる。まったく、オレはエスパーじゃ…

 ……! そういうことか。わかったぞ、お前さんのやりたいこと。

 アバターを巨乳に改変することでしか救われない魂がある。お前さんも”そう”だろ。目を見れば理解る。いいぜ、付き合ってやるぜ。

ボーンを拡大する

 こいつが一番手っ取り早い。胸ボーンが設定されていることが条件となるが、販売されているアバターならまあ大丈夫と考えて良いだろう。手順は簡単。Unityのボーンヒエラルキーにある胸ボーンを選んで

f:id:hibit_at:20180913193239p:plain

 インスペクタにあるTransformからScaleを変えて、

f:id:hibit_at:20180913193346p:plain

 これでOK。簡単だろう?

 ……納得してないって顔してるな。まあ無理もない。これはただボーンに対応している頂点を一律に拡大しているだけだからな。モデラーが想定しているサイズでの形をそのまま機械的に拡大すれば、拡大率が上げれば上がるほど不自然になっていくのは当然だ。ダイナミックボーンで揺らしても不自然になることが多いしな。

 これで満足できなけりゃ、いよいよBlenderの出番だ。その覚悟がお前さんにあるのかい……と言いたいところだが、その様子じゃ確認の必要はなさそうだな。

プロポーショナル編集

 いいか、お前さんが使う武器は1つだけだ。プロポーショナル編集、それがそいつの名前さ。だが、Blenderを触ったこともないお前さんのために、それに至るまでの道のりをイチから説明してやろうじゃねえか。まずBlenderを起動しろ。

f:id:hibit_at:20180913193818p:plain

 無粋なキューブはXキー(またはdelキー)で削除だ。

f:id:hibit_at:20180913193944p:plain

 改変したいモデルを「ファイル」→「インポート」→「FBX」。

f:id:hibit_at:20180913194323p:plain

 かわいそうだが脱いでもらおうか。とは言っても非表示にするだけだ。上図のマークをクリックで余計なオブジェクトを非表示。

f:id:hibit_at:20180913195043p:plain

 さすがに脱がせたあとの姿をソリッド表示する訳にはいかねえ。こんな場末でも一応パブリックなスペースだからな。こっから先はワイヤーフレーム表示+適宜隠蔽でいかせてもらうぜ(販売アバターワイヤーフレームを全部出すのも望ましくないしな)。上図のマークをクリックして「ワイヤーフレーム」だ。(Zキーでも切り替えられる。こっちの方が圧倒的に速いな)

f:id:hibit_at:20180913195546p:plain

 次は「オブジェクトモード」を「編集モード」に。ショートカットキーはTabキー。Blenderで最も使うショートカットキーのひとつだろうな。

f:id:hibit_at:20180913195742p:plain

 そしたらここのチェックもつけておけ。左右対称に編集するモードだ。アシンメトリーなソレが趣味なら敢えて勧めはしないが……普通は左右対称だろうな、お前さんが作りたいソレは。

f:id:hibit_at:20180913200010p:plain

 選択モードは「頂点」に。ショートカットキーのCtrl + Tabキーでも切り替えられる。これも良く使うから覚えておいた方がいいだろう。

f:id:hibit_at:20180913200237p:plain

 下準備もそろそろ終わりだ。5キーを押してから、1,3,7キーで視点を切り替えられる。モデルの向こう側にタテヨコのグリッドが見えたらOKだ。そうじゃなければもう一回5キーを押せ。視点は基本的にこの3種類で大丈夫だ。と言うか、この3種類しか使うなとさえ言っていい。変にナナメの視点で操作をするとバランスが崩れる。

f:id:hibit_at:20180913200449p:plain

 ようやくここでプロポーショナル編集の出番だ。上図のマークをクリックして「有効化」にしろ。…っと、ひとつ大事なことを伝え忘れていた。

 Blenderのデフォルトでは選択が「右クリック」だ。まったく、なんでこんな意味不明な独特なUIにしたんだろうな。それで構わねえならそれでもいいが、変えたいなら「ファイル」→「ユーザー設定」の後に「入力」→「左」だな。

f:id:hibit_at:20180916011132p:plain

f:id:hibit_at:20180916011209p:plain

 さて、気を取り直して好きな頂点を選んでからGキーで移動して、マウスのスクロールをグリグリすると……

f:id:hibit_at:20180913201442g:plain

 マーベラス! ここまで来たらお前さんは、自分が”造る”力のカケラを手に入れたと実感しているはずだ。ゴールはすぐそこだ。操作をミスった時はCtrl + Z、戻した操作をやっぱりやり直したい時はCtrl + Shift + Zだ。アンドゥ履歴は選択箇所も含めて記録されるから、お前の操作は必ず無駄にならない。焦る必要はない。幸運を祈ってるぜ。

エピローグ

―――おや、いらっしゃい。

 ああ、私先週からここのマスターを任されました者です。お客さん、いいアバターですねえ。デカいし、その上破綻がない。揺れ方から察するし、返しボーンを入れておられますね。丁寧にウェイトを塗られたこともわかります。こだわりを感じますよ。それでご注文は……え、ああ、あの人ですか。

 言いづらいんですけど……あの人ね、BANされたんですよ。

 使っているアバターが露骨すぎてガイドラインに抵触しちゃいましてね。命あっての物種じゃないですけど、アカウントあってのVRCですから。お客さんもその、やり過ぎには気をつけてくださいね。ああ、すいません、本当は初対面のお客さんに言うことじゃないんだけど、お客さんはなんだか初めてって感じがしなくて……なんだか、あの人に似てるんですよ。なんでかな、お客さんは落ち着いた方だし、あの人とはむしろ正反対な感じなのに。でも何か、魂って言うのかな、それが似てるんですよ。

 ほら、アバターを巨乳に改変することでしか救われない人っているじゃないですか。あなたも”そう”でしょう。モデルを見ればわかりますよ。


・Live streaming, advertising or publicly sharing content that is sexually explicit in nature or simulates sex acts is not permitted. Doing so may result in moderation action being taken against your account up to (but not limited to) banning of the offending user account depending on the severity of the act in question.
・Pornography & nudity is not allowed.

VRChat Community Guideline

(以下:筆者翻訳)
・明白に性的である、または性的な行動を模したコンテンツをライブストリーミング、宣伝または公共にシェアすることは許されません。それらをすることは、あなたのアカウントに対するモデレーションとして(ここに書かれているような行動の酷さによっては)不快なアカウントにバン(それに限りませんが)という結果をもたらしかねません。
・ポルノと裸は許されません。

めんどくさいダイナミックボーンを効率的に入れる方法

※ダイナミックボーンは有料のアセットです。Unity Asset Storeにて$20(価格は変動することがあります)で購入できます。

 髪や服などの揺れものを表現したい時に、ダイナミックボーンは強力な武器となります。しかし、ボーンが増えてくるとそれにいちいち対応させるのは面倒な作業になってきます。そういった時に、ダイナミックボーンの性質について以下の3点を知っていると効率的に作業できます。

1 子ボーンのすべてに影響が及ぶ

 アバターのボーンヒエラルキー(bone hierarchy)は


hips(尻) → upperleg(太もも)→ 足の指先まで

spine(脊椎)

chest(腰) → shoulder(肩) → 腕の指先まで

neck(首)

head(頭)

髪にボーンが入っていれば以降も続く


 という構造になっています。そして、上流のボーンにダイナミックボーンを適用すれば下流のボーンにもすべて適用されるという性質があります。例えばspineにダイナミックボーンを入れた場合、上半身全体にダイナミックボーンが適用され、

f:id:hibit_at:20180911201514g:plain

 ゴム人間か!

 となります。  なんだか、

f:id:hibit_at:20180911200937p:plain

(from Wikipeida(CC BY-SA 3.0))

 生物の系統樹における単系統の話を思い出すのは私だけでしょうか。

 これを利用すれば、髪のボーンが20個ちかくあるシャーロちゃんのような子でも、headにダイナミックボーンを入れるだけでいいということがわかります。

f:id:hibit_at:20180911202309p:plain

 特にrootの指定やコライダーの設定が絡んでくると時短効果が高いです。ただこれはデメリットにもなって、全て同じパラメータが設定されてしまいます。実用上それで困ることはあまりないと思いますが、髪のボーン1個1個に異なるパラメータやコライダーを設定したい! というこだわりを持つ方は、やはり丁寧にダイナミックボーンを適用するしかなさそうです。

 ここで「headにダイナミックボーンを入れたら、髪だけじゃなく顔自身も揺れてしまうんじゃないの?」と思った方は鋭い。なぜかheadは固定されています。Blenderのポーズモードだと普通に回転するので、Unity上の制御のようです。恥ずかしながら理由は不明……。もちろんneckにダイナミックボーンを入れたら顔がぐわんぐわん揺れてホラーな画になりますよ。

2 適用除外(exclusion)を指定できる。

f:id:hibit_at:20180911204032p:plain

 ダイナミックボーンには適用除外(exclusion)を指定できます。これを使えば、


あるボーン

(この間のボーンはすべてダイナミックボーンが適用される)

あるボーン

(ここから先は適用されない)


 という制御が可能になります。例えばシャーロちゃんは、hipsの直下に20個近いスカートのボーンがあります。hipsにダイナミックボーンを入れればこれらのボーンすべてを揺らすことができますが、巻き添えで全身が揺れてしまいます。そこで、spineとupperleg(右と左の両方)にexclusionを指定すれば、揺れの巻き添えを「止め」ることができます。

3 どこのボーン(というかオブジェクト全般)に入れてもいい

 これは私も実験していて衝撃だったのですが、別に髪を揺らしたいから髪にダイナミックボーンを入れる必要はありません。ダイナミックボーンが適用されるかは「root」に何を指定されるかだけで決まり、全然関係ないキューブオブジェクトにコンポーネントを入れても、そのrootにあるボーンを指定すればそのボーン(及び下流のボーン)は揺れます。ひとつひとつの髪にすべてコンポーネントを入れていたあの苦労はなんだったのか……。

 まあ、わかりやすさもかねてhipsに入れるのがいいと思います。

(2018/09/13追記。無関係なゲームオブジェクトにいれると揺れ方が変になることがあるようです)

スマートなダイナミックボーンの入れ方の例

 今までの話をまとめると、

f:id:hibit_at:20180911205014p:plain

 これだけの設定で、

f:id:hibit_at:20180911205234g:plain

 この揺れが再現できるということですね。

 余談ですが、ボーンのヒエラルキーが頭やつま先からでなく、尻から始まるのはなにか変な感じがするでしょうか。しかし、すべての動物の受精卵の分化は肛門(または総排出腔)から始まることを考えると、ボーンヒエラルキーがhipsから始まっていることは理にかなっていると言えなくもないかもしれない可能性を否定できない。

..It is not birth, marriage or death, but gastrulation which is truly the most important time in your life.

Lewis Wolpert, 1986

…人生において真に最も重要な時は、誕生でも結婚でも死でもない。それは原腸形成である。

ルイス・ウォルパート 1986

 皆様もダイナミックボーンの性質を良く理解して、良き揺れものライフを。

クロースコンポーネントが爆発する/縮む時の対処法

クロースコンポーネント爆発事件

 アバター制作において、時にボーンだけでは表現が難しい場合があります。服がたるむ様子などがその代表的な例でしょう。そのような時にUnityのクロースコンポーネントは強力な武器になります。

f:id:hibit_at:20180910205656p:plain

 使い方も簡単です。このようにピン止め部分を指定して、コライダーを別途指定して…

f:id:hibit_at:20180910204228g:plain

 爆発しとるやないか!

 なぜこのようなことが起こってしまったのでしょうか。

解決策

f:id:hibit_at:20180910205800p:plain

 結論から言うと、Blender(Maya使ったことないですけど、多分Mayaでも出来るでしょう)で「回転と拡縮の適用」をすれば直ります。ある程度実験した結果、どうやらボーンヒエラルキーの中にオブジェクトが位置付けられると、強制的に位置やスケールが指定されてしまうようです。普段は「元の拡大率」が表に出ることはないのですが、なぜかクロースコンポーネントを適用した時だけ元の拡大率に戻ろうとするムーブをしてしまうみたいです。私は経験がないですが、恐らく同様の理由で「縮む」時もこの対策が有効かと思われます。

f:id:hibit_at:20180910210409g:plain

 和解した! 俺はクロースと和解したぞ!

補足

 Blenderで編集を加えた時はUnity上ではなく、エクスプローラ上でファイルを置き換えると、Unity上でやった操作を残したままfbxファイルだけ置き換えることができます。初心者の頃はいちいちPrefabを消して一から作り直してました……。

f:id:hibit_at:20180910210512p:plain

 皆様も良きUnityライフを。

Substance Painter(2018)を用いたみたま式肌ベイク法

 人物の3Dモデルを作るにあたって、肌のテクスチャを描くのはめんどくさい作業です。そんな時には、ゆきのみたまさんがあげていた、サブスタ(Substance Painter)を使った方法が役に立つのですが、

 自分が使っているバージョンと違っているせいか、用語が違っていたりするので解説・注釈をしていきます。同じ症状に陥っている方のために、注釈や操作ガイドをまとめておくことにしました。なお、自分が使っているSubstance Painterのバージョンは2018です。

 まず、テクスチャを塗るサンプルを用意します。

f:id:hibit_at:20180908191904p:plain  サブディビジョンをかけたスザンヌちゃんです。サブスタは適当にUV開いてもなんとかなるのでUV展開もスマートUV展開で一発です。この手抜きが後で悲劇を生むことになるとは知る由もなかった……(伏線)。

 サブスタを開きます。

f:id:hibit_at:20180908192326p:plain  サブスタを初めて触った人はひょっとしたらここで戸惑うかもしれないので注釈ですが、サブスタでは、右の赤丸部分にあるボタンでウィンドウを管理します(ツールバーからでもできまけど)。

  • Texture Set List
  • Texture Set Settings
  • レイヤ(なぜこれだけカタカナ?)
  • Properties
  • Display Settings
  • Shader Settings
  • History

 の7種類ありますが、使うのは

  • レイヤ
  • Properties

 の2種類だけですので、削ったり足したりして今のうちに整理しておきましょう。

f:id:hibit_at:20180908193028p:plain  ここのボタンでアンロック!

f:id:hibit_at:20180908193120p:plain  こうなればよろし。

 スザンヌを読み込みます。

f:id:hibit_at:20180908193431p:plain  fbxをドラッグ&ドロップで読み込みます。「プロジェクト構成」というメッセージボックスが出てきますが、何も考えずにOK押して大丈夫です。そしてまた例によって赤丸部分に注目してほしいのですが、今はここが「マテリアル」になっていると思います。これは「ベースカラー+ラフネス+ノーマル+ハイト」のチャンネルを足して物理的な演算をした後のプレビューになります。Unityに持っていく場合、例えばStandardシェーダーで各チャンネルを使うような場合ならこのプレビューを使う必要はありますが、トゥーン系シェーダーでテクスチャ1枚だけ使う場合はむしろ邪魔です。ベースカラーだけ分かればいいので、この部分を「Base Color」にします。

f:id:hibit_at:20180908194151p:plain

 次はベイクします。さっき「レイヤ」と「Properties」しか使わないと言ったな、アレは嘘だ。一回だけ「Texture Set Settings」を使います。

f:id:hibit_at:20180908201027p:plain  これで「Bake Mesh Maps」を押します。いろいろメッセージボックスが出てきますが、脳死状態でOKを押し続けていれば大丈夫です。

 次は塗りつぶしレイヤを追加します。

f:id:hibit_at:20180908201157p:plain

 次はそのレイヤにフィルタを加えます。

f:id:hibit_at:20180908201430p:plain  後はみたまさんの動画通りに

  • Baked Lighting
  • Histgram Scan
  • HSL Perceptive(みたまさんの動画だと「HLS」になっているので、注意!)
  • Gradient

 を加えれば大丈夫です。

 Gradientについて注釈を加えると、初期状態だと

f:id:hibit_at:20180908201731p:plain  こんな感じになって3色指定しなければいけない状態になってると思います。「みたまさんの動画だと2色だったのになぜ?」となるかもしれませんが、これは色の下にあるバー(Color 1 Positionとか)が0, 0.5, 1という並びになっていることが原因で、要はこの位置でグラデーションを区切っている訳です。2色にしたいならColor1のポジションを0、Color2のポジションを1にすれば大丈夫です。奇抜な色にしたいとかがない限り、2色で十分だと思います。さあこれで大丈夫、最後の仕上げにGradientのPropertiesの中にある「Input Transformation」から「Blur Intensity」を調整して影をぼかして…

f:id:hibit_at:20180908202138p:plain  グラデーションが途切れ途切れになっとるやないかワレ!

 どうやら、グラデーションの境目にブラーをかけるとUVマップの継ぎ目で途切れ途切れになってしまうという仕様のようです。南無。

解決策1

 綺麗にシームを入れましょう。以上。

解決策2

 Histgram Scanフィルターではこのような症状は起こらないので、ここの「Contrast」の項目でブラーをかけるのもアリです。

f:id:hibit_at:20180908202617p:plain

解決策2の補足

「クソUV」と名高いライトマップで実験してみましたが、ライトマップだとこの方法でもさすがにダメなようです。

f:id:hibit_at:20180908202909p:plain

 皆さんもサブスタを駆使してよい3Dライフを。