====== 描画の最適化 ====== バーチャルキャストは__動作の安定化・高速化のため__に、キャラクターとアイテムの描画を最適化します。 最適化によって、__高負荷時の安定性向上・描画フレームレート向上・消費メモリの減少__が見込まれます。 見やすい解説スライドと説明は以下の Blog をご覧ください。 [[https://blog.virtualcast.jp/blog/2021/09/0922_shinchoku/|【2021/9/22】サービス開発進捗報告会 報告内容まとめ]] ===== 描画の最適化で行うこと ===== 以下にバーチャルキャストが行う描画の最適化を示します。 この仕様は、品質とパフォーマンス向上のために変更する可能性があります。 | ^ PC ^^ Quest ^^ |::: ^ VRM ^ VCI ^ VRM ^ VCI ^ ^ テクスチャの圧縮 | [[virtualcast:setting:graphics#キャラクターおよびアイテム描画を最適化する|設定]]に因る | ✔ | ✔ | ✔ | ^ テクスチャサイズの上限 | - | 2048x2048 px | 2048x2048 px | 2048x2048 px | ^ テクスチャのアトラス化 | - | - | ✔ | - | ^ ポリゴンリダクション | - | - | ✔ | - | === テクスチャの圧縮 === テクスチャを圧縮しメモリ使用量を 1/4 に抑え、体験品質を改善します。 ただし下記の [[#テクスチャの圧縮に関する詳細]] で示すように圧縮アーティファクトが出ます。 PC の VRM のみ他と圧縮手法が異なります。 === テクスチャサイズの上限 === テクスチャのサイズの上限を規定します。 上限を超えるサイズのテクスチャは、上限に合わせてリサイズされます。 === テクスチャのアトラス化 === 複数のテクスチャを1枚のテクスチャにまとめます。 === ポリゴンリダクション === ポリゴンを削減し、Quest のようなハイスペックではない環境での体験品質を改善します。 ===== テクスチャの圧縮に関する詳細 ===== テクスチャに対して GPU フレンドリーな圧縮を行います。 これにより以下のうれしい効果が得られます。 * ロード時のフリーズ時間の短縮 * CPU・GPU 上のメモリ使用量の削減 フリーズ時間の短縮によって、キャラクターを変更したときやアイテムを出現させたときの __fps のカクツキが大幅に軽減__されます。 またメモリ使用量の削減によって、__fps の向上__が見込まれます。 具体的な量は以下の図が示すように、フリーズ時間は 98% 短縮、メモリ使用量は 75% 削減されます。 {{:virtualcast:other:optimize_graph.png?600|}} また以下の例のように、圧縮によって目立つような差異はほとんどありません。 {{:virtualcast:other:optimize_ba.png?600|}} しかし以下の例のような色の差がはっきりしたテクスチャにおいて、拡大したときにノイズが見える場合があります。 {{:virtualcast:other:optimize_bad_ba.png?600|}} ==== 問題 ==== __ほとんどのテクスチャは問題が見えません__が、一部のテクスチャは問題が目に見える可能性があります。 これについて説明します。 テクスチャに対する最適化は、画像の圧縮を行っています。 このとき圧縮方式は、画像に対して以下の条件を想定しています。 * 前提:画像を 4x4 ピクセルの範囲に区切って、その区切った単位をブロックと呼称する * 条件:ひとつのブロックの中は、似たような色で占められている 世の中の多くの画像はこの条件を満たすため、目に見える劣化もなく圧縮することができます。 逆にこの条件を満たさない一部の画像では、ノイズのようなアーティファクトが出てしまいます。 たとえば以下のような例です。 * セルアニメ調の画像 * ピクセル表現の画像 * ボクセルモデルツールから出力した画像 これらの例はピクセル単位で色を細かく調整するような画像です。 つまり__隣り合うピクセルの色がまったく違う__箇所が多い画像になります。 したがって圧縮方式が想定する条件から外れてしまい、アーティファクトが出てしまいます。 結果として、色が変わってしまうといった問題が出る可能性があります。 === 関連資料 === * [[https://hexadrive.jp/hexablog/creative/4802/|まずは知ることが大切 | HEXA BLOG]] * [[https://www.webtech.co.jp/blog/optpix_labs/format/4013/|DXTC(S3TC)圧縮のアルゴリズムとは?~前編~ | OPTPiX Labs Blog]] ==== 問題に対する回避手法 ==== 前節で述べたとおり、問題が見えるテクスチャは隣り合うピクセルの色がまったく違うような画像です。 したがって隣り合うピクセルの色が同じになるようにすれば問題を回避できます。 この回避手法としては__画像を拡大して VRM/VCI を出力しなおす__ことが挙げられます。 画像を拡大することにより、圧縮によるアーティファクトを最小限に抑えることができます。 しかし__VRM/VCIのサイズが増加する__・__最適化による恩恵を打ち消してしまう__というデメリットがあります。 画像を拡大する具体的な手段としては、画像編集ソフトの操作が求められます。 また、画像を拡大するときは「ニアレストネイバー」という補間方法を用いるのが適切です。 またこの際、拡大するサイズは __200%__ や __400%__ にするのが適切です。 ただし、画像サイズの適切な大きさは __1024x1024 px__ 、大きくても __2048x2048 px__ になります。 それ以上のサイズになるようであれば、モデルの UV 展開から見直す必要があります。 画像をニアレストネイバーを用いて拡大する具体的な方法は、各種画像編集ソフトで異なります。 以下のワードで Google 検索して調べることをお勧めします。 * [[https://www.google.com/search?q=%E3%83%89%E3%83%83%E3%83%88%E7%B5%B5%E3%82%92%E7%B6%BA%E9%BA%97%E3%81%AB%E6%8B%A1%E5%A4%A7%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95 | ドット絵を綺麗に拡大する方法]]