Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Interpolatie tussen verschillende grids

Pagina: 1
Acties:

  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 28-11 20:49

Sponge

Serious Game Developer

Topicstarter
Ik ben al behoorlijk wat dagen bezig om het eea. voor elkaar te krijgen met interpolatie tussen verschillende grids. Het gaat hier om heightfields waarbij de pixel intensiteit de hoogte van een bepaalde vloeistof weergeeft. Helaas zitten er grote stappen tussen de data, en nu moet ik dat op een of andere manier zien te interpoleren naar 'tussenframes'.

Echter: Ik krijg dit niet goed voor elkaar. Op dit moment heb ik een inverse distance weighing geimplementeerd, wat wel een tijdelijke bruikbaar resultaat geeft, maar het zou echt beter moeten. Ik zit ook al te denken om een A* achtig iets te gebruiken (die dus alle nodes doorzoekt, alleen zonder eind punt).

Na vele uren googlen weet ik nog steeds niet waar ik precies op moet zoeken. Optical flow, matching algorithms, spatial interpolation, etc. Mmaar eigenlijk niets wat op meerdere grids slaat. Heeft iemand suggesties om deze interpolatie goed te kunnen verlopen? De 'hoogtes' (intensiteit) kan ook varieren over tijd, op plekken die al eerder succesvol geinterpoleerd waren.

Hier een voorbeeld van drie frames:

Afbeeldingslocatie: http://www.persistentrealities.com/shared/frames/frame_2.pngAfbeeldingslocatie: http://www.persistentrealities.com/shared/frames/frame_3.pngAfbeeldingslocatie: http://www.persistentrealities.com/shared/frames/frame_4.png

Een tip met een aanwijzing naar de juiste richting wordt zeer gewaardeerd. ;)

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

Ik mis misschien wat context, maar ik zie hier geen "grid" in. En als dit de enige 3 images zijn die je hebt, gaat het wel tegenvallen om daar iets mee te doen.

Maar misschien kan je met de "beste" image gewoon een 3D model bouwen, en dan terugwerken met vloeistof simulatie in dat model?

-niks-


  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 28-11 20:49

Sponge

Serious Game Developer

Topicstarter
Het is een heightmap, wat in feite dus een 2D grid is ;). Uiteindelijk maak ik een 3D model (grijswaarde is de hoogte, x,y van de bitmap zijn de x,y coordinaten) van deze afbeeldingen, maar die moet dus interpoleren tussen deze frames. Een eigen simulatie (bijvoorbeeld een Navier Stokes implementatie) zal niet matchen met deze uitkomst, en dat is dus net het probleem... Vandaar dat ik ook dacht aan een soort a* algoritme die de omgeving verkend per cel om zo te interpoleren naar de volgende frame.

  • EddoH
  • Registratie: Maart 2009
  • Niet online

EddoH

Backpfeifengesicht

Misschien denk ik te simpel, maar als je lineair een n-aantal tussenframes van 2 heightfield data's wilt genereren, dan is de pixelwaarde voor de tussenframe n_frame toch gewoon:
pixelwaarde_start + n_frame * ((pixelwaarde_eind - pixelwaarde_start) / n) ?

[ Voor 4% gewijzigd door EddoH op 28-02-2011 11:16 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
^ Dat is precies wat ik dacht...

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 28-11 20:49

Sponge

Serious Game Developer

Topicstarter
Maar dan heb je dus een interpolatie die inderdaad netjes interpoleert tussen twee frames (een lerp), en wordt dus het tweede frame overal evenveel opgehoogd. Zo gaat dat niet met een vloeibaar medium, dat verplaatst zich :).

Ik heb nu uiteindelijk een basis implementatie die werkt, die werkt alleen op pixels met alpha > 0. Voor elke pixel die hier aan voldoet, worden pixels eromheen geinterpoleerd en voor de volgende frame hebben deze dus ook alpha > 0. Hierdoor krijg je dus een aardig 'vloeibaar' effect. Behalve dat het zorgt voor nog wat rechte lijnen, wat niet de bedoeling is. Hoe ik dit kan verbeteren zal ik later nog even uitzoeken :).

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Ik snap het niet helemaal, maar misschien eerst een water shedding algoritme draaien, en al die pixels ophogen? Wikipedia: Watershed (image processing) (eigenlijk een flood-fill op je heightmap dus. Ik zou dat denk ik doen door een lijst van edge pixels bij te houden, en bij elke op te slaan bij welke hoogtewaarde ze edges hebben die gevuld moeten worden, en die lijst gesorteerd op die waardes te houden.)

[ Voor 48% gewijzigd door Zoijar op 01-03-2011 11:37 ]

Pagina: 1