UE4_如果快速做出毛玻璃效果_假景深

UE4_如果快速做出毛玻璃效果_假景深

2022-08-20 15:02

一个SpiralBlur-SceneTexture材质节点完成效果,启用半透明材质

通过修改BlurAmount数值大小调整效果

spiralBlur-SceneTexture

custom节点,HLSL语言

float3 CurColor = 0;

float2 BaseUV = MaterialFloat2(ScreenAlignedPosition(Parameters.ScreenPosition).xy);

float2 NewUV = BaseUV;

float StepSize = Distance / (int) DistanceSteps;

float CurDistance = 0;

float2 CurOffset = 0;

float TwoPi = 6.283185;

float Substep = 0;

float2 ScenePixels=View.BufferSizeAndInvSize.xy*BaseUV;

ScenePixels+=View.TemporalAAParams.r;

float2 RandomSamp = ((uint)(ScenePixels.x) + 2 * (uint)(ScenePixels.y)) % 5;

RandomSamp+=Texture2DSample(Tex,TexSampler,ScenePixels);

RandomSamp/=5;

RandomSamp-=0.5;

TempAARotation*=RandomSamp;

TempAADistance*=StepSize*RandomSamp;

int i=0;

if (DistanceSteps<1)

{ return DecodeSceneColorForMaterialNode(NewUV);

} else

{ //CurDistance += 0.5*StepSize;

while ( i < (int) DistanceSteps)

{

//CurDistance+=StepSize;

for (int j = 0; j < (int) RadialSteps; j++)

{ CurOffset.x = cos(TwoPi*((TempAARotation+Substep) / RadialSteps));

CurOffset.y = sin(TwoPi*((TempAARotation+Substep) / RadialSteps));

CurOffset *=DistanceMask;

NewUV.x = BaseUV.x + (CurOffset.x * (CurDistance+(RandomSamp*TempAADistance)));

NewUV.y = BaseUV.y + (CurOffset.y * (CurDistance+(RandomSamp*TempAADistance)));

CurColor += DecodeSceneColorForMaterialNode(NewUV);

//CurDistance+=(StepSize+(TempAADistance))/RadialSteps;

Substep++;

} CurDistance+=StepSize;

Substep+=RadialOffset;

i++;

} CurColor = CurColor / ((int)DistanceSteps*(int)RadialSteps);

return CurColor;

}

spiralBlur-Texture

float3 CurColor=0;

float2 NewUV = UV;

int i=0;

float StepSize = Distance / (int) DistanceSteps;

float CurDistance=0;

float2 CurOffset=0;

float SubOffset = 0;

float TwoPi = 6.283185;

float accumdist=0;

if (DistanceSteps < 1)

{ return Texture2DSample(Tex,TexSampler,UV);

} else

{ while ( i < (int) DistanceSteps)

{ CurDistance += StepSize;

for (int j = 0; j < (int) RadialSteps; j++)

{

SubOffset +=1;

CurOffset.x = cos(TwoPi*(SubOffset / RadialSteps));

CurOffset.y = sin(TwoPi*(SubOffset / RadialSteps));

NewUV.x = UV.x + CurOffset.x * CurDistance;

NewUV.y = UV.y + CurOffset.y * CurDistance;

float distpow = pow(CurDistance, KernelPower);

CurColor += Texture2DSample(Tex,TexSampler,NewUV)*distpow;

accumdist += distpow;

}

SubOffset +=RadialOffset;

i++;

} CurColor = CurColor;

CurColor /=accumdist;

return CurColor;

}

评论(0)

相关推荐
造梦师阿鹏9 小时前
004.从 API 裸调到 LangChain
经验分享·ai·大模型·ai技术·大模型应用开发
汇能感知1 天前
摄像头模块在运动相机中的应用
经验分享·笔记·科技
前路不黑暗@1 天前
C语言:操作符详解(二)
c语言·开发语言·经验分享·笔记·学习·学习方法·visual studio
Better Rose1 天前
【数模国奖冲刺】备赛过程中的常见问题
经验分享·数学建模·数模国赛
TeleostNaCl2 天前
OpenWrt 编译 | 一种使用 git submodule 方式实现一键更新多个外部软件包
网络·经验分享·git·智能路由器
天意生信云2 天前
生信分析自学攻略 | R软件和Rstudio的安装
经验分享·r语言
Vallelonga2 天前
Rust 异步中的 Waker
经验分享·rust·异步·底层
大阳1232 天前
线程(基本概念和相关命令)
开发语言·数据结构·经验分享·算法·线程·学习经验
yaya_1923 天前
想要PDF翻译保留格式?用对工具是关键
经验分享
草莓熊Lotso3 天前
《详解 C++ Date 类的设计与实现:从运算符重载到功能测试》
开发语言·c++·经验分享·笔记·其他