小改良したので備忘録
Falseブロック
条件分岐のelseブロックを処理できるようにしてみた。
処理結果
float4 Local0 = ProcessMaterialColorTextureLookup(Texture2DSampleBias(Material_Texture2D_0,Material_Texture2D_0Sampler,Parameters.TexCoords[0].xy,View_MaterialTextureMipBias));
float Local1 = (Local0.r - 0.50000000);
float3 Local7 = 0.0;
[branch]
if(Local1 > 0.0){
float4 Local2 = ProcessMaterialColorTextureLookup(Texture2DSampleBias(Material_Texture2D_1,Material_Texture2D_1Sampler,Parameters.TexCoords[0].xy,View_MaterialTextureMipBias));
float4 Local3 = ProcessMaterialColorTextureLookup(Texture2DSampleBias(Material_Texture2D_2,Material_Texture2D_2Sampler,Parameters.TexCoords[0].xy,View_MaterialTextureMipBias));
float3 Local4 = (Local2.rgb + Local3.rgb);
float3 Local8 = 0.0;
Local7 = Local4;
}
else{
float4 Local5 = ProcessMaterialColorTextureLookup(Texture2DSampleBias(Material_Texture2D_3,Material_Texture2D_3Sampler,Parameters.TexCoords[0].xy,View_MaterialTextureMipBias));
float3 Local6 = (Local5.rgb * Local0.rgb);
Local7 = Local6;
};
float3 Local9 = (Local7 + Material_VectorExpressions[1].rgb);
float4 Local10 = ProcessMaterialColorTextureLookup(Texture2DSampleBias(Material_Texture2D_4,Material_Texture2D_4Sampler,Parameters.TexCoords[0].xy,View_MaterialTextureMipBias));
float Local11 = (Local10.r - 0.20000000);
divergent gradient error回避
仕組みの問題なので最適化を回避する
FRegexPattern TextureSampleUsingGradientPattern(TEXT("Texture.*SampleBias"));
で検索してさらに右辺値にローカル変数があるものを最適化から除外した
計測
LandScapeのマテリアルからMIP0固定のテクスチャフェッチがなくなったのでちょっと引き気味のカメラで
DyanmicBranchのありなしで計測
画像のランドスケープだと茶色い部分がベースのレイヤーで動的分岐によって処理が端折られている部分です。
ブランチなし
ブランチあり
BasePassが4.5msから3.5msになった。