unityshader-水晶

下图是参考

1.搜一张拉丝贴图放进ps里转成法线贴图,纹理感调低一点

2.基础贴图为一张星空图 最好亮暗分明 四方连续 基础色和想要的水晶颜色差不多 再手绘一些气泡和偏色

//菲涅尔
        half3 view_dir = normalize(_WorldSpaceCameraPos.xyz -  i.pos_world);
        half3 reflect_dir = reflect(-view_dir, normal_dir);//反过来是因为前面算的是顶点到摄像机的方向
		float fresnel_fac = 1 - clamp(dot(normal_dir,view_dir),0,1);
		float fresnel = abs(max(pow(fresnel_fac ,_RimPower),0.0) * _RimScale );

//结合了uv轴向的菲涅尔效果 使水晶暗部更明显
float center =length(i.uv.y * fresnel * 7) ;

//分深浅两个颜色 并采样基础贴图 用lerp混合颜色和贴图
float2 normal_view = (mul( UNITY_MATRIX_MV, float4(normal_dir,1)).xyz).xy;
//贴图UV和模型uv采样贴图 加一点灯光强度影响 白天光强的时候uv分割多像反射效果
  float2 inside_uv = temp * _MainTex_ST.xy + _MainTex_ST.zw + normal_view*_MainLightColor.r;
  half3 inside_color = tex2D(_MainTex,inside_uv);
  float center =length(i.uv.y * fresnel * 7) ;
  half3 deep_color = lerp(_InsideColor2,_InsideColor,center);
  half3 inside_color_final = lerp(inside_color,deep_color ,_RimBase);

//偏光色 采样一张噪声图  多加几个值调节效果
float2 uv_magic =  i.uv +  _Time.y * _NormalSpeed.zw * 0.05 + normal_dir * _NormalSpeed.x + _MagicMap_ST.zw;
half3 magic_map = tex2D(_MagicMap,uv_magic);
float magic_blink = max(sin((frac(_Time.y * _MagicBlinkContorl.x)) *3.14),_MagicBlinkContorl.y);
half3 magic_color = magic_map * _MagicIntensity * _MagicColor * magic_blink  * max( _GlobalDirectionLightIntensity,1);

inside_color_final = inside_color_final * magic_color + inside_color_final;

后面加个高光就好了 最好是有颜色的高光 懒得写了要吃饭去了 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值