<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
  <head>
    <meta name="generator" content="HTML Tidy, see www.w3.org">
    <!-- this stylesheet will later on be added by lfparser automatically: -->
<style type="text/css">
<!--
  pre { font-family:monospace,Courier }
  p.code { width:80%; alignment:center; background-color:#aedbe8; 
         border-style:none; border-width:medium; border-color:#aedbe8; 
         padding:0.1cm ; text-align:left }
-->
</style>

    <title></title>
  </head>

  <body>
    <h1>Beginselen van Camera-positionering</h1>

    <h4>ArticleCategory: [Choose a category, translators: do not
    translate this, see list below for available categories]</h4>
    Graphics 

    <h4>AuthorImage:[Here we need a little image from you]</h4>
    <img src="../../common/images/Carlos-C.gif" width="123" height= 
    "118" alt="[Photo of the Author]"> 

    <h4>TranslationInfo:[Author + translation history. mailto: or
    http://homepage]</h4>

    <p>original in es <a href="mailto:ccgrau@disca.upv.es">Carlos
    Calzada</a></p>

    <p>es to en <a href="mailto:sepulveda@linuxfocus.org">Miguel
    Angel Sepulveda</a></p>

    <p>en to nl <a href="nospam:ghs(at)linuxfocus.org">Guus Snijders</a>
    </p>

    <h4>AboutTheAuthor:[A small biography about the author]</h4>
    Ik ben student (op het moment) computerwetenschappen en sinds ik een
    Spectrum had, vind ik graphics leuk, verder ben ik ook een fan van
    Linux en alles dat niets te maken heeft met Micro$oft. Twee van mijn
    niet-computer-gerelateerde hobbies zijn bonsais en visvijvers.

    <h4>Abstract:[Here you write a little summary]</h4>

    <p>In dit tweede artikel over RenderMan bespreken we de configuratie
    en positie van de camera en bekijken we enkele speciale effecten die
    je kunt gebruiken. Hoewel het positioneren niet zo intu&iuml;tief is
    als Pov-Ray, is het een voordeel bij het beschrijven van camera
    trajecten. Een deel van dit laatste onderwerp wordt beschreven in een
    derde artikel. </p>

    <h4>ArticleIllustration:[One image that will end up at the top
    of the article]</h4>
    <img src="../../common/images/illustration39.gif" alt=
    "[Ilustration]" width="100" height="100" hspace="10"> 

    <h4>ArticleBody:[The main part of the article]</h4>

    <h3>Introductie</h3>

    <p>In dit tweede artikel bekijken we het camera model in RenderMan in
    detail. De camera is een van de belangrijkste elementen van een
    renderer, deze laat je de interessantste effecten genereren, zoals
    <i>Motion Blur</i> (wat je ziet als je een foto maakt van een bewegend
    model) en <i>Depth of Field</i> (focus). Hoewel er nog veel meer
    effecten in de camera gemodelleerd hadden kunnen worden, zoals 
    <i>Lens Flare</i> (de flits of overbelichting die je ziet bij fotos 
    van lichten), zouden die het model te gecompliceerd maken. In plaats
    daarvan worden veel van deze effecten bereikt door de eigenschappen
    van de objecten aan te passen met behulp van een geavanceerd systeem
    van <i>shaders</i> (een shader is een tool voor het renderen van
    texturen op objecten). Met families van shaders kunnen we onze eigen
    "shaders" bouwen en indrukwekkende effecten genereren. De procedure
    voor het programmeren en compileren van deze shaders zullen we in een
    ander artikel bespreken, dit is echter een erg omvangrijk onderwerp
    (heel erg uitgebreid en op het moment weet ik niet hoe ik het beter
    kan voorbereiden). </p>

    <p>Zoals in het vorige artikel uitgelegd, voor het renderen van een
    afbeelding, gebruiken we:</p>

<pre>
rendrib fichero.rib
</pre>

    voor uitvoer naar een bestand of <br><br>

<pre>
rendrib -d fichero.rib
</pre>

    voor uitvoer naar het scherm <br><br>

    <p> <a name="section2"></a></p>

    <h3>Beginselen van Camera-positionering</h3>

    <p>Het co&ouml;rdinaten systeem voor de camera is "linkshandig" en
    komt overeen met het oppervlak van de monitor. Het beginpunt bevindt
    zich in het midden van het scherm, waarbij de <tt>x</tt>-as naar
    rechts wijst, de <tt>y</tt>-as naar boven en de <tt>z</tt>-as naar de
    binnenkant van de monitor. Standaard is het "huidige co&ouml;rdinaten
    systeem" gelijk aan het camera systeem van co&ouml;rdinaten, precies
    zoals ge&iuml;llustreerd in de eerste afbeelding (de <tt>x-as</tt> is
    rood, <tt>y</tt> groen en <tt>z</tt> blauw). De eerste afbeelding
    geeft een bovenaanzicht van de scene en de tweede is de eigenlijke
    scene ( de lichtbronnen bevinden zich op verschillende plaatsen in 
    beide afbeeldingen om deze duidelijker te maken). Hoewel de scene niet
    bijzonder complex is (eigenlijk is hij verschrikkelijk), maar hij dient
    om de RIB voorbeeld bestanden duidelijk te maken, zonder deze vol te
    stoppen met complexe geometrische modellen.</p>

    <center>
      <a href="../../common/src/camara_default1.rib"><img src= 
      "../../common/images/camara_default1.jpg" height="240" width= 
      "320"></a> <a href="../../common/src/camara_default2.rib">
      <img src="../../common/images/camara_default2.jpg" height=
      "240" width="320"></a>
    </center>

    <p>Laten we eens kijken hoe de camera te positioneren. Het meest
    logische om te doen, vooral voor Pov_ray gebruikers, is om de camera
    te verplaatsen. Om de scene van een grotere afstand te bekijken,
    zouden we de camera willen verplaatsen (vertalen), naar de positie 
    <tt>&lt;0,0,-20&gt;</tt>, dit is hetzelfde als de camera naar achteren
    bewegen. Onder Renderman vind deze vertaling plaats met het commando 
    <tt>Translate 0 0 -20</tt> voor <tt> WorldBegin</tt>:</p>

    <center>
      <a href="../../common/src/camara_mov1a.rib"><img src= 
      "../../common/images/camara_mov1a.jpg" height="240" width=
      "320"></a> <a href="../../common/src/camara_mov2a.rib"><img
      src="../../common/images/camara_mov2a.jpg" height="240"
      width="320"></a>
    </center>

    <p>Dit commando heeft de camera echter naar voren gebracht! Eigenlijk
    was het niet de camera die werd verplaatst, maar het co&ouml;rdinaten 
    systeem: het hele co&ouml;rdinaten systeem werd terug vertaald,
    waarbij de camera voorin bleef. Daarom, om de camera achterwaats te
    verplaatsen, moeten we het tegenovergestelde doen, een voorwaatse
    vertaling en er niet over denken als het verplaatsen van de camera,
    maar het verplaatsen van het co&ouml;rdinaten systeem (met
    <tt>Translate 0 0 20</tt>):</p> 

    <center>
      <a href="../../common/src/camara_mov1b.rib"><img src= 
      "../../common/images/camara_mov1b.jpg" height="240" width=
      "320"></a> <a href="../../common/src/camara_mov2b.rib"><img
      src="../../common/images/camara_mov2b.jpg" height="240"
      width="320"></a>
    </center>

    <p>Nu is de camera exact waar we hem wilden. Van nu af aan zal iedere
    geometrie verandering in de scene refereren aan het huidige
    co&ouml;rdinaten systeem. In het volgende voorbeeld blijft het model
    op de origin (nulpunt) maar roteren we de camera er omheen:</p> 

    <center>
      <a href="../../common/src/camara_rot1a.rib"><img src= 
      "../../common/images/camara_rot1a.jpg" height="240" width=
      "320"></a> <a href="../../common/src/camara_rot2a.rib"><img
      src="../../common/images/camara_rot2a.jpg" height="240"
      width="320"></a>
    </center>

    <p>Bekijk het RIB bestand met de geometrische vertalingen van de
    camera: </p>

    <div style="border:solid; border-width:1">
<pre>
Display "camara_default2.tif" "file" "rgb"
Projection "perspective" "fov" 45
Format 320 240 1

LightSource "ambientlight" 1 "intensity" 
            0.3 "lightcolor" [1 1 1]
LightSource "distantlight" 2 "intensity" 
            1.0 "from" [10 10 -10] "to" [0 0 0]

Translate 0 0 20
Rotate 45 1 0 0
Rotate 135 0 1 0

WorldBegin
    Color 1 1 1
        # Blanco achtergrond 
    Sphere 10000 -10000 10000 360 

    # Objecten in de scene
    TransformBegin
        Color 1 0 0
        Sphere 3 -3 3 360
    TransformEnd
    TransformBegin
        Rotate -90 1 0 0
        Translate 0 0 2
        Cone 3 3 360
        Disk 0 3 360
    TransformEnd
    TransformBegin
        Rotate -90 0 1 0
        Cylinder 1 -4 4 360
        Disk 4 1 360
        Disk -4 1 360
    TransformEnd
WorldEnd
</pre>
    </div>

    <p>Er is een vertaling (<tt>Translate 0 0 20</tt>) en twee rotaties,
    een over de <tt>x</tt>-as (<tt>Rotate 45 1 0 0)</tt> en de andere over
    de <tt>y</tt>-as (<tt>Rotate 135 0 1 0</tt>). De volgorde van deze
    operaties is misschien verwarrend voor Pov-Ray gebruikers, daar 
    worden de operaties in de volgorde van opgeven uitgevoerd, maar dat
    geldt niet voor RenderMan. RenderMan plaatst operaties in een
    wachtrij totdat het een signicant token vindt (in ons geval
    <tt>WorldBegin</tt>), pas dan worden deze operaties toegepast, in
    omgekeerde volgorde. In andere woorden, door het wachtrij systeem 
    wordt de laatst opgegeven operatie als eerste uitgevoerd. De 
    geometrische operaties in ons voorbeeld worden als volgt 
    ge&iuml;nterpreteerd:</p>

    <table width="90%">
      <tr>
        <td>1. Initi&euml;le Staat</td>

        <td align="right"><a href=
        "../../common/src/camara_paso0.rib"><img src= 
        "../../common/images/camara_paso0.jpg" height="240" width= 
        "320"></a></td>
      </tr>

      <tr>
        <td>2. Roteer het co&ouml;rdinaten systeem 135 graden over 
        de <tt>y</tt>-as</td>

        <td align="right"><a href=
        "../../common/src/camara_paso1.rib"><img src= 
        "../../common/images/camara_paso1.jpg" height="240" width= 
        "320"></a></td>
      </tr>

      <tr>
        <td>3. Roteer het co&ouml;rdinaten systeem 45 graden over de
        <tt>x</tt>-as</td>

        <td align="right"><a href=
        "../../common/src/camara_paso2.rib"><img src= 
        "../../common/images/camara_paso2.jpg" height="240" width= 
        "320"></a></td>
      </tr>

      <tr>
        <td>4. Vertaal het huidige co&ouml;rdinaten systeem 20 
        eenheden over de <tt>z</tt>-as</td>

        <td align="right"><a href=
        "../../common/src/camara_paso3.rib"><img src= 
        "../../common/images/camara_paso2.jpg" height="240" width= 
        "320"></a></td>
      </tr>
    </table>

    <p>Vergeet nooit dat alle transformaties van het huidige
    co&ouml;rdinaten systeem (rotaties en vertalingen) altijd relatief
    zijn ten opzichte van de camera, daarom zou een rotatie rond de
    <tt>x</tt>-as moeten worden gezien als een "rotatie rond de x-as van
    de camera"</p>

    <p>Nu komen we bij het meest interessante deel van het artikel, hoe
    je RenderMan's camera model kunt gebruiken om speciale effecten te
    genereren. </p>

    <h3>Motion blur (simuleren van bewegende objecten)</h3>

    <p>Het eerste camere effect is Motion Blur, een effect dat probeer het
    spoor te imiteren dat op film wordt achtergelaten door bewegende
    objecten. </p>

    <p>Motion Blur wordt gespecificeerd door het statement <tt>Shutter 0 1
    </tt> in ons voorbeeld bestand in de sectie met de camera specs op te 
    geven. Het commando <tt>Shutter 0 1</tt> simuleert de openings tijd,
    in dit geval is de sluiter van de camera open op tijd 0 en blijft 1
    tijdseenheid open. De parameter 0 1 voor de sluiter is vrij universeel
    en we zullen deze parameters altijd gebruiken, daar het alleen een
    bepaald gedrag van RenderMan's camera toont. </p>

    <p>Vervolgens moeten we RenderMan vertellen welke elementen in de
    scene in beweging zijn, hiervoor voegen we de tags <tt>MotionBegin
    MontionEnd</tt> in. De volgende figuren geven een voorbeeld (en het
    RIB bestand) van een bal die beweegt van positie <tt>0 10 5</tt> op
    tijdstip 0 naar <tt>5 10 0</tt> op tijdstip 1. Het statement
    <tt>MotionBegin [0 1]</tt> in het RIB vertelt RenderMan welke exacte
    tijden corresponderen met de transformaties (instantie 0 komt overeen
    met de eerste en instantie 1 met de tweede) en d waarden moeten
    overeen komen met de opgegeven waarden in de <tt>Shutter</tt> sectie.
    De afbeelding laat duidelijk zien dat het effect erg realistisch lijkt
    en in de animatie is het effect zelfs nog sterker. </p>

    <center>
      <a href="../../common/src/camara_mb1.rib"><img src= 
      "../../common/images/camara_mb1.jpg" height="240" width=
      "320"></a>
    </center>

    <p>Natuurlijk zijn de toegestane vertalingen tussen <tt>MotionBegin
    MotionEnd</tt> niet beperkt tot verplaatsingen, RenderMan kan
    niet-lineare trajecten met Motion Blur renderen. In het volgende
    voorbeeld zien we een rotatie van 25 graden over de y-as. </p>

    <center>
      <a href="../../common/src/camara_mb2.rib"><img src= 
      "../../common/images/camara_mb2.jpg" height="240" width=
      "320"></a>
    </center>

    <p>Onder normale omstandigheden bewegen alleen objecten in de scene.
    RenderMan kent echter ook de mogelijkheid om de camera zelf te
    verplaatsen, daardoor kan het effect van Motion Blur ook op de camera
    zelf worden toegepast. In dit voorbeeld bewegen we de camera 5
    eenheden naar rechts (oftewel, we bewegen het systeem van
    co&ouml;rdinaten 5 eenheden naar rechts), en alle objecten in de scene
    zullen "blur" (wazig) worden. Uiteraard moet het tag-paar
    <tt>MotionBegin MotionEnd</tt> in de sectie van de camera van het RIB
    bestand komen: </p>

    <center>
      <a href="../../common/src/camara_mb3.rib"><img src= 
      "../../common/images/camara_mb3.jpg" height="240" width=
      "320"></a>
    </center>

    <h3>Veld diepte (focus)</h3>

    <p>Een ander interessant effect dat RenderMan biedt, is "Depth of
    Field" (veld diepte), of het camera-focus mechanisme. Het statement
    voor deze feature is <tt>DepthOfField</tt>. Dit token neemt drie
    parameters:<tt>f-stop</tt>, <tt>fov</tt> (field of view) en
    <tt>focus-length</tt>. De eerste parameter, <tt>f-stop</tt> geeft de
    brandpunt-afstand voor de focus tool, in ons voorbeeld zal een object
    dat zich 2 of minder eenheden van de camera bevind gelijk on-focussed
    (of focussed) verschijnen. De parameter <tt>fov</tt> krijgt meestal de
    waarde 1,0 als het perspectief eerder gedefinieerd was als
    <tt>Projection "perspective" "fov" 45</tt> (zoals in ons voorbeeld),
    als je de waarde veranderd in iets anders dan 1, zal alleen het
    perspectief veld worden vermenigvuldigd met die factor. Ten slotte is
    <tt>focus-length</tt> de parameter waar we echt in ge&iuml;nteresseerd
    zijn, deze definieert de afstand waarop objecten zich moeten bevinden
    om als buiten-focus te verschijnen op de afbeelding. In het volgende
    voorbeeld is de camera op de origine (nul punt) en zullen we
    verschillende voorbeelden laten zien met meerdere
    <tt>focus-length</tt> parameters.</p>

  <p>De eerste afbeelding gebruikt <tt>DepthOfField 2.0 1.0 10</tt>, wat
    betekend dat ieder object dat zich 10 eenheden van de camera bevindt,
    gefocussed zal worden (zoals de rode bal):</p>

    <center>
      <a href="../../common/src/camara_dof1.rib"><img src= 
      "../../common/images/camara_dof1.jpg" height="240" width=
      "320"></a>
    </center>


    <p></p>

    <p>In het tweede geval <tt>DepthOfField 2.0 1.0 20</tt>. Nu is de
    groene bal, die zich op 20 eenheden van de camera bevindt, on-focus:
    </p>

    <center>
      <a href="../../common/src/camara_dof2.rib"><img src=
      "../../common/images/camara_dof2.jpg" height="240" width=
      "320"></a>
    </center>

    <p>Tenslotte, om het de focus op de laatste bol te richten (bevindt
    zich 30 eenheden ver), gebruiken we <tt>DepthOfField 2.0 1.0 30</tt>:
    </p>

    <center>
      <a href="../../common/src/camara_dof3.rib"><img src=
      "../../common/images/camara_dof3.jpg" height="240" width=
      "320"></a>
    </center>

    <p>De bereikte effecten geven een grotere realiteit aan de
    gegenereerde afbeeldingen. Natuurlijk neemt de rekentijd die nodig is
    om de afbeeldingen te genereren toe, Motion Blur en Depth of Field
    vereisen meerdere passages door de renderer. </p>
    <!-- vim: set sw=2 ts=2 et tw=74 syntax=html : -->
  </body>
</html>