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;

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

根据提供的引用内容,以下是一个Unity水晶Shader的示例: ```shader Shader "Custom/Crystal" { Properties { _MainTex ("Main Texture", 2D) = "white" {} _Color ("Color", Color) = (1,1,1,1) _Glossiness ("Glossiness", Range(0,1)) = 0.5 _Metallic ("Metallic", Range(0,1)) = 0.0 _FresnelColor ("Fresnel Color", Color) = (1,1,1,1) _FresnelPower ("Fresnel Power", Range(0,10)) = 1.0 _Transparency ("Transparency", Range(0,1)) = 0.5 } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma surface surf Standard fullforwardshadows #pragma target 3.0 sampler2D _MainTex; fixed4 _Color; float _Glossiness; float _Metallic; fixed4 _FresnelColor; float _FresnelPower; float _Transparency; struct Input { float2 uv_MainTex; }; void surf (Input IN, inout SurfaceOutputStandard o) { fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; o.Albedo = c.rgb; o.Metallic = _Metallic; o.Smoothness = _Glossiness; o.Alpha = 1 - _Transparency; // Fresnel Effect float fresnel = pow(1 - dot(viewDir, o.Normal), _FresnelPower); fixed4 fresnelColor = _FresnelColor * fresnel; o.Emission = fresnelColor.rgb; // Rim Lighting float rim = 1 - dot(viewDir, o.Normal); o.Emission += rim * _FresnelColor.rgb; // Transparency o.Alpha *= 1 - _Transparency; } ENDCG } FallBack "Diffuse" } ``` 该Shader具有以下特性: - 使用_MainTex作为主要纹理。 - 可以调整颜色、光泽度、金属度、Fresnel颜色、Fresnel功率和透明度。 - 使用Fresnel效果和边缘光使水晶看起来更加逼真。 - 支持透明度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值