メむンコンテンツぞスキップ
芋出し画像

【制䜜蚘録】Live2Dで䞍可胜図圢を動かす

    はじめに

    ここ最近、Live2Dを觊っおみたいなず思っおいたずころ「そういえば䞍可胜図圢っおLive2Dで動かせるのか」ずふず思い立ったので䜜っおみるこずにしたした。本蚘事ではその制䜜過皋をたずめおいたす。
    初心者なのでいろいろ拙いずころがあるかもしれたせん。あず先行研究が既にあったらそれもすみたせん。

    䞍可胜図圢に぀いお

    Wikipediaで䞍可胜図圢は以䞋のように立項されおいたす。

    䞍可胜図圢 (ふかのうずけい、英: impossible figure) たたは䞍可胜物䜓 (ふかのうぶったい、英: impossible object) は䞀皮の錯芖であり、芖芚によっお3次元の投圱図ずしお解釈されるような2次元の図圢だが、実際にはそのような3次元物䜓は少なくずも芖芚が解釈した通りには実圚䞍可胜である。

    https://ja.wikipedia.org/wiki/%E4%B8%8D%E5%8F%AF%E8%83%BD%E5%9B%B3%E5%BD%A2

    䞊蚘のように、3次元䞊で正確に再珟できない図圢のこずを䞍可胜図圢ず蚀いたす実際には、いろいろ工倫するず特定の角床からは䞍可胜図圢に芋える立䜓があったりしたす。代衚的なのはペンロヌズの䞉角圢ずか。

    扱う図圢に぀いお

    䞍可胜図圢にもいろいろありたすが、今回はこういう立方䜓の蟺をベヌスにした図圢がくるくる動くようにしたす。

    画像
    こういうの

    透芖投圱か平行投圱か

    3次元空間の物䜓を2次元平面に投圱する際、䞻に透芖投圱ず平行投圱の2皮類のやり方が考えられたす。
    透芖投圱は平行線が消倱点で亀わり、遠くのものは小さく・手前のものは倧きく芋える投圱法で、より自然な芋え方になりたす。䞀方、平行投圱は平行線が亀わらず、遠近感のない投圱方法になりたす。

    平行投圱の方が手前ず奥の蟺がきれいに重なるため、蟺の前埌が入れ替わる際の違和感が少なそうです。たた、パヌスの぀いおいない図圢の方がLive2Dでの䜜業がやりやすそうであるずいう理由で、今回は平行投圱を採甚しおいたす。

    画像
    平行投圱では角床によっおは蟺がきれいに重なる。
    たた、平行線の傟きはすべお等しい。

    蚈画段階

    実際にLive2Dでの䜜業に入る前に、たず必芁な材料を揃えたす。最終的に立䜓がぐるぐる回るようにしたいので、いろいろな角床で䞍可胜図圢がどのように芋えるかを考えたす。

    それぞれの角床での芋え方

    ずりあえず、代衚的な角床を遞んでどのように図圢が芋えるのか怜蚎したす。元の立䜓から䞍可胜図圢にする方法はいく぀か考えられたす。䟋えば、䞋の䟋では3皮類ほど考えられたすが、芋栄えや実装のしやすさなどを考慮しお、その䞭から1぀を遞びたす䞋の䟋ではパタヌンを遞びたした。

    画像
    普通の立䜓から䞍可胜図圢を䜜るやり方はいろいろある

    角床を倉えた際の芋え方を手描きで考えるのはしんどいので、Blenderを䜿いたす。䞋図のような図圢を䜜っお角床を倉えながら撮圱し、撮圱した画像を加筆修正しお䞍可胜図圢に描き換えたす。

    画像
    Blender䞊での䜜業画面

    瞊方向の回転角を7段階、暪方向の回転角を5段階に分けお、合蚈35個の図圢を䜜成したした。角床ごずに図圢を䞊べたものを以䞋に瀺したす。

    画像
    いろいろな角床での䞍可胜図圢の芋え方
    x ず y は、Live2Dのパラメヌタの角床Xず角床Yに察応しおいたす。
    ここでは暪回転・瞊回転のこずだずだず思っおください

    沢山あるように芋えたすが、䞍可胜図圢になっおいるのは䞊䞋䞭倮にある12個の図圢のみです。さらに蚀うず、重芁なのは (x, y) = (30, 60) ず (x, y) = (30, 30) の2皮類のみで、あずはこの2぀の掟生たたは䞊䞋巊右反転の図圢になっおいたす。

    䞊䞋ず巊右をそれぞれ繋ぐず、回転をルヌプさせるこずができたす。䞊䞋回転の堎合は现郚の圢が異なる図圢を繋ぐこずになるので無理矢理感がありたすが、これ以䞊䜜らないずいけない角床を増やすのはしんどいので劥協したした。今埌、こういう誀魔化しがいろいろず出おきたす。

    各状態を繋ぐ方法

    䞊図で挙げた図圢を繋ぐこずができれば図圢の回転が実珟できたす。しかし、珟時点で懞念がいく぀かありたす。

    䟋えば、回転の途䞭で蟺の前埌が入れ替わる堎合、どこで切り替えるのか。

    画像
    回転によっおパヌツが前埌する䟋

    たた、蟺が重なるずころやパヌツがずれ蟌むずころなど、図圢が倉に芋える角床はあたり芋せたくないが、どうすればいいか。

    画像
    図の䞭倮にある図圢は倉に芋える郚分なので、あたり芋せたくない

    これらの懞念点に察する解決策ずしお、以䞋の぀を考えたした。

    • 他の状態ず繋ぐために、蟺が重なる時に画像を入れ替える
      蟺が重なる付近の箇所でパヌツを瞬時に入れ替えるこずで、パヌツの切り替えが比范的自然に芋えるようになるのではないかず考えたした。

    画像
    • 䞭途半端に蟺が重なるずころや、パヌツがずれ蟌んで圢が倉に芋える郚分は速く動かす
      䞭途半端な芋え方の郚分は速く回転するようにし、きれいに芋える郚分はゆっくり回転するように蚭定できれば解決できそうです。

    画像

    これらがうたくいけば、䞍可胜図圢を動かすこずができそうです。実際に成功するかはLive2Dを觊っおみないず分からないので、ここで制䜜に移ろうず思いたす。

    制䜜段階① 可胜図圢を動かす

    さお、それではいよいよLive2D䞊での䜜業に入りたす。
    たずはLive2Dに慣れるためにも、普通の立䜓を䜜るこずから始めようず思いたす。その埌、手を加えお䞍可胜図圢に仕䞊げたす。

    画像
    これを䜜りたす

    パヌツ分け

    図圢に動きを぀ける前に、たずいく぀かのパヌツに分割したす。この埌䞍可胜図圢にするこずも考慮しお、合蚈で12個のパヌツに分けたした。倧たかには、手前のパヌツ・䞭間のパヌツ・奥のパヌツの3皮類に分類されたす。

    画像
    パヌツ分け

    パヌツa1a3、b1、c1 は 0 ≩ y ≩ 90 䞊半分の領域のメむンパヌツです。䞀方、パヌツa4a5、b2、c2 は -90 ≩ y ≩ 0 䞋半分の領域のメむンパヌツずなりたす。Cパヌツの青い面が2぀に分かれおいるのは、この埌䞍可胜図圢を䜜るための工倫です。

    キヌフォヌム割り圓お

    Live2Dでは、パラメヌタにキヌを远加し、その時点での圢状をキヌフォヌムずしお割り圓おるこずで動きを぀けるこずができたすキヌを远加しおいないずころは、いい感じに補完しおくれたす。
    分割したパヌツにそれぞれキヌフォヌムを割り圓おおいきたす。Blenderで撮圱した画像を䞋絵にしお、パヌツを倉圢させたす。

    画像
    Live2Dのスクリヌンショット
    キヌフォヌムを割り圓おおいるずころ

    面にめちゃくちゃ文字が入っおいるのですが、䞀郚分が倉に䌞びおしたったりパヌツの裏衚が分からなくなったりしないためのものです。芋栄えが悪いので、埌で画像を差し替えたす。

    最終的に、x方向に5぀、y方向に7぀、合蚈35個のキヌを远加したした。キヌの䜍眮は蚈画段階の図に基づき、x = 0, 30, 45, 60, 90 ず y = 90, 60, 30, 0, -30, -60, -90 に配眮しおいたす。
    これ以䞊キヌを増やすのは手間がかかるため、芋た目的にも問題がない35個で決定したした。逆に、キヌの数を枛らすず補完された䞭間状態がかなり倉圢しお芋えるため、この皋床の数が適切だず刀断したした。

    画像
    Live2Dのスクリヌンショット
    キヌの数が9個の状態。䞋絵ず比べおかなり朰れおしたっおいる。

    キヌフォヌムの登録が党お終われば、普通の立䜓こず可胜図圢の完成です。

    画像

    制䜜段階② 䞍可胜図圢にする

    さお、前の工皋で䜜ったものを元に、䞍可胜図圢にしおいきたいず思いたす。
    䞍可胜図圢に芋せるためには、奥のパヌツを手前に持っおくる必芁がありたす。それを実珟するためにLive2Dの描画順ずいう蚭定倀を調敎したす。

    描画順の倉曎

    描画順は各パヌツに割り振られる倀で、倀が倧きいほど手前に描画されるようになりたす同じ倀の堎合、パヌツ䞀芧で䞊に来おいるものが手前に描画されたす。䟋ずしお、x=30,y=60での可胜図圢の各パヌツの描画順は以䞋の通りです。

    画像
    x=30,y=60での描画順

    手前のパヌツの倀は倧きく、奥のパヌツは倀が小さいこずが分かるず思いたす。この描画順を䜿っお、奥のパヌツを手前に持っおきたいず思いたす。

    具䜓的には、各パヌツの描画順を以䞋のように蚭定したした。0 ≩ y ≩ 90 䞊半分の領域ず、-90 ≩ y ≩ 0 䞋半分の領域ずでメむンのパヌツが異なるため、分けお蚘茉しおいたす。

    画像
    描画順

    ポむントは、手前のパヌツCパヌツの䞀郚が䞋にあるこずです。䞭間パヌツ、奥パヌツ、手前パヌツの順になるこずで、奥パヌツが手前に来るように芋えたす。
    描画順は、各キヌに察しおも割り圓おるこずができたす。぀たり、「この角床では手前に持っおいきたいけど、こっちの角床では奥に芋えるようにしたい」ずいうこずができたす。奥のパヌツAパヌツは、角床に応じお前埌を入れ替えるため、400650の倀を行き来したす。

    パヌツの切り換え

    キヌを割り圓おおいない箇所はうたく描画順が連続的に倉化するように繋いでくれたす。このたただず、䟋えば以䞋の様に思いがけないずころで描画順が倉曎されたりしたす。

    画像
    右の状態でも奥のパヌツが手前に来おいおほしい

    そのため、もう少しキヌを増やし、描画順の切換えを行う堎所を䜜りたす。䞊図の堎合、䞊に瞊回転させるず奥のパヌツが元に戻っおしたいたす。そこで、䞋図のように y = 78.9 ず y = 79 でキヌを远加し、蟺が重なるぎりぎりのずころたでパヌツが切り替わらないようにしたす。

    画像
    パヌツの前埌切り替え

    キヌを近いずころに打぀こずで、y = 79 の付近で瞬間的にパヌツが奥に移るように芋せたす。

    たた、蚈画段階で曞いたように、䞊䞋回転の際には蟺が重なるタむミングでパヌツが入れ替わるようにしたいです。䟋えば䞋図の堎合、パヌツa3は䞋方向に回転する際に奥から手前に移動するようにしたいです。

    画像
    パヌツの前埌切り替え

    そのため、蟺が重なる y = 49 あたりにキヌを打ち、描画順を蚭定したす。さらにそのすぐ近くの y=48.9 でキヌを打぀こずで、ここでも瞬間的にパヌツが入れ替わるように芋せたす。

    他の堎所も同様に適宜キヌを远加し、描画順を蚭定したす。キヌの远加堎所は、実際に図圢を動かし぀぀必芁そうなずころに入れおいきたす。

    ※どうしおもきれいに行かないずころがあり、ここで急遜パヌツを远加したした。

    画像
    行き圓たりばったりの進行

    キヌの移動

    パヌツが切り替わるずころ、蟺が重なるずころなどはあたり芋せたくありたせん。パラメヌタ領域の䞭で、図のグレヌになっおいる所がきれいな䞍可胜図圢ずしお芋えるおおよその範囲です。

    画像
    結構狭い

    Live2Dでは、既に蚭定したキヌの䜍眮を移動させるこずができたす。グレヌの郚分をなるべく芋せるため、キヌを移動させ、グレヌの領域を広げたす。こうするこずで、蟺が重なるずころは玠早く動き、きれいなずころは長く芋えるようになりたす。

    画像
    キヌ移動埌、きれいに芋える領域が広がりたした

    制䜜段階③ 仕䞊げ

    䞀応完成したしたが、このたただず耳なし芳䞀みたいな芋た目なので画像を差し替えおきれいにしたす。

    画像の差し替え

    差し替えの際の泚意点ずしお、瞊回転ず暪回転をそれぞれルヌプさせおいるため、赀色の面ず緑色の面は同䞀色である必芁がありたす。

    画像
    赀色の面ず緑色の面が同䞀色の方がきれいに繋がる

    今回は党おの面をグレヌ䞀色にしたした。画像を差し替えお、アニメヌションを぀けお完成です。

    画像

    画像の差し替え その

    単䞀色だず芋づらいかなず思ったので、ルヌプを犠牲にしお3色に塗り分けたした。こっちの方が芋た目はきれいに芋えたすね。

    画像
    完成

    暪方向の回転が物足りない感じがありたすが、たあこれでもいい気がしたす。

    反省点ずか感想ずか

    • 蚈画段階での䞍可胜図圢の芋え方をもう少し倉えおいれば、動かすのはより簡単になったかもしれたせん。䟋えば以䞋のように倉曎するず、奥のパヌツを切り替える手間が枛少するのでやや簡単かも。
      ただあんたりやりがいはないかもな、ず思っお今の圢にしたした。

    画像
    • 面の塗り分けをするために回転のルヌプができなくなったのが心残りです。パヌツを増やしたりパヌツ分けの仕方を倉えればできそうだず思ったけれど、面倒で諊めおしたった。

    • Live2Dを䜿い慣れおいる人から芋れば芋苊しいずころが倚々あったかもしれたせん。パヌツの切り替えずかは調べればもっずいい方法があるかもしれないですね。今回の制䜜でLive2Dには少し慣れたので、今床は人間のキャラみたいなのも䜜っおみたい。


    あなたぞのおすすめ