您好,登录后才能下订单哦!
小编给大家分享一下Unity如何做流体物理的几个轮子,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
内部实现就是Liquidfun
也提供了metaball实现(虽然2D的metaball实在没啥可说的)
half4 frag (v2f i) : COLOR
{
half4 texcol,finalColor;
finalColor = tex2D (_MainTex, i.uv);
if(finalColor.a < _botmcut)
{
finalColor.a = 0;
}
else
{
finalColor.a *= _constant;
}
return finalColor;
}
原理就是按透明度阈值discard掉阈值外的像素,圆片的实际范围会比显示的多探一部分出去,两个圆片探出来的部分叠在一起,透明度就会超过阈值变得能够显示,看起来两个水滴就会粘连在一起了,而不是相互独立的圆。
但是3D水不能只考虑密度,还要考虑法线。且3D空间里密度也不能简单Blend实现叠加,3D空间同时也会因为纹理的大小限制而不能像2D空间这么铺张浪费,导致算法变得完全不同。2D水渲染是看起来复杂实际上很简单的例子,而3D水渲染恐怕就是看起来复杂实际上更复杂的例子了。
不过令我比较意外的是,Liquidfun里面大部分示例都没有用metaball技术,而是直接用AlphaBlend将全部粒子绘制上去的。它使用了大小接近像素的粒子,然后根据物理计算出来的流体密度来直接给粒子着色(水面和泡沫密度低所以是白色的,水底密度高所以是深色的),已经可以得到足够理想的结果。
仔细想想和metaball根据透明度重映射差不多,它只是把累计密度的部分直接放到了物理上处理,然后往屏幕上直接画点罢了。
它最后的这个weight演示能充分体现出其着色原理。
以上是“Unity如何做流体物理的几个轮子”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。