UMGのテキストボックスに日本語を入力するテスト
「UE4って日本語の表示は出来てるけど、入力はどうだったかな……とちょっと気になったので、今日はそのテストをした。普通にウィジェット出して、入力したら別の用意してあるテキストエリアに表示する」
「一応出来てるみたい。Windows以外ではどうなるかわかんないけど」
妹「一応というのは?」
「日本語入力の対応状況って色々あるんだけど、おおまかにわけると」
良い
(1)入力中の文字と変換中の文字の区別がつく
↓
(2)変換中の文字はわかりにくいけど、一応入力欄の中に文字は出る
↓
(3)入力できるけど、変換中の欄が画面左上に出る
↓
(4)入力できるけど、変換中の欄は見えないから勘で変換しないと駄目
↓
(5)入力出来るけど字は出ない。もしくは入力自体できない
悪い
「こんな感じになってて、UE4は(2)と(3)のあいだぐらいの状態。UMGだけじゃなくてエディタの方も。ちょっと不自然なとこはあるけど、まあ普通に入力は出来る。入力欄も左上まではいかない、もうちょっと近いとこに出る」
妹「こういうものだと思ってた」
「海外製で、Windows以外でも使えるソフトってなると、だいたい日本語入力には弱い。別に日本語じゃなくても、中国語入力とかでもそうなると思うけど。UE4はワープロソフトではないから、これぐらい出来れば大きな問題はないと思う」
妹「文字はなんか変な気がするけど」
「これはフォント設定してないから、デフォルトの中国の漢字が優先されるフォントになってるせい。この点はちゃんと設定出来るから問題ない」
ポストプロセスマテリアルによる簡易LUT
「ルックアップテーブル(LUT)による色変換で、色々情報をもらったんだけど、今のところ中間色が出ないようなLUTを使う方法は見つかってなくて、それでポストプロセスの標準機能ではなく、マテリアルでそういう処理を組めばいいのでは? と思ってやってみたのがコレ」
RGBのデータを元に、LUT上のUV値を計算
たぶん正確じゃない計算式
使用するのはポストプロセス用のLUTと同じテクスチャ
Nearestを設定すると補完なし(くっきり表示)になる
妹「上のはちゃんと2色になってるね。もう一個の方は?」
「こっちは標準のLUTを補完無しで使った場合。RGBが16段階になるから色が劣化して見える。これを補完ありで使う事もできるんだけど……」
妹「なんだろ……普通に見えるけど、なんだか微妙に汚いような……黄色いシミ?」
「本来はマテリアルがあってもなくても同じに見えるはずだけど、なんかそうなる。黒いとこに赤が混ざったりとか。RGBからUV値に変換する計算が上手くいってないのかなと思うけど。そもそも標準機能じゃないからあんまり高速でもないし、単純な2値化ぐらいだったら昨日みたいに計算する方がよさそう。でもレトロゲーム風表示とかで、使える色との対応が計算で求めにくい場合は、この方法が使えると思う」
ポストプロセスマテリアルを使った2値化+輪郭線
「LUTによる2値化は上手く行かなかったので、ポストプロセスマテリアルで作ったみた」
妹「白黒じゃないんだ」
「原理的にはこれ何色でもいいから、今回は淡い色合いにして、それにプラスして先日作った輪郭線のマテリアルも入れた。どっちもタイミングの設定はAfterTonemappingになってて、2値化が先で、次に輪郭線という順番」
「逆だと線の部分も2値化されるから、こういう風になる」
妹「この人グレーマンだよね? 全然グレーじゃなくなるね」
「こうなるともう元のマテリアルがどうとか全然わかんないから、誰が作ったアセットでも統一感が得られるというメリットがある。同じ色を使った2Dのイラストを混ぜこんだりとかも出来そう」
妹「これマテリアルのノードだと、どっちも白がつないであるみたいに見えるんだけど」
「ノード画面ではsRGBプレビューの色が見えるけど、実際に出てくるのはsRGBじゃない方の色で、プレビューの見た目よりちょっと暗い色になる。色指定用のConst3Vectorノードをダブルクリックして、詳細画面を出すと正しい色がわかる」