成果物
仙人押しです…下は改良前です。
以前作ったカエル仙人の画像を1ピクセル当たり4ブロックで表し、本来16色しか表せないところを、65,536色の色を表せるようにしています。
Unity上ではこのようになっています。
左から、元画像、シンプルな変換(一番近い色で置き換え)、今回使った変換です。
※追記
Floyd-Steinberg Ditheringという、シンプルな変換の誤差を周りに伝えていくことで、4cdiff法とにも劣らないほどの色を表現できるアルゴリズムを使えるようにしました。アルゴリズムを思いついた人すごい。詳しい説明はここで解説しています。
※追記
4cdiff法という独自に開発したアルゴリズムの導入で品質はほとんど落とさず、計算回数を16の4乗(65,536)から16×4(64)まで減らすことができました。(1024倍速いです)さらに色の選定に規則性が生まれ、結果的に見ていて自然なものになっています。
高解像度版もやってみました。もはやMinecraftだとは思えない…
ダウンロード
リポジトリの中に入っているので、DownGitなどでダウンロードしてください。
どんどん、改良していただきたいので、より使いやすく改良して配布したいという方は、このページへのリンクを張っていただくだけでOKです。
使い方
マインクラフトのフォルダ/modsにPixelConvert.-1.0.jarを入れてください。
Unityで、Img2Pixelというシーン開いて、MainManagerオブジェクトのTex>Sizeに画像の枚数を入力。Tex>Element に変換したい画像を全て入力(サイズは揃えてください、あまり大きいとフリーズします)In Export Pathに結果を出力したいパスを入力。
それでは、Unityを実行して、eキーを押すと出力が始まります。プログレスバーなどはないのでお気を付けください。rキーでは出力の確認ができます。
マインクラフトのフォルダ/resourceにUnityで生成されたコードを入れてください。
後は、マインクラフトを起動、testBlockを検索して、設置して、右クリックしてください。
コード・作り方
UnityのコードはこちらのUnityの中です。MOD本体もこの中にあります。
実行すると、数字の列が生成されます。
上のプログラムがメインで、
下のプログラムは、ファイルをロードして実行するブロックになっていて、周囲のブロックの更新に連動して更新します。