我正在尝试使用我为 Unity 制作的液体物理资源来实现元球液体效果。 我模拟了 1000 个粒子。然后,我将这些粒子中的每一个渲染为 Unity shruiken 粒子渲染器中的一个粒子。它们以 Alpha 和透明方式渲染。使用移动\粒子 lphablend 着色器
这是使用的图像
然后,我将所有这些渲染到渲染纹理,并让着色器读取此渲染纹理并在网格上绘制最终液体。 着色器代码是这样的..
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;
}
如果整体 alpha 低于某个值,则绘制 0 alpha。
这是渲染纹理的样子...
到目前为止一切顺利,顺便说一句,这两个白球是精灵,使用与 shruiken 粒子相同的纹理和相同的着色器。
现在 alpha 值在渲染纹理和编辑器中看起来都很好。但是着色器从 shruiken 粒子读取的值是错误的,这是我的问题。 这是一张显示着色器读取的 alpha 值的图像,其中红色 = alpha。
你可以看到两个精灵都很好,它们的 alpha 值加在一起,而 shruiken 的则错误,看起来每个粒子的原始 alpha 值都覆盖了它后面的粒子。所以粒子之间的空间趋向于具有非常低的 alpha 值,而它应该很高(并且在编辑器和渲染纹理中看起来很高)
很久以前,我使用旧的椭球体粒子发射器(已被删除,迫使我切换到shruiken)就完美地实现了这个精确的解决方案......此外,如果我使用1000个精灵,这将完美呈现,但会有那里的性能成本。
我的问题是...
除了 Unity Shruiken 粒子系统之外,还有其他替代方案来绘制大量像这样的小精灵吗?我只能切换到任何替代方案作为解决方法。
你认为我可以在 shruiken 系统上更改任何设置来解决这个问题吗(它几乎都是默认的 atm。)
好吧,出于某种原因, 这个内置着色器有问题.. Mobile\Particles\Alphablend 但这个内置着色器不.. Sprites\Default
将我在 shruiken 粒子系统中使用的材质切换到内置 Sprites\default 着色器解决了我的问题。