16-04-2019, 12:52 PM
(This post was last modified: 16-04-2019, 01:00 PM by mimarilker.)
(16-04-2019, 09:42 AM)mimarilker Wrote: Hi,
Thanks for the update! I have imported Obi to a new project and tried to run KarmanVortex scene. However, I got an error with ParticleAdvector.cs
ArgumentNullException: Value cannot be null.
Parameter name: particles
UnityEngine.ParticleSystem.GetParticles (UnityEngine.ParticleSystem+Particle[] particles, System.Int32 size) (at C:/buildslave/unity/build/Runtime/ParticleSystem/ScriptBindings/ParticleSystem.bindings.cs:243)
UnityEngine.ParticleSystem.GetParticles (UnityEngine.ParticleSystem+Particle[] particles) (at C:/buildslave/unity/build/Runtime/ParticleSystem/ScriptBindings/ParticleSystem.bindings.cs:244)
Obi.ParticleAdvector.ReallocateParticles () (at Assets/Obi/Scripts/Emitter/ParticleAdvector.cs:49)
I have compared the older ParticleAdvector.cs with the new one. It seems that Solver_OnStepBegin is not included anymore, ad the line causing the error "alive = ps.GetParticles(particles);" is in the ReallocateParticles() which was in Solver_OnStepBegin, before. Could you please check it out?
I have resolved the problem by calling "alive = ps.GetParticles(particles);" in the "Solver_OnStepEnd" (see the attachment). However, I couldn't colourize unity native particles according to the other parameters like viscosity and vorticity. I am trying to colourize particles according to pressure. I thought that in this version it is possible. Btw, I can do colourize Obi particles according to pressure with ObiParticleRenderer like that;
void E_Solver_OnFrameEnd (object sender, EventArgs e)
{
if (!isActiveAndEnabled)
return;
for (int i = 0; i < emitter.particleIndices.Length; ++i)
{
int k = emitter.particleIndices[i];
float density = emitter.Solver.fluidData[k][0];
float restDensity = emitter.Solver.restDensities[k];
//calculate pressure
float Pressure = (density - restDensity) ;
//colorize Obi Particles according to pressure with considering user defined min and max values.
emitter.colors[i] = grad.Evaluate((Pressure - min) / (max - min));
}
}
(16-04-2019, 12:52 PM)mimarilker Wrote: I have resolved the problem by calling "alive = ps.GetParticles(particles);" in the "Solver_OnStepEnd" (see the attachment). However, I couldn't colourize unity native particles according to the other parameters like viscosity and vorticity. I am trying to colourize particles according to pressure. I thought that in this version it is possible. Btw, I can do colourize Obi particles according to pressure with ObiParticleRenderer like that;
void E_Solver_OnFrameEnd (object sender, EventArgs e)
{
if (!isActiveAndEnabled)
return;
for (int i = 0; i < emitter.particleIndices.Length; ++i)
{
int k = emitter.particleIndices[i];
float density = emitter.Solver.fluidData[k][0];
float restDensity = emitter.Solver.restDensities[k];
//calculate pressure
float Pressure = (density - restDensity) ;
//colorize Obi Particles according to pressure with considering user defined min and max values.
emitter.colors[i] = grad.Evaluate((Pressure - min) / (max - min));
}
}
Sorry for posting too much, but the script that I attached seemed to work to me, however, I have noticed that it's very problematic with respect to performance. So please don't consider it as a solution.