一个移动端可用的水晶体材质

 

在SD中制作贴图

 

基础色+环境光遮蔽

细节纹理

自发光+粗糙度

法线

二、Unity shader

  1. 基础光照

整体思路:

finalRGB = 环境漫反射+光照漫反射+环境镜面反射+光照镜面反射+自发光

环境漫反射:

half3 ambient = _AmbientCol;

光照漫反射:兰伯特+ 阴影

half3 baseCol = var_MainTex.rgb * ambient ;

half lambert = max(0.0,nDotl);

half Shadow = LIGHT_ATTENUATION(i);

环境镜面反射:菲涅尔+反射探头 + ao

vrDirWS = BoxProjectedCubemapDirection(vrDirWS, i.posWS, unity_SpecCube0_ProbePosition, unity_SpecCube0_BoxMin, unity_SpecCube0_BoxMax);

half4 rgbm = UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, vrDirWS);

half3 reflection = DecodeHDR(rgbm, unity_SpecCube0_HDR);

half3 fresnel = max(0.0,1-nDotv) * _FresnelPow * var_MainTex.rgb;

half3 diffenvCol = aocol * _AOInt + fresnel * _AmbientCol;

光照镜面反射:blinn-phong

half BlinPhong = pow(max(0.0,nDoth),rough * _SpecPow);

half spec = BlinPhong * max(0.0,nDotl);

spec = spec * _SpecInt;

half3 DirSpec = var_MainTex.rgb * spec * _LightColor0;

自发光:

half3 emis = var_EmitTex.r * _EmitInt;

  1. 视差贴图

为了增加模型的通透感,采样了两次视差贴图

half BumpColor= tex2D(_MainTex, (-i.uv0 * _MainTex_ST.xy + _MainTex_ST.zw) + i.offset*0.4).a;

diff = diff + BumpColor;

第一次采样了一次ao,让水晶表面的裂纹层次更加丰富

第二次采样增加了水晶内部的杂质颗粒

三、性能优化

1.尽可能的合并贴图减少贴图采样次数

2.贴图尺寸不超过512

3.不使用HDR颜色参数

4.不使用高等精度的数据类型

junyangtong/Toon_crystal: 一个移动端可用的水晶体材质 (github.com)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值