在腾讯GAD上看到一篇文章http://gad.qq.com/program/translateview/7187984。
由于文章中并没有给出源码,所以自己尝试实现了一下,文章最后有完整shader代码。
消融效果很简单,只要在fragment中丢弃无效的像素点即可
fixed4 color = tex2D(_MainTex,uv);
if(color.r <= _Rate){
discard;
}
return color;
这里我设置了一个变量_Rate来控制消融的程度
接下来是世界空间uv,在这里我遇到一个问题,原文中提到"可以透过一些向量运算出能够作用于所有表面的UV集合",猜想应该是使用法线对顶点进行坐标系的转换,但是这里我始终没能想出具体的解决方案,所以这里我只能暂时使用一个笨方法来实现,就是根据法线来判断应该取顶点在3维坐标系中的哪两个轴的坐标来作为uv坐标:
float2 uv = i