unity製のゲームモザイク解除

Last-modified: 2024-05-16 (木) 13:05:54

無修正で楽しむために、この手法を用いた。

unityのゲームにはモザイクを解除できる物と、不可能な物が有る。
プログラムによってモザイクが施されているなら、数値を変えれば解除(透明)にできる。
素材にモザイクが施されているなら、現時点ではほぼ不可能。
dlsite等では最近、素材自体にモザイクを施し始めたらしい。
fantiaでは素材にモザイクを施さなくて良いようだ。
ゲームはdlsiteやfantiaやsteamで買える。

用意する物
素材にモザイクが施されていないunity製のゲーム
UABEAvalonia
AssetStudio
有料VPN(場合に依る)

やり方
AssetStudioで素材にモザイクが施されているか確認する。
施されていなければ、解除できるかもしれない。
AssetStudioで"assetファイル"を開いて"mosaic"や"モザイク"等で検索する。
プログラムが有ったら解除できるかもしれない。
追記 "cen"で検索してもモザイクが施されている可能性が有る。
掲示板からの情報提供ありがとうございます。
"censored"を日本語に翻訳すると"検閲された"という表現になる。
モザイクを表現する文字列には種類がいくつか確認されている。以下に示す。

mosaic
mozaic
モザイク
モザ
moza
cen
censor
censored

UABEAvaloniaで、モザイクのプログラムが有りそうな"assetファイル"を開く。
その中に、"MosaicField"という行が有ったらクリックして、
"ExportDump"をクリック、テキストで出力。
その中に、

1 string first = "_BlockSize"​
0 float second = 16.000000​

という変数や数値が有ったら、

1 string first = "_BlockSize"​
0 float second = 1.000000

という風に1か0に変更する。
変更したら右の方に、"*"というアスタリスクがつくはず。
そして、"Import Dump"で変更したテキストファイルをインポートする。

別の場合1
UABEAvaloniaで、モザイクのプログラムがありそうな"assetファイル"を開く。
そして、"ExportDump"をする。そのtxtの中に以下のような変数と数値等があったとする。

0 Material Base​
1 string m_Name = "Mosaic"​
0 PPtr<Shader> m_Shader​
0 int m_FileID = 0​
0 SInt64 m_PathID = 2055

UABEAvaloniaに戻り、PathID でソートし、マテリアルから pathID に一致するシェーダーを見つける。
pathID に一致するものを見つけたら、"ExportDump"でtxtを出力。
ctrl+fで"colMask"という行を見つける。

0 SerializedShaderFloatValue colMask
0 float val = 15
1 string name = "<noninit>"

0 SerializedShaderFloatValue colMask
0 float val = 1
1 string name = "<noninit>"

0 float val = 1の所を、1か0に置き換える。
変更したものを"Import Dump"で変更する。


追記 モザイクの文字列が判明しない場合、"RuntimeUnityEditor"で判明する可能性が有る。
サイトを以下に示す。
https://github.com/ManlyMarco/RuntimeUnityEditor

BepInEx等を使い、"RuntimeUnityEditor"を導入し、ゲームを起動して該当する場面でF12等を押せば、
どのパーツがどういう文字列で作用しているかわかるらしい。
モザイクの場所をクリックすれば文字列が出てくるらしいので、モザイクの文字列が判明したら、
従来の通りに変更すれば、出来るかもしれない。
素材自体にモザイクが施されている場合は難しい。


追記 dnSpy等でdllファイル等を書き換えられる可能性も有る。
モザイクを施しているプログラムを直接書き換えることも考えられる。