妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

ブロック積み上げ実験(3) 先に積み上げてからインポートする

imoue.hatenablog.com
の続き

f:id:una_unagi:20180929231651p:plain

「前回までのやり方で、なんで隣のブロックとの間に隙間ができるかという、根本的な原因はポリゴンがつながってないから

妹「そうだね」

「なので今回はQubicleの段階で、ブロックをたくさんコピーして、Unionボタンんで結合。その後でfbxエクスポートしてみることにした」

妹「それだとどうなるの?」

「隣のボクセルとはポリゴンをつなげてくれるから、継ぎ目自体ができない。MagicaVoxelの0.99以降でも複数オブジェクトに対応してるから、そっちでブロックを積み上げてからQubicleにもってきてもいい」

f:id:una_unagi:20180929231939p:plain

「そうすると、無事に継ぎ目なく表示することができた」

妹「うん? これは継ぎ目ない状態なの? というか、なんかブロックの色が変な気が」

「ライトマップが小さすぎた……デフォルトの64x64のままだから。ブロック1個ずつの時は64でも継ぎ目以外は問題なかったけど、ブロックがたくさん増えてるのにライトマップの大きさがそのままだと、必然的にかなり荒くなる」

f:id:una_unagi:20180929232531p:plain

「ライトマップを大きくすれば陰影の表示も問題ない。よく覚えてないんだけど、たしか256x256にしてから撮影した時のだったと思う」

妹「やっぱりライトマップは大きくしないと駄目なんだ」

「まあでもブロック1個に256使ってたのが、今回はブロックが7つでそれだから。その点はあんまり問題じゃない。ただこれだとコリジョンもでこぼこにしないといけないのが面倒なのと、ブロックを部分的に壊すといったことはできなくなる」

妹「壊すの?」

「マインクラフト的なのとか、パズルゲームみたいなのだとそういうこともあるかも。まあ壊すとなったらその部分をムーバブルにしないといけないから、結局ライトをムーバブルにするのと一緒なんだけど。壊せる部分だけ光の当たり方がへんになっちゃうはず。だけど背景をなるべく綺麗に表示したいって時は、こういう風に全体を1つのメッシュとしてインポートして、ライトマップ大きめにすれば綺麗に表示できそう」

ブロック積み上げ実験(2) ライトマップの調整

imoue.hatenablog.com

「前回スタティックライトだと上手くいかなったので、今日はライトマップの調整をしてみる」

妹「聞いたことはあるかもしれない」

「ライトもメッシュも両方共スタティックの時だけ使われる、どこに光が当たるかを記録したテクスチャ。ビルドした時に作られる。スタティックライトで表示がおかしく、他でおかしくないとなると、ライトマップが真っ先に疑われるところ」

f:id:una_unagi:20180927222400p:plain

「他のブロックとくっついてるとこは暗くなってて、ライトマップが粗いと隣にちょっとにじんじゃって、それが原因でつなぎ目のとこが暗くなってるんじゃないかと」

f:id:una_unagi:20180927222747p:plain

f:id:una_unagi:20180927222807p:plain

「スタティックメッシュの設定で、ライトマップの大きさを変える。個別のスタティックメッシュアクターでも変えられるけど。

f:id:una_unagi:20180927223015p:plain

「ライトマップの大きさを256ピクセル四方にした部分はこうなる。128とかだとまだつなぎ目が見えるから、これぐらい必要」

妹「これはちゃんとつながってるね。ライトマップを大きくすればよかったのか」

「まあそうなんだけど、ライトマップはブロック1つごとにできちゃうわけで、あんまり大きくするとメモリがたくさん必要になるのが難点。64ピクセル四方の16倍の面積になるから。速度的にはムーバブルのライトで毎フレーム計算するより速そうなんだけど」

f:id:una_unagi:20180927223324p:plain

「逆にもっと荒くして、つなぎ目がどうとか以前の状態にするという手も。これは左側のブロックを32ピクセルまで落とした場合」

妹「これはだいぶ汚いね」

「中途半端になるよりはいいという場合もあるかもしれない。ライトマップ絡みだと他に、UVマップがちゃんとしてないってのもあるんだけど、今回の場合それではなさそう」

妹「ちゃんとしてないというのは?」

「同じ色だから別々のポリゴンだけど同じ部分のテクスチャを参照してるみたいな。色は同じでも陰影の付き方が違うから、光があたったりあたらなかったり、変なことになる場合はある。あとはポリゴンの大きさに対して割り当てたテクスチャが狭すぎるとか。ローポリ系のモデルだとテクスチャの節約でそういう作り方することがある」

ブロック積み上げ実験

f:id:una_unagi:20180926224343p:plain
↑ムーバブルなライト

f:id:una_unagi:20180926224710p:plain
↑ステイショナリーなライト

f:id:una_unagi:20180926224504p:plain
↑スタティックなライト

f:id:una_unagi:20180926224512p:plain
↑ブロックが発光する(エミッシブカラー)

妹「これは何をやってるの?」

「ボクセルで作った……まあボクセルでなくてもいいんだけど、ブロックを積み上げてマップをちょちょっと作れるようにしたいなあと。そんな感じの実験をしてるところ」

f:id:una_unagi:20180926224518p:plain

「こういうブロックをMagicaVoxelで作って、Qubicleにインポートして、エクスポートして、UE4にもってきている」

妹「なんか途中に余計な工程が挟まってない?」

「ポリゴン数の削減とかテクスチャとかの関係でそれが一番楽そうだったから。まあブロックはそれでいいとして、ブロック同士の隙間のところがいまいち綺麗にならない」

妹「2Dでもブロック同士の隙間が変になることあったけど」

「それと同じ原因ではないかも。ちゃんとつながったポリゴンではないからという点は同じだと思うけど。一番見た目がよくないのがスタティックなライトにした時だった。つなぎ目がはっきり見えちゃう。ムーバブルは全体的に縞模様がでるけど、つなぎ目自体は見えない。ステイショナリーはその中間ぐらいの」

妹「エミッシブカラーじゃ駄目なの?」

「駄目ではないんだけど、多少の陰影はついてたほうが、立体感があっていいかなあと。Qubicleでの保存方法での違いもあるかもしれない。とりあえず光源をムーバブルにすればそれらしくなることはわかった」