<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
 <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <META NAME="GENERATOR" CONTENT="lfparser_2.52">
 <META NAME="LFCATEGORY" CONTENT="Graphics">
 <link rel="icon" href="../../common/images/lf-16.png" type="image/png">
 <TITLE>lf42, Graphics: RenderMan</TITLE>
<style type="text/css">
<!--
 td.top {font-family: Arial,Geneva,Verdana,Helvetica,sans-serif; font-size:12 }
 pre { font-family:monospace,Courier }
 pre.code { font-family:monospace,Courier;background-color:#aedbe8; }
 p.cl { color:#EE9500 }
 table.left { margin-right:0.3cm }
 a.nodec { text-decoration:none }
 p.trans { font-size:8pt; text-align:right }
 p.clbox { width:50%; alignment:center; background-color:#FFD700; 
           border-style:none; border-width:medium; border-color:#FFD700; 
           padding:0.5cm;  text-align:center }
 p.code { width:80%; alignment:center; background-color:#aedbe8; 
          border-style:none; border-width:medium; border-color:#aedbe8; 
          padding:0.1cm;  text-align:left }
 p.foot { background-color:#AAAAAA; color:#FFFFFF; border-style:none; 
          border-width:medium; border-color:#AAAAAA; padding:0.5cm ; 
          margin-top:0.1cm; margin-right:1cm; margin-left:1cm; 
          text-align:center }
 div.tbbutton {
   background: #ddd;
   border-right: 1px solid #aaa;
   border-bottom: 1px solid #aaa;
   margin: 2px 5px 2px 5px;
   text-align: center;
   width: 20em;
   line-height: 1.2em;
   padding: 2px;
   font-size: 12px;
   white-space: nowrap;
   color: #555;
 }
 div.bbutton {
   background: #ddd;
   border-right: 1px solid #aaa;
   border-bottom: 1px solid #aaa;
   float: left;
   margin: 2px 5px 2px 5px;
   text-align: center;
   line-height: 1.2em;
   padding: 2px;
   font-size: 12px;
   white-space: nowrap;
   color: #555;
 }
-->
</style>
 
</HEAD>
<BODY bgcolor="#ffffff" text="#000000">
 <!-- this is generated html code. NEVER use this file for your
 translation work. Instead get the file with the same article number
 and .meta.shtml in its name. Translate this meta file and then
 use lfparser program to generate the final article -->
 <!-- lfparser can be obtained from http://main.linuxfocus.org/~guido/dev/lfparser.html -->

<!-- this is used by a number of tools:
 =LF=AUTHOR: Carlos     Calzada Grau
 =LF=CAT___: Graphics
 =LF=TITLE_: RenderMan
 =LF=NUMBER: 42
 =LF=ANAME_: article42.shtml
 =LF=PARSER: 2.52
 -->

<!-- 2pdaIgnoreStart -->

<!-- start navegation bar, old, style=1 -->
<MAP name="top">
  <AREA shape="rect" coords="367,9,418,30" href="../index.shtml">
  <AREA shape="rect" coords="423,9,457,30" href="../map.html">
  <AREA shape="rect" coords="463,9,508,30" href="../indice.html">
  <AREA shape="rect" coords="514,9,558,30" href="../Search/index.html">
</MAP>
<MAP name="bottom">
  <AREA shape="rect" coords="78,0,163,15" href="../News/index.shtml">
  <AREA shape="rect" coords="189,0,284,15" href="../Archives/index.html">
  <AREA shape="rect" coords="319,0,395,15" href="../Links/index.html">
  <AREA shape="rect" coords="436,0,523,15" href="../aboutus.html">
</MAP>
<!-- IMAGE HEADER -->
<CENTER>
  <IMG src="../../common/images/Topbar-nl.gif" width="600" height="40" border="0" alt="[Hoofd-balk]" ismap usemap="#top" ><BR>
  <IMG src="../../common/images/Bottombar-nl.gif" width="600" height="21" border="0" alt="[Voet-balk]" ismap usemap="#bottom">
</CENTER>
<!-- stop navegation bar -->

<!-- SSI_INFO -->

<!-- tr_staticssi include virtual -->
<!-- tr_staticssi exec cmd -->
<!-- addedByLfdynahead ver 1.5 --><TABLE ALIGN="right" border=0><TR><TD ALIGN="right"><FONT SIZE="-1" FACE="Arial,Helvetica">Dit document is beschikbaar in: <A href="../../English/May1998/article42.html">English</a> &nbsp;<A href="../../Castellano/May1998/article42.html">Castellano</a> &nbsp;<A href="../../Deutsch/May1998/article42.html">Deutsch</a> &nbsp;<A href="../../Francais/May1998/article42.html">Francais</a> &nbsp;<A href="../../Nederlands/May1998/article42.shtml">Nederlands</a> &nbsp;<A href="../../Russian/May1998/article42.html">Russian</a> &nbsp;<A href="../../Turkce/May1998/article42.html">Turkce</a> &nbsp;</FONT></TD></TR></TABLE><br>
 


<!-- SSI_INFO STOP -->
<!-- 2pdaIgnoreStop -->

<!-- SHORT_BIO_ABOUT_THE_AUTHOR_AND_INDEX_START -->
<TABLE ALIGN="LEFT" BORDER="0" WIDTH="195" summary="about the author" class="left">
<TR>
<TD>

<img src="../../common/images/Carlos_C.gif" alt=
    "[Photo of the Author]" height="164" width="173">
<BR>door  Carlos Calzada Grau <br> <small>&lt;ccgrau /at/ disca.upv.es&gt;</small>
<BR><BR>
<I>Over de auteur:</I><BR>
<!-- aboutauthor_start -->
<P>
    Afgestudeerd in computer wetenschappen en heb plezier met computer
    graphics sinds mijn eerste Spectrum. Ik ben erg enthousiast over
    Linux, de ontwikkelings-filosofie en alles dat niets te maken heeft
    met micro$oft. Andere niet-scherm gerelateerde hobbies zijn bonsais
    en aquaria.
    </P>
<!-- aboutauthor_stop -->
<!-- TRANSLATED_TO nl -->
<BR><BR><I>Vertaald naar het Nederlands door:</I><BR>
Guus Snijders <small>&lt;ghs(at)linuxfocus.org&gt;</small>
<br>
<!--
 =LF=TRANSTO=nl: Guus Snijders
-->
<!-- TRANSLATED_TO_STOP -->
<!-- INDEX_START -->
<BR><i>Inhoud</i>:
<UL>
  <LI><A HREF="#42lfindex0">Introductie</A></LI>
  <LI><A HREF="#42lfindex1">Installatie</A></LI>
  <LI><A HREF="#42lfindex2">Eerste Stappen</A></LI>
  <LI><A HREF="#42lfindex3">Conclusies</A></LI>
</UL>

</TD></TR></TABLE>
<!-- INDEX_STOP -->
<!-- SHORT_BIO_ABOUT_THE_AUTHOR_AND_INDEX_STOP -->
<!-- HEAD_OF_THE_ARTICLE_START -->
<br>&nbsp;
<table border="0"><tr><td>
<!-- tr_staticssi include virtual -->
<!-- tr_staticssi exec cmd -->
<!-- addedByLfPdf ver 0.1 -->
 

<H2>RenderMan</H2>
 <img src="../../common/images/white.gif" alt="[Illustratie]"
    hspace="10" width="10" height="10">
<!-- ABSTRACT OF THE ARTICLE -->
<P><i>Kort</i>:
<P>
<!-- articleabstract_start -->

    Dit is het eerste artikel in een serie over RenderMan.

    
<!-- articleabstract_stop -->

<br><!-- HR divider --><center><font color="#8282e0"><b>_________________ _________________ _________________</b></font></center><br>
</td></tr></table>
<!-- HEAD_OF_THE_ARTICLE_STOP -->
<!-- BODY_OF_THE_ARTICLE_START -->

    <a name="intro"></a>

    <A NAME="42lfindex0">&nbsp;</A>
<H3><font color="#660033">Introductie</font></H3>

    Wie heeft er niet gehoord van <a href= "http://www.pixar.com"
    >Pixar</a>?, wie heeft de film <a href=
    "http://www.toystory.com">Toy Story</a> niet gezien?. Pixar
    Animation Studios reeds lang bekend door hun werk aan computer
    animaties. <i>Luxo Jr.</i> (1986) was de eerste film met 3d graphics
    die is genomineerd een Oscar, ook won deze meer dan 20 prijzen in
    internationale film festivals.

    <center>
      <img src="../../common/May1998/luxo.jpg" height="171" width=
      "180" hspace="10"> <img src="../../common/May1998/tt.jpg"
      height="152" width="180" hspace="10">
    </center>

    <P>IN 1987 won <i>Red's Dream</i> verschillende prijzen op het
    "World Animation Festival" in Zagreb en het "San Francisco
    International Film Festival". </p>

    <p>De eerste animatie die een Oscar won, was <i>Tin Toy</i> (1998),
    Pixar ontwierp een model voor het gezicht van een baby met meer dan
    40 spieren die door de animator werden bediend. </p>

    <center>
      <img src="../../common/May1998/red.jpg" height="157" width=
      "180" hspace="10"> <img src="../../common/May1998/kk.jpg"
      height="120" width="180" hspace="10">
    </center>

    <p>In 1989 werd <i>Knick Knack</i> vertoond, dit was het verhaal van
    een sneeuwman die in een kristallen bol leeft. De film was in de
    eerste instantie geproduceerd voor 3D weergave, al werd er ook een
    normale versie uitgebracht. </p>

    <p>Kort daarna volgden een aantal successen zoals de recente film
    <i><a href="http://www.toystory.com">Toy Story</a>.</i> Dit is een van
    de eerste langere films die volledig geproduceerd is met computers. Op
    de homepage van <a href="http://www.pixar.com">Pixar</a> kunnen nog
    veel meer interessante dingen worden gevonden, zo wordt Toy Story 2
    ergens in 1999 uitgebracht. </p>

    <p>Pixar ontwikkelde de interface "RenderMan" apart en onderhield
    "modelers" en "renderers" los daarvan. Een modeler is een tool die
    wordt gebruikt om scenes te tekenen, animaties te ontwerpen, enz.
    Het enige doel van een renderer is om de beschrijving van de modeler
    te nemen en deze te renderen met schaduwen, lichten, texturen, enz..
    </p>

    <p>RenderMan laat 3D artiesten opgeven wat te renderen, maar niet hoe
    dat moet. In andere woorden, een modeler zou zich niets moeten
    aantrekken van de rendering stap. Zo kan een renderer die voldoet aan
    de standaard specificaties van RenderMan gebruik maken van Z-buffer,
    scan-line, ray-tracing, radiosity en een andere methode om de objecten
    te "tekenen", deze stap is onafhankelijk van RenderMan. Je kunt de
    interface van RenderMan zien als een formaat voor de beschrijving van
    scenes, op dezelfde manier als waarop PostScript een formaat is voor
    de beschrijving van pagina's. Deze standaard is niet afhankelijk van
    architecturen en besturingssystemen. </p>

    <center>
      <img src="../../common/May1998/pixar1.jpg" height="100"
      width="72"> <img src="../../common/May1998/pixar2.jpg"
      height="111" width="83"> <img src=
      "../../common/May1998/pixar3.jpg" height="126" width=
      "61">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img
      src="../../common/May1998/pixar4.jpg" height="115" width=
      "61"> <img src="../../common/May1998/pixar5.jpg" height="90"
      width="53"> <img src="../../common/May1998/pixar6.jpg"
      height="95" width="75">
    </center>

    <center>
      <i>De RenderMan@ Interface Procedures en RIP Protocol zijn:<br>
      Copyright 1988, 1989, Pixar.<br>
      Alle rechten voorbehouden.<br>
      Renderman@ is een geregistreerd handelsmerk van Pixar</i>
    </center>

    <p>In dit artikel proberen we een korte introductie in RenderMan
    te geven, hiervoor zullen we de <a href=
    "http://www.seas.gwu.edu/student/gritz/bmrt.html">Blue Moon
    Rendering Tools</a> van Larry Gritz gebruiken. Dit pakket is een
    renderer voor vrije distributie (alleen binaries en voor persoonlijk
    gebruik) en er zijn versies voor vele systemen, waaronder Linux (in
    feite was dit een van de eerste implementaties). Er wordt gebruik
    gemaakt van ray-tracing en radiosity en doet niet of nauwelijks onder
    voor een Fotorealistische RenderMan (PRMan), het commerci&euml;le
    product van Pixar. </p>

    <p>In het begin zijn het systeem van co&ouml;rdiaten voor de wereld
    en de camera gelijk, het zijn links-handige co&ouml;rdiaten-systemen
    (als Pov-Ray), met de origine in het midden van het scherm, de X-as
    naar rechts, de Y-as naar boven en de Z-as naar de binnenkant van
    het scherm. De volgende figuur laat de default camera zien (de X-as
    is rood, Y-as is groen en Z-as is blauw, voor de broncode, klik op
    de afbeelding). Een rechts-handig co&ouml;rdinaten-systeem is
    identiek maar dan wijst de Z-as in de andere richting. </p>

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

    <p>In Pov-Ray is het systeem van wereld co&ouml;rdinaten vast,
    dat wil zeggen dat men de camera door de wereld kan bewegen en
    objecten zetten met transformaties. In RenderMan geldt het
    tegenovergestelde, de camera is vast en wat wordt getransformeerd
    voor de verschillende gezichtspunten is het wereld-systeem van
    co&ouml;rdinaten. Dit alles zal duidelijker worden als we een
    voorbeeld "ontmantelen". </p>

    <p>RenderMan kent veel primitieven, voor object definities, lichten,
    enz... Nu gaan we een voorbeeld bekijken van het formaat van de
    bekenste cuadrics (NL:?), hoewel er ook andere zijn (zoals bezier
    patches, polygonen, ...).</p>

    <center>
      <table border="0" cols="2" width="100%">
        <tr>
          <td><a href="../../common/May1998/disk.rib"><img src=
          "../../common/May1998/disk.jpg" height="240" width="320"
          align="LEFT"></a></td>

          <td><a href="../../common/May1998/cone.rib"><img src=
          "../../common/May1998/cone.jpg" height="240" width="320"
          align="LEFT"></a></td>
        </tr>

        <tr>
          <td>
            <i><b>&nbsp;&nbsp;&nbsp;Schijf&nbsp;&nbsp;&nbsp;</b>
            hoogte&nbsp;&nbsp;&nbsp; radius&nbsp;&nbsp;&nbsp;
            thetamax</i>&nbsp;

            <p><b>&nbsp;&nbsp;&nbsp;
            Disk&nbsp;&nbsp;&nbsp;&nbsp;</b>
            5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            300&nbsp;</p>
          </td>

          <td>
            <i><b>&nbsp;&nbsp;&nbsp;Kegel</b>&nbsp;&nbsp;&nbsp;
            hoogte&nbsp;&nbsp;&nbsp; radius&nbsp;&nbsp;&nbsp;
            thetamax</i>&nbsp;

            <p>&nbsp;&nbsp;&nbsp;<b>Kegel&nbsp;&nbsp;&nbsp;</b>
            15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            300&nbsp;</p>
          </td>
        </tr>
      </table>

      <table border="0" cols="2" width="100%">
        <tr>
          <td><a href="../../common/May1998/cylinder.rib"><img src=
          "../../common/May1998/cylinder.jpg" height="240" width=
          "320" align="LEFT"></a></td>

          <td><a href="../../common/May1998/sphere.rib"><img src=
          "../../common/May1998/sphere.jpg" height="240" width=
          "320" align="LEFT"></a></td>
        </tr>

        <tr>
          <td>
            <i><b>Cylinder&nbsp;&nbsp;&nbsp;</b>
            radius&nbsp;&nbsp;&nbsp; zmin&nbsp;&nbsp;&nbsp;
            zmax&nbsp;&nbsp;&nbsp; thetamax</i>&nbsp;

            <p>&nbsp;&nbsp;&nbsp; <b>Cylinder</b>&nbsp;&nbsp;&nbsp;
            10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            -5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            300&nbsp;</p>
          </td>

          <td>
            <i><b>&nbsp;&nbsp;Bol &nbsp;</b> &nbsp;&nbsp;
            radius&nbsp;&nbsp;&nbsp; zmin&nbsp;&nbsp;&nbsp;
            zmax&nbsp;&nbsp;&nbsp; thetamax</i>&nbsp;

            <p>&nbsp;&nbsp;&nbsp;
            <b>Bol</b>&nbsp;&nbsp;&nbsp;&nbsp;
            10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            -4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            300&nbsp;</p>
          </td>
        </tr>
      </table>

      <table border="0" cols="2" width="100%">
        <tr>
          <td><a href="../../common/May1998/torus.rib"><img src=
          "../../common/May1998/torus.jpg" height="240" width="320"
          align="LEFT"></a></td>

          <td><a href="../../common/May1998/paraboloid.rib"><img
          src="../../common/May1998/paraboloid.jpg" height="240"
          width="320" align="LEFT"></a></td>
        </tr>

        <tr>
          <td>
            <i><b>Donut</b>&nbsp;&nbsp;&nbsp; major
            rad&nbsp;&nbsp;&nbsp; min rad&nbsp;&nbsp;&nbsp;
            phimin&nbsp;&nbsp;&nbsp; phimax&nbsp;&nbsp;&nbsp;
            thetamax</i>&nbsp;

            <p>&nbsp;&nbsp;&nbsp; <b>Donut&nbsp;&nbsp;&nbsp;</b>
            10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            90&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            320&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            300&nbsp;</p>
          </td>

          <td>
            <i><b>Paraboloid</b>&nbsp;&nbsp;&nbsp;
            radius&nbsp;&nbsp;&nbsp; zmin&nbsp;&nbsp;&nbsp;
            zmax&nbsp;&nbsp;&nbsp; thetamax</i>&nbsp;

            <p>&nbsp;&nbsp;&nbsp;
            <b>Paraboloid</b>&nbsp;&nbsp;&nbsp;&nbsp;
            10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            300&nbsp;</p>
          </td>
        </tr>
      </table>

      <table border="0" cols="1">
        <tr align="CENTER">
          <td><a href="../../common/May1998/hyperboloid.rib"><img
          src="../../common/May1998/hyperboloid.jpg" height="240"
          width="320"></a></td>
        </tr>

        <tr align="CENTER">
          <td>
            <i><b>&nbsp;&nbsp; Hyperboloid</b>&nbsp;&nbsp;&nbsp;
            point1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            point2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            thetamax</i>&nbsp;

            <p>&nbsp;&nbsp;&nbsp;
            <b>Hyperboloid</b>&nbsp;&nbsp;&nbsp; 0 10
            -5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10 5
            15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            300&nbsp;</p>
          </td>
        </tr>
      </table>
    </center>

    <p>De lezer heeft wellicht al gemerkt dat het formaat van sommige
    van deze primitieven niet echt gemakkelijk is, maar gelet op het
    feit dat het bestand RIB door een modeler als uitvoer moet worden
    gegeven, is dit formaat toepasselijk vanwege de doordachtheid en
    snelheid. <a name="instal"></a></p>

    <A NAME="42lfindex1">&nbsp;</A>
<H3><font color="#660033">Installatie</font></H3>

    Als eerste stap gaan we naar de homepage van <a href=
    "http://www.seas.gwu.edu">Blue Moon Rendering Tools</a> en
    downloaden we het programma. Op moment van schrijven was de
    huidige versie 2.3.6. Voor het uitpakken gaan we verder zoals
    gebruikelijk:
<pre>
rabit:~/$ gzip -d BMRT2.3.6.linux.tar.gz
rabit:~/$ tar xvf BMRT2.3.6.linux.tar
</pre>

    <p>Na het uitpakken van de tar-ball hebben we een nieuwe directory
    met de naam BMRT2.3.6 . Deze bevat de uitvoerbare bestanden (in
    <tt>bin/</tt>, de voorbeelden (in <tt>examples/</tt> en de
    documentatie in zowel PostScript asl HTML (onder <tt>doc/</tt>, ook
    is er een <tt>README</tt> bestand met aanvullende informatie over
    het programma. Lees het README bestand voor het installatie gedeelte,
    het is vrij simpel en zou niemand problemen moeten geven.
    <a name="pasos"></a></p>

    <A NAME="42lfindex2">&nbsp;</A>
<H3><font><font color="#660033">Eerste Stappen</font></font></H3>


    <p>Om bekend te worden met de RenderMan's specificaties, gaan we een
    typisch voorbeeld bekijken (<a href=
    "../../common/May1998/disptest.rib">disptest.rib</a>). De afbeelding
    is gegenereerd met het commando <tt>rendrib -v disptest.rib</tt> (klik
    op de afbeelding om hem in 1024x768 met <i>anti-aliasing</i> 2x2 te
    bekijken).</p>

    <p>Dit is een van de vele voorbeelden die gevonden kunnen worden in
    de <tt>examples</tt> directory van BMRT (Blue Moon Rendering Tools),
    de lezer zal waarschijnlijk kunnen waarderen dat het genereren niet
    lang duurt (als je met animaties gaat werken, zul je zien dat de
    bestanden behoorlijk gaan groeien).</p>

    <center>
      <a href="../../common/May1998/balls2h.jpg"><img src=
      "../../common/May1998/balls2.jpg" height="300" width="400">
      </a>
    </center>

    <p>Er zijn verschillende executables onder <tt>bin/</tt>:
    <tt>rendrib</tt>, <tt>rendribv</tt> en <tt>rgl</tt>.
    <tt>Rendrib</tt> is de eigenlijke renderer, <tt>rendribv</tt> is
    vergelijkbaar maar rendert objecten in draad-mode, met alleen lijnen;
    <tt>rgl</tt> tenslotte rendert met behulp van polygonen. De laatste
    drie renders worden gebruikt voor de weergave van posities,
    animaties, enz.. Het uiteindelijke renderen gaat altijd met
    <tt>rendrib</tt>.</p>

    <p>Het formaat van het RIB bestand (Renderman Interface ByteStream)
    is erg simpel, hoewel niet minder krachtig. Ze worden opgeslagen als
    platte-tekst bestanden (net asl Pov-Ray). Een goed-geschreven RIB
    bestand bevat het volgende:</p>

    <ol>
      <li>Globale opties voor alle <i>frames</i> (resolutie,
      anti-aliasing, enz..)</li>

      <li><tt>FrameBegin</tt></li>

      <li>Initialisatie van de opties voor de grafische staat van een
      dergelijk frame (zoals de bestandsnaam voor uitvoer, detailniveau,
      enz...)</li>

      <li>Attributen van de grafische staat van het frame (zoals
      lichten, soort projectie, enz...)</li>

      <li><tt>WorldBegin</tt></li>

      <li>Modificaties van de grafische staat en declaraties voor de
      geometry van het eigenlijke frame. </li>

      <li><tt>WorldEnd</tt>. Met de volgende bij-effecten: het frame wordt
      gerenderd en opgeslagen, alle geometry- en lichtdeclaraties in (6)
      worden vernietigt, de grafische staat keert terug naar degene die
      bestaat in (5).</li>

      <li><tt>FrameEnd</tt>. Dit plaatst de grafische staat terug in
      zijn situatie in (2). </li>

      <li>De stappen (2) tot (8) worden herhaald in het geval van
      additionele frames. </li>
    </ol>

    <P>De grafische staat bevat alle informatie die nodig is om een
    primitief te renderen. Het bestaat uit twee delen: een globale die
    die constant blijft van primitieve naar primitieve en een huidige
    staat die met de primitieven veranderd. De parameters van de globale
    staat, zijn bekend als <i>opties</i> en de huidige staten worden
    <i>attributen</i> genoemd. </p>

    <P>Voor een beter begrip van opties en attributen en om een idee te
    hebben hoe scenes worden gespecificeerd met RenderMan, gaan we het
    voorbeeld regel voor regel bekijken. Dit zou een goede tutorial kunnen
    worden over wat er mogelijk is en hoe het doen. </p>

<p class="code">
 1.-  ##RenderMan RIB-Structure 1.0   <br>
 2.-  version 3.03   <br>
 3.-   <br>
 4.-  ###########################   <br>
 5.-  #   <br>
 6.-  # Dit RIB bestand demonstreert enkele complexere procedurele texturen. <br>
 7.-  # Twee ballen tonen het gebruik van "stucco" en "dented"
 misplaatsing shaders. <br>
 8.-  # De vloer toont de gmarbtile_polish shader, dit zijn gepolijste, groene <br>
 9.-  # marmeren tegels. Let op dat de reflectie via de aanroep van de trace() <br>
 10.- # functie door de shader gaat, in plaats van reflectie mapping. <br>
 11.- #   <br>
 12.- ###########################   <br>
 13.-   <br>
 14.- Option "searchpath" "shader" [".:../shaders:&amp;"]   <br>
 15.- Display "balls2.tif" "file" "rgb"   <br>
 16.- Format 400 300 -1   <br>
 17.- PixelSamples 1 1   <br>
 18.-   <br>
 19.- Declare "prmanspecular" "integer"   <br>
 20.- Option "render" "prmanspecular" [0]   <br>
 21.- Projection "perspective" "fov" 35   <br>
 22.- Translate 0 -0.55 8   <br>
 23.- Rotate -110 1 0 0   <br>
 24.-   <br>
 25.-   <br>
 26.- WorldBegin   <br>
 27.-   <br>
 28.- LightSource "ambientlight" 1 "intensity" 0.02   <br>
 29.-   <br>
 30.- Declare "shadows" "string"   <br>
 31.- Attribute "light" "shadows" "on"   <br>
 32.- LightSource "distantlight" 1 "from" [0 1.5 4] "to" [0 0 0] "intensity" 0.6   <br>
 33.-   <br>
 34.- AttributeBegin   <br>
 35.-   Declare "txtscale" "float"   <br>
 36.-   Declare "Kr" "float"   <br>
 37.-   Declare "darkcolor" "color"   <br>
 38.-   Declare "lightcolor" "color"   <br>
 39.-   Declare "veincolor" "color"   <br>
 40.-   Surface "gmarbtile_polish" "Ka" 1 "txtscale" 0.5 "Kr" .25 "Kd" 0.3 "Ks" 0.2 "roughness" 0.02   <br>
 41.-   Patch "bilinear" "P"  [ -5 -5 0 5 -5 0 -5 5 0 5 5 0  ]   <br>
 42.- AttributeEnd   <br>
 43.-   <br>
 44.- AttributeBegin   <br>
 45.-   Color  [ .6 .6 .6 ]   <br>
 46.-   Translate -1.5 0 1   <br>
 47.-   Surface "matte"   <br>
 48.-   Declare "frequency" "float"   <br>
 49.-   Declare "Km" "float"   <br>
 50.-   Displacement "stucco" "frequency" 20 "Km" 0.3   <br>
 51.-   Sphere 1 -1 1 360   <br>
 52.- AttributeEnd   <br>
 53.-   <br>
 54.- AttributeBegin   <br>
 55.-   Translate 1.5 0 1   <br>
 56.-   Color 1 .45 .05   <br>
 57.-   Declare "Kr" "float"   <br>
 58.-   Declare "Km" "float"   <br>
 59.-   Surface "shiny" "Kd" 0 "Kr" 0.25 "roughness" 0.15 "specularcolor" [1 .5 .06]   <br>
 60.-   Displacement "dented" "Km" 0.5   <br>
 61.-   Sphere 1 -1 1 360   <br>
 62.- AttributeEnd   <br>
 63.-   <br>
 64.- WorldEnd   <br>
</p>

    <p>commentaren kunnen in het bestand worden opgenomen met het #
    symbool, zoals in regel 1 en de regels 4 tot 12. Een # symbool mag
    overal in het bestand voorkomen en ze mogen een volledige regel
    gebruiken (net als // commentaren in C++). Commentaren zijn handig
    wanneer deze bestanden met de hand worden bewerkt, omdat ze hulp
    bieden bij het begrijpen van de interne werkingen van de scene. </p>

    <p>Regel 2 laat een voorbeeld van de <i>version</i> directive zien.
    Deze declareert alleen de versie van de gebruikte interface (3.03); de
    meest recente versie is 3.1, uitgebracht in september 1989 (ja 1989,
    dit is geen vergissing), hoewel er revisies van Mei 1995 zijn. </p>

    <p>De directives <i>searchpath</i> en <i>shader</i> op regel 14
    defini&euml;ren het pad voor de "shaders", dit zijn objecten die de
    renderer informeren hoe een bepaald object gerenderd moet worden
    (zoals een plastic, transparant, enz...), dit is een van de features
    die de interface erg krachtig maken, doordat de texturen van een
    object zich gedragen als plug-ins. Zo is het eenvoudig om nieuwe
    texturen, effecten,... te implementeren, zonder te wachten op een
    krachtiger versie van de renderer. Meestal is er een
    omgevingsvariabele (SHADER) die de locatie van deze bestanden
    aangeeft, vaak hoef je het pad dus niet expliciet op te geven. </p>

    <p>De <i>Display</i> optie verschijnt op regel 15. Deze declareert de
    bestandsnaam voor de uitvoer als <i>"balls2.tiff"</i> met als type
    <i>"file" "rgb"</i>, oftewel een RGB bestand. </p>

    <p>Op regel 16 defini&euml;ren we de resolutie voor het renderen
    (grootte van de afbeelding) met de <i>Display</i> opties. De resolutie
    van ons voorbeeld is 400x300, de -1 definieert de aspect ratio van de
    pixel (eigenlijk zou het +1 moeten zijn, ik weet niet zeker waarom ze
    hier -1 hebben gebruikt. </p>

    <p>Vervolgens komen de horizontale en verticale sampling voor iedere
    pixel, het aantal "rays" dat wordt gestart om een pixel te renderen.
    Een statement <I>PixelSamples 2 2 </i> wordt vertaald naar 4 rays per
    pixel, wat een geweldige kwaliteit voor de afbeelding opleverd (dit is
    de <i>anti-aliasing</i>), maar helaas duurt het renderen dan langer.
    In ons geval geeft een sampling van 1 x 1 = 1 een snellere rendering,
    maar slechts een ray per pixel. </p>

    <p>Regel 19 declareerd de <i>integer</i> variabele
    <i>prmanspecular</i>, eigenlijk wordt <i>prmanspecular</i>
    gedefinieerd als een token en zodra de renderer dit token tegenkomt,
    zal het het daaropvolgende nummer als een integer nemen. </p>

    <p><br>
    Vervolgens komt de declaratie van een 3D projectie, met de sleutel
    <i>"perspective"</i> vragen we om een perspectief projectie en <i>"fov
    35"</i> stelt het weergave veld in op 35 graden. </p>

    <p>De regels 22 en 23 defini&euml;ren de positie van de camera. Eerst
    schrijven we een vertaling (translation), gevolgd door een rotatie.
    Maar omdat alle transformaties eerst op een stack worden geplaatst,
    is de eerste transformatie die wordt uitgevoerd, degene die het
    laatste op de stack is geplaatst, rotatie gevolgd door een vertaling
    (in dit geval worden de transformaties uitgevoerd zodra renderman het
    statement <i>WorldBegin</i> vindt). In dit voorbeeld roteerd het
    systeem -100 graden rond de X-as (om te roteren rond de Y-as gebruik
    je <i>Rotate 45 0 1 0</i>), vervolgens wordt het vertaald -0,55
    eenheden langs de Y-as en 8 eenheden langs de Z-as. Let vooral op wat
    er wordt getransformeerd (geroteerd en vertaald) niet echt de camera
    is, maar het centrum van de wereld co&ouml;rdinaten (<em>opmerking van
    de Engelse vertaler</em> : OpenGL gebruikt exact hetzelfde schema voor
    transformaties). De volgende figuren laten verschillende stadia
    tijdens de twee transformaties zien. </p>

    <p></p>

    <center>
      <a href="../../common/May1998/default_camera.rib"><img src=
      "../../common/May1998/default_camera.jpg" height="240" width=
      "320"></a> <a href=
      "../../common/May1998/camara_pos1.rib"><img src=
      "../../common/May1998/camara_pos1.jpg" height="240" width=
      "320"></a> <a href=
      "../../common/May1998/camara_pos2.rib"><img src=
      "../../common/May1998/camara_pos2.jpg" height="240" width=
      "320"></a>
    </center>

    <p>Na de inleidende definities komt de scene zelf. Iedere scene (een
    declaratie van lichten, objecten, enz...) begint altijd met
    <tt>WorldBegin</tt> en eindigt met <tt>WorldEnd</tt> (regels 26 en 64,
    respectievelijk). De eerste paar regels in de scene van ons voorbeeld
    declareren de belichting (regel 28 tot 32); ieder licht heeft een
    nummer en in theorie moeten ze zich onderscheiden, de eerste is het
    omgevingslicht en heeft een intensiteit van 0,02. Na het belichten
    wordt de variabele <tt>shadows</tt> gedeclareerd als een karakter
    string en dan wordt de licht optie voor schaduwen geactiveerd. Regel
    32 voegt een lichtbron van het type <tt>distantlight</tt> (een
    lichtbron die zich ver weg bevindt, zoals de zon) toe, weer met nummer
    1: zoals eerder genoemd, zou de lichtbron anders moeten zijn (zeg 2),
    het werkt echter nog steeds omdat BMRT blijkbar de licht-nummering
    negeert, voor compatibiliteit (bijvoorbeeld met Pixar's PRMan) zouden
    we echter stricter moeten zijn met de interface. De intensiteit van de
    tweede lichtbron is gelijk aan de eerste (dit zijn algemene
    attributen) en de richtingsvector, gedefinieerd met <tt>from</tt> en
    <tt>to</tt>, stuurt de lichtbundels parallel, alsof het een lichtbron
    op afstand was. </p>

    <p>Nu hebben we de drie elementaire objecten die de scene vormen,
    ieder object is omsloten met een paar <tt>AtributeBegin</tt> en
    <tt>AttributeEnd</tt> omdat ieder zijn eigen karakteristieken heeft
    (zowel positie als uiterlijk). Als de positie de enige eigenschap was
    die van object tot object veranderde, zou een <tt>TransformBegin</tt>
    en <tt>TransformEnd</tt> volstaan. Het eerste object (regels 34 tot
    42) is een patch, patches kunnen zijn: uniform of non-uniform,
    rationeel of niet-rationeel en bilinear of bicubic. (wat leidt tot
    <tt>Bezier</tt> en <tt>Bsplines</tt> patches) enz. (een boek over
    computer graphics helpt om deze features echt te begrijpen).
    In ons voorbeeld hebben we een bilineare patch met vier
    co&ouml;rdinaten <tt>(x,y,z)</tt> van punten. De textuur van het
    object wordt gerenderd met het statement <tt>Surface</tt>, het eerste
    object is een <tt>shader</tt> bestand en de volgende argumenten zijn
    specifiek voor iedere <tt>shader</tt>. In de volgende afbeelding
    zie je de resulterende scene:</p>

    <center>
      <img src="../../common/May1998/camara_parche.jpg" height=
      "240" width="320">
    </center>

    <p>De regels 44 tot 52 defini&euml;ren meerdere objecten in de scene:
    een bol (regel 51), waarvan de kleur wordt opgegeven met de directive
    <tt>Color [R G B]</tt>. Deze bol wordt vertaald en krijgt een
    oppervlak-type <tt>matte</tt>, in het huidige geval. Vervolgens komt
    de belangrijkste feature van BMRT, de displacement (verplaatsing)
    <tt>shaders</tt>. Deze zijn vergelijkbaar met de <i>bump-maps</i> van
    Pov-Ray, behalve dat onder BMRT deze "bumps" niet gesimuleerd zijn,
    maar echt. Het laatste effect is dat het oppervlak en de grenzen van
    de bol ruw lijken. <tt>shaders</tt> voor verplaatsingen zijn
    vergelijkbaar met die voor texturen, declareer altijd als een naam
    voor een bepaald <tt>shader</tt>, gevolgd door zijn parameters. De
    specificatie van de bol is een beetje vreemd; eerst de radius, dan
    plaatsen de <tt>zmin</tt> en <tt>zmax</tt> de bol op de z-as (de
    waarden -1 en 1 zouden de bol intact laten, terwijl de waarden 0 en 1
    hem doormidden zouden snijden), de laatste waarden zijn de graden die
    worden gedekt door de bol (360 is de volledige bol, 180 half, enz...)
    Hier is een afbeelding van de eerste bol in positie:</p>

    <center>
      <img src="../../common/May1998/camara_bola1.jpg" height="240"
      width="320">
    </center>

    <p>het volgende object is vergelijkbaar met de eerste, op de
    verschillende textuur na en de verplaatsing karakteristieken, daarom
    zal ik de uitleg hier niet herhalen, laten we gewoon de code uitvoeren
    en kijken wat we krijgen:</p>

    <center>
      <img src="../../common/May1998/camara_bola2.jpg" height="240"
      width="320">
    </center>

    <p>Dit maakt het bestand compleet. Op dit punt zou het duidelijk
    moeten zijn dat het ontwikkelen van scenes niet moeilijk is, hoewel
    een complexe scene of een animatie het bestand erg complex kunnen
    maken. Om dit voorkomen, volstaat een modeler die RenderMan
    ondersteund (vrijwel alle bekende modelers exporteren RIB bestanden),
    eventueel kun je de animatie in C programmeren. In de distributie van
    BMRT zit ook de <tt>include</tt> directory en de nodige libraries.
    Deze bevatten functies om het RIB bestand naar stdout (standaard
    uitvoer) te sturen. Beide methoden zijn volledig identiek:
    <tt>WorldBegin</tt> in een RIB bestand komt overeen met
    <tt>RiWorldBegin()</tt> in een C programma (om hier meer over te
    leren, zie <i>Renderman for Poets</i>, deze is te vinden in de
    <tt>doc/</tt> directory. <a name="conclu"></a></p>

    <A NAME="42lfindex3">&nbsp;</A>
<H3><font color="#660033">Conclusies</font></H3>

    De Renderman interface is erg krachtig, Toy Story is er zelfs mee
    gemaakt (met een modeler genaamd <i>marionet</i>). Op <a
    href="http://www.toystory.com">www.toystory.com</a> staan een aantal
    artikelen over de film en enkele andere dingen. De specificatie van de
    interface is te vinden op <a href=
    "http://giga.cps.unizar.es/prman/RISpec/index.html"
     >giga.cps.unizar.es</a>. Behalve de specificatie is er de handleiding
    voor PRMan (Pixar's renderer) en ook enkele <a href=
    "http://giga.cps.unizar.es">voorbeelden</a>.

    <p>In het volgende artikel gaan we een klein object modelleren, dit
    zullen we doen in C, zodat het later makkelijk geanimeerd kan worden
    en zo worden we gelijk een bekend met de library. Het kleine object
    voor de animatie zou de Linux pingu&iuml;n kunnen zijn, of Bill Gates
    (of beide en laten we de pingu&iuml;n de andere roosteren... :)</p>
    :)</p>
    <hr size="2" noshade>

    <b>Voor meer informatie:</b>

    <ul>
      <li>Andere artikelen in deze uitgave: <a href=
      "article35.shtml">MindsEye: 3D Modeling</a>, <a href=
      "article48.shtml">Pov-Ray: Basic Notions</a></li>

      <li>Andere artikelen in eerdere uitgaven: <a href=
      "../March1998/article30.html">POV-Ray: First Steps</a><br>
      </li>

      <li>Homepage van BMRT <a href=
      "http://www.seas.gwu.edu/student/gritz/bmrt.html"
        >http://www.seas.gwu.edu/student/gritz/bmrt.html</a></li>

      <li>RenderMan Repository <a href=
      "http://rmr.spinne.com/">http://rmr.spinne.com/</a></li>

      <li>Pixar <a href=
      "http://www.pixar.com/">http://www.pixar.com/</a></li>

      <li>GIGA (Grupo de Informatica Grafica Avanzada) <a href=
      "http://giga.cps.unizar.es/prman/"
       >http://giga.cps.unizar.es/prman/</a></li>

      <li>Homepage van Toy Story <a href=
      "http://www.toystory.com/ ">http://www.toystory.com/</a><br>
      </li>

      <li>RenderMan cursus in PDF: <a href=
      "http://rmr.spinne.com/KessonPDF/index.html"
       >http://rmr.spinne.com/KessonPDF/index.html</a></li>
    </ul>
    <!-- vim: set sw=2 ts=2 et tw=74: -->
  



<!-- BODY_OF_THE_ARTICLE_STOP -->
<!-- 2pdaIgnoreStart -->
<br clear="all">
<HR size="2" noshade>
<table width="250" border=0><tr><td>
<div class="bbutton"><a class="nodec" href="../../index.shtml">&lt;--, LF Home</a></div>
</td><td>
<div class="bbutton"><a class="nodec" href="index.html">Terug naar de titelpagina van dit nummer</a></div>
</td></tr></table>
<br clear="all">
<HR size="2" noshade>
<!-- ARTICLE FOOT -->
<CENTER><TABLE WIDTH="98%" summary="footer">
<TR><TD ALIGN=CENTER BGCOLOR="#bdc6d5" WIDTH="50%">
<A HREF="../../common/lfteam.html">Site onderhouden door het LinuxFocus editors team</A>
<BR><FONT COLOR="#1111aa"><a href="../../common/copy.html">&copy; Carlos     Calzada Grau</a>, FDL<br><a href="http://www.linuxfocus.org">http://www.LinuxFocus.org</a></FONT>
</TD>
<TD BGCOLOR="#bdc6d5">
<!-- TRANSLATION INFO -->
<font size=2>Vertaling info:</font>
<TABLE summary="translators">
  <tr><td><font size="2">es --&gt; -- : Carlos Calzada Grau <small>&lt;ccgrau /at/ disca.upv.es&gt;</small></font></td></tr>
  <tr><td><font size="2">es --&gt; en: Miguel Angel Sepulveda &lt;sepulveda /at/ linuxfocus.org&gt;</font></td></tr>
  <tr><td><font size="2">en --&gt; nl: Guus Snijders &lt;ghs(at)linuxfocus.org&gt;</font></td></tr>
</TABLE>
</TD>
</TR></TABLE></CENTER>
<p><font size=1>2005-04-16, generated by lfparser version 2.52</font></p>
<!-- 2pdaIgnoreStop -->
</BODY>
</HTML>