シリーズでご紹介しているレンダリングガイドの前回の記事では、ジオメトリを介した3ds Maxのシーンの最適化について説明しました。このガイドでは、3DMaxテクスチャに焦点を当てます。
(※ガレージファームのアカウントをまだお持ちでない方は、こちらの3DS MAXレンダーファームから新規登録していただくと、50$のレンダリングクレジットを取得できます。)
テクスチャはジオメトリと同様に、多くのコンピュータのRAMを必要とする可能性があるアセットの1つであり、程度は低いですが、テクスチャのサイズと解像度が3dsmaxの レンダリング時間に影響を与える可能性があります。
ハードドライブで使用できる全体的なスペーステクスチャは、シーンのファイルサイズよりも大きくなる可能性があります。 そのため、レンダーファームでレンダリングする場合、テクスチャファイルが大きいと、プロジェクトをノードにアップロードして3Dアプリケーションでシーンを開く速度が遅くなり、レンダリング時間が長くなり、結果としてコストがかかる可能性があります。
このガイドは大きく2つに分けて構成しています。
一つ目は、デジタル画像の背後にある理論についてお話します。 この知識は、すべてのCGアーティストにとって重要で、さまざまな画像形式、ビット深度、およびカラーモデルを選択する際のロードマップとして役立ちます。 この知識があれば様々な種類の技術的な問題を解決したり、より創造的で柔軟なツールを手に入れることができ、プロの3Dアーティストの武器とすることができます。
3ds max レンダーファームと同様に、次のタイプのテクスチャがサポートされています。
現在、3Dグラフィックスで最も一般的に使用されているテクスチャは写真に基づいて作成されたもの、またはPhotoshopやGimpなどのプログラムでペイントされたラスターテクスチャです。 それらは、JPG、PNG、TIFFなどのさまざまな形式のファイルとしてハードドライブに保存されます。
ラスターテクスチャのサイズは、次の式で表すことができます。
Raw画像サイズ=水平の解像度 × 垂直の解像度(ピクセル単位)×チャネル数 × 色深度(チャネルあたりのビット数)
ハードドライブ上の画像ファイルサイズ=Raw画像サイズ × 圧縮率+追加のファイルデータ
以下の例は、8ビット/チャネルのRGBA(4チャネル)モードでの解像度2000 × 2000pxのテクスチャのRawのサイズの計算を示しています。
アルファチャネルを含むPNGファイルにすることができます:
2000 × 2000(解像度) ×4(チャネル:赤、緑、青、アルファ) ×8(チャネルあたりのビット数)=128,000,000ビット=16,000,000バイト=15,626 kB=15.25 MB(圧縮なし)
そして以下は、8ビット/チャネルのRGBで800 × 800pxの場合:
800 × 600 × 3 × 8=11,520,000ビット=1,440,000バイト=1506kB=1.37 MB
8ビット=1バイト
1024バイト=1kB
1024 kB=1 MB
次に、サイズに影響を与えるラスターテクスチャの要素を詳しく見てみましょう。
ではチャネルとカラーモデルの違いと、それらのコンセプトがどのように関係しているかについて話していきます。
カラーモデルは、ピクセルの色をデジタルデータとして表す方法です。
たとえば、RGBカラーモデルは、赤(R)、緑(G)、および青(B)の3つの原色の組み合わせによってすべての可能な色を記述します。 これらの色はすべて、画像の異なるグレースケールチャネルに保存されます。
RGBカラーモデルは、コンピューターモニターやテレビ画面などの画面にデジタル画像を表示する場合に自然な方法です。これらのデバイスに表示される色は、赤、緑、青の3つの基本色で構成されているためです。
別のカラーモデルの一つにCMYKがあります。 これはシアン(C)、マゼンタ(M)、イエロー(Y)、キーまたはブラック(K)の略です。
このカラーモデルはすべての可能な色を、それぞれが別々のチャネルに保存されている上記の色の、減法混色として表現します。 CMYKカラーモデルは、ほとんどの印刷プロセスでシアン、マゼンタ、イエロー、ブラックのインクを混合してすべての色を作成するため、印刷で色を表現する際に自然な方法です。
そしてさまざまな目的別に、Lab(明度、aコンポーネント、bコンポーネント)、HSV(色相、彩度、値)、HSL(色相、彩度、明度)、グレースケールなど、役立つカラーモデルは他にもたくさんあります。
注:さらに、PNG、TIFF、PSD(Photoshop形式)などの一部の画像形式には、画像の透明度のマップであるAlphaと呼ばれる4番目のチャネルが含まれる可能性があります。 このモードはRGBAと呼ばれます。
注:「インデックスカラー」と呼ばれるデジタル画像の色を管理する別のモードがあり、GIF、PNG-8、およびその他のいくつかの画像形式で使用されます。 このカラーモードには通常、1670万色の24ビットRGBパレットから選択された256色が含まれています。 画像の色を256に制限したことにより、すべてのピクセルに必要なのは8ビットと、パレットマップ自体を格納するための768の追加バイト(256×3)だけです。
さまざまなカラーモデルの詳細については、こちらをご覧ください:
https://en.wikipedia.org/wiki/Color_model
https://ja.wikipedia.org/wiki/RGB
https://ja.wikipedia.org/wiki/CMYK
https://ja.wikipedia.org/wiki/Lab%E8%89%B2%E7%A9%BA%E9%96%93
3ds Maxは、RGB(チャネルあたり8、16、32ビット)、グレースケール(8および16ビット)、ビットマップ(PNGおよびTIFF形式でモノクロ1ビット、 白黒のみ)、そしてインデックスカラー(8ビット)のテクスチャに対応しています。このサポートは、特定の画像形式(PNGやJPGなど)によって異なります。
注:CMYKJPEGファイルを3dsMaxにロードできますが、色が置き換えられます。 また、CMYKモードの画像は、C、M、Yの色に加えて、追加のチャネルでK(黒)値を保存するため、より大きくなります。
ヒント:バンプ、ディスプレイスメント、反射、屈折にグレースケールマップを使用している場合は、それらをグレースケールモードで保存できます。 8ビットグレースケール画像は、1つのチャネルのみを使用して256階調のグレーとして保存し、RGBで保存された同じ画像のRAMおよびHDDスペースの33%のみを使用します。
ビット深度は、ピクセルの色をコード化するために使用されるビット数を表します。
たとえば、1ビットは2つの状態(ピクセルが黒と白)を表すために使用するため、1ビットの画像は2色(白黒など)のみにすることができます。
2ビット画像は4つの状態の組み合わせを提供するため、このような大きな深度の画像で4色をエンコードできます。
8ビット画像は256の可能な組み合わせを提供します。
チャネルあたり8ビットのRGB画像は3つのチャネル(赤、緑、青)を使用し、それぞれがピクセルあたり8ビットでコード化されます。 これらの3つの原色の組み合わせの256 × 256 × 256=16,777,216を提供します。 人間の目では見分けがつかないほどの色で、「トゥルーカラー」と呼ばれています。
画像のビット深度は、2つの異なる意味を表すために一般的に使用されますが、誤解を招く場合もあります。
RGB画像のすべてのチャネルが8ビットでコード化されている場合は8ビットと呼ぶか、画像の1ピクセルが3つのチャネルすべてをコード化するために24ビットを必要とするため24ビットと呼ぶことができます。
チャネルあたり8ビットのRGBA画像(アルファチャネルを含んだPNGなど)は、32ビット画像(4 x 8ビット)と呼ぶことができます。
チャネルあたり16ビットRGB画像は48ビット画像(3 x 16ビットチャネル)と呼ぶことができる
可能な色の範囲のために、8ビットの3チャンネル画像(24ビット画像)は、コンピューターモニターのような画面に表示されるデジタル画像の、最近の標準的なカラースペースです。
ほとんどのテクスチャ、インターネットで見つけた画像、およびシンプルなデジタルカメラのJPG画像は、このビット深度で保存されます。
16ビットテクスチャには、8ビットテクスチャよりもはるかに多くの情報が含まれています。
8ビットテクスチャはチャネルあたり28=256シェードのグレーをエンコードし、ほぼ1,700万色を提供しますが、16ビットテクスチャはチャネルあたり665536シェードのグレーをエンコードし、281兆色を提供します。
32ビット画像には、チャネルごとに最大40億の色合いを含めることができ、「無限の数」の色を提供します。
8ビット/チャネルの画像には人間の目で識別できるよりも多くの色が含まれている場合、16ビット/チャネルの画像を使用する意味は何?という疑問が出てくると思います。
16ビット/チャネルイメージは、レンダリング出力形式として、または写真、ビデオ、およびコンピューターグラフィックスを編集するための作業形式として非常に頻繁に使用されます。 これは、ポストプロダクションで画像を編集している間(フィルターの適用、コントラストの変更)に、画像の情報の一部が失われるためです。 16ビット画像には、データの明らかな損失やバンディングなどの影響なしに、ディティールとグラデーションを保つのに十分な情報があります。 編集プロセスが終了すると、最終的な画像は8ビット深度で保存され、コンピューター画面に表示するのに十分です。
バンディング効果の詳細については、https://en.wikipedia.org/wiki/Colour_bandingをご覧ください。
注:市場にはプロ仕様の10ビット/チャンネル画面があります。 これらはカラーグレーディングなどの映像ポストプロダクションの作業に使用されるため、通常の8ビット/チャネルモニターよりも多くの色を表示できる必要があります。
現在、ほとんどの場合、3Dレンダリングでのバンディングを回避するには、8ビットのテクスチャ深度で十分です。 16ビットテクスチャを使用する利点を確認するには、非常に細かいディテールのテクスチャを操作し、それらを非常に高い解像度でレンダリングする必要があります。 またすべてのシーンで、レンダリングエンジンがテクスチャ自体の上に、直接照明、グローバルイルミネーション、およびテクスチャの欠陥を隠す最終的なアンチエイリアスを適用します。 したがって、より大きなビット深度が必要であることが確実でない限り、常に8ビットテクスチャを使用してください。
ヒント:ディスプレースメントマップ、またはエフェクトやブレンディングの制御に使用されるマップには、16ビットまたは32ビットのテクスチャを使用することをお勧めします。 これは、変位したモデルの表面の目に見えるステップやグラデーションのバンディング効果を回避するのに役立ちます。 ただし、画像を8ビットから16ビットに変更するだけでは、グラデーションに追加のステップは作成されません(ぼかしなどのツールを使用してそのようなテクスチャを準備するか、Zbrushなどのソフトウェアで作成する場合を除く)。
注:Chaos GroupのVrayscans、Allegorithmic Substance、Quixel Megascansなどの3Dグラフィックス市場の一部の製品は、16ビットテクスチャに対応できます。 その理由は、プロの写真を16ビットRAWとして編集するのと似ています。これにより、柔軟性が高まり、編集プロセスで画像が損傷するのを防ぐことができます。 多くの場合、ディスプレイスメントマップは16ビット画像として作成されます。
16ビット/チャネルと32ビット/チャネルの場合、別のバリエーションが関係します。
一部の画像は整数を使用してエンコードされ、一部は浮動小数点エンコードを使用します。
たとえば、16ビット/チャネルの整数テクスチャ(TIFFなど)は、純粋な黒から純粋な白までの281兆色をエンコードし、その間には281兆の色合いがあります。
一方、16ビット/チャネルの浮動小数点テクスチャ(半精度浮動小数点数EXRなど)、または32ビット/チャネルの浮動小数点テクスチャは、はるかに大きな値、さらには負の値をエンコードできます。
そのため、16ビット/チャネルおよび32ビット/チャネルのテクスチャは、環境照明の作成に非常に役立ちます。 白と黒の間の色合いの値を単に描くのではなく、暗い影と太陽(「スーパーホワイト」)のような非常に明るい光源の間の照度範囲全体をカバーできます。
注:大量の情報を含めることができるため(レンダリングされた画像のピクセルの明るさの大きな違いや、レンダリングパスなどの追加情報など)、CGアーティストは、出力ビット深度として3Dレンダリングで16ビット/チャネル画像を使用することがよくあります。
テクスチャの解像度は、シーンがレンダリングする必要のあるRAMの量の最も重要な要素の1つです。 程度は低いですが、レンダリング時間にも影響します。 低解像度のテクスチャを使用すると、シーンのレンダリングが長くなることもあります。
次の式は、画像のrawのサイズを計算するために使用されます。
水平の解像度 × 垂直の解像度 × チャネルあたりのビット数 × チャネル数=画像サイズ(ビット単位)
たとえば、2048 × 2048の解像度のRGBA画像のrawサイズは16,384KBです。
水平の解像度(2048)× 垂直の解像度(2048)× チャネルあたりのビット数(8)× チャネル数(4)=画像サイズ(134,217,728ビット)
134,217,728 / 8(1バイト= 8ビット)=16,777,216バイト〜16MB
この画像を圧縮形式(たとえば、JPEGファイルとして)で保存すると、ファイルサイズは小さくなりますが、3dsMaxでファイルを読み取るには16,384KBのメモリが必要です。
以下のテストは、さまざまな解像度のテクスチャのリソースの必要性の違いを紹介しています。
この画像を2800 × 2100pxの解像度のV-Ray3.60.03のデフォルト設定でレンダリングしました。 テストは、すべてのテクスチャを8000 × 8000px、4000 × 4000px、および1000 × 1000pxの解像度に設定して実行しました。 テクスチャフォーマットはJPEGです。
これらのオプションをオフにして、以下のテストを実行しました:
低解像度のテクスチャを滑らかにすることができるすべてのオプションをオフにすると、レンダリング時間はテクスチャの解像度とともに低下します。 低解像度のテクスチャを使用すると、RAMの必要性を効率化できますが、レンダリング時間の変更はカメラからのテクスチャの距離、およびシーンのぼかし/アンチエイリアシング設定によって異なります。 この場合、RAMの使用量を減らすために、レンダリング時間が少し長引くことを妥協したほうが良い場合があります。
情報を保存しながらデータの量を減らすことに関して、画像を圧縮するという2つの方法があります。
可逆圧縮 – 可逆圧縮の場合、圧縮のアルゴリズムは画像データを圧縮しますが、画像のすべての情報(詳細)を保存します。
これにより、画像を複数回保存したり、画像の品質を損なうことなく、非圧縮形式と圧縮形式の間で画像を相互に変換したりできます。
例:DEFLATE(.PNG)、LZW(.GIF、.TIFF)、RLE、ZIP(.TIFF)
非可逆圧縮 – 非可逆圧 縮アルゴリズムは、近似値と部分的なデータを破棄して、ファイルの量を大幅に削減します。
非可逆圧縮はテクスチャのサイズを大幅に縮小できる可能性がありますが、品質とディティールが低下することを考慮する必要があります。 また、このように圧縮された画像を再保存するたびに、品質は低下していきます。
例:JPEG
注:3ds Maxテクスチャは非圧縮画像としてメモリに読み込まれるため、圧縮ファイル形式を使用しても、画像がシーンに配置するために必要なメモリは削減されません。
ただし、HDDのプロジェクトサイズが小さくなることで、分散レンダリングでのノードの読み込み時間に影響するので、3Dアプリケーションで開くことができます。 その結果、商用のレンダーファームでのレンダリングのコストが低くなります。
テクスチャとして使用する画像には、作者の名前、カメラモデル、その他多くの情報が含まれていることがよくあります。 これはメタデータと呼ばれます。
最近の最も人気のあるメタデータ形式は、IPTC-IIM、IPTC Core and Extension、PLUS、XMP、Exif、およびDublinCoreです。
HDDのプロジェクトサイズを縮小し、分散レンダリングでのノードの読み込み時間に影響します。
ほとんどがプレーンテキストであるため、ハードドライブのテクスチャのサイズにもほとんど影響しません。 現在のメタデータ標準では通常、数キロバイトまたは数十キロバイトかかります。これは、ハードドライブ上のテクスチャのサイズからするとごく一部です。
ただし、テクスチャファイルからメタデータを削除する場合は、PhotoshopまたはGIMPで削除できます。
Photome chanicやその他のオンライン無料メタデータ削除アプリケーションでも、画像からメタデータをバッチ削除できます。
テクスチャを最適化する場合は、ジオメトリの最適化と非常によく似ています。求めるクオリティを得るために、十分な品質で、最小のテクスチャを使用する必要があります。
一部のレンダリングエンジンにはグローバルスイッチがあり、レンダリング中にマップの使用をオフにすることができます。 これは、レンダリング速度に対するマップの影響を確認するには優れた方法ですが、メモリからマップをクリアにすることはできません。
唯一の方法は、マテリアルのパスからマップを一時的に削除することです。
ローカルパス– 3ds Maxの場合、シーン(またはサブフォルダ)と同じフォルダに配置されているシーンで使用されているすべてのマップが表示され、メモリに読み込まれます。 この方法で作業している場合は、テクスチャを一時的に1つ上のフォルダに移動すると、シーンでテクスチャが見つかりません。タスクマネージャ(Win)またはアクティビティモニタ(Mac)から、3dsmaxプロセスのメモリ使用量が低下するのをすぐに確認するでしょう。
絶対パス–ドライブの周りに散在するマップで作業している場合は、アセットトラッカー(Shift + T)で一時的にマップを削除できます。 アセットトラッカーウィンドウでShiftキーを押しながらテクスチャをマークし、アセットトラッカーのオプションバーの[パス]オプションをクリックし、[ストリップパス]オプションをクリックします。
テクスチャの2〜3ピクセルがレンダリングされた画像の1ピクセルとして表されるように、テクスチャの解像度を維持するだけで十分です。 さらに解像度を低く保つこともできますが、特定のレンダリングでピクセルが表示される場合があります。 レンダリングエンジンのオプションでフィルタを設定し、アンチエイリアスを設定することで、ある程度この影響を回避できます。 テクスチャが適用されたサーフェスがレンダリングされた画像で300×300pxの大きさになる場合は、テクスチャの解像度を約600×600pxに制限できます。 この場合、5000×5000pxのテクスチャを使用する必要はありません。 上のボールのような丸いオブジェクトをテクスチャで包む場合は、最終的な画像の解像度の約3〜5倍の大きさに保つ必要があります。
ノイズの多い直接照明やGIなどの他のレンダリング要素と組み合わされているか、画像の一部が陰になっているため、レンダリングされた画像のテクスチャの品質を評価するのは難しいことがよくあります。 この場合、Diffuse Textureパスを追加でレンダリングして、レンダリングされたテクスチャの品質を確認することをお勧めします。 ほとんどのレンダリングエンジンは、そのようなパスのレンダリングを提供し、それらはレンダリング要素またはAOVと呼ばれることもあります。 V-Rayでは、VrayDiffuseFilterパスと呼ばれます。
DiffuseFilterパスは、拡散マップ、レンダリング設定のアンチエイリアス設定、およびマテリアル/テクスチャ設定のフィルタリング設定だけの品質を評価するのに役立ちます。
レンダリングパスを使用してシーンを最適化する方法については、最適化ガイドのパート3 –レンダリングとシェーディングで詳しく説明します。
画像を手動で次々に再スケーリングすることは、面倒で時間のかかる作業になるかもしれません。 このガイドの第2部では、このプロセスを高速化するためのいくつかの方法を紹介します。
マテリアルエクスプローラーは、プロジェクト内のテクスチャの解像度をすばやく確認するのに便利なツールです。 オンにするには、[レンダリング] に移動し、 [マテリアルエクスプローラーのマテリアルの表示]をオフにすると、マップを使用しないマテリアルを非表示にできます。 カスタマイズ→列の構成→テクスチャサイズの表示→「テクスチャサイズ」をクリックすると、テクスチャのすべてのサイズを表示する列を追加します。
ガイドのこの部分では、3Dグラフィックスで使用されるテクスチャの「重み」に影響を与えるすべての重要な要素について解説しました。
デジタル画像の背後にある計算などは一見非常に複雑に見えますが、非常にわかりやすく論理的であることがわかります。
方程式は単純で、Raw画像サイズ=水平解像度x垂直解像度(ピクセル単位)× チャネル数 × 色深度(チャネルあたりのビット数)となります。
一言で言えば、テクスチャの最適化は必要なレンダリング画像の品質を得るのに十分なだけ、解像度、チャネル数、およびテクスチャのビット深度を減らします。
どうすればこれを行えるかについては、ガイドの次のパートで説明します。
独自の経験とテスト
CGSociety、3Dトータルフォーラム
ThioJoeTechYoutubeチャンネル
3dsMax2016とVray3.40.03ですべてのテストを行いました。
http://www.hdrlabs.com/tools/links.html –openEXRエディターへの様々なリンク
このガイドはMichałMośによって作成され、GarageFarm.NETのチームにより編集されました。このガイドの知識は10年以上レンダーファームに従事してきた豊富な経験をもとに作成しています。
MichałMoś(別名Andrew)はGarageFarm.NETのメンバーで、アニメーションやトラブルシューティングからテクニカルライティングまで、3Dレンダリングのトピックを専門としています。彼は、CGアーティスト、デザイナー、インストラクターとして、数多くのデザインおよび建築会社に従事していた経験も持ち、主に 3ds Max、C4D、V-Ray、Octaneを使用しています。絵を描くこと、執筆、そしてテーブルRPGが趣味です。
https://michalmos.carbonmade.com