sRGBのテクスチャチェックに関する疑問

1)sRGBのテクスチャチェックに関する疑問

2)ライティングをオンにすると、メッシュ数が増える

3)UGUI Imageの材質属性を修正する質問

4)UniWebViewインターフェイスがUnityインターフェイスの後に表示されるのはどすればよいのか

5)TimelineのInternal_CreatePlayableはコストが高い


 

Rendering

Q:UWAある回答を見つけました(中国語注意)

https://answer.uwa4d.com/question/5bd1724fae74300ab0497bed

結論は次のとおりです。

linear space + gamma texturesRGBを選択します

linear space + no gamma texturesRGBを選択しませんhttps://answer.uwa4d.com/question/5bd1724fae74300ab0497bed

Gamma Spaceでは、sRGBを選択することは何の影響もないようですが。

 

Player Settingのcolor space設定標識によってインポートされた画像が、Gamma Spaceで作成されたのかLinear Spaceで作成されたのかについて、ドキュメントでは明確ではありません。もう少し説明してくれませんか

 

ここでのディスカッションによると:https://forum.unity.com/threads/confusion-about-gamma-vs-linear.496053、sRGBが選択されている場合、Unityはgamma逆補正を行います。つまり、tex2Dからのvalueはbe pow(origin_color_value、2.2)、ここでgamma値は2.2と想定され、fragではRチャネルの値が逆補正され、heatmapのuの中央値は約0.5になります。それなら、上記のディスカッション最初のheatmapが示したようになりますが、実際には2番目のheatmapのように示しています

 

colorの代わりにcolorの値をdataとして使っているからだと言われていますが、やはり納得できません。dataでもcolorでもすべて数字であり、数字の比較には間違いがありませんから

 

A1:確かにGamma Spaceでは、sRGBを選択することは何の影響もないようですが。

Linear Spaceで、sRGBが選択されている場合、UnityはRemove Gamma Correctionをします。この場合、図の値は0.5階調値、つまりu = 0.5の列の階調値です。次の図に示すように、Remove Gamma Correctionすると、取得される値は0.25になります。

X軸は光の強度を表し、Y軸はグレー値を表します。

青い線のY値は、人間の目の階調、視覚的な階調値を表します。赤い線は、光の強度に比例する物理的な空間の実際の階調値を表します。

Photoのグラデーション図でu=0.5の列の階調値は0.5で、これは視覚的な階調値です。Remove Gamma Correctionの後、実際の階調値は0.25になります。Fragment Shaderの計算に参加します。したがって、2番目のheat mapが表示されます。

 

A2:この記事を参照できます:https://developer.nvidia.com/gpugems/gpugems3/part-iv-image-effects/chapter-24-importance-being-linear

個人的な理解です。通常の状況では、私たちが見る画像は「モニタースペース」にあり、画像自体がGammaCorrectionをした(つまり、元の値は 1 /2.2乗の操作をしました。)ため、モニターに表示される画像の色は正常です。このような画像の場合、非線形として理解できます。 Unityが線形空間を選択した後、そのような非線形画像の場合、正しくレンダリングするにはsRGBを選択する必要があります。画像のsRGBが選択されると、メモリ内の形式は、以下に示すように、ETC2_EAC_RGBA8_SRGBの形式になります(画像がETC2 8ビットの圧縮形式を選択すると仮定します)。

sRGBが選択されていない場合、以下に示すように、ETC2_RGB8_UNORM形式になります。

この_SRGBサフィックス形式の場合、GPUがテクスチャサンプリングを実行すると、GamaCorrectionが自動的に削除されます。つまり、値は2.2乗をしますが、元のデータは変更されません。Gamma空間では、sRGBが選択されているかどうかに関係なく、形式はETC2_RGB8_UNORMです。

問題主の質問について、Gamma空間では、レンダリングの結果は平均的な4色になります。これは、Gamma空間ではGammaCorrectionが削除されないためです。つまり、この「非線形画像」はu= 0.5の場合(uはテクスチャuv座標)、テクスチャのdata値= 0.5、Linear空間になるとdataは変化しません。相変わらずu = 0.5の場合に、data= 0.5になります。しかし、sRGBを選択した後、テクスチャサンプリングを実行する場合、GPUは値に対して2.2乗の操作をし、約0.25になります。したがって、u <= 0.5の場合、color.r <= 0.25になります。Shader がcolor.r <0.25を計算すると、赤になります。つまりu <= 0. 5の場合、すべて赤なので、色の半分が赤です。


 

Rendering

Q:Unityによって表示される面(メッシュ)数は、このフレームでGPUにアップロードされたすべての頂点データによって決定されるため、GPUがこの部分をキャッシュしないのはなぜですかライティングをオンにすると、面数が増えるため、モデルの頂点データを複数回アップロードすることになります。この部分をキャッシュすると、パフォーマンスが大幅に向上しませんかGPUがこのキャッシュを実行できない場合、GPUのキャッシュが小さすぎてそのようなスペースがないことを意味しますか、それともGPUがキャッシュする部分を確認できないことを意味しますかエンジンコードを変更すると、プロジェクト用にキャッシュできます。

 

A:ライト自体のシェーディングは、DrawCallと面数には影響しません。リアルタイムシャドウは、シャドウ用の深度マップをレンダリングする必要があります。これは、別の視点からレンダリングするのと同じであり、データは現在のカメラとは異なります。 FrameDebuggerを開いて、レンダリングプロセス全体を確認できます。


 

UGUI

 

Q:UGUIのImageはMaterialPropertyBlockを設定することでマテリアルプロパティを変更できますか設定方法はありますか。

 

A:UGUIはマテリアルブロックを使用しません。以下を参照してください。

https://forum.unity.com/threads/big-problem-with-locking-materialpropertyblock-for-ui-image.506941


 

UGUI

 

Q:Android側にWebページを表示するプラグインUniWebViewがあります。デフォルトでは、Unityインターフェースの上位層に表示され、Unityのすべての表示をブロックします。 Androidのネイティブインターフェイスをバックグラウンドにし、UnityのUIをフォアグラウンドにし、Unityのバックグラウンド自体を透明にする方法を教えてください。

 

A:UniWebViewをUnityインターフェイスの背後で実行できるようにするために、公式ドキュメントにはダメだと記載されています。

https://docs.uniwebview.com/guide/faq.html

Unityの背景の透明度の維持に関しては、Player Settingsに以下のようなオプションがあります。

 


 

Playable

Q:特殊効果はTimelineを使用して作成されています。最近のパフォーマンステストで、Internal_CreatePlayableメソッドには多くのコストがあることがわかりましたが、トラックが1つしかないなのに、このコストが何に関連していますか

 

 

 

同じオブジェクトをPCにロードし、Internal_CreatePlayableに18.55ミリ秒かかり、次にPCにCubeを作成してTimeline効果を追加してから、Internal_CreatePlayableに約4ミリ秒かかるようになります

 

A:Timlineの最初のCreatePlayableは時間がかかります。こちらの簡単なTimelineアセットでも、初めて500ミリ秒以上かかります。

ただし、シーンのロードにCreatePlayableステップを配置することで、ゲーム中のラグを回避できます。Timelineアセットを読み込んだ後、PlayableDirector.RebuildGraphを呼び出すと、Prewarmと同等のCreatePlayableが実行されます。その後、Play()を呼び出しても、CreatePlayableは実行されません。RebuildGraphを呼び出しても、キャッシュがあるため、高い時間コストも発生しません。

次の図は、RebuildGraphを初めて呼び出すのにかかる時間を示しています。

次の図は、RebuildGraphを2回呼び出すのにかかる時間を示しています。

 


UWA公式サイト:https://jp.uwa4d.com

UWA公式ブログ:https://blog.jp.uwa4d.com

UWA公式QAコミュニティ(中国語注意)https://answer.uwa4d.com