shader学习笔记之扫描线

 思路:

1.用uv画出边缘线

2.贴图叠加动态扫描

UV边缘线原理:

(仅适用于面数少的 比较规则的图形)

代码段:

float UVMake(float3 uv )
			{
              
				uv=abs(uv*2-1);
				uv= pow(uv,_EdgeWidth);
				
				float outuv = lerp(uv.x,uv.y,0.5);
                //第二次插值是因为我传进来的是世界坐标 我需要一个三维的描边
				//outuv=lerp(outuv,uv.z,0.5);
				outuv-=_UVDepth;
				return  outuv;
				
			}

 顶点着色器中传出世界坐标

像素着色器如下

half4 frag (v2f i) : SV_Target
       {
             float color  = UVMake(frac(input.positionWS.xyz));
             return color;
       }

贴图叠加动态扫描

使用了贴图的r和a通道 分别放花纹和扫描线

花纹是SD做的(ps也可以)

A通道尽量让浅色区域小点

 贴图采样像素着色器

half4 frag(v2f i):SV_Target

{               
float3 triW = normalize(abs(input.normalWS));
//流光图采样(动态
half4 Secondcolorx = tex2D(_MainTex, float2(-input.positionWS.y , input.positionWS.x )*_Tilling.xy+_Time.x*_TimeSpeed.xy);
half4 Secondcolorz = tex2D(_MainTex, float2(-input.positionWS.y , input.positionWS.z)*_Tilling.xy+_Time.x*_TimeSpeed.xy);
//没有用到Y 因为我不想在横截面显示 如果需要都显示就加上Y 
half4 Secondcol =Secondcolorx* triW.x+ Secondcolorz* triW.z;

//纹理采样
half4 Secondcolorx2 = tex2D(_MainTex, float2(input.positionWS.y, input.positionWS.x ));
half4 Secondcolorz2 = tex2D(_MainTex, float2(input.positionWS.y, input.positionWS.z ));
half4 Secondcol2 =Secondcolorx2* triW.x+ Secondcolorz2* triW.z;//+ Secondcolorz * triW.z);
//边框
float color  = UVMake(frac(input.positionWS.xyz));

half4 finalcol = (Secondcol2.r)*pow(Secondcol.a,1)+color*0.5;
return finalcol;
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值