zaterdag 16 mei 2009

Hybride algoritmes

We ondervinden enkele problemen met de koppeling tussen het heightfield en de particles. Wat er eigenlijk gebeurt kun je zien in volgende screenshots:


De particles duwen op het heightfield waardoor er lokaal een put ontstaat. Hier komen steeds meer particles in, zodat de put groter wordt. Het resultaat zie je in het rechter prentje: niet echt de bedoeling dus.

Om dit effect te counteren hebben we enkele methodes uitgetest:
  • Parameters aanpassen
    We kunnen bijvoorbeeld een grotere graviteitsconstante of kleinere timestep nemen voor het heightfield. Hierdoor zal hij stroefer bewegen maar wel tot een horizontaal evenwicht komen. Deze methode werd toegepast in het eerder geposte filmpje. We willen toch liever niet met fysische waarden prutsen dus gingen we opzoek naar andere technieken.
  • Krachten van heightfield op particles
    We kunnen berekenen welke versnelling het heightfield kent en deze omzetten naar krachten. Deze krachten zorgde er wel voor dat de particles minder hard duwden, maar een horizontaal evenwicht is nog steeds niet gegarandeerd: van zodra teveel particles bij elkaar komen ontstaat er weer een put.
  • Herverdeling van het water
    Tijdens de integratie fase van het heightfield moet verdwenen volume gecompenseerd worden (het volume werd eerst afgenomen op plaatsen waar particles op de heightfield duwen). Dit gebeurde eerst uniform maar we kunnen lager water meer voordeel geven. Hier zal dan sneller water toegevoegd worden waardoor het heightfield wel terug naar een horizontale toestand evolueert. De resultaten vind je hieronder.



In het eerste plaatje zie je een golf die terug naar de gemiddelde hoogte wordt getrokken (helemaal rechts is de hoogte het laagste en daar zal volumecompensatie optreden). Het heightfield zal hierdoor niet heel drastisch bewegen, zoals je ook kan zien in het rechter plaatje. De bewegingen sterven nu heel snel uit.

We denken dat we beter resultaten zullen krijgen wanneer de heightfield geen hard boundary is. We laten de particles er gewoon doorvallen en door middel van een artificiële buoyancy kracht duwen we ze terug naar het oppervlak. Hoe we dit net op de grafische kaart gaan implementeren volgt in een volgende blogpost, samen met de resultaten. Hieronder volgt nog een schets van het huidige algoritme:

Geen opmerkingen: