小编给大家分享一下Unity如何做流体物理的几个轮子,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
创新互联-专业网站定制、快速模板网站建设、高性价比南昌网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式南昌网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖南昌地区。费用合理售后完善,10年实体公司更值得信赖。
内部实现就是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如何做流体物理的几个轮子”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款