3D techniek en programmeren

3d kubusIn 1991 en 1992 werd mijn belangstelling voor 3d technieken als ervaren C en C++ programmeur gewekt door de serie artikelen van Michael Abrash in het Amerikaanse tijdschrift Dr Dobbs die ik in die tijd trouw elke maand las. Aangezien de computers nog niet zo snel waren in die tijd en geheugen ook nog beperkt was moesten we via omwegen toch proberen om enige snelheid te halen. Ik heb in deze tijd ook een complete fixed point wiskundige bibliotheek in x86 assembler geschreven waarmee ik in C snel 3d vectoren kon omrekenen en polygonen kon renderen. Samen met alle informatie over 3D programmeren van Michael Abrash heb ik in die tijd een een vrij aardige 3D demo gemaakt en deed ik mee aan demo competities. Michael Abrash ging ten tijd van deze artikelen voor voor Microsoft werken en toen ik tegen de beperkingen van de hardware aanliep begon mijn belangstelling wat terug te lopen maar de basiskennis is altijd gebleven. Op deze pagina wil ik wat algemene informatie geven over 3D technieken en 3D programmeer technieken maar ook een klein stukje wiskunde. Wanneer u wilt programmeren voor 3D applicaties is een basis van wiskunde noodzakelijk. Maar nog nooit was wiskunde zo leuk omdat u gelijk erg leuke resultaten kunt zien. Vriendelijke groet, Hein Pragt


Coördinatenstelsel

U kent de term 3D wel en deze afkorting staat voor driedimensionaal, het gaat dus om een ruimtelijke omgeving met drie dimensies. De drie dimensies worden ook wel lengtedimensies genoemd, omdat we aan de hand van deze lengtedimensies elke positie in een ruimte kunnen aanwijzen. Door middel van drie dimensies is het dus mogelijk om exact de positie in een omgeving te specificeren. In de wiskunde spreken we van een coördinatenstelsel met 3d coördinaten. Elk punt kan beschreven worden door middel van een x een y en een z coördinaat. Er bestaan verschillende posities van coördinatenstelsels waarbij men van een andere richting van de x, y en z assen uitgaat. In het Engels spreken we dan over een lefthand of een righthand coördinatenstelsel.

righthand lefthand

Wat is raytracing?

© 2009 Hein Pragt

raytracingDoor middel van raytracing kan een 3D scène omgezet worden in een tweedimensionaal beeld. De objecten, de lichtbronnen en de camera in een scène worden wiskundig omschreven en van een plaats in de vorm van een x, y en een z coördinaat samen met andere eigenschappen, zoals kleur, oppervlakte en mate van reflectie voorzien. Voor elke pixel in het 2D beeld wordt een lichtstraal (ray) vanuit de camera de scène in geschoten en gevolgd (tracing) om te kijken met welk object deze straal in aanraking komt. Voor het punt waar de straal het object raakt wordt de kleur berekend (door rekening te houden met de kleur en de eigenschappen van het object) en dit bepaald de kleur van één pixel in het 2D beeld. Shading word gebruikt om de intensiteit van de kleur te bepalen op het voorwerp. Het is bijvoorbeeld mogelijk dat er een voorwerp (gedeeltelijk) tussen het licht en het object staat, hierdoor zal er dus een schaduw effect optreden. Het voorwerp kan nog wel gedeeltelijk belicht worden door andere lichtbronnen of omgevingslicht. Een andere eigenschap is reflectie van een object. Reflectie is het weerkaatsen van een straal, dit kan gedaan worden door een nieuwe straal te creëren door de botsing van de eerste straal. Het resultaat van deze straal zal dan opgeteld worden bij de eerste oorspronkelijk straal. Op deze manier kan een raytracer zelfs spiegeling of spiegels genereren. Refractie is het buigen van licht bij een botsing, transparante materialen zoals glas en water doen dit vooral. Behalve objecten kan licht ook een kleur hebben en ook een vorm zoals omgevingslicht maar ook brede en smalle spot lichten.

Wat is raycasting?

© 2009 Hein Pragt

raycastingRaycasting is een meer eenvoudige techniek om toch met grote snelheid een 3D scène te kunnen renderen. Om een vloeiend beeld te krijgen zullen bijvoorbeeld 20 frames per seconde berekend moeten worden en daarvoor is raytracing te complex en te traag. Een van de eerste spellen die gebruik maakte van raycasting was Wolfenstein en later ook Doom. De techniek die Wolfenstein gebruikte was vanuit het punt van de speler (de camera) een lijn trekken en kijken hoever je die lijn door kunt trekken totdat je een muur (of iets anders) tegenkomt. De afstand tussen de speler en deze muur gebruik je om te bepalen hoe hoog dat stukje muur moet zijn, kleine afstanden zorgen voor een hoge muur en grote afstanden voor een kleine muur (objecten lijken immers kleiner naarmate ze verder weg staan). Dit doe je vervolgens voor het hele blikveld van de speler en het effect is klaar. Een simpele vorm van shading is te bereiken door iets op afstand donkerder te maken of de hoek van het object ten opzichte van de lichtbron te gebruiken voor de bepaling van de intensiteit van het licht. Ook raycasting engines gebruiken steeds meer technieken van het raycasten en naarmate de snelheid van de processoren toeneemt, kan er natuurlijk ook meer schading, oppervlakte effecten e.d. berekend worden. Een leuke technisch stukje in het Engels over raycasting kunt u lezen op: Info raycasting


De povray raytracer

© 2007 Hein Pragt

voorbeeld povray raytracerMede door de nieuwe 3D spellen is er veel belangstelling voor 3D technieken. Bijna elke nieuw spelconsole is weer meer realistisch, sneller en meer gedetailleerd. Er bestaan enkele goede 3D ontwerp programma's maar het prijskaartje dat hier aan hangt is voor de gemiddelde hobbyist niet op te brengen. Maar er is een heel goed alternatief 3D ontwerp programma genaamd Povray, voor wie zich echt wil verdiepen in 3D technieken. Voor het maken van 3D afbeeldingen kunt u een raytracer gebruiken, veel 3D ontwerp pakketen hebben deze onder de motorkap zitten. Ray tracing of raytracing is een methode waarmee een 3D scene omgezet kan worden in een afbeelding. De objecten in de scene worden wiskundig omschreven en er worden eigenschappen aan toegekend zoals kleur en reflectie. In deze scene bevinden zich ook een of meerdere lampen en een camera. Voor elke beeldpunt in de afbeelding wordt een lichtstraal (ray) vanuit de camera de scene in geschoten. Deze lichtstraal zal dan door een wiskundige berekening gevolgd (tracing) worden om te kijken met welk object deze in aanraking komt. Voor elk punt waar de straal het object raakt wordt de kleur berekend en zal er een beeldpunt in de afbeelding gegenereerd worden. Dit kost zeer veel rekenkracht van de computer maar kan spectaculair mooie plaatjes opleveren. Voor 3D spelletjes gebruikt men vaak de raycasting techniek die veel sneller maar ook minder nauwkeurig is.

povray raytracer voorbeeldDe onbetwiste kampioen onder de ray tracers is het gratis open source programma Povray (the Persistance of Vision RAYtracer). Het programma is geschikt voor bijna elk besturingsysteem zoals Windows, Mac, Linux en Sun Solaris en het bestaat al heel veel jaren. De ontwikkeling ervan loopt momenteel een beetje traag, maar het programma is inmiddels zeer compleet.

Ergens in 1980 downloade David Kirk Buck de broncode van een Unix raytracer voor zijn Amiga computer. Hij exoperimenteerde er een tijdje meer en besloot zijn eigen versie van de raytracer te schrijven die hij DKBTrace noemde, naar zijn eigen initialen. Hij zette het resultaat weer online en in1987 begon Aaron A. Collins te werken aan een x86 (pc) versie van het programma met veel nieuwe features. Toen het programma populair begon te worden werd het project overgdragen aan een team van ontwikkelaars en werd de naam uiteindelijk verandernd in Persistence of Vision Raytracer of verkort POV-Ray. Vanaf dat moment is het programma zeer innovatief geweest en zijn zeer veel technieken ontwikkeld door middel van dit programma.

Povray is in veel opzichten een koploper, veel nieuwe technieken binnen Povray ziet u terug in de grote dure pakketen. Povray is een programmeeromgeving en helaas geen grafisch manipulatiepakket hoewel er een paar zeer goede modelleer pakketten zijn die bovenop Povray gebruikt kunnen worden. Maar de echte liefhebber zal het programma besturen via scripts want dat maakt Povray in eerste instantie tot een vreselijk programma, maar ook het meest krachtige programma.

Wanneer u de moeite neemt om zich goed te verdiepen in deze programmeer taal, heeft u een fantastisch krachtig gereedschap waarmee u prachtige afbeeldingen kunt maken. De basis voor Povray zijn vectoren (x,y en z coördinaten) waarmee alle beeldelementen worden gepositioneerd. Standaard krijgt u al een grote hoeveelheid include bestanden met vormen, texturen en kleuren. De kwaliteit van de afbeeldingen die Povray genereert is uitstekend en is vergelijkbaar met die van veel commerciële raytracers. U kunt zelf fantastische ontwerpen maken met Povray, het enige wat u nodig heeft is een beetje programmeerervaring en heel veel fantasie. Een beetje wiskunde is nog nooit zo leuk geweest!

De Povray handleiding is in veel verschillende formaten beschikbaar zoals tekst, HTML en PostScript en telt ongeveer 600 pagina's. Dit geeft al aan dat Povray heel veel mogelijkheden heeft, laat dit u echter niet ontmoedigen, want met de basisconcepten kunt u al veel bereiken. Ik heb zelf veel goede ervaringen met Povray en weet zeker dat iedereen die ermee leert omgaan ook hetzelfde plezier zal beleven. Voor het maken van 3D scenes gebruik ik soms ook het gratis modelleer programma Breeze designer. Deze kan uitvoer voor Povray genereren die u daarna met de hand kunt optimaliseren en aanpassen. Op deze pagina zal ik enkele voorbeelden en uitleg geven.

Waar kunt u Povray downloaden?

Povray kan via de officiële site gedownload worden:
http://www.povray.org/
ftp://ftp.povray.org/


Het gebruik van Povray onder MS Windows

© 2007 Hein Pragt

gebruikersinterface povray raytracer

Wie een volledige 3D modelleer programma verwacht komt helaas bedrogen uit, de gebruikersinterface bestaat uit een (tekst) editor met code highlite en veel help functies en uitgebreide knoppen en werkbalken. Maar u moet de scenes wel in de povray programmeertaal schrijven waarna u door middel van een run knop vanuit het script een afbeelding kunt laten genereren. Tijdens het ontwikkelen kunt u de resolutie vrij laag zetten zodat de afbeelding vrij snel gegenereerd kan worden, wanneer u gereed bent kunt u de resolutie aanpassen waardoor u een nog mooiere plaatje zult krijgen. Om te kunnen werken met deze interface heeft u behalve enige programmeer ervaring, een beetje kennis van wiskunde en vectoren nodig. Ook is enige kennis over licht en kleur nodig maar dit kunt u ook opbouwen tijdens het experimenteren met dit programma. De versie met de gui is in ieder geval eenvoudiger om mee te werken dan met een losse editor en het raytracen via de commando prompt.


Wat is raytracing?

© 2009 Hein Pragt

raytracing

Door middel van raytracing kan een scène (doorgaans in 3D) omgezet worden in een tweedimensionaal beeld. De objecten, de lichtbronnen en de camera in een scène worden wiskundig omschreven samen met andere eigenschappen, zoals kleur, oppervlakte en mate van reflectie. Voor elke pixel in het 2D beeld wordt een lichtstraal (ray) vanuit de camera de scène in geschoten en gevolgd (tracing) om te kijken met welk object deze straal in aanraking komt. Voor het punt waar de straal het object raakt wordt de kleur berekend (door rekening te houden met de kleur en de eigenschappen van het object) en dit bepaald de kleur van één pixel in het 2D beeld. Shading word gebruikt om de intensiteit van de kleur te bepalen van de voorwerp. Het is bijvoorbeeld mogelijk dat er een voorwerp (gedeeltelijk) tussen het licht en het object staat, hierdoor zal er dus een schaduw optreden. Het voorwerp kan nog wel gedeeltelijk belicht worden door andere lichtbronnen of omgevingslicht. Een andere eigenschap is reflectie van een object. Reflectie is het weerkaatsen van een straal, dit kan gedaan worden door een nieuwe straal te creëren in de botsing van de eerste straal. Het resultaat van deze straal zal dan opgeteld worden bij de eerste oorspronkelijk straal. Op deze manier kan een raytracer zelfs spiegeling of spiegels genereren. Refractie is het buigen van licht bij een botsing, transparante materialen zoals glas en water doen dit vooral. Behalve objecten kan licht ook een kleur hebben en een vorm zoals omgevingslicht maar ook brede en smalle spot lichten.


Povray modeller frontend

© 2010 Hein Pragt

POVLAB's Modeller Home Page
POVLAB is een volledige 3D modeller om 3D objecten te maken voor POV-Ray, de broncode is ook beschikbaar.

Moray Homepage
Moray is een modeller die de best support heeft voor alle features van povray en word goed onderhouden door de ontwikkelaars.

Visual Engineering
Modeller die povray uitvoer kan genereren.

Breeze Designer
Breeze Designer is een 32-bit 3D modeller en ontwerp programma voor Windows. Het programma is speciaal geschreven als frontend voor Persistance of Vision raytracer (POV-Ray version 2.0 & 3.0.


Voorbeeld Povray script

© 2010 Hein Pragt

Dit is een voorbeeld van een klein Povray script waarmee ik een metalen bal met een ruw oppervlak gemaakt heb.

// Persistence Of Vision raytracer 
// Metal ball by Hein Pragt

global_settings 

#include "colors.inc"

camera { // This is an unusual camera since it is a converted file
   location <2.31, 1.43, 1.65>
   up <0, 0, 1>          // The Z axis is up and
   right <-4/3, 0, 0>    // The negative X axis is right
   direction <0, -1.60746, 0> // Field of view 45 degrees
   sky <0, 0, 1>
   look_at <0, 0, -0.1>
}
  

light_source { <4, 3, 4 > color Gray70 }


plane { z, -0.5
   pigment 
   finish 
}


#declare Texture =
texture {
   finish {
      ambient 0.03
      diffuse 1
      reflection 0.4
      phong 1
      phong_size 3
   }
   pigment 
}



sphere { <0, 0, 0>, 0.8
   texture {
     Texture
      normal {
        bumps 0.4
        sine_wave
        scale 0.025
      }
   }
}
metalen bal


Nuttige boeken

boek bestellen 3D-Games Programmeren Met Directx 8.0 De meeste spelprogrammeerboeken richten zich alleen op een specifiek onderwerp zoals DirectX of OpenGL. Dit boek gaat echter bovendien over alles wat nodig is om een compleet spel te ontwikkelen, inclusief broncode, handleidingen en aanvullende software waarmee u bijvoorbeeld modellen, geluidseffecten en animaties kunt maken. Met de programmeertaal Visual Basic als uitgangspunt, kunt u uw spelontwerpen gemakkelijk converteren en bouwen door middel van C++, C#, VB.NET, enzovoort. - Maak zelf spelonderdelen met behulp van Microsoft DirectX 8.0 Software Development Kit, Paint Shop Pro 7.0, Cool Edit 2000, Acid 2.0d, MilkShape 3D 1.5.9 en TrueVision 3D 5 Engine; Ontwerp een Half-Life MDL-viewer om nieuwe modellen te testen; Gebruik de cd-rom die vol staat met software, broncode en handleidingen. De cd-rom bevat alle instrumenten (behalve Visual Basic) om de in het boek behandelde spelprogramma's te maken. U vindt onder meer: Applicaties en demo's (o.a. Paint Shop Pro 7.0, Cool Edit 2000, Acid 2.0d); Afbeeldingen (de kleurversie van alle illustraties uit het boek); Handleidingen en voorbeeldbestanden (o.a. achtergronden en modellen); Broncode Over de auteur: Clayton Crooks II is een vennoot in Advanced Information Systems, een consultancy-bedrijf gespecialiseerd in hardware op maat en softwareoplossingen voor onderwijsinstellingen, kleine ondernemingen en overheidsorganisaties. Zijn artikelen verschenen eerder in Dr. Dobbs en hij werkt thans aan het boek Learning VB.NET through Applications.


boek bestellen Leer jezelf MAKKELIJK Games ontwerpen met Gamemaker Zelf een computerspel maken is niet alleen cool, maar spreekt ook nog eens tot ieders verbeelding! Met het programma Game Maker kun je ook zonder programmeerervaring snel een uitdagende computergame ontwikkelen. In dit boek leer je hoe je in totaal negen zeer verschillende, professioneel ogende games ontwikkelt, waarbij afbeeldingen, geluiden en overige benodigdheden. Maar achter de schijnbare eenvoud van Game Maker schuilt ook een zeer krachtige ontwikkelomgeving waarmee je op basis van GML (de ingebouwde programmeertaal van Game Maker) je eigen games verder kunt uitbouwen en verbeteren. Dit boek behandelt niet alleen het ontwikkelen van de genoemde spellen, maar geeft ook veel inzicht in de ideeën en beginselen die aan de basis van gamedesign liggen. Tot de behandelde onderwerpen behoren: Game Maker installeren en gebruiken, werken met sprites, objecten en rooms, achtergronden en geluid gebruiken, scores bijhouden en de high-score weergeven, levels ontwerpen en toevoegen, ouderobjecten gebruiken en gedrag erven, een raamwerk maken en begin en eindschermen toevoegen, multiplayergames en het gebruik van gezichtsvelden, werken met tijdlijnen, regels, statussen en reactief gedrag, tegen de computer spelen: intelligentie toevoegen, aan de slag met Game Maker Language (GML), gamedesign: uitdagingen, features en balans. Via de website zijn de bestanden te downloaden die voorheen op de CD-rom geleverd werden.


Last update: 08-01-2018
 Binnen dit thema



 Meer thema's


 Lees hier de privacyverklaring van deze site.

Disclaimer.

Hoewel de heer Hein Pragt de informatie beschikbaar op deze pagina met grote zorg samenstelt, sluit de heer Pragt alle aansprakelijkheid uit met betrekking tot de informatie die, in welke vorm dan ook, via zijn site wordt aangeboden. Het opnemen van een afbeelding of verwijzing is uitsluitend bedoeld als een mogelijke bron van informatie voor de bezoeker en mag op generlei wijze als instemming, goedkeuring of afkeuring worden uitgelegd, noch kunnen daaraan rechten worden ontleend. Op de artikelen van de heer Pragt op deze Internetsite rust auteursrecht. Overname van informatie (tekst en afbeeldingen) is uitsluitend toegestaan na voorafgaande schriftelijke toestemming van de rechthebbende. Voor vragen over copyright en het gebruik van de informatie op deze site kunt u contact opnemen met: (email: mail@heinpragt.com). Dit is mijn