hibitの技術系メモ

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

5次元立方体に関する数学的解説

 先日、以下のツイートがややバズりました。

 

 主にプログラミングに関する解説については、qiitaに載せましたが、

 5次元のままでは3次元で描画できないので3次元に投影する必要があります。投影の方法としてはステレオ投影が有名ですが、これだけだと1次元しか集約できないので、その他に斜投影を使います。

 の辺りは数学的な予備知識がないとサッパリだと思うので、このエントリではその辺りに解説を加えていきたいと思います。

そもそも次元とは

 ここではn次元空間に限って話そうと思います。

  • 1次元は軸が1つ → 直線
  • 2次元は軸が2つ → 平面
  • 3次元は軸が3つ → 空間

 というのは比較的理解しやすいと思いますが、じゃあその次に来る4次元とは何なのか? というのは非常に想像しづらいと思います。まず言っておかなければならないのは、

「4次元空間 = 3次元空間 + 時間」ではない

 ということです。確かに時間を加えると新たな情報の軸ができますが、それは空間と等価ではありません。あくまで擬似的な解釈です。更に5次元までいくと「5次元空間 = 3次元空間 + 時間 + 並行世界だ」という意見も見かけますが、それも間違い、というか不完全な解釈です。

 2次元の場合に落として考えるとわかりやすいと思いますが、1m*1mの正方形が1秒間存在したら「2次元空間+時間」という意味では3次元ですが、これは「立方体」と言えるでしょうか。言えないです。そもそも1m = 1sではないですし、3次元空間ならばできるはずの回転といった動作が定義できません。同様に、立法体が1秒間存在したとしても、それをもって3次元生命体である我々が「4次元立方体(八胞体、Tesseract)を見た!」とは言えません。相対性理論まで考えれば光速×時間は空間と等価になりミンコフスキー空間内での回転を考えることができますが、そういうのはおいといて)

 5次元空間はあくまで5次元の空間です。我々が普段、「空間」として3つの軸が5つに増えただけです。ただ、我々がそれを観ることはどうしても不可能です。

感じることは出来ないが、考えることはできる

 我々がありのままの多次元立方体を観るのは不可能です。あきらめましょう。

 ……というのでは悲しいので、なんとかして観る方法を考えます。

 いきなり5次元だとハードルが高いので、4次元立方体から考えます。

f:id:hibit_at:20180914191816p:plain ↑こんなやつ

 ここでも次元を落として考えましょう。3次元の物体の形状をどうにかして相手に伝えたい時に、紙に描きます。3次元立方体を描くとしたら、次のような図を描くのではないでしょうか。(そして今わたしも2次元のディスプレイに写しています)

f:id:hibit_at:20180912232659p:plain

 ここで我々は無意識に「投影(projection)」という行為を行っています。太陽の影が人間の体(3次元)を地面に影(2次元)として写すように、元の情報を「押しつぶして」次元を1つ下げているのです。では、どのように押しつぶすのか? 人間が立方体を紙に描くときは、上の図のように「いい感じの」角度で描きますが、これだと2次元人に立方体を説明するのは困難だと思います。多分、

「なんだこの歪んだ形は? これが正方形なんて信じられないよ」

 と言われると思います。これが歪んでないと感じるのは、あなたが3次元人だからです。愚かな2次元人に説明しやすくするために、もう少し「真っ直ぐ」な位置に太陽を設定するとどうでしょう。

f:id:hibit_at:20180914192434p:plain

 立方体の真上に太陽があるとします。ABCDの点は、A'B'C'D'の位置に影が落ちることがわかると思います。これを太陽の視点から見下ろすと

f:id:hibit_at:20180914193206p:plain

 こうなります。愚かな2次元人には、上の図が描かれた紙を見せながらこう説明するとしましょう。

「どうだい? A'B'C'D'は正方形、EFGHも正方形であることはわかるだろう? 本当はその周りにある4つの四角形も正方形だけど、紙に書くにはこうするしかなかったんだ。全ての辺が同じ長さで、全ての辺が直角に交わっていると言っても信じられないかな。え? 正方形の中に正方形があるじゃないかって? 説明しづらいな……まあ君ら2次元人には理解できないか」

それでは次元を1つ上げてみよう

 今度は愚かになるのは我々人間さんサイドになります。今度は4次元の図を3次元の図に投影します。とは言っても、4次元での描画は当然不可能なのでなにか方法を考えます。そこで、元々の3次元空間を圧縮して「平面」と考えると、次のような形で先程とまったく同じ投影を考えることができます。

f:id:hibit_at:20180914194948p:plain

 こうして3次元世界に投影された4次元立方体が以下の図になります。

f:id:hibit_at:20180914191816p:plain

 内側にある立方体が、上図で赤で描いた「平面」です。太陽から遠いため、その分「影」が小さいです。外側にある立方体が、上図で青で描いた「平面」です。太陽に近いため、その分「影」が大きいです。

 数式で書くとこんな感じです。(※ 4次元目をwとする)

x' = \frac{x}{2-w}
y' = \frac{y}{2-w}
z' = \frac{z}{2-w}

 四次元人(誰?)は上図の形をした立体を見せながらこう説明するでしょう。

「どうだい? 内側にあるのも立方体、外側にあるのも立方体であることはわかるだろう? 本当はその外側にある6つの立体も立方体だけど、この世界に持ってくるにはこうするしかなかったんだ。全ての辺が同じ長さで、全ての辺が直角に交わっていると言っても信じられないかな。え? 立方体の中に立方体があるじゃないかって? 説明しづらいな……まあ君ら3次元人には理解できないか」

更に次元を1つ上げるぞ

 話はこれに留まりません。我々の目的は5次元なのですから。

 今度は上の方法(ステレオ投影)は使えません。ステレオ投影を2回使ってもほとんど見た目が変わらないので意味がないからです。そこで今度は斜投影という方法を使います。と言っても、これはステレオ投影より簡単です。

f:id:hibit_at:20180914201722p:plain

 上の図もまた立方体ですが、左下の正方形が手前、右上の正方形が奥にあること、そしてナナメの成分が奥行きを表していることはすぐに分かると思います。これは「奥行きの分だけタテとヨコを足す」ことによって、立体を平面に表現しています。数式で書くとこんな感じです。

x' = x+\frac{z}{2}
y' = y+\frac{z}{2}

 ここで、

  • ステレオ投影
  • 斜投影

 という2つの方法で次元を2つ下げる方法がわかったので、これを組み合わせて

x' = \frac{x}{2-w}+\frac{v}{2}
y' = \frac{y}{2-w}+\frac{v}{2}
z' = \frac{z}{2-w}+\frac{v}{2}

 という変換により、5次元を3次元に圧縮することができます(※4,5次元目をw,vとする)。その結果できたのがこちら。

f:id:hibit_at:20180914201944p:plain

 今までの説明を踏まえると、

  • 赤色が斜投影上「手前」にある四次元立方体
  • 緑色が斜投影上「奥」にある四次元立方体

 であることが分かると思います。そして赤の「立方体」と緑の「立方体」を青い辺でつないだものもまた四次元立方体です。もちろん、全ての辺が同じ長さで、全ての辺は直角に交わっています。想像できるでしょうか?

 これらを「回転」させと(5次元あるので、_5C_2=10通りあります)以下のようになります。

 

 あなたは5次元立方体を理解できたでしょうか?

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ライフを。