続(?)Blender のカラーマネジメント設定

2024-01-01 追記。「Blender のカラーマネジメント設定(完結編?)

Blender のカラーマネジメント設定、とくに広色域ディスプレイを持つ Mac で正確な色を見て作業するノウハウについて一昨年、昨年にブログを書いたのだけど、じつはそこで言ってる方法は理論的には正しいのだがなぜか Blender が落ちたりしてしまって実用上あんまりいいものではなかった。

いっぽうであいかわらずこのトピックは情報がマジでぜーーーーんぜん更新されなくて、同じような疑問を持った人がけっこうこのブログを検索で見つけて(というか日本語でこの話題を書いているのはここだけだ)試行錯誤してるみたいである。

で、じつは昨年くらいに最終解みたいのを見つけてしまっていたのだけどめんどうで書いていなかった。ツイートはしたかもしれない。というのも、ある YouTube 動画を見つけてそこにすべて述べられていたのである。

Blender configuration for ICC color accurate display with OCIO / ACES [English]

ここで言ってるとおりにすれば解決です。おわり。

あとはせいぜいだれかが日本語でこの内容を書いてくれればそれでいいんですがだれも書かないんですよ。なんなん

ウェブアプリ開発をローカルでやるかコンテナでやるか

VSCode で Python ウェブアプリケーションを開発するとき、コンテナの活用という視点で見るとつぎのように分類できる。

ローカルで開発、デバッグ

古典的なやりかた。プロジェクトをチェックアウトして、venv を作ってコードを書く。デバッグ(実行)するときもローカルのマシンで venv の Python で動かして確認する。いちばんなじみがある。

ローカルで開発、コンテナでデバッグ

VSCode ではデバッグ時にコンテナでプロジェクトを走らせることができる。ウェブアプリなんて作ったらどうせ(?) Dockerfile 書いてコンテナで動かすんだからはじめからコンテナで動作確認したほうがいい。後述の Dev Container が出るまでは有力な選択肢だった。

コンテナで開発、デバッグ

Dev Container ができて、最初から実行環境に近いコンテナでぜんぶ開発できるようになった。コンテナの中でローカルのように開発、デバッグできる。VSCode すごい。

Dev Container 開発の利点は、“What’s a devContainer and what is it good for?” (2023) という記事で次のような点が挙げられている。

  • 必要な開発環境をすぐに用意できる(依存ライブラリのインストールなどをあらかじめ揃えておける)。
  • 開発環境のバージョンを固定化できる。手元のマシンでは最新版にアップデートしたランタイムが後方互換性を失っているときなどでも以前のバージョンで開発を再開できる。
  • データベースなど連携するコンポーネントもコンテナに含めてしまうことで、実環境の変更の影響が開発環境に及ばないようにできる。開発者は各自自分のコンテナでの DB との接続性を保ったまま開発に集中できる。

で、ここではじつは開発環境が実行環境に近いということはとくに謳っていないのだが、たとえばプロジェクトで利用しているあるライブラリが Linux のみ対応だったり、Windows / macOS では挙動が違ったり、ディレクトリ構成が異なることで面倒な対応が必要だったりというのはありがちな話なので、そういうことから解放されるのはけっこう大きいメリットではないかと思う。

Mac の Blender でレンダリングした画像のカラープロファイル

2024-01-01 追記。「Blender のカラーマネジメント設定(完結編?)

前回の続き。Blender のバージョンは 3.0.1 時点での話です。

基本的に Display P3 の高色域なディスプレイを搭載する Mac で Blender を使うときのカラーマネジメントについては前回の通りで、このように設定すればビューポート上の表示は適切な色になる。

しかしこれで作成したモデルをレンダリングしようとすると結果はじつは正しい色にならない。

ならないというか、JPEG で出力すると Blender はカラープロファイルを考慮せずに問答無用で sRGB のプロファイルを埋め込んでしまう。Display P3 の色域の RGB を sRGB として記録してしまうので、この JPEG ファイルを(カラープロファイルをサポートする今日では一般的な画像表示ソフトで)表示すると薄暗い色となって出てきてしまう。

この不具合は前回紹介した Filmic Blender の作者である Troy James Sobotka さんが開発コミュニティに報告しているのを見つけたが、カラーマネジメントに理解のない開発者から「それはバグじゃない」とか言われて放置されていた(泣)。

この問題を修正するには、出力した JPEG 画像のカラープロファイル情報を書き替えてやればよい。カラープロファイルの「変換」ではないので注意。

Photoshop であればファイルを開き[編集]-[プロファイルの指定…]で、おそらく元は sRGB になっているところを「Display P3」にする。この時点で開いている画像の色味が正しいものに変わるはず。そして、画像を[別名で保存]すればよい。保存するときに埋め込むカラープロファイルは Display P3 でも sRGB でもよい。

ImgeMagic のコマンドラインでもできると思うけど割愛。

macOS で Blender を使うときのカラーマネジメント設定

2024-01-01 追記。「」

2022-01-30 追記。続きを書きました。Mac の Blender でレンダリングした画像のカラープロファイル

長年悩んでいたことの解決策をけさ見つけたので興奮して書き残しておきます。

Mac で Blender を使うときに困ることとしてビューポートやレンダリングの色が期待するものと一致しないということがあった。これは Blender の Render Properties にある [Color Management] の [Display Device] が “sRGB” しか選べず、いっぽうでさいきんの Mac のディスプレイはより広色域の Display P3 を搭載しているためだ。

Display P3 のモニタで sRGB のつもりで描画している画を映すとどうなるかというと、じっさいよりも色がどきつく出る。そしてその設定でレンダリングするとこんどは鮮やかさに欠けた色になって出てきてしまう。

“sRGB” と “XYZ” しか選べない。

この [Display Device] に “Display P3” の選択肢がない以上これを解決する方法はなく、いままではしかたなく sRGB で使ってレンダリング結果を自分の感覚でレタッチするみたいな使いかたをしていた。しかしこれだと不便である。作業中ビューポートの色を信用できないのもつらい。

ところが、さいきん知ったのだが Troy James Sobotka さんという方が、最新の Blender カラーマネジメント設定を GitHub で配布しているのである。この方はそもそもいまの Blender で採用されている Filmic 変換を作ったお方なので、ある意味本家である。Blender 本体に Filmic が取り込まれたあともアップデートは続けられていたみたいで、この最新版(といっても2018年のだけど)の Filimic 設定に、Apple Display P3 のディスプレイプロファイルが含まれている。

Filmic と色変換については Blender Guru のすばらしい解説があります。

この動画はまだ Blender に Filmic が取り込まれていなくて、Sobotka 氏の設定をインストールするところから解説していることに注意。いまは sRGB 環境ではなにも追加で作業することなく、デフォルトで Filmic 変換が設定されている。……のだが、Mac だと上述のような不便があるので、最新版の Filmic をダウンロードして Blender に入れるということをやる。

Filmic 変換のインストール方法は GitHub のプロジェクトページに書いてあるのでわざわざここには書かないでいいかなと思ったけど、Mac の場合は App パッケージの中に設定が入っているのでちょっとだけ注記しておく。

ダウンロードは ZIP ファイルになっているのでこれは展開する。filmic-blender-master というフォルダになると思うのであとの便宜のためにこれを colormanagement にリネームしておくといいです。

Blender はアプリケーションフォルダに入っていると思うので、アイコンを右クリック(or Ctrl+クリック)してコンテキストメニューを出し、[パッケージの内容を表示] を選択すると Finder でアプリの中身に入れる。この中の Contents/Resouces/2.93/datafiles フォルダの中に、colormanagement フォルダがある。”2.93″ の部分はバージョン番号なので Blender のバージョンによって違うはず。

このフォルダをダウンロードしたものと入れ換えるわけだが、そのまま上書きすると元に戻せないので、元のフォルダを colormanagement.orig などにリネームしておいてダウンロードしたフォルダを datafiles に入れるとよい。

これで Blender を起動すると、カラーマネジメントで [Display Device] に “Apple Display P3” が選べるようになっているはず。

“Apple Display P3” が選べる!

モニタで見たとおりの色でレンダリングできるのはすばらしい。

さて、GitHub で説明されている Filmic のインストール方法にはもうひとつあって、それはこのフォルダに含まれている config.ocio ファイルの場所を環境変数で設定してやるというやりかた。これはオプショナルなのでさっきのフォルダコピーのインストール方法でいいやという人はやる必要はない。しかしそれだとこの先アプリをアップデートするたびに Filmic をコピーしなおさなければいけないという不便がある。設定一式をホームディレクトリのどこかに置いといて環境変数でそこを参照するようにしておけばその必要はなくなる。

私は ~/Library/Blender/datafiles というフォルダを作ってそこに colormanagement という名前でダウンロードした最新 Filmic 設定を置いてみた。場所はどこでもよい。

ターミナルで環境変数を使うときは setenv でやればいいのだけど Mac の GUI アプリで環境変数設定された状態で起動できるのかというと launchctl コマンドを使うとできる(というのを調べた)。

ターミナルを立ち上げ、launchctl setenv OCIO $HOME/Library/Blender/datafiles/clolrmanagement/config.ocio を実行し、その後ふつうに Blender を起動すると、先ほどと同様のインストール結果になるはずである。

しかしこの環境変数は Mac 再起動すると消えてしまうんだと。再起動時に自動で任意の環境変数を設定する方法はと調べたところ、plist ファイルを作って所定の場所に置けばいいということがわかった。(『macOSでlaunchctlを使ってアプリの環境変数を設定する – CrossBridge』

以下のような XML ファイルを作成し ~/Library/LaunchAgents/ に置いた。ファイル名は ocio.blender.plist にした。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>ocio.blender</string>
    <key>ProgramArguments</key>
    <array>
      <string>/bin/launchctl</string>
      <string>setenv</string>
      <string>OCIO</string>
      <string>/Users/mshibata/Library/Blender/datafiles/colormanagement/config.ocio</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
  </dict>
</plist>

できたら Mac を再起動させるとほかの方法同様に最新版の Filmic 設定で Blender を使える。

で、Mac で Blender をまともな色で使おうとするとこの手順は必須だと思うのだが、私はこれをわかりやすくガイドしている記事はいままでひとつも見つけられなかった。英語でもなかったと思う。みんな私みたいにおかしな色で使ってたの?

まあとにかくこうして解決策がわかったわけなので、Mac で Blender 使う人たちは今後はこの手順を踏んで幸せに使っていきましょう。Blender 3.0 が出たら最初から Display P3 選べるようになってたらいいな。