妹でもわかるUnrealEngine4

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

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

UMGのテキストボックスに日本語を入力するテスト

f:id:una_unagi:20170416000049g:plain

「UE4って日本語の表示は出来てるけど、入力はどうだったかな……とちょっと気になったので、今日はそのテストをした。普通にウィジェット出して、入力したら別の用意してあるテキストエリアに表示する」

f:id:una_unagi:20170416000857p:plain

f:id:una_unagi:20170416000901p:plain

「一応出来てるみたい。Windows以外ではどうなるかわかんないけど」

妹「一応というのは?」

「日本語入力の対応状況って色々あるんだけど、おおまかにわけると」

良い

(1)入力中の文字と変換中の文字の区別がつく

(2)変換中の文字はわかりにくいけど、一応入力欄の中に文字は出る

(3)入力できるけど、変換中の欄が画面左上に出る

(4)入力できるけど、変換中の欄は見えないから勘で変換しないと駄目

(5)入力出来るけど字は出ない。もしくは入力自体できない

悪い

「こんな感じになってて、UE4は(2)と(3)のあいだぐらいの状態。UMGだけじゃなくてエディタの方も。ちょっと不自然なとこはあるけど、まあ普通に入力は出来る。入力欄も左上まではいかない、もうちょっと近いとこに出る」

妹「こういうものだと思ってた」

「海外製で、Windows以外でも使えるソフトってなると、だいたい日本語入力には弱い。別に日本語じゃなくても、中国語入力とかでもそうなると思うけど。UE4はワープロソフトではないから、これぐらい出来れば大きな問題はないと思う」

妹「文字はなんか変な気がするけど」

「これはフォント設定してないから、デフォルトの中国の漢字が優先されるフォントになってるせい。この点はちゃんと設定出来るから問題ない」

ポストプロセスマテリアルによる簡易LUT

f:id:una_unagi:20170414235450p:plain

f:id:una_unagi:20170414235457p:plain

「ルックアップテーブル(LUT)による色変換で、色々情報をもらったんだけど、今のところ中間色が出ないようなLUTを使う方法は見つかってなくて、それでポストプロセスの標準機能ではなく、マテリアルでそういう処理を組めばいいのでは? と思ってやってみたのがコレ」

f:id:una_unagi:20170414235705p:plain
RGBのデータを元に、LUT上のUV値を計算
たぶん正確じゃない計算式
使用するのはポストプロセス用のLUTと同じテクスチャ

f:id:una_unagi:20170414235715p:plain
Nearestを設定すると補完なし(くっきり表示)になる

妹「上のはちゃんと2色になってるね。もう一個の方は?」

「こっちは標準のLUTを補完無しで使った場合。RGBが16段階になるから色が劣化して見える。これを補完ありで使う事もできるんだけど……」

f:id:una_unagi:20170415000200p:plain

妹「なんだろ……普通に見えるけど、なんだか微妙に汚いような……黄色いシミ?」

「本来はマテリアルがあってもなくても同じに見えるはずだけど、なんかそうなる。黒いとこに赤が混ざったりとか。RGBからUV値に変換する計算が上手くいってないのかなと思うけど。そもそも標準機能じゃないからあんまり高速でもないし、単純な2値化ぐらいだったら昨日みたいに計算する方がよさそう。でもレトロゲーム風表示とかで、使える色との対応が計算で求めにくい場合は、この方法が使えると思う」

ポストプロセスマテリアルを使った2値化+輪郭線

f:id:una_unagi:20170413230127p:plain

f:id:una_unagi:20170413230724p:plain

「LUTによる2値化は上手く行かなかったので、ポストプロセスマテリアルで作ったみた」

妹「白黒じゃないんだ」

「原理的にはこれ何色でもいいから、今回は淡い色合いにして、それにプラスして先日作った輪郭線のマテリアルも入れた。どっちもタイミングの設定はAfterTonemappingになってて、2値化が先で、次に輪郭線という順番」

f:id:una_unagi:20170413231808p:plain

「逆だと線の部分も2値化されるから、こういう風になる」

妹「この人グレーマンだよね? 全然グレーじゃなくなるね」

「こうなるともう元のマテリアルがどうとか全然わかんないから、誰が作ったアセットでも統一感が得られるというメリットがある。同じ色を使った2Dのイラストを混ぜこんだりとかも出来そう」

妹「これマテリアルのノードだと、どっちも白がつないであるみたいに見えるんだけど」

「ノード画面ではsRGBプレビューの色が見えるけど、実際に出てくるのはsRGBじゃない方の色で、プレビューの見た目よりちょっと暗い色になる。色指定用のConst3Vectorノードをダブルクリックして、詳細画面を出すと正しい色がわかる」

f:id:una_unagi:20170413231249p:plain