moyasiエフェクト館

主にエフェクト関係の記事を上げていこうかと思います。


エフェクトに関係する記事上げてきます
エフェクト関係の記事の内容は緩く募集中
自分がわかる範囲であれば書いていこうかなと。

【UE5】色収差用のポストプロセス

Verは5.44です

 

 

【初めに】

tktknkyo.hatenadiary.jp

上記の記事の続きの内容になります

 

 

【ポスプロの中身】



マテリアルの中身は上記のようになっています

パラメータコレクションのCAScaleは色収差の強度

スカラーパラメータのCA_Countは色収差の精度になります

 

float4 color = float4(0.0, 0.0, 0.0, 0.0);
float Texindex = 14;
float2 UV2 = float2(0.5,0.5);
float2 UVr = float2(0.5,0.5);
float2 UVg = float2(0.5,0.5);
float2 UVb = float2(0.5,0.5);
float3 sum = float3(0.0, 0.0, 0.0);
float3 sumr = float3(0.0, 0.0, 0.0);
float3 sumg = float3(0.0, 0.0, 0.0);
float3 sumb = float3(0.0, 0.0, 0.0);

float3 CA = float3(CAScale.r,CAScale.g,CAScale.b)*CAScale.a;    //色収差用のAをRGBに適応
Count = floor(lerp(1,16,clamp(Count,0,1))+0.1);                 //色収差の精度用

float Scale[16] = {                                    //処理用の配列作成
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
};

for(int i = 0; i<Count; i ++)
{

 UV2 = UV-0.5;                                         //計算用に中心を0に調整
 UVr = (UV2*1/(1+Scale[i]/Count*CA.r))+0.5;            //UVを中心から拡大する
 UVg = (UV2*1/(1+Scale[i]/Count*CA.g))+0.5;            //UVを中心から拡大する
 UVb = (UV2*1/(1+Scale[i]/Count*CA.b))+0.5;            //UVを中心から拡大する 
 UVr = clamp(UVr, float2(0.0,0.0),float2(1.0,1.0));    //UVを0-1に抑える
 UVg = clamp(UVg, float2(0.0,0.0),float2(1.0,1.0));    //UVを0-1に抑える
 UVb = clamp(UVb, float2(0.0,0.0),float2(1.0,1.0));    //UVを0-1に抑える
 sumr += SceneTextureLookup(ViewportUVToSceneTextureUV(UVr,Texindex),Texindex,true); //ループ毎に加算する
 sumg += SceneTextureLookup(ViewportUVToSceneTextureUV(UVg,Texindex),Texindex,true); //ループ毎に加算する
 sumb += SceneTextureLookup(ViewportUVToSceneTextureUV(UVb,Texindex),Texindex,true); //ループ毎に加算する
}
sum = float3(sumr.r,sumg.g,sumb.b);  //Vectorに結合
sum /= Count;                        //加算した回数で除算


return sum = sum; 

 

コードは上記になっています

 

全体の処理内容としては、UVの拡大率を変えながらループ処理で加算を行い

最後に加算した回数で除算します

色収差用なので、RGBでそれぞれ別の拡大率を使用できるように組んでいます

 

 

今回の記事は以上になります