Effet de lumière parasite du matériau de post-traitement UE4 (Lensflare)

introduire:

Réalisez l'effet de lumière parasite (Lensflare) basé sur PostProcessMaterial.

Au lieu d'utiliser le Lensflare fourni avec UE, j'en ai trouvé un sympa sur ShaderToy :
ShaderToy address : ShaderToyLensflareSample
insérez la description de l'image ici

Transplanté dans UE4, l'effet n'est pas mauvais (supprimez l'énorme effet d'ouverture du soleil brillant) ↓

insérez la description de l'image ici
Boîte ciel superposée
insérez la description de l'image ici
fond noir pur

marcher:

1. Une fois la scène placée, traitez le volume et réglez-le sur Unbound

insérez la description de l'image ici

2. Créez un matériau de post-traitement et sélectionnez Post-traitement pour MaterialDomain

insérez la description de l'image ici

3. Connectez le plan comme ceci

La boîte rouge est deux nœuds Cutom, qui contiennent Shader
insérez la description de l'image ici

Il est temps de télécharger le code, ce n'est pas trop pour aimer et marquer =w=

4. Le nœud SunPosUV convertit la position du soleil en écran UV de l'espace

// An highlighted block
	half3 CameratoWorldVectorX = mul(half3(1.0, 0.0, 0.0), (half3x3)(View.CameraViewToTranslatedWorld));
	half3 CameratoWorldVectorY = mul(half3(0.0, 1.0, 0.0), (half3x3)(View.CameraViewToTranslatedWorld));

	half3 LocalCameraX = half3(1.0, 0.0, 0.0) * dot(SunLightVector, CameratoWorldVectorX);
	half3 LocalCameraY = half3(0.0, 1.0, 0.0) * dot(SunLightVector, CameratoWorldVectorY);
	
	
	//Divide xy to find perspective projection
	half2 PerspectiveProjection = (LocalCameraX + LocalCameraY).rg; 

	//unpack 0-1
	half2 ScreenUV = PerspectiveProjection * half2(0.5, -0.5) + half2(0.5, 0.5);
    return ScreenUV;

5. Le programme de nœuds Lensflare calcule et dessine Lensflare, et ceux qui sont inutiles dans le ShaderToy d'origine sont supprimés

float2 uv = fragCoord.xy - 0.5;
uv.x *= iResolution.x/iResolution.y; //fix aspect ratio

float2 mouse = iMouse - 0.5;
mouse.x *= iResolution.x/iResolution.y; //fix aspect ratio
float2 pos = mouse.xy;


float2 main = uv-pos;
float2 uvd = uv*(length(uv));

// 太阳光晕,去掉
//float ang = atan(main.x/main.y);
// float dist=length(main); dist = pow(dist,.1);
// float n = Texturesample(View.PerlinNoiseGradientTexture, float2(ang*16.0,dist*32.0));

// float f0 = 1.0/(length(uv-pos)*16.0+1.0);

// f0 = f0 + f0*(sin(noise(sin(ang*2.+pos.x)*4.0 - cos(ang*3.+pos.y))*16.)*.1 + dist*.1 + .8);


//float f1 = max(0.01-pow(length(uv+1.2*pos),1.9),.0)*7.0;

float f2 = max(1.0/(1.0+32.0*pow(length(uvd+0.8*pos),2.0)),.0)*00.25;
float f22 = max(1.0/(1.0+32.0*pow(length(uvd+0.85*pos),2.0)),.0)*00.23;
float f23 = max(1.0/(1.0+32.0*pow(length(uvd+0.9*pos),2.0)),.0)*00.21;

float2 uvx = lerp(uv,uvd,-0.5);

float f4 = max(0.01-pow(length(uvx+0.4*pos),2.4),.0)*6.0;
float f42 = max(0.01-pow(length(uvx+0.45*pos),2.4),.0)*5.0;
float f43 = max(0.01-pow(length(uvx+0.5*pos),2.4),.0)*3.0;

uvx = lerp(uv,uvd,-.4);

float f5 = max(0.01-pow(length(uvx+0.2*pos),5.5),.0)*2.0;
float f52 = max(0.01-pow(length(uvx+0.4*pos),5.5),.0)*2.0;
float f53 = max(0.01-pow(length(uvx+0.6*pos),5.5),.0)*2.0;

uvx = lerp(uv,uvd,-0.5);

float f6 = max(0.01-pow(length(uvx-0.3*pos),1.6),.0)*6.0;
float f62 = max(0.01-pow(length(uvx-0.325*pos),1.6),.0)*3.0;
float f63 = max(0.01-pow(length(uvx-0.35*pos),1.6),.0)*5.0;

float3 c = float3(0.0, 0.0, 0.0);

c.r+=f2+f4+f5+f6; c.g+=f22+f42+f52+f62; c.b+=f23+f43+f53+f63;
c = c*1.3 - float3(length(uvd), length(uvd), length(uvd))*.05;
// c+=float3(f0, f0, f0);

float3 color = float3(1.4,1.2,1.0)*c;
color -= Noise*.015;

float w = color.x+color.y+color.z;
color =  lerp(color,float3(w, w, w)*0.5,w*0.1);
//color = cc(color,.5,.1);
float4 OutColor = float4(color,1.0);
return OutColor;

En plus de 0, le transfrontalier doit être géré manuellement, le propriétaire est paresseux

Vous pouvez modifier vous-même les paramètres et les textures de bruit pour ajuster les performances ~

Si vous avez besoin de juger de l'occlusion, utilisez simplement SceneDepth ~

Je suppose que tu aimes

Origine blog.csdn.net/qq_34813925/article/details/126333329
conseillé
Classement