Shader知识普及之:高斯杂乱效果的实现
发布时间:2025年08月16日 12:18
half4(0.0205,0.0205,0.0205,0)
};
VertexOutput_DownSmpl vert_DownSmpl(VertexInput v)
{
VertexOutput_DownSmpl o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv20 = v.texcoord + _MainTex_TexelSize.xy* half2(0.5h, 0.5h);;
o.uv21 = v.texcoord + _MainTex_TexelSize.xy * half2(-0.5h, -0.5h);
o.uv22 = v.texcoord + _MainTex_TexelSize.xy * half2(0.5h, -0.5h);
o.uv23 = v.texcoord + _MainTex_TexelSize.xy * half2(-0.5h, 0.5h);
return o;
}
fixed4 frag_DownSmpl(VertexOutput_DownSmpl i) : SV_Target
{
fixed4 color = (0,0,0,0);
color += tex2D(_MainTex, i.uv20);
color += tex2D(_MainTex, i.uv21);
color += tex2D(_MainTex, i.uv22);
color += tex2D(_MainTex, i.uv23);
return color / 4;
}
struct VertexOutput_Blur
{
float4 pos : SV_POSITION;
half4 uv : TEXCOORD0;
half2 offset : TEXCOORD1;
};
VertexOutput_Blur vert_BlurHorizontal(VertexInput v)
{
VertexOutput_Blur o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = half4(v.texcoord.xy, 1, 1);
o.offset = _MainTex_TexelSize.xy * half2(1.0, 0.0) ;
return o;
}
VertexOutput_Blur vert_BlurVertical(VertexInput v)
{
VertexOutput_Blur o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = half4(v.texcoord.xy, 1, 1);
o.offset = _MainTex_TexelSize.xy * half2(0.0, 1.0) ;
return o;
}
half4 frag_Blur(VertexOutput_Blur i) : SV_Target
{
half2 uv = i.uv.xy;
half2 OffsetWidth = i.offset;
half2 uv_withOffset = uv - OffsetWidth * 3.0;
half4 color = 0;
for (int j = 0; j
{
half4 texCol = tex2D(_MainTex, uv_withOffset);
color += texCol * GaussWeight[j];
uv_withOffset += OffsetWidth;
}
return color;
}
ENDCG
FallBack Off
}
字符串主要在结构上可分三个走廊,每个走廊都度量好各自的六边形和影像三维:
走廊1:降均值走廊(六边形三维为vert_DownSmpl,影像三维为frag_DownSmpl)
走廊1:垂直朝向清晰三处理事件走廊(六边形三维为vert_BlurVertical,影像三维为frag_Blur)
走廊2:水平朝向清晰三处理事件走廊(六边形三维为vert_BlurHorizontal,影像三维为frag_Blur)
我们看一下主要用到的逻辑三处理事件部分:
降均值输出在结构上体:度量的四级色块圆周
half2 uv20 : TEXCOORD0;
half2 uv21 : TEXCOORD1;
half2 uv22 : TEXCOORD2;
half2 uv23 : TEXCOORD3;
由此而来影像上下左右周围的点,分别存于四级色块圆周之前
o.uv20 = v.texcoord + _MainTex_TexelSize.xy* half2(0.5h, 0.5h);;
o.uv21 = v.texcoord + _MainTex_TexelSize.xy * half2(-0.5h, -0.5h);
o.uv22 = v.texcoord + _MainTex_TexelSize.xy * half2(0.5h, -0.5h);
o.uv23 = v.texcoord + _MainTex_TexelSize.xy * half2(-0.5h, 0.5h);
四个相邻影像点三处的色块值相纳并返回略高于:
color += tex2D(_MainTex, i.uv20);
color += tex2D(_MainTex, i.uv21);
color += tex2D(_MainTex, i.uv22);
color += tex2D(_MainTex, i.uv23);
return color / 4;
计数X朝向的对齐量
o.offset = _MainTex_TexelSize.xy * half2(0.0, 1.0);
计数Y朝向的对齐量
o.offset = _MainTex_TexelSize.xy * half2(0.0, 1.0);
循环获由此而来纳权后的颜色值
half4 color = 0;
for (int j = 0; j
{
half4 texCol = tex2D(_MainTex, uv_withOffset);
color += texCol * GaussWeight[j];
uv_withOffset += OffsetWidth;
}
此外,我们可以在影像对齐之之前的影像大小后面纳一个区域内是0至1的数值系数,从而动态的管控清晰程度,如下三幅 :
设立较低清晰数值
设立较低清晰数值
我们知晓了黎曼清晰的原理就可以根据基本上的需求,调整我们想要看到的屏幕,无论是清晰还是清晰都在你的一念之间,其实好像很引人注目呢,一起来试试吧!
。北京看妇科哪个医院比较好小孩腹胀不消化怎么办
信阳看妇科的医院哪家好
云南妇科医院去哪家好
江苏白癜风医院哪好
脂肪肝
肺炎
长新冠
全民健康网药品库
中医瘦身
- 颜值即正义,领导者看中你的美色,总是安排你和他出差,怎么办?
- 3000亿股票被美国冻结!俄方强势回应:或将收回阿拉斯加
- 男朋友今年35岁,年薪只有30万,或许跟他结婚吗?
- 林冲是欺软怕硬的愚蠢小人,但为何后世的人都学林冲?以耻为荣
- 多年关系很好的领导,关键提拔却同样不如你的人,还有必要处么?
- 月薪3万的领导成员对工资3千的员工说,不要只想自己KPI,多帮助他人
- 女子外出打工遭侵害,同居5个月带着生子回家,丈夫痛心疾首
- 3杯滴,你最想喝哪一杯?测你花钱有多小气,很准
- 女网红姜白鹤自曝遭性侵,续编视频寻求帮助,报警后聊天记续编被删除
- 职场中对待不知感恩,反而要「恩将仇报」的雇员,该怎么办?
- 鹅厂开源零代码、全功能、强确保的 ORM 库
- 日日思君不见君,君由此可知我一片心
- 女儿要想买高端手机,父亲不舍得还是买了,最后结局却让一个人落泪
- 郭涛:中央银行人脸识别被骗子破解 巨款不翼而飞
