4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Unityのリニアライティングと.pvrの問題

Last updated at Posted at 2015-07-04

Unityは5以降では.pvr v3やktxといった、よりハードウエアに密着したテクスチャファイルフォーマットを未加工にインポートすることができるようになりました。
しかし、このことが問題になる場合があります。

Unityのレンダリングモード

Player Settings の Edit -> Project Settings -> Player -> Other Settings
でRenderingでカラースペースを設定できるようになりました。

colorspace.png
これがLinearになっていると、リニアライティングという物理的により正しい計算によるライティングになります。ただしテクスチャなどのレンダリングのもとになるソースがどのようなカラースペースで作られているかを正しく設定しなければなりません。

.pvrファイルを作る(れない?)

.pvrを作るにはどうすればいいか?
たぶんImagination TechnlogiesのPowerVR SDKを使用するの一択でしょう。
たとえば、PVRTexToolGUI
PVRTexTool.png
しかし、このツールには大問題が、、
pngだろうがtgaだろうがjpgだろうが、読み込んだ外部形式のファイルのカラースペースをすべてLinearと判断します。pngみたいなカラースペースを明示するフィールドがあるフォーマットでもです。
pvr形式のファイルを読み込むときには、さすがにしっかりカラースペースを認識するので機能として持っていないわけでもないよう。
仮に100歩譲って読み飛ばすにしても、そこはせめてデフォルトをsRGBのほうにしておいてほしいのですが。。Linearスペースのイメージデータなんて普通存在しないでしょう。
この結果として、入力が間違っているのですから変換して出力された.pvrファイルのカラースペースもすべて間違っていることになります。
LinearスペースはsRGBで、sRGBはsRGB^2なんて謎のガンマがかかって間違って出力されてしまいます、、、
そもそも、このツール、データ詳細にカラースペースがないので、イメージデータが今どのカラースペースにあるかを知る方法もないのですが(使いにくい)。

結論から言うとPowerVR SDKのツールで正しいカラースペースの.pvrファイルを作るのは困難だといわざるえません。
ソースとして、Linearスペースのpngやtgaを用意してってなかんじになってしまいますから、、そんなデーター普通ありません。
あとはpvrファイル出力後バイナリーエディタでカラースペースのフラグを操作するとか、、今回はLinearスペースで出力後(実はsRGB)、バイナリーエディタで書き換えて無理やりsRGBにしてしまいました(コレデOK?!)

.pvrファイルを読む(めない?)

さてどうにか出来上がった.pvrファイルをUnityで使ってみましょう。
Unityはレンダリングモードがgammaのときイメージファイルのカラースペースを全部sRGBと判断するようです。まあ、普通に我々が入手したり加工したりできるイメージファイルは圧倒的にsRGBカラースペースのものが多いですから、こりゃ妥当っていえば妥当かな?!
で、レンダリングモードをLinearにかえてやると、Unityはイメージファイルのフォーマットを元に正しくカラースペースを設定し物理的により正しいレンダリングをおこない :smile: 、、、、、いやいや、正しく判断しませんねえ :fearful: 、、.pvrファイル場合はすべて無条件でLinearカラーと判断されてしまいました:scream:
UnityもImagination Technlogies同様、フラグはガン無視です:sob:
PVRTexToolGUIといいUnityといい、この人たちはどれだけLinearスペースのイメージが好きなんでしょう。
まあ、対処はPVRTexToolGUIのときとほぼ同じ、ソースとしてLinearスペースの.pvrしか使わないということでしょうか、、しかしそもそもPowerVR SDKのツール側の問題でLinearスペースの.pvrファイルというもの自体なかなか作れなさそうなんですが。。

sdunitychan.jpg

sRGBの.pvrファイルを使ってレンダリングするとテクスチャのカラースペースをLinearと誤認識するせいでユニティちゃんが白っぽくなってしまう。

結論

Unityのリニアライティングモードでは.pvrファイルは使えない(調べてないけど、.ktxとか.ddsもやばそう)

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?