RenderMan

RenderMan on Pixarin kehittämä renderöintiohjelmisto sekä standardi, joka koostuu kahdesta osasta: ohjelmointirajapinnasta ja mallien kuvaamiseen tarkoitetusta kielestä (RenderMan Interface Specification, RISpec) ja shader-ohjelmointikielestä (RenderMan Shading Language). Yleisesti ”RenderMan” tarkoittaa Pixarin kehittämää ohjelmistoa PhotorealisticRenderMan (PRMan), mutta samalla nimityksellä viitataan myös muuhun järjestelmään kuten rajapinnat ja kieli tai muu yhteensopiva toteutus.

Historia 
RenderMan julkaistiin toukokuussa vuonna 1988.
Pixar käyttää ohjelmistoa itse ja lisensoi sitä kaupallisesti ja ei-kaupallisesti.
RenderMania ennen oli Reyes (Renders Everything You Ever Saw) pyyhkäisyviiva-algoritmi (scanline), jonka kehittivät Lucasfilmillä Loren Carpenter, Robert L. Cook ja Ed Catmull.
Ensimmäinen RenderManiä käyttävä elokuva oli Tin Toy (1988). Vuotta myöhemmin Pixar julkaisi ensimmäisen kaupallisen version ohjelmistosta.

RenderMan Shading Language on kehitetty ajatuksesta ohjelmoitavasta varjostuksesta, joka esiteltiin 1980-luvun alkupuolella.

Aiemmin Carpenter oli kehittänyt fraktaaleihin perustuvan proseduraalisen mallinnuksen realistisien maastojen tekemiseen. Catmull oli kehittänyt Z-puskuroinnin Utahin yliopistossa 1970-luvun alussa ratkaistakseen näkyvät pinnat. Tämän jälkeen hän oli kehittänyt pinnan esityksen sen materiaalin mukaan luoden teksturoinnin. Cook kirjoitti Cornellin yliopistossa artikkelin miten heijastuvan värin on muututtava pinnan mukaan: aiemmin tietokoneella luodut kuvat näyttivät muovisilta koska ne jäljittelivät muovisen pinnan heijastusta. Kolme henkilöä päätyivät Lucasfilmille, jossa he aloittivat ohjelman kehityksen.

Ohjelman kehityksessä oli tavoitteena, että elokuvaa tekevät taiteilijat voivat hallita sekä valaistusta että varjostusta. Lisäksi tavoitteena oli käsitellä 80 miljoonaa polyognia kuvaa kohden. Tuohon aikaan olemassa olevat ohjelmat käsittelivät  polygonia. Suuren määrän valinnassa oli syynä että se pakottaisi ajattelemaan koko prosessia uudestaan. Ohjelma toteutettiin VAX 11/780 tietokoneella, jonka suorituskyky oli .

Catmull, Carpenter ja Cook pitivät leikkimielistä kilpailua parhaan ratkaisun kehittämiseksi. Catmullin menetelmä oli tarkka ja elimoinoi ”kulmikkaan” näköiset reunat, mutta oli laskennallisesti vaativa. Carpenterin ja Cookin menetelmä kehitti Monte Carlo -tekniikkaan perustuvan pisteiden näytteistyksen ja sovelsi näytteiden minimietäisyyksiä, jolloin yhdellä algoritmilla pystyi ratkaisemaan monta ongelmaa. Perusalgoritmin valinnan jälkeen Carpenter suunnitteli ohjelman arkkitehtuurin, joka perustui aiempaan Reyes-ohjelmaan. Cook kirjoitti lopullisen ohjelman, jonka nimi oli Lucasfilm Renderer ja nimi muuttui RenderManiksi kun ohjelmaa myyttiin talon ulkopuolelle.
Renderöinti käytti stokastista näytteistystä ja pikselit jaettiin alipikseleihin (tyypillisesti 16:een), joita oli näytekohtaa kohden.

Ohjelmassa yhdistettiin Catmullin teksturointi, Carpenterin fraktaalit ja Cookin ohjelmoitava varjostuskieli Shade Trees. Vuonna 1990 Pat Hanrahan sai valmiiksi rajapintamäärittelyn RenderManille ja osana määrittelyä Cookin kieli kirjoitettiin uudestaan. Cookin alkuperäisenä ajatuksena oli että kielellä tehdyt ohjelmat olisivat enintään 10 tai 20 riviä pitkiä, mutta Luxo Jr. oli sata riviä. Myöhemmin ohjelmat kasvoivat satoihin tuhansiin riveihin ja niitä on erilaisia jokaiselle pinnalle. Hanrahanin määrittelyn virallinen nimi oli ”PhotoRealisticRenderMan” mutta se tuli tunnetuksi nimellä RenderMan. Hanrahanin määrittelyyn kuuluivat RenderMan Interface sekä RenderMan Shading Language (RSL).

Osa RenderManiksi tulevasta ohjelmasta oli ensi kertaa käytössä vuoden 1982 elokuvassa Star Trek II: The Wrath of Khan ”Genesis Sequence” -nimisessä kohtauksessa. Ensimmäinen julkisesti esitetty elokuva, joka käytti valmista ”Lucasfilm Renderer” -ohjelmaa oli vuoden 1984 SIGGRAPH-tapahtumassa esitetty The Adventures of Andre and Wally B.. Vuonna 1986 esitetty Luxo Jr. oli menestys ja kyse ei ollut enää tietokoneanimaatiosta eikä selkeästä erikoistehosteesta. Samaan aikaan Lucasfilmin tietokonegrafiikan osastosta tehtiin erillinen yhtiö, josta tuli Pixar.

Ohjelma on ollut jatkuvassa kehityksessä ja merkittäviä laajennuksia ovat esimerkiksi säteenseuranta. Ohjelma on myös kirjoitettu uudestaan path tracing -tyyppiseksi uudella RIS-arkkitehtuurilla, joka esiteltiin versiossa 19. Aiempi RenderMan Shading Language käsitteli sekä materiaaliominaisuudet että ohjasi säteiden seurantaa. RIS-arkkitehtuurissa toiminnot jaetaan valon välitykseen (säteet ja globaali valaistus), Bxdfs pinnan heijastuksien laskentaan ja pinnan parametrien käsittelyyn. Muutokset jakamiseen on tehty paremmalle tuelle fysiikaperusteisille materiaaleille sekä realistiselle valon välitykselle. RIS mahdollistaa interaktiivisen reaaliaikaisen renderöinnin ja muutoksien tekemisen renderöinnin aikana. Kaksisuuntainen polunseuranta mahdollistaa saa tulokset nopeammin ja toimii tilanteissa joissa yksisuuntainen ei toimi.

Vaikka Pixar työskenteli omien elokuvien parissa (kuten Toy Story) RenderMan päätettiin julkaista myös kaupallisena ohjelmistona ja ensimmäinen asiakas oli Industrial Light & Magic. Merkittäviä elokuvia tämän jälkeen olivat Terminator 2 ja Jurassic Park, jotka vähensivät vastustusta uudelle suuntaukselle.

RenderMan-ohjelmiston versiossa 21 poistettiin eräitä vanhoja ominaisuuksia kuten Reyes-renderöinti sekä parannettiin tukea ominaisuuksille kuten fysiikkaperusteiselle renderöinnille. Myös RenderMan Shading Language on merkitty vanhentuneeksi uudemman avoimen standardin Open Shading Languagen (OSL) hyväksi.

Ohjelmaan on myös lisätty BRDF-tuki.

RenderMan Interface Specification 

RenderMan Interface Specification (RI Spec) on standardi rajapinta mallinnusohjelmien ja RenderMan-yhteensopivien renderöintiohjelmien välillä.

Rajapinta määrittelee protokollan ja samalla ohjelmointirajapinnan ja tiedostomuodon renderöivälle järjestelmälle. Renderöintijärjestelmät voivat olla toteutettu eri tekniikoilla. Määritelmä ei tue kaikkia väri- ja koordinaattijärjestelmiä vaan tarvittavat muunnokset ovat mallinnusohjelman vastuulla (edustaohjelma, front-end).

Spesifikaatio ei ota kantaa 3D-mallinnusohjelmien toteutukseen, vaan pelkästään siihen miten tieto siirretään 3D-mallinnusohjelmasta spesifikaation mukaiseen renderöintijärjetelmään. Täten renderöintiohjelman voi vaihtaa tarpeen mukaan. RenderManin erityispiirre on, että moni asia määritellään shader-ohjelmien avulla: sen sijaan että kaikki mahdollinen toiminnallisuus olisi ohjelmoitu sisään renderöijiin, kuvaa muodostaessaan renderöijä ajaa käyttäjän määrittelemiä ohjelmia, joka voi muuttaa esimerkiksi pinnan muotoa, väriä tai valaistusta. Spesifikaatio määrittelee vain muutamia tiettyjä shader-ohjelmia, jotka kaikkien toteutusten on pakko toteuttaa. 3D-kuva muodostuu erilaisista grafiikkaprimitiiveistä, kuten monikulmioista, pinnoista tai palloista.

Tunnustuksia ja palkintoja 
Vuonna 2001 Catmull, Carpenter ja Cook saivat Oscar-palkintojen Academy Award of Merit -tunnustuksen renderöinnin kehittämisestä. Vuonna 1992 ohjelmalle oli myönnetty teknisen ja tieteellisen komitean tunnustus. Vuoden 1992 tunnustuksessa mainittiin nimeltä Loren Carpenter, Rob Cook, Ed Catmull, Tom Porter, Pat Hanrahan, Tony Apodaca ja Darwyn Peachey.

Vuonna 2019 Catmull ja Hanrahan saivat Turing-palkinnon kolmiulotteisen tietokonegrafiikan kehitykseen vaikuttamisesta.

Ohjelmistotuki 
Myös muille ohjelmistoille on tehty plugin-tukea RenderManin käyttöön kuten Houdini, Maya ja Foundry Katana.

Ohjelmisto on saatavilla Linuxille (CentOS/Red Hat Enterprise Linux), macOS:lle (OS X 10.13 tai uudempi), sekä Windowsille (8.1 ja 10).

Elokuvat 
Ohjelmistoa on käytetty visuaalisiin tehosteisiin useissa elokuvissa: Jurassic Park, The Abyss, Forrest Gump, X-Men, The Matrix ja Gladiator. Lisäksi sillä on tehty Pixarin omia elokuvia Toy Story, Toy Story 2 ja Ötökän elämää (A Bug's Life).

Lähteet

Aiheesta muualla 
 RenderMan-sivut Pixarilla 
 Artikkeleita tekniikasta 
 The RenderMan Interface and Shading Language

Kirjallisuutta 
 
 

Tietokonegrafiikka
Pixar
Renderöintijärjestelmät