3D software rendering med Delphi

Tags:    delphi
Skrevet af Bruger #1474 @ 11.08.2008

Phong Shading

Phong er nok den mest kendte reflektions model. Phong shadingen bruger Lambert modellen til at beregne diffuse farven. Phong vil derfor få overfladerne i scene til at se blanke ud. Tilføj følgende Phong funktion til renderings klassen og brug den i stedet for Lambert funktionen. Her er den matematiske formel for Phong reflektions model:



Her er koden:

Fold kodeboks ind/udKode 


Renderingen vil nu se således ud



Du har sikkert bemærket at teksturen er meget pixeleret. Det skyldes vores meget simple måde at aflæse vores pixels i teksturen. Der er findes forskellige måder at lave en mere detaljeret aflæsning af teksturen. Bilineær aflæsning er nok den mest kendte af dem alle. Den er utrolig let at implementere, så jeg har faktisk allerede gjort det i vores GetPixel funktion i TGA klassen. I stedet for kun at aflæse én bestemt pixel i teksturen vil bilineær algoritmen også aflæse alle omkring liggende pixels og finde gennemsnits farven af dem. Du kan lave en bilineær aflæsning ved at sætte parameteren: BilinearFilter, til True når du kalder TGA klassens GetPixel funktion fra renderings klassens: ShadePixel, funktion. Renderingen vil se således ud med bilineær tekstur aflæsning:



Der er utrolig meget at fortælle endnu omkring Raytracing. Vi har slet ikke diskuteret algoritmer for optimering af Raytracing. Renderingstiden er forholdsvis acceptabel for små simple scener som denne artikel har behandlet. Hvis du ønsker at rendere mere komplekse scener vil du opleve en utrolig lang vente tid. Raytracing kan blive optimeret meget uden forringelse af billedekvaliteten. Der er en god stykke vej endnu til at få en professionel software rendering ud af det kode denne artikel har introduceret. Der er en masse visuelle effekter der vil være interessant og sjov at implementere. Det mest utrolige ved software rendering, er, at du slet ikke bruger grafikkortet. Det hele bliver udregnet at computerens CPU. Det betyder at du har 100% frihed til dine renderinger. Forhåbenligt har denne artikel givet dig et lille indblik i Raytracing og givet dig lyst til at gå videre med din helt egen software rendering. Måske en dag vil dit renderingsprogram være det software alle de profesionelle animatorer vælger at bruge i fremtiden.

Denne artikel har fungeret som en slags appetitvækker. Vi har med hast været inde på nogle store og meget komplekse områder. Det er helt klart anbefalsværdigt at du på egen hånd går disse emner helt i bund. Her er en liste over interessante emner der kan udvide din rendering og gøre dit software mere attraktiv:

Rendering af flere typer lyskilder: Spotlight, Directional Light!
Rendering af flere lyskilder.
Rendering af skygger.
Rendering af reflektioner og refraktioner.
Tilføjelse af Anti-aliasing.
Flere reflektions modeller: Blinn, Metal, Plastic, Velvet osv.
Rendering af bumpmaps eller normalmaps.
Rotering af geometri: Matrix bereging.
Og til sidst men ikke mindst: Optimering af renderingen.

Listen kunne sagtens udvides men de nævnte emner vil nok være mest naturligt at gå i gang med efter denne artikel.

Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (2)

User
Bruger #14855 @ 17.06.09 15:33
Hmm, god artikel, men ringe du har lavet PRÆCIS den samme artikel, bare med C++!
User
Bruger #1474 @ 29.06.09 19:03
Koden er jo ikke den samme!
Du skal være logget ind for at skrive en kommentar.
t