[sw 3d/c++] Real-time bumpmapping wil niet echt

Pagina: 1
Acties:

  • MisterData
  • Registratie: September 2001
  • Laatst online: 22-08 19:41
Ik ben zoals jullie (misschien niet?) weten bezig met een kleine software 3d engine. Tot nu toe heb ik er plaatjes als torusknopen met envmapping, phongshading en texturing uit weten te toveren. Nu wil ik graag bumpmapping erin maken. Ik heb verschillende docs erover gelezen, en daaruit heb ik de volgende werkwijze bedacht:

• Bereken vantevoren van de bumpmap de 'slope-factor' (dus het verschil tussen een pixel en zijn buren links, rechts, boven en onder afzonderlijk)

• Pak tijdens het rasterizen de goede pixels uit de bumpmap (dmv de al ingebowude maneir van texture mapping) en pas de normals aan met behulp van de slope factor-map.

Maar dit geeft niet het gewenste resultaat. Daarom vraag ik jullie wat ik verkeerd doe en hoe het beter kan. Hoe moet ik bijvoorbeeld de normals (die worden gebruikt om lighting uit een lightmap te berekenen) aanpassen gebruikmakend van de bumpmap' slope factor?

Dit gaat dus puur over software-rendering in C++ :)

  • EfBe
  • Registratie: Januari 2000
  • Niet online
afaik, is bumpmapping het verschuiven van een bumpmap tov de texture , aan de hand van een lightvector die je vergelijkt met de pixelnormal. Die pixelnormal interpoleer je al. Bumpmapping is dus in feite de verschuiving berekenen van de bump map (de donkere pixels die je gaat blenden met de texture) en dan de juiste pixel lezen, die blenden met de colorfragment die je wilt zetten (uit de texture gelezen) en dat is je resultpixel.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je hebt verschillende soorten bumpmapping, net als dat er verschillende effecten zijn die je op een polygoon kunt toepassen. Denk aan diffuse lighting, specular lighting, environment mapping, etc.. Eigenlijk is er voor elk effect ook een bumpmapping variant

Bij de belichting gaat het er natuurlijk om dat je in plaats van de geinterpoleerde normaalvector de normaalvector van de bump op dat punt neemt in je berekeningen. Bij environmental bumpmapping (evbm) gaat het er om dat je de texturecoordinaten per pixel verschuift (dus in plaats van dat je het snijpunt berekend met een sphere of box aan de hand van de geinterpoleerde normaalvector, gebruik je weer een bumpnormaal)

Dus welke techniek wil je precies gebumpmapped hebben?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • MisterData
  • Registratie: September 2001
  • Laatst online: 22-08 19:41
.oisyn schreef op 07 June 2003 @ 16:34:
Je hebt verschillende soorten bumpmapping, net als dat er verschillende effecten zijn die je op een polygoon kunt toepassen. Denk aan diffuse lighting, specular lighting, environment mapping, etc.. Eigenlijk is er voor elk effect ook een bumpmapping variant

Bij de belichting gaat het er natuurlijk om dat je in plaats van de geinterpoleerde normaalvector de normaalvector van de bump op dat punt neemt in je berekeningen. Bij environmental bumpmapping (evbm) gaat het er om dat je de texturecoordinaten per pixel verschuift (dus in plaats van dat je het snijpunt berekend met een sphere of box aan de hand van de geinterpoleerde normaalvector, gebruik je weer een bumpnormaal)

Dus welke techniek wil je precies gebumpmapped hebben?
Wat ik wil is bijvoorbeeld dat als ik een texture van de wereldkaart heb en die op een sphere projecteer, dat ik dan met bumpmapping bijvoorbeeld de continenten hoger kan krijgen dan de oceanen. Die hoogtes haal je dan gewoon uit een andere bitmap met de grootte van een texture.

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
unmissable siteje:

http://freespace.virgin.net/hugo.elias/graphics/x_main.htm#4

voor fast bump zie naar 'lighting' section.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

MisterData schreef op 09 juni 2003 @ 12:57:
[...]


Wat ik wil is bijvoorbeeld dat als ik een texture van de wereldkaart heb en die op een sphere projecteer, dat ik dan met bumpmapping bijvoorbeeld de continenten hoger kan krijgen dan de oceanen. Die hoogtes haal je dan gewoon uit een andere bitmap met de grootte van een texture.
.edit: wat jij bedoelt is geen EVBM, lees onder verder

Environmental bumpmapping dus. Ik weet niet precies hoe de techniek werkt, maar het komt erop neer dat je een uv-bumpmap hebt, waarbij elke u en v de 'displacement' van elke bump voorstelt. Deze map kun je van tevoren genereren uit een heightmap.

Hoe het precies in z'n werk gaat weet ik niet, maar dat kun je wel vinden als je zoekt op "environmental bumpmapping"



Hoe bedoel je, de continenten hoger dan de oceanen? Bedoel je dat de pixels ook daadwerkelijk op een andere plaats komen te liggen? Of dat het licht zo valt alsof het lijkt dat ze hoger liggen

Zie bijvoorbeeld dit plaatje:
Afbeeldingslocatie: http://www.pvrdev.com/doc/f/Bump%20Mapping_files/image010.jpg

Hier is de texture gewoon normaal erop geplakt. De bumps komen echter door de diffuse en specular lighting die de hoogteverschillen accentueren.

Dit is wel te bereiken met EVBM, door een lightmap als environment map te gebruiken. Als je echt de pixels wilt verplaatsen, dus dat de edges er ook bumpy uitzien: veel succes, maar daar zul je niet veel info over vinden, omdat dat gewoonweg amper te doen is ;)
Of je moet eens kijken naar displacement mapping, waar een plat vlak wordt getesselate aan de hand van een heightmap. Dan heb je dus echte polygonen die de bumps voorstellen

[ Voor 41% gewijzigd door .oisyn op 09-06-2003 14:26 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • MisterData
  • Registratie: September 2001
  • Laatst online: 22-08 19:41
.oisyn schreef op 09 June 2003 @ 14:14:
[...]


Hoe bedoel je, de continenten hoger dan de oceanen? Bedoel je dat de pixels ook daadwerkelijk op een andere plaats komen te liggen? Of dat het licht zo valt alsof het lijkt dat ze hoger liggen
dat het zo lijkt.
Zie bijvoorbeeld dit plaatje:
[afbeelding]
Zoiets wil ik dus bereiken.
Hier is de texture gewoon normaal erop geplakt. De bumps komen echter door de diffuse en specular lighting die de hoogteverschillen accentueren.

Dit is wel te bereiken met EVBM, door een lightmap als environment map te gebruiken.
Kan ik niet gewoon berekenen tijdens het rasterizen hoe het licht op een 'plooi' valt?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Tuurlijk, dan moet je kijken naar diffuse en specular bumpmapping (wordt ook gebruikt in Doom III)

Die gaan uit van normal maps, waarbij elke texel in de bumpmap (bumpel? ;)) aangeeft wat de normaal is van die bump. Vervolgens doe je gewoon lichtberekeningen met de geinterpoleerde licht-vector en die normalmap. Dit brengt wel wat extra werk met zich mee, aangezien je de lichtvector moet transformeren naar het lokale assenstelsel van de polygoon (en dat voor elke polygoon). Of eigenlijk per vertex om een smooth effect te krijgen

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • MisterData
  • Registratie: September 2001
  • Laatst online: 22-08 19:41
.oisyn schreef op 09 June 2003 @ 14:53:
Tuurlijk, dan moet je kijken naar diffuse en specular bumpmapping (wordt ook gebruikt in Doom III)

Die gaan uit van normal maps, waarbij elke texel in de bumpmap (bumpel? ;)) aangeeft wat de normaal is van die bump. Vervolgens doe je gewoon lichtberekeningen met de geinterpoleerde licht-vector en die normalmap. Dit brengt wel wat extra werk met zich mee, aangezien je de lichtvector moet transformeren naar het lokale assenstelsel van de polygoon (en dat voor elke polygoon). Of eigenlijk per vertex om een smooth effect te krijgen
Kan ik niet gewoon een bumpmap maken die m'n engine vertelt hoeveel de normal moet worden verplaatst? Dat scheelt een hoop werk dan....

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
ooit gegoogled?(of mijn vorige post even gevolgd?)

http://www.programmersheaven.com/zone10/cat433/

  • MisterData
  • Registratie: September 2001
  • Laatst online: 22-08 19:41
Ja, 2D bumpmapping had ik ook al gevonden (www.idx3d.ch staat bij 'Java FX' een mooie 2D bumpmap applet). De vraag is hoe ik de methode die de applet gebruikt omzet naar 3D :o

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
MisterData schreef op 10 June 2003 @ 21:43:
[...]
Mooie 2D bumpmap applet). De vraag is hoe ik de methode die de applet gebruikt omzet naar 3D :o
http://www.exaflop.org/do...#Bump%20mapped%20polygons.
http://www.flipcode.com/tutorials/tut_bumpmap.shtml
Pagina: 1