Bc. Martin Dušek. Fakulta elektrotechnická. Studijní program: Elektrotechnika a informatika strukturovaný magisterský



Podobné dokumenty
Osvětlování a stínování

Surfels: Surface Elements as Rendering Primitives

Pokročilé osvětlovací techniky Josef Pelikán, MFF UK Praha

CGI. Computer generated imagery Počítačové triky Animované filmy Počítačové hry. Technologické trendy v AV tvorbě, CGI 2

Animace a geoprostor. První etapa: Animace 3. přednáško-cvičení. Jaromír Landa. jaromir.landa@mendelu.cz Ústav informatiky PEF MENDELU v Brně

Pokročilé metody fotorealistického zobrazování

Textury v real-time grafice Josef Pelikán, MFF UK Praha Josef.Pelikan@mff.cuni.cz

Katedra informatiky, Univerzita Palackého v Olomouci. 27. listopadu 2013

Přibližný výpočet efektů globálního osvětlení na GPU

GEOGRAFICKÉ INFORMAČNÍ SYSTÉMY 6

Multimediální systémy. 11 3d grafika

Program pro zobrazení černobílých snímků v nepravých barvách

Optické měřicí 3D metody

Zobrazování a osvětlování

Univerzita Pardubice Fakulta ekonomicko-správní. Počítačová grafika a geometrické transformace v rovině a prostoru. Eva Hladíková

Základy 3D modelování a animace v CGI systémech Cinema 4D C4D

2. RBF neuronové sítě

Neuropočítače. podnět. vnímání (senzory)

Měření rozložení optické intenzity ve vzdálené zóně

FAKULTA STAVEBNÍ MATEMATIKA II MODUL 2 STUDIJNÍ OPORY PRO STUDIJNÍ PROGRAMY S KOMBINOVANOU FORMOU STUDIA

3D Vizualizace muzea vojenské výzbroje

Vyplňování souvislé oblasti

3D grafika. Proces tvorby sekvence s 3D modely Sbírání údajů na natáčecím place Motion capture Matchmoving Compositing

ELEKTRICKÉ SVĚTLO 1 Řešené příklady

Osvětlovací modely v počítačové grafice

Uživatelská. príručka. osvetlení, kine. telským prostr.. modelování, t. materiálu a tex. animaee III. III seznámení s K INFORMACÍM

SOFTWARE NA ZPRACOVÁNÍ MRAČEN BODŮ Z LASEROVÉHO SKENOVÁNÍ. Martin Štroner, Bronislav Koska 1

Perspektiva jako matematický model objektivu

Výukové materiály pro výuku 3D grafiky na SOŠ

Hierarchický model Josef Pelikán CGG MFF UK Praha. 1 / 16

Základní radiometrické veličiny

ELEKTRICKÉ SVĚTLO 1 Řešené příklady

Distribuované sledování paprsku

GRAFY A GRAFOVÉ ALGORITMY

Euklidovský prostor Stručnější verze

LBP, HoG Ing. Marek Hrúz Ph.D. Plzeň Katedra kybernetiky 29. října 2015

NEXIS 32 rel Generátor fází výstavby TDA mikro

1. Alternativní rozdělení A(p) (Bernoulli) je diskrétní rozdělení, kdy. p(0) = P (X = 0) = 1 p, p(1) = P (X = 1) = p, 0 < p < 1.

Fyzikálně založené modely osvětlení

STUDIUM HLADINOVÉHO ELEKTROSTATICKÉHO

Grafická data jsou u 2D vektorové grafiky uložena ve voxelech NEPRAVDA Grafická data jsou u rastrové grafiky uložena v pixelech PRAVDA Grafická data

Západočeská univerzita v Plzni. Fakulta aplikovaných věd Katedra matematiky. Geometrie pro FST 1. Pomocný učební text

Reprezentace 3D modelu

Analytický model pro rozptyl světla v mlze. Jan Ondřej

OPTIKA - NAUKA O SVĚTLE

Základní ovládání a práce s programem CorelDraw 11

UNIVERZITA PALACKÉHO V OLOMOUCI. Přírodovědecká fakulta. Katedra optiky. Jana Grézlová. Obor: Digitální a přístrojová optika.

Studentská tvůrčí činnost. O letu volejbalového míče při podání

Studentská tvůrčí a odborná činnost STOČ 2015

Počítačová grafika III Úvod

Výukový materiál vytvořen v rámci projektu EU peníze školám "Inovace výuky" registrační číslo CZ.1.07/1.5.00/

GRAFICKÉ ADAPTÉRY. Pracovní režimy grafické karty

SPIRIT Nové funkce. SOFTconsult spol. s r. o., Praha

Barvy na počítači a grafické formáty

Světlo v multimódových optických vláknech

Co je grafický akcelerátor

. Opakovací kurs středoškolské matematiky podzim 2015

3D počítačová grafika na PC Josef Pelikán, MFF UK Praha

Fotonové mapy. Leonid Buneev

+ ω y = 0 pohybová rovnice tlumených kmitů. r dr dt. B m. k m. Tlumené kmity

HDR obraz (High Dynamic Range)

ANALÝZA MĚŘENÍ TVARU VLNOPLOCHY V OPTICE POMOCÍ MATLABU

Textury. !POZOR! tento text vás nenaučí dělat ve Photoshopu, pouze ukazuje na možnosti využití některých funkcí.

SYLABUS PŘEDNÁŠKY 6a Z INŽENÝRSKÉ GEODÉZIE (Polohové vytyčovací sítě) 4. ročník bakalářského studia studijní program G studijní obor G

Rozdìlení poèítaèové grafiky

BAKALÁŘSKÁ PRÁCE. Optimalizace trojúhelníkových sítí v E 3 a jejich zobrazování / 2000 Jan Doubek

Vývoj počítačové grafiky

Počítačová grafika 2 (POGR2)

Radiometrie, radiační metody

Jazyk matematiky Matematická logika Množinové operace Zobrazení Rozšířená číslená osa

Rekurzivní sledování paprsku

5.2.4 Rayleighova Taylorova nestabilita

Praktická geometrická optika

ROTAČNÍ KVADRIKY. Definice, základní vlastnosti, tečné roviny a řezy, průsečíky přímky s rotační kvadrikou

Pasivní Koherentní Lokace. Duben 2008

Praktická geometrická optika

Projekty do předmětu MF

FAKULTA STAVEBNÍ VUT V BRNĚ PŘIJÍMACÍ ŘÍZENÍ PRO AKADEMICKÝ ROK

Několik poznámek na téma lineární algebry pro studenty fyzikální chemie

Detekce kolizí v 3D Josef Pelikán KSVI MFF UK Praha

Bayesovská klasifikace digitálních obrazů

Petr Chvosta. vlevo, bude pravděpodobnost toho, že se tyč na počátku intervalu τ B nachází nad vpravo

1. ÚVOD 2. MAGNETOMETRY 2.1. PRINCIP MAGNETOMETRŮ 2009/

Základy matematiky kombinované studium /06

Rastrová reprezentace geoprvků model polí Porovnání rastrové a vektorové reprezentace geoprvků Digitální model terénu GIS 1 153GS01 / 153GIS1

Měřicí a řídicí technika Bakalářské studium 2007/2008. odezva. odhad chování procesu. formální matematický vztah s neznámými parametry

Západočeská univerzita. Lineární systémy 2

6. T e s t o v á n í h y p o t é z

FYZIKÁLNÍ PRAKTIKUM FJFI ČVUT V PRAZE. Úloha 4: Balmerova série vodíku. Abstrakt

Animované modely šroubových ploch

Mendelova zemědělská a lesnická univerzita v Brně

POPIS PROSTŘEDÍ PROGRAMU GIMP 2. Barvy 2. Okno obrázku 4 ZÁKLADNÍ ÚPRAVA FOTOGRAFIÍ V GRAFICKÉM EDITORU 6. Změna velikosti fotografie 6

produktová brožura Červenec 2008

Realistický rendering

GIS Geografické informační systémy

Základní techniky zobrazování Josef Pelikán, MFF UK Praha

Akustika. Rychlost zvukové vlny v v prostředí s hustotou ρ a modulem objemové pružnosti K

spsks.cz 3D Modelování Zpracováno v rámci projektu CZ.1.07/3,2, 10/ financovaného z fondů EU

Ideální krystalová mřížka periodický potenciál v krystalu. pásová struktura polovodiče

ZÁKLADNÍ POJMY SVĚTELNÉ TECHNIKY

Transkript:

České vysoké učení technické v Praze Fakulta elektrotechnická Diplomová práce Efektivní zobrazování vlasů a chlupů Bc. Martin Dušek Vedoucí práce: Ing. Jaroslav Křivánek, Ph.D. Studijní program: Elektrotechnika a informatika strukturovaný magisterský Obor: Informatika a výpočetní technika květen 2008

iv

Poděkování Chtěl bych poděkovat vedoucímu této práce Ing. Jaroslavu Křivánkovi, Ph.D. za podnětné rady a připomínky. Dále děkuji Jiřímu Štempinovi a Jiřímu Drahokoupilovi za spolupráci při vývoji osvětlovacího modelu vlasů. Děkuji také studiu UPP (Universal Production Partners), především Viktoru Plchovi za cenné připomínky a testování této práce. V neposlední řadě patří dík mojí matce za jazykovou korekturu textu. v

vi

Prohlášení Prohlašuji, že jsem svou diplomovou práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Z důvodu komerčního využití práce odpírám udělit souhlas s užitím tohoto školního díla ve smyslu 60 Zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon). V Českém Brodě dne 20.5. 2008............................................................. vii

viii

Abstract This diploma thesis deals with efficient photo-realistic hair or fur rendering for a production high-quality rendering, which is mainly used in movies. The rendering of huge number of hair is still a difficult task for computer graphics. The goal of this thesis was an implementation of a technique for accelerating hair rendering with preserved visual quality. A large part of the thesis presents also the lighting models for photo-realistic hair rendering. The implementation is for a RenderMan-compliant renderer, which is nearly always used in production environment. Abstrakt Tato diplomová práce se zabývá efektivním foto-realistickým zobrazováním vlasů a chlupů pro produkční vysoce kvalitní vykreslování, které se používá zejména ve filmovém průmyslu. Zobrazování velkého množství vlasů patří i dnes k obtížným úkolům počítačové grafiky. Cílem práce byla implementace techniky pro zrychlení vykreslování vlasů při zachování dostatečné vizuální kvality. Velká část práce se také věnuje osvětlovacím modelům, které se obvykle používají pro foto-realistické zobrazování vlasů. Implementace je určena pro vykreslovací program standardu RenderMan, který se téměř výlučně používá v produkčním prostředí. ix

x

Obsah Seznam obrázků Seznam tabulek xiii xv 1 Úvod 1 2 Zobrazování vlasů 3 2.1 Reprezentace vlasů.................................. 3 2.1.1 Válce..................................... 3 2.1.2 Pásky..................................... 4 2.1.3 Čáry...................................... 4 2.1.4 Textury.................................... 4 2.2 Modelování vlasů................................... 4 2.3 Algoritmy pro vykreslování............................. 5 2.3.1 GPU Z-buffer................................. 5 2.3.2 Sledování paprsku (ray tracing)....................... 6 2.3.3 Reyes..................................... 7 3 Osvětlovací modely 9 3.1 Model Kajiya & Kay................................. 9 3.1.1 Difúzní složka................................. 9 3.1.2 Zrcadlová složka............................... 10 3.2 Marschnerův model.................................. 11 3.2.1 Geometrie vlasu............................... 11 3.2.2 Funkce rozptylu............................... 13 3.2.2.1 Podélná funkce rozptylu M.................... 14 3.2.2.2 Azimutální funkce rozptylu N.................. 14 3.3 Další osvětlovací modely............................... 16 4 Zjednodušování modelu vlasů 19 4.1 Statické úrovně detailu................................ 19 4.2 Progresivní modely.................................. 19 4.3 Textury........................................ 20 4.4 Stochastická simplifikace............................... 20 4.4.1 Určení úrovně detailu............................ 21 4.4.2 Priorita vykreslování............................. 21 4.4.3 Zachování povrchu.............................. 22 4.4.4 Zachování kontrastu............................. 22 4.4.5 Plynulá animace............................... 23 5 Produkční prostředí 25 5.1 Autodesk Maya.................................... 25 5.2 Shave and a Haircut................................. 26 5.3 3Delight RenderMan................................. 27 5.3.1 Stínovací programy.............................. 28 5.3.2 Procedurální primitiva............................ 29 5.3.3 Podmíněné výrazy.............................. 29 5.3.4 Další rozšíření................................ 30 5.4 Tvorba a vykreslování vlasů............................. 30 xi

6 Implementace 31 6.1 Schéma funkce.................................... 32 6.2 fursimplification zásuvný modul pro Mayu................... 33 6.2.1 Struktura hlavního RIBu Shave....................... 33 6.2.2 Nastavení pro stínový průchod....................... 34 6.2.3 Upravený hlavní RIB............................ 34 6.2.4 Příkaz MEL pro Mayu............................ 36 6.2.5 Uživatelské rozhraní pro Mayu....................... 37 6.3 furproc.dll procedurální DSO pro RenderMan.................. 38 6.3.1 Struktura DLL................................ 39 6.3.2 Načtení RIBu voxelu Shave......................... 39 6.3.3 Algoritmus stochastické simplifikace.................... 42 6.3.4 Výstup do rendereru............................. 43 6.4 Stínovací programy.................................. 44 6.4.1 Kajiya & Kay................................. 45 6.4.2 Marschner................................... 46 7 Výsledky 49 7.1 Osvětlovací modely.................................. 49 7.2 Simplifikace...................................... 51 7.2.1 Animovaný vlk................................ 51 7.2.2 Hromadná scéna............................... 53 8 Závěr 59 9 Seznam literatury 61 A Seznam použitých zkratek 63 B Uživatelská příručka 65 B.1 Instalace........................................ 65 B.2 Nastavení v Maye................................... 65 B.3 Nastavení simplifikace................................ 66 B.4 Log........................................... 67 C Obsah přiloženého CD 69 xii

Seznam obrázků 2.1 Typická parametrizace vlasu, která se používá v počítačové grafice........ 3 2.2 Srovnání reprezentací vlasů.............................. 4 2.3 Mapy neprůsvitnosti se vytváří z pozice světla................... 6 2.4 Zjednodušené schéma architektury reyes....................... 7 3.1 Geometrie vlasu modelu Kajiya & Kay....................... 9 3.2 Difúzní složka použitá ve filmu,,myšák Stuart.................. 10 3.3 Zrcadlová složka Kajiya & Kay............................ 10 3.4 Schématické znázornění vlasového vlákna...................... 11 3.5 Porovnání osvětlovacích modelů s reálnými vlasy.................. 12 3.6 Souřadný systém vlasu je tvořen vektory u, v, w.................. 12 4.1 Kolaps hrany ecol a inverzní operace vsplit..................... 19 4.2 λ jako funkce b pro různé hodnoty h......................... 21 4.3 Pro menší hodnoty λ je vyloučeno více elementů.................. 22 4.4 Příklad problému změny kontrastu.......................... 23 4.5 Velikost vlasů se snižuje plynule........................... 23 5.1 Zjednodušená architektura editoru Maya...................... 26 5.2 Ukázka z aplikace Maya a nástroje Shave and a Haircut.............. 26 5.3 Koule vykreslená pomocí 3Delight RenderMan................... 28 6.1 Schéma řetězce pro zobrazování vlasů se simplifikací................ 32 6.2 Grafické rozhraní pro atributy uzlu DG (nastavení simplifikace)......... 38 6.3 Porovnání typů křivek při bližším pohledu..................... 40 6.4 Struktura třídy pro uložení všech vlasů (křivek).................. 41 6.5 Pracovní prostředí surface shader v RenderMan.................. 44 7.1 Porovnání implementací osvětlovacích modelů................... 49 7.2 Složky Marschnerova osvětlovacího modelu..................... 49 7.3 Marschnerův model včetně zadního nasvícení (TT složka)............. 50 7.4 Srovnání simplifikace v detailním pohledu s referenční scénou........... 51 7.5 Graf doby vykreslování závěrečného průchodu................... 54 7.6 Vlk osvětlený pomocí modelu Kajiya & Kay.................... 55 7.7 Vlk osvětlený pomocí Marschnerova modelu.................... 56 7.8 Hromadná scéna s vlky................................ 57 7.9 Hromadná scéna s vlky................................ 58 B.1 Uživatelské rozhraní pro nastavení simplifikace................... 66 xiii

xiv

Seznam tabulek 3.1 Použité symboly při výpočtu azimutálních funkcí rozptylu N........... 15 6.1 Popis parametrů, které je třeba zapsat do RIBu.................. 36 6.2 Popis parametrů příkazu RiCurves.......................... 41 6.3 Popis parametrů prostředí surface shader...................... 44 7.1 Porovnání rychlosti osvětlovacích modelů...................... 50 7.2 Doba vykreslování snímku 1............................. 52 7.3 Doba vykreslování snímku 95............................. 52 7.4 Doba vykreslování snímku 155............................ 52 7.5 Doba vykreslování hromadné scény.......................... 53 B.1 Popis parametrů pro nastavení simplifikace..................... 66 B.2 Význam položek logu................................. 67 xv

xvi

KAPITOLA 1. ÚVOD 1 1 Úvod Dnešní počítačová grafika již skoro nezná hranic. Důkazem je herní a filmový průmysl. Současné trojrozměrné hry obsahují i efekty globálního osvětlení, a vypadají tak velmi realisticky. Každým rokem dochází díky rychlému rozvoji hardware k dalším pokrokům v zobrazování počítačové reality. Oproti počítačovým hrám není ve filmech nutné zobrazování v reálném čase, ale jeden snímek se vykresluje třeba i několik minut. Jedním z převratných filmů vytvořených v počítači je,,final Fantasy: Esence života (Final Fantasy: The Spirits Within Square Pictures 2001). Tento film se od všech ostatních odlišuje, je celý vytvořen v počítači a jde o věrnou simulaci reality.,,final Fantasy byl první film hraný umělými herci, kteří ale nakonec byli opravdu trošku umělí oproti svým živým konkurentům. V tomto filmu se objevuje problém s modelováním a zobrazováním vlasů, kdy na lidské hlavě je asi 50 000 až 100 000 vlasů. Takové množství dokáže slušně zaměstnat i dnešní generaci počítačů. Navíc vlasy mají velmi malý průměr (cca 0.1 mm), což může při vykreslování způsobovat nežádoucí aliasing. Téměř v každém novém filmu se dnes využívá speciálních efektů a postprodukce. Pro věrné zobrazení lidí a zvířat je tedy nutné modelovat i vlasy a chlupy v množství, které odpovídá realitě. V oblasti animovaného filmu nejde o zcela věrné zachycení reality. Celý film dnes často vzniká v počítači. Asi nejznámější firma v této oblasti se jmenuje Pixar Animation Studios. Dnešní animované filmy obsahují obrovské množství detailů, příkladem jsou rozmanité scenérie ve filmu,,auta (Cars Pixar 2006). Ve filmu,,ratatouille (Pixar 2007) se nachází dokonce dynamické hromadné scény plné animovaných chlupatých krys. Zde se opět objevuje problém s dlouhou dobou vykreslování chlupů. Právě o tomto problému je tato diplomová práce. Ať už se jedná o animovaný film nebo o postprodukci, obě odvětví používají stejné technologie (především standard RenderMan), a řeší tedy i podobné problémy. V této diplomové práci se budu věnovat realistickému a efektivnímu zobrazování velkého množství vlasů a chlupů s důrazem na možné použití v produkčním prostředí. Hlavní náplní práce je zjednodušování modelu chlupů při vykreslování. Cílem je vytvořit aplikaci, kterou bude možné použít ve stávajícím produkčním řetězci. Zde je nutné respektovat omezení a možnosti jednotlivých softwarů. Důležité je také, aby vytvořená aplikace příliš neměnila zažité postupy v produkci. Kapitola 2 se krátce zabývá reprezentací vlasů pro vykreslování a vysvětluje příčiny, proč je zobrazování tak obtížné. V kapitole 3 jsou uvedeny osvětlovací modely používané pro zobrazení vlasů. Následující kapitola 4 je o metodách zjednodušování modelu pro efektivní vykreslování. 5. kapitola se zabývá aplikacemi, které se používají v produkčním prostředím. Kapitola 6 se věnuje vlastní implementaci v kontextu softwaru popsaného v předchozí části. Poslední kapitola 7 obsahuje výsledky několik příkladů a měření rychlosti vykreslování vlasů a chlupů.

2 KAPITOLA 1. ÚVOD

KAPITOLA 2. ZOBRAZOVÁNÍ VLASŮ 3 2 Zobrazování vlasů 2.1 Reprezentace vlasů Nejprve se krátce zmíním o možných reprezentacích vlasů v počítači. I když při použití vykreslovacího programu standardu RenderMan je nám vlastní implementace skryta. Budu se zabývat jen reprezentacemi, které se používají pro zobrazování. Modelovací fáze většinou používají různé hladké křivky, které se ale vždy teselují na reprezentaci vhodnou pro vykreslování. Každý model vlasů se skládá z jednotlivých vlasových vláken, kde každé vlákno je tvořeno segmenty. Jednotlivé reprezentace se liší právě v definici vláken resp. segmentů. Na obrázku 2.1 je ukázka typické parametrizace vlasu, která se používá v počítačové grafice. Vlas je popsán pomocí řídících vrcholů, jejichž řetězec tvoří segmenty. První vrchol, ze kterého vlas vyrůstá, se nazývá kořen (root), poslední vrchol špička (tip). Každý segment je tedy určen dvěma body a směrovým vektorem T (tangentou), který má typicky počátek ve vrcholu, který je blíže kořene. Dále je vlas popsán průměrem vlákna v řídících vrcholech. Typicky jsou vlasy/chlupy širší u kořene vlasu. Můžou se hodit také informace o místě na povrchu, odkud vlas vyrůstá normálový vektor povrchu ( N srf ) a souřadnice textury (s, t), ty lze použít například pro určení barvy vlasů z textury. Špička Nsrf T Segment Řídící vrchol Průměr s, t Kořen Obrázek 2.1: Typická parametrizace vlasu, která se používá v počítačové grafice. 2.1.1 Válce Nejobecnější reprezentací vlasových vláken jsou tzv. zobecněné válce (generalized cylinders), obrázek 2.2a. Ty je možné přímo zobrazit například pomocí metody sledování paprsku [BK85], častěji se nejprve provede triangulace těchto válců [GM03].

4 KAPITOLA 2. ZOBRAZOVÁNÍ VLASŮ Z obrázku 2.2b je vidět, že na jedno vlákno je potřeba poměrně velké množství trojúhelníků. Tato reprezentace se kvůli své náročnosti příliš nevyužívá ani při produkčním vykreslování. Vlasy jsou často zobrazeny z poměrně velké dálky, takže je není nutné modelovat jako válce. 2.1.2 Pásky Pásky (ribbons) jsou polygony, které se otáčí do směru pohledu (velmi podobné v počítačové grafice známým billboardům). Pásky se používají při zobrazování v reálném čase (zejména tam, kde nejsou podporovány čáry s anti-aliasingem) [Kim03], ale i při produkčním vykreslování (častá implementace příkazu RiCurves v RenderMan). Na obrázku 2.2c je vidět, že pásky vyžadují mnohem menší počet trojúhelníků než válce. 2.1.3 Čáry Vzhledem k tomu, že jsou vlasy malé, může být vlasové vlákno reprezentováno dvojrozměrnou čárou (viz obrázek 2.2d). Některé grafické systémy podporují kreslení čar s anti-aliasingem, takovým systémem je například OpenGL. Čáry se proto často používají při zobrazování v reálném čase [Kim03]. 2.1.4 Textury Vlasy nemusí být explicitně reprezentovány pomocí skutečných grafických primitiv. Lze použít jednodušší reprezentaci pomocí 2D či 3D-volumetrických textur, které jsou naneseny na polygonální geometrii. Taková reprezentace se většinou hodí jen pro velmi krátké chlupy. Více o texturách v části 4.3. a) b) c) d) Obrázek 2.2: Srovnání reprezentací: a) zobecněné válce, b) triangulované válce, c) pásky, d) čáry. 2.2 Modelování vlasů Předchozí část se zabývala reprezentací vlasů, které je ovšem nutné vytvořit vymodelovat. Tato práce se soustředí především na zobrazování, přesto uvádím alespoň velmi stručné uvedení do problematiky.

KAPITOLA 2. ZOBRAZOVÁNÍ VLASŮ 5 Při modelování se často pracuje jen s velmi omezeným množstvím vlasů, tzv. řídícími vlasy, které jsou často reprezentovány hladkými křivkami s řídícími body. Pouze tyto vlasy jsou,,učesány do požadovaného tvaru a animace (dynamika) se provádí také pouze s těmito vlasy. Tento přístup je výhodný, protože je méně výpočetně náročný. Ostatní vlasy, které jsou nutné pro vytvoření realistického modelu, se získají interpolací těchto řídících vlasů až těsně před zobrazováním vygeneruje se náhodná pozice (pravděpodobnost dána hustotou vlasů) na povrchu, ze kterého vlasy vyrůstají. Nové vlákno se získá interpolací nejbližších sousedů. Proces generování se opakuje, dokud není povrch modelu dostatečně zarostlý. Při modelování srsti krys ve filmu,,ratatouille (Pixar 2007) se do poslední chvíle pracuje s kompaktní reprezentací vlasů, kterou tvoří řídící křivky a ostatní vlasy jsou vygenerovány v požadovaném množství až při vykreslování [Ryu07]. Modelování vlasů je samozřejmě součástí grafických 3D editorů jako je například Autodesk Maya (zásuvný modul MayaFur nebo externí zásuvný modul Shave and a Haircut [Alt08]). 2.3 Algoritmy pro vykreslování Proč je zobrazování vlasů vlastně tak náročné? Čím se vlasy odlišují od klasické polygonální geometrie? Základní problémy při vykreslování vlasů jsou: Vlasů/chlupů je ve scéně obvykle obrovské množství (50 000 až 100 000 pro jednoho člověka, stovky tisíc pro srst zvířete). Průměr vlasu je velmi malý, jedním pixelem obrázku tak často prochází mnoho různých vlasů. Při nedostatečném vzorkování, tak vzniká nežádoucí aliasing. Vlasy jsou částečně průhledné, což je důležité při řešení viditelnosti. Vlasy vrhají stíny a to i na sebe sama tzv. self-shadows. Nyní uvádím tři algoritmy, které se používají pro vykreslování (nejen) vlasů s ohledem na uvedené problémy. 2.3.1 GPU Z-buffer Paměť hloubky [ZBSF04] se používá k vyšetření viditelnosti zejména na GPU. Vlasy se zobrazují buď jako čáry nebo pruhy trojúhelníků (pásky). Pro korektní vykreslování je ovšem nutné používat průhlednost, takže Z-buffer (resp. jeho současnou implementaci na GPU) není možné použít. Pro správné míchání barev je totiž nutné, aby segmenty vlasů byly nakresleny ve správném pořadí, tj. odzadu (nejdříve nejvzdálenější). Používá se aproximativní technika řazení segmentů podle vzdálenosti k pozorovateli [Kim03] a kreslení s vypnutým Z-bufferem. Často je nutné zobrazovat průhledné i neprůhledné povrchy. V tomto případě jsou nejprve vykresleny neprůhledné povrchy se zapnutým Z-bufferem a pak se teprve kreslí seřazené průhledné plochy. Jinou technikou pro kreslení průhledných objektů na GPU je tzv. depth peeling [Eve01], kdy se obrázek kreslí postupně po vrstvách. Tato technika vyžaduje použití dvou Z-bufferů, kdy druhý je na dnešních GPU nutné simulovat. Metoda je vhodná pouze pro malý počet průhledných ploch, které se překrývají, protože každá vrstva představuje jeden vykreslovací průchod. Tudíž tuto techniku nelze efektivně využít pro zobrazování vlasů.

6 KAPITOLA 2. ZOBRAZOVÁNÍ VLASŮ Anti-aliasing polygonů a čar je přímo podporován na GPU, malého průměru vlasů se často dosáhne nastavením malé průhlednosti (průhlednější polygon vypadá tenčí). Tato metoda,,snižování průměru vlákna se používá i u ostatních níže uvedených algoritmů. Celoobrazovkový anti-aliasing (FSAA) nestačí použít samotný vzhledem k opravdu velmi malým rozměrům vlasu. Lze jej pouze kombinovat s anti-aliasingem polygonů resp. čar. Pro stíny ve vlasech se používají mapy neprůsvitnosti (opacity maps) [KN01]. Metoda je založena podobně jako klasické stínové mapy na vykreslení modelu z pozice světla. V případě map neprůsvitnosti se vytvoří několik řezů, kde v každém jsou vykreslené vlasy mezi tímto řezem a světlem (viz obrázek 2.3). Při vykreslování obrázku se interpolací hodnot ze sousedních řezů určí počet vlasů, které jsou mezi světlem a aktuálně zpracovávaným fragmentem. Z této hodnoty se vypočítá velikost zastínění. i Obrázek 2.3: Mapy neprůsvitnosti se vytváří vykreslením z pozice světla s použitím několika řezů. Obrázek přejat z [Kim03]. Zobrazování vlasů na GPU funguje v reálném čase a používá se dnes i v počítačových hrách. Nevýhodou je nepřesné řešení viditelnosti a stínů. 2.3.2 Sledování paprsku (ray tracing) Metodu sledování paprsku [ZBSF04] lze bez problémů použít pro zobrazování vlasů. S vyšetřením viditelnosti včetně průhlednosti zde není problém a výsledky jsou mnohem přesnější než v případě GPU. Průhlednost je řešena zaznamenáním všech vlasů, které protínají primární paprsek, a jejich správným mixováním. Pro odstranění aliasingu je nutné použít větší množství paprsků na pixel, což je hlavní výkonnostní problém metody. Proto lze také, jako v předchozím případě, snižovat opticky průměr vlasů pomocí průhlednosti, potom může stačit i menší množství paprsků. Pro stíny lze použít techniku vrhnutí sekundárního stínového paprsku ke světlu, kdy je ovšem stejně jako u primárního paprsku nutné uvažovat všechny vlasy mezi světlem a vyšetřovaným fragmentem. To může být velmi pomalé, častěji se proto používají tzv. deep shadow maps [LV00]. Tyto stínové mapy se opět vytváří z pozice světla a mají dvě velké výhody jsou

KAPITOLA 2. ZOBRAZOVÁNÍ VLASŮ 7 předfiltrované a každý pixel obsahuje poměrně přesnou funkci viditelnosti, což nelze srovnávat s několika diskrétními řezy v případě map neprůsvitnosti. Nevýhodou mohou být o něco vyšší paměťové nároky. Metoda sledování paprsku je sice mnohem přesnější oproti GPU, co se viditelnosti a stínů týče, ale také mnohem pomalejší. 2.3.3 Reyes Ve vykreslovacích programech standardu RenderMan se často používá implementace scan-line zobrazovacího algoritmu, který je znám jako reyes. Reyes byl vyvinut v 80. letech v Lucasfilm Ltd. (nyní Pixar) speciálně pro filmový průmysl [CCC87]. Cílem bylo vytvořit systém, který by bylo možné využít pro vykreslování velkých složitých realistických scén v přijatelném čase pokud vykreslení jednoho snímku trvá tři minuty, potom dvouhodinový film při 24 snímcích za sekundu trvá přibližně jeden rok, což je považováno za přijatelný čas. Systém aproximuje mnoho efektů globálního osvětlování pomocí textur (například environment mapping a shadow mapping) a nemusí využívat pomalý ray tracing. Obrázek 2.4: Zjednodušené schéma architektury reyes. Architektura reyes je detailně popsána například v [CCC87] nebo [Apo00]. Zde uvedu alespoň stručný výklad této architektury, protože tento algoritmus není tak známý jako implementace Z-bufferu na GPU či metoda sledování paprsku.

8 KAPITOLA 2. ZOBRAZOVÁNÍ VLASŮ Zjednodušená architektura Reyes je na obrázku 2.4. Vstupem je soubor RIB (RenderMan Interface Bytestream), ze kterého jsou načteny příkazy pro RenderMan (například definice geometrie). Algoritmus nejprve rozloží všechna geometrická primitiva na menší kousky a odstraní ty, které se nachází mimo výseč kamery (frustum test). Menší kousky jsou následně rozloženy na tzv. mikropolygony. Mikropolygony jsou čtyřúhelníky, které mají velikost strany asi 1/2 pixelu a dohromady vytváří mřížku mikropolygonů. Následuje aplikace stínovacích programů (shaders) na vrcholy mikropolygonů. Pak teprve dochází k vyšetření viditelnosti pomocí Z- bufferu. Při zpracování průhledných povrchů si algoritmus udržuje několik záznamů o viditelnosti v Z- bufferu. To bohužel může znamenat dramatický nárůst paměti implementace Z-bufferu. Pro zvýšení výkonu byl algoritmus doplněn o tzv. bucketing obraz je na začátku rozdělen na malé čtvercové oblasti, které se vykreslují samostatně. Proto se při vykreslování v RenderMan výsledný obrázek objevuje po charakteristických čtvercích. Některé stínovací programy mohou být velmi náročné na výpočet, proto byl reyes později také doplněn o occlusion culling, kdy dochází nejprve k řešení viditelnosti a až poté k aplikace stínovacích programů. Stínování se tak provádí jen pro skutečně viditelné mikropolygony. Mezi výhody architektury Reyes patří například malé paměťové nároky i v případě velkých scén, velké možnosti paralelizace a vektorizace výpočtů (SIMD), podpora efektů rozostření pohybem (motion blur) a hloubky ostrosti (depth of field). Reyes je tak hojně využíván v produkčním prostředí. Jak si Reyes poradí se zobrazováním vlasů? Díky rozdělení geometrických primitiv (tj. všech segmentů vlasů) do oblastí (bucket), dochází ke zmenšení paměťových nároků a tím i ke zvýšení rychlosti vykreslování. Zobrazování průhledných ploch je podporováno (viz výše) a pro stíny lze použít deep shadow maps podobně jako u metody sledování paprsku. Aliasing se odstraňuje opět vyšším vzorkováním a úpravou průhlednosti vlasu místo jeho průměru. Reyes dává přesné řešení viditelnosti a stínů podobně jako metoda sledování paprsku. Je sice výrazně pomalejší než GPU, ale často rychlejší než sledování paprsku.

KAPITOLA 3. OSVĚTLOVACÍ MODELY 9 3 Osvětlovací modely Osvětlovací model nám říká, jakým způsobem se chová světlo po dopadu na povrch daného materiálu. V rámci standardu RenderMan se osvětlovací modely implementují pomocí stínovacích programů (surface shaders), více v části 6.4. 3.1 Model Kajiya & Kay Tento osvětlovací model pochází z roku 1989 [KK89], přesto je pro svou jednoduchost nejpoužívanější v herním a dokonce i produkčním prostředí. Kajiya & Kay uvažuje dvě složky osvětlení difúzní a zrcadlovou. Difúzní komponenta je odvozena z Lambertova osvětlovacího modelu, pokud jej aplikujeme na velmi tenký válec. Zrcadlová komponenta je podobná Phongovu modelu, který byl upraven pro válcové povrchy. Na obrázku 3.1 je nakreslena geometrie vlasu pro tento model. E L T Obrázek 3.1: Geometrie vlasu modelu Kajiya & Kay. T je tangenta vlasu, L je vektor ke světlu a E je vektor k pozorovateli. 3.1.1 Difúzní složka Difúzní komponentu osvětlovacího modelu vlasu získáme integrací Lambertova povrchu po obvodu poloviny válce přivrácené ke světlu. Zadní strana válce není osvětlená. Vzorec pro výpočet difúzní složky (odvození viz [KK89]): Ψ diffuse = K d sin ( T, L) (3.1) Kde K d je velikost difúzní složky, T je tangenta a L vektor ke světlu (viz obrázek 3.1). Velikost difúzní složky tedy závisí na sinu úhlu mezi tangentou a vektorem ke světlu. Pokud je tangenta rovnoběžná s vektorem ke světlu, bude osvětlovaný vlas tmavý. Často se používá jiný typ difúzní složky, protože předchozí verze trpí několika nedostatky. První byl již zmíněn vlas je černý, pokud je rovnoběžný se směrem ke světlu, dále pak neintuitivní chování pro svícení. Vlasy tak často nevypadají přirozeně. Následující přístup byl použit ve filmu,,myšák Stuart (Stuart Little Sony Pictures 1999) [Bre00]. Normálový vektor pro výpočet difúzní komponenty se získá pomocí tangenty vlasu a normálového vektoru povrchu, ze které vlas vyrůstá (viz obrázek 3.2). Pokud je vlas kolmý na povrch, použije se normálový vektor povrchu N srf, jinak se použije vektor N hair. Oba vektory lze smíchat pomocí lineární interpolace. Výpočet vektoru N:

10 KAPITOLA 3. OSVĚTLOVACÍ MODELY S = N srf T N hair = T S l = clamp( N srf T, 0, 1) N = (l N srf ) + ((1 l) N hair ) (3.2) N se poté použije pro výpočet difúzní komponenty pomocí Lambertova modelu. Výhodou modelu je očekávanější vzhled při svícení scény oproti klasickému Kajiya & Kay výpočtu. Nsrf Nhair Obrázek 3.2: Difúzní složka použitá ve filmu,,myšák Stuart se vypočítá pomocí vektorů N hair resp. Nsrf. Obrázek překreslen podle [Bre00]. 3.1.2 Zrcadlová složka Každý paprsek, který přichází na vlasové vlákno, se odráží zrcadlově podle tangenty (viz obrázek 3.3). Protože normálový vektor tenkého válce ukazuje do všech směrů, paprsek se vlastně odráží do kuželu. Vzorec pro výpočet zrcadlové složky (odvození viz [KK89]): Ψ specular = K s [( T L)( T E) + sin ( T, L) sin ( T, E)] p (3.3) Kde T, L, E jsou vektory z obrázku 3.3 a p je Phongův exponent specifikující ostrost odlesku. E L T Obrázek 3.3: Zrcadlová složka Kajiya & Kay. Paprsek se odráží zrcadlově do kuželu, protože normálový vektor tenkého válce ukazuje do všech směrů. Výsledky mé implementace modelu Kajiya & Kay jsou uvedeny v části 7.1.

KAPITOLA 3. OSVĚTLOVACÍ MODELY 11 3.2 Marschnerův model Nová měření [MJC + 03] rozptylu světla ve vlasech ukázala nové efekty, které nejsou predikovány standardním modelem Kajiya & Kay (obrázek 3.5). Vlas je zde simulován jako průhledný eliptický válec, jehož vnitřek absorbuje určitou část světla. Povrch válce je tvořen pokožkou, která je pokryta mírně vychýlenými šupinami (viz obrázek 3.4). R TRT Kořen TT Špička Obrázek 3.4: Schématické znázornění vlasového vlákna a možných cest rozptylu paprsku. Efekty predikované novým modelem: R (odraz) primární odraz. Paprsek je odražen od povrchu vlasu zpět. Odraz závisí i na vychýlení šupin na povrchu vlasu. Tento odraz je bílý a odpovídá zrcadlové složce, kterou predikuje osvětlovací model Kajiya & Kay. TT (lom, lom) zadní nasvícení. Paprsek se lomí při vstupu do prostředí vlasu a při výstupu do volného prostoru. Vlasy (blond, bílé, hnědé a šedé) se tak jeví velmi jasné, pokud jsou nasvíceny zezadu. TRT (lom, odraz, lom) sekundární odraz. Barevný sekundární odraz je umístěn nad primárním odrazem, vypadá jako třpyt vlasů. TT a TRT nejsou predikovány modelem Kajiya & Kay. Marschnerův model vychází z fyzikální analýzy a neobsahuje proto empirickou difúzní složku, která je přítomna v modelu Kajiya & Kay. V praktickém stínovacím programu je často difúzní složka implementována (viz část 7.1). Na obrázku 3.5 je porovnání osvětlovacích modelů s reálnými vlasy. Nyní se podívejme na rozbor Marschnerova modelu. Nezbytná teorie je uvedena v původním článku [MJC + 03], já se zde budu věnovat pouze některým implementačním detailům modelu. 3.2.1 Geometrie vlasu Na obrázku 3.6 je popsána geometrie vlasu. u je tangenta vlasu, která spolu s vektory v a w tvoří ortonormální bázi. Vektor w lze tedy spočítat pomocí vektorového součinu w = u v. Jak určit vektor v? Tento vektor musí ležet v rovině určené vektorem u a musí být spojitý v rámci každého jednoho vlasu. Při praktické implementaci tedy lze použít náhodný vektor, který je kolmý na u.

12 KAPITOLA 3. OSVĚTLOVACÍ MODELY (a) Kajiya & Kay (b) Marschner (c) Reálné vlasy (foto) Obrázek 3.5: Porovnání osvětlovacích modelů s reálnými vlasy. (a) obsahuje difúzní složku a zrcadlový odraz, (b) obsahuje bílý primární odraz a nad ním umístěný barevný sekundární odraz. Obrázky přejaty z [MJC + 03]. w ω i θ i φ i u φ r v θ r ω r Obrázek 3.6: Souřadný systém vlasu je tvořen vektory u, v, w. Vektor ω i je směr ke světlu, ω r k pozorovateli. Obrázek přejat z [MJC + 03]. Máme-li vektor u = (u x, u y, u z ), potom jeden z kolmých (jednotkových) vektorů na u je: v = (u y, u x, 0) (u y, u x, 0) (3.4) Pro správnou funkčnost modelu je ovšem nutné, aby jednotlivé vlasy měly různé (náhodné) směry vektorů v. Je to kvůli správné funkčnosti TRT komponenty, která je závislá právě na orientaci vektoru v. Pokud by vektory byly stejné, v sekundárním odraze by se neobjevily kaustiky různé intenzity, které způsobují třpyt vlasů. Vektor v je proto nutné randomizovat, například pomocí náhodné rotace kolem osy u. Vektory ke světlu ω i a k pozorovateli ω r se transformují do souřadného systému vlasu. Model pracuje se sférickými úhly: θ i resp. θ r je inklinace ( 90 až 90 ; u je 90, u je 90, 0 v případě kolmosti na u). φ i resp. φ r je azimut okolo vlasu (0 až 360 ; v je 0, w je 90 ).

KAPITOLA 3. OSVĚTLOVACÍ MODELY 13 Pro osvětlovací model se dále hodí rozdílové a poloviční úhly: θ d = (θ r θ i )/2 φ = φ r φ i θ h = (θ r + θ i )/2 φ h = (φ r + φ i )/2 (3.5) Shrňme si celý postup výpočtu úhlů na začátku známe pouze tangentu vlasu u = (u x, u y, u z ) a vektory ω i (ke světlu) a ω o (k pozorovateli). Všechny vektory jsou ve světových souřadnicích. Určíme vektor v podle vzorce (3.4) a w = u v. Sestavíme matici souřadného systému: M 1 = v x w x u x 0 v y w y u y 0 v z w z u z 0 0 0 0 1 Určíme náhodný úhel α rotace, který musí být shodný vždy pro celý vlas (více v části 6.4.2) a na souřadný systém aplikujeme rotaci: (3.6) M 2 = M 1 M Z (α) (3.7) Kde M Z je standardní matice pro rotaci kolem osy Z [ZBSF04]. Vypočítáme matici M 3, která bude sloužit pro transformaci vektorů ω i a ω r do souřadného systému vlasu. Jedná se o inverzní matici k M 2, a protože je souřadný systém ortonormální, odpovídá také matici transponované: M 3 = M 2 1 = M 2 T = (M 1 M Z (α)) T (3.8) Transformujeme vektory ω i a ω r do souřadného systému vlasu pomocí matice M 3 : ω i ω r = M 3 ω i (3.9) = M 3 ω r Vypočítáme sférické úhly: θ = arccos(ω z + π/2) φ = arctan( ω y ω ) (3.10) x Úhel φ by měl být upraven do intervalu 0, 360 ). Dosazením vektorů ω r resp. ω i tak získáme θ r, φ r resp. θ i, φ i. Poté provedeme výpočet rozdílových a polovičních úhlů, který byl uveden ve vzorci (3.5). 3.2.2 Funkce rozptylu Odchozí křivková radiance (viz část 2.2 v [MJC + 03]) se spočítá: Kde: L r ( ω r ) = D S( ω i, ω r )L i ( ω i ) cos θ i dω i (3.11) Ω D je průměr vlasu (tlusté vlákno přijímá více světla než tenké).

14 KAPITOLA 3. OSVĚTLOVACÍ MODELY S je funkce rozptylu podobná BRDF (Bidirectional Reflectance Distribution Function) L i je příchozí radiance Uvedený integrál je přes celou sféru. Funkce rozptylu S, se spočítá jako (část 4.4 v [MJC + 03]): S(φ i, θ i, φ r, θ r ) = S R M R (θ h ) N R (η (η, θ d ); φ) / cos 2 θ d + S TT M TT (θ h ) N TT (η (η, θ d ); φ) / cos 2 θ d + S TRT M TRT (θ h ) N TRT (η (η (φ h ), θ d ); φ) / cos 2 θ d (3.12) Oproti původnímu článku jsem přidal konstanty S R, S TT a S TRT, které určují velikost jednotlivých složek modelu. Výpočet funkcí M a N je uveden dále. 3.2.2.1 Podélná funkce rozptylu M Funkce M R, M TT a M TRT představují závislost odrazu v podélném směru vlasu. Podle části 5.1 v [MJC + 03] lze funkce aproximovat: M R (θ h ) = g(β R ; θ h α R ) M TT (θ h ) = g(β TT ; θ h α TT ) M TRT (θ h ) = g(β TRT ; θ h α TRT ) (3.13) Kde β x (podélná šířka) resp. α x (podélné posunutí) jsou nastavitelné parametry a g(σ, x) je funkce Gaussova rozdělení: g(σ, x) = 1 σ x2 exp 2π 2σ 2 (3.14) Typické hodnoty podélného posunutí: α R ( 10, 10 ) α TT = α R /2 α TRT = 3α R /2 (3.15) Typické hodnoty podélné šířky: β R (5, 10 ) β TT = β R /2 (3.16) β TRT = 2β R 3.2.2.2 Azimutální funkce rozptylu N Aproximace azimutálních funkcí je mnohem složitější než funkcí podélných, implementace může činit značné problémy. Pro zvýšení přehlednosti této části textu je zde tabulka 3.1 použitých symbolů. Teoretické odvození a význam výpočtů viz [MJC + 03]. Výpočty všech N funkcí jsou si podobné, jen výpočet N TRT je na několika místech jiný. Nejprve vypočítáme indexy lomu podle vzorců: η = η 2 sin 2 θ d / cos θ d (3.17) η = η 2 / η Kde η je index lomu vlákna (typicky 1.55) a θ d je rozdíl inklinací ze vzorce (3.5).

KAPITOLA 3. OSVĚTLOVACÍ MODELY 15 η Index lomu vlákna (typicky 1.55) σ a Absorpce vlákna (RGB) a Excentricita elipsy vlákna (typicky 0.85) η, η Indexy lomu podle rovnic (3.17) p Parametr dle typu funkce N (0 pro N R, 1 pro N TT, 2 pro N TRT ) c Proměnná podle rovnice (3.19) γ i Úhel získaný vyřešením kubické rovnice (3.18) γ t Úhel získaný pomocí aproximace Snellova zákona (3.20) T Absorpce podle rovnice (3.21) F p Fresnelovy faktory podle rovnice (3.23) D Hustota paprsku podle rovnice (3.27) η Modifikovaný index lomu podle rovnice (3.29) pro výpočet N TRT Tabulka 3.1: Použité symboly při výpočtu azimutálních funkcí rozptylu N. tabulky jsou uvedeny nastavitelné parametry. V první části Vyřešíme kubickou rovnici a získáme γ i : ( ) 6pc φ = π 2 γ i 8pc π 3 γ3 i + pπ (3.18) Úhel φ známe, měl by být ovšem převeden do intervalu π, π. následujících hodnot: Proměnná p nabývá p = 0 při výpočtu N R p = 1 při výpočtu N TT p = 2 při výpočtu N TRT Za c dosadíme: c = arcsin(1/η ) (3.19) Kubická rovnice může mít obecně až 3 řešení. Kořeny, kdy γ i vyjde mimo interval π/2, π/2, ignorujeme. V případě funkcí N R a N TT vyjde vždy přesně jeden (validní) kořen, N TRT může mít 1 až 3 kořeny. Pomocí aproximace Snellova zákona určíme úhel lomeného paprsku: γ i je kořen kubické rovnice (3.18) a c viz vzorec (3.19). γ t = 3c π γ i 4c π 3 γ3 i (3.20) Absorpce světla T se spočítá jako (na tomto místě v článku [MJC + 03] je chybně určena délka cesty paprsku): σ a = σ a / cos(θ d ) T = exp( 2 + 2 cos(2γ t ) σ a) (3.21) Kde σ a je absorpce vlákna (nastavitelný parametr). Nastavovat absorpci místo barvy je neintuitivní, proto se často používá barva a absorpce se potom vypočte jako: σ a = k log h c (3.22)

16 KAPITOLA 3. OSVĚTLOVACÍ MODELY Kde h c je barva vlasu (RGB parametr) a k je kladná konstanta. Výsledná absorpce má, stejně jako barva, tři složky (RGB) a může nabývat hodnot z intervalu (0, ). Zředění díky odrazu a lomu se spočítá pomocí Fresnelových faktorů. Zde se výpočet liší podle typu funkce N: F R = fresnel(γ i, γ t, η, η ) F TT = (1 fresnel(γ i, γ t, η, η )) 2 F TRT = (1 fresnel(γ i, γ t, η, η )) 2 fresnel(γ t, γ i, 1/η, 1/η ) (3.23) Fresnelovy faktory se vypočítají podle rovnice: fresnel(ρ i, ρ t, n 1, n 2 ) = F p(ρ i, ρ t, n 1 ) 2 + F s (ρ i, ρ t, n 2 ) 2 2 (3.24) F p je paralelní složka: F s je kolmá složka: F p (ρ i, ρ t, n 1 ) = n 1 cos ρ i cos ρ t n 1 cos ρ i + cos ρ t (3.25) F s (ρ i, ρ t, n 2 ) = cos ρ i n 2 cos ρ t cos ρ i + n 2 cos ρ t (3.26) Zbývá vypočítat hustotu paprsku (ray density) pomocí derivace kubické rovnice (3.18), kde h = sin γ i : D = 2 dφ dh 1 = 2 dφ dγ i cos γ i 1 [( ) = 2 6pc π 2 24pc ] π 3 γ2 i ) 1 cos γ i 1 (3.27) A konečně výsledný vzorec pro výpočet funkcí N (N R = N 0, N TT = N 1 a N TRT = N 2 ), v sumě se sčítá přes všechny validní kořeny r: N p = r F p T p D (3.28) Jak jsem zmínil na začátku, výpočet N TRT vyžaduje ještě několik úprav. Za prvé je nutné použít modifikovaný index lomu η místo η ve vzorcích (3.17): Kde a je excentricita elipsy (typicky 0.85). η1 = 2(η 1)a 2 η + 2 η2 = 2(η 1)a 2 η + 2 (3.29) η = 1 2 [(η 1 + η 2 ) + cos(2φ h)(η1 η 2 )] Další úpravou je odstranění ostrých singularit v N TRT, tzv. smooth caustic. Procedura je uvedena v části 5.2.2 článku [MJC + 03]. Výsledky mé implementace Marschnerova modelu jsou uvedeny v části 7.1. 3.3 Další osvětlovací modely Marschnerův model dává dobré výsledky zejména u tmavých (hnědých, černých) vlasů. Horších výsledků dosahuje na vlasech světlých (blond). Existuje rozšíření Marschnerova modelu pro blond vlasy [ZSW04]. Další zobecnění osvětlovacího modelu vlasů je BFSDF (Bidirectional

KAPITOLA 3. OSVĚTLOVACÍ MODELY 17 Fiber Scattering Distribution Function) [Zin07], kde vlasy jsou vlastně jen jedním z typů vláken podobně jako například tkanina. Na GPU byl Marschnerův model implementován pomocí předpočítání hodnot modelu pro různé úhly do textury. Poprvé se tak stalo v demu,,nalu (NVidia 2000) [PF05]. Model je zde ovšem zjednodušen: TRT složka je aproximována pomocí TT a základní barva všech vlasových vláken je stejná, což není úplně realistické. Jinou cestou jsou různé aproximativní modely. Fotorealistické osvětlovací modely bývají bohužel poměrně dost složité a výpočetně náročné. Proto se nijak zvlášť nehodí pro zobrazování v reálném čase na GPU. Často se tedy používá model Kajiya & Kay, který je doplněn různými aproximacemi efektů, které predikuje Marschner. Například v demu,,ruby: The Double Cross (ATI 2004) je použita difúzní a zrcadlová složka Kajiya & Kay a dále je aproximován sekundární odraz (TRT) pomocí šumové textury [Sch04]. Ve filmu,,101 Dalmatinů (101 Dalmatians Industrial Light and Magic 1996) byl zase Kajiya & Kay model doplněn o aproximaci efektu zadního nasvícení [Gol97]. Úplná aproximace všech efektů Marschnerova modelu je uvedena například v [Kan04], bohužel chybí přesnější srovnání s původním modelem, zejména pak efektu zadního nasvícení vlasů.

18 KAPITOLA 3. OSVĚTLOVACÍ MODELY

KAPITOLA 4. ZJEDNODUŠOVÁNÍ MODELU VLASŮ 19 4 Zjednodušování modelu vlasů V kapitole 2 jsem vysvětlil, proč je zobrazování vlasů tak náročné. Někdy je možné použít zjednodušený model vlasů a tím vykreslování významně urychlit. Například pokud je chlupatý objekt ve velké vzdálenosti od kamery. Takový přístup je v počítačové grafice známý jako úroveň detailu LOD (level of detail). Pokud je model blízko ke kameře, používá se detailní model pokud je naopak dále od kamery, lze použít model zjednodušený. V této kapitole uvedu několik technik, které se používají v počítačové grafice pro zjednodušování modelů. Zaměřím se hlavně na techniky použitelné pro problém vlasů. Většina existujících technik je bohužel určena spíše pro klasické polygonální modely, které se ovšem chovají odlišně oproti vlasům. 4.1 Statické úrovně detailu Je vytvořeno několik modelů, které reprezentují několik úrovní detailu (tzv. diskrétní stupně [ZBSF04]). Mezi těmito modely se poté přepíná podle vzdálenosti od kamery. Tento přístup je využit například v jazyce VRML (Virtual Reality Modeling Language) a teoreticky jej lze použít i pro problém zobrazování vlasů. Má ovšem hned několik nevýhod. Musí být vymodelováno několik modelů, což může být poměrně pracné a navíc modely zabírají místo v paměti. Největší problém je přechod mezi dvěma úrovněmi detailu, kde často dochází k vizuálním artefaktům (tzv. popping effect). To nemusí vadit při zobrazování v reálném čase, ale v produkčním prostředí to činí tuto metodu nepoužitelnou. 4.2 Progresivní modely Nedostatky předchozí metody odstraňují spojité stupně detailu, například progresivní modely (progressive meshes) [Hop96]. Polygonální model je vymodelován v plných detailech a poté je na něj několikrát aplikována operace kolaps hrany (viz obrázek 4.1), která je invertibilní. Do souboru se potom ukládá nejvíce zjednodušená verze modelu a inverze všech provedených operací. Na základě pozice kamery se dynamicky určuje úroveň detailu modelu. Model se proto nemění skokově, ale po jednotlivých operacích kolaps hrany. v t ecol v l v v r l v s v r v s vsplit Obrázek 4.1: Kolaps hrany ecol a inverzní operace vsplit. Obrázek přejat z [Hop96]. Hrany pro operaci kolaps při zjednodušování je nutné vybírat s ohledem na topologii modelu, využívají se různé chybové metriky [Hop96].

20 KAPITOLA 4. ZJEDNODUŠOVÁNÍ MODELU VLASŮ Tato metoda se nijak zvlášť nehodí pro zjednodušování vlasů, kde reprezentace vlasů je odlišná od uzavřených polygonálních povrchů. 4.3 Textury Zjednodušenou geometrii lze reprezentovat pomocí 2D či 3D textur. Používají se například impostory či billboardy [ZBSF04]. Obrázek (textura), který reprezentuje složitou geometrii, je namapován na jednoduchý polygon, který se natáčí směrem ke kameře. Je zde problém, když se kamera výrazně pohybuje nebo je zjednodušovaný model animovaný. Tyto metody mají použití spíše při zobrazování v reálném čase. Ve filmu,,101 Dalmatinů (101 Dalmatians Industrial Light and Magic 1996) byl použit pravděpodobnostní model pro reprezentaci chlupů některých dalmatinů dále od kamery [Gol97]. Metoda tak nepracuje se skutečnou geometrií, ale chlupy jsou reprezentovány texturou, která je nanesena na trojrozměrný polygonální model. Kromě použití textur je možné srst vytvářet procedurálně až při vykreslování modelu (například ve stínovacím programu). Do textur se ukládají různé parametry, které jsou potřebné pro výpočet osvětlení (například tangenty, hustota chlupů, velikost difúzní složky, atd.). Průhlednost i stíny (self-shadows) chlupů jsou aproximovány také na základě hodnot uložených v textuře. Reprezentace chlupů je tak silně provázána s použitým osvětlovacím modelem. Nevýhodou techniky je omezenost na velmi krátké chlupy a vykreslovaný objekt musí být v poměrně velké vzdálenosti od kamery při bližších pohledech je totiž použita stejná reprezentace (nejedná se o úrovně detailu). Další možností je využít 3D-volumetrické textury, kdy chlupy jsou uloženy v 3D textuře. Tyto metody bývají ovšem paměťově velmi náročné, díky nutnosti ukládat detailní voxelovou reprezentaci chlupů [CHPR07]. Také animace chlupů zde bývá problematická. První použití volumetrických textur navrhl už Kajiya & Kay v článku [KK89]. Model byl dále rozšířen o možnost předfiltrování textur (mip-mapping) a jednoduché animace na úrovni volumetrických textur [Ney98]. 4.4 Stochastická simplifikace Idea stochastické simplifikace je velmi jednoduchá. Mějme množinu vlasů, z níž náhodně vybereme část vlasů, které budou vyloučeny (nevykresleny). Ostatní vlasy budou zobrazeny. Aby se nezměnila plocha modelu vlasů, je nutné upravit (zvětšit) průměr vykreslovaných vlasů. Statistické vlastnosti scény tak zůstávají zachovány. Tento postup jsem se rozhodl realizovat, protože oproti ostatním má několik výhod: Použitelnost na krátké i delší chlupy (vlasy) Úrovně detailu (LOD) Spojitý přechod mezi úrovněmi detailu Jednoduchý algoritmus Nyní následuje stručný popis této metody, detaily viz [CHPR07]. Aby algoritmus fungoval, je nutné zohlednit pět aspektů: Určení úrovně detailu. Určení počtu vlasů, které je třeba vyloučit.

KAPITOLA 4. ZJEDNODUŠOVÁNÍ MODELU VLASŮ 21 Priorita vykreslování. Určení pořadí, ve kterém se vlasy vylučují. Zachování povrchu. Úprava průměru vlasů, aby výsledná plocha byla stejná. Zachování kontrastu. Úprava barvy vlasů, aby výsledný kontrast byl stejný. Plynulá animace. Plynulé mizení vlasů při animaci místo skokového. Výsledky implementace jsou uvedeny v části 7.2. 4.4.1 Určení úrovně detailu Pro každý vykreslovaný model je nutné určit úroveň detailu (0 až 1 plný detail). Lze zohlednit mnoho aspektů, například vzdálenost od kamery, rozostření pohybem (motion blur), hloubku ostrosti (depth of field), atd. Nejdůležitější je vzdálenost od kamery. Každý vykreslovaný objekt má svoji hraniční obálku (bounding box). Velikost simplifikace bude záviset na aktuálním počtu pixelů B obálky viditelných při vykreslování. Čím menší počet pixelů obálka zabírá, tím více může být model zjednodušen. B 0 označme jako počet pixelů obálky, kde zjednodušování začíná. Při počtu pixelů hb 0 je počet vykreslovaných vlasů poloviční. Parametry B 0 a h jsou uživatelsky nastavitelné. Jestliže b = B/B 0, pak pro b < 1 platí: Pokud je b > 1, pak je λ = 1 (žádná simplifikace). λ = b log h (1/2) (4.1) Parametr B 0 tedy určuje, kde simplifikace začíná (tj. vyšší číslo dřívější simplifikace) a parametr h (0, 0.5 určuje tvar křivky v závislosti na b (viz obrázek 4.2). Pro h = 0.5 se rovnice (4.1) redukuje na λ = b a simplifikace je lineární funkcí poměru počtu pixelů b. Parametr h tedy určuje, jak agresivní je zjednodušování při oddalování modelu. Volba nižší hodnoty h znamená pomalejší zjednodušování ze začátku a naopak pokud je model ve velké vzdálenosti, zjednodušování je velmi agresivní. 1 0.75 h=0.5 h=0.4 0.5 h=0.3 0.25 h=0.2 h=0.1 0 b 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Obrázek 4.2: λ jako funkce b pro různé hodnoty h. Obrázek přejat z [CHPR07]. 4.4.2 Priorita vykreslování Odstraňování vlasů při animaci musí být náhodné, nesmí záviset na geometrické pozici či jiné charakteristice, jinak by mohlo docházet při animaci k nežádoucím artefaktům.

22 KAPITOLA 4. ZJEDNODUŠOVÁNÍ MODELU VLASŮ Jak jsme zmínil v kapitole 2, vlasy se generují na náhodných pozicích (dle hustoty) interpolací vymodelovaných řídících vlasů. Pro simplifikační algoritmus je vhodné uložit všechny vytvořené vlasy v náhodném pořadí. Vykreslovací program si poté načte pouze ty vlasy, které skutečně potřebuje. S náhodným pořadím je tedy vhodné počítat už ve fázi modelování. Vlasy jsou vlastně seřazeny v pomyslné prioritní frontě, ze které se vybírají při vykreslování v závislosti na velikosti simplifikace. 4.4.3 Zachování povrchu Pokud zmenšíme počet vlasů, dojde při vykreslování k efektů řídnutí vlasů, zvlášť pro velké hodnoty simplifikace. Proto je nutné upravovat průměr (šířku) vlasů v závislosti na velikosti simplifikace. Lze použít aproximativní vzorec: s = 1/λ (4.2) Touto hodnotou stačí vynásobit šířku každého vlasu. Jednoduše řečeno: pokud vykreslujeme poloviční počet vlasů (λ = 0.5), potom musíme zvětšit šířku každého vlasu dvakrát (s = 2). Uvedený vzorec funguje dobře, pokud simplifikace není příliš agresivní (je zobrazeno více než 10% chlupů) [CHPR07]. Příliš velké zjednodušování proto není vhodné. Na obrázku 4.3 je zobrazena hodnota s v závislosti na x, kde x je pozice vlasu v prioritní frontě (0 až 1). 4 3 2 1 0 s =.95 =.90 =.70 =.50 =.30 =.10 x 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Obrázek 4.3: Pro menší hodnoty λ je vyloučeno více elementů a plocha vykreslovaných elementů musí být více zvětšena. Obrázek přejat z [CHPR07]. 4.4.4 Zachování kontrastu Vzorkování pixelu při vykreslování více vzorky snižuje rozptyl. Odstraňování elementů naopak vede ke zvýšení rozptylu (tedy kontrastu), příklad je na obrázku 4.4. Problém se dá řešit snížením rozptylu barev, které se používají při stínování. To je možné provést například filtrováním textur s barvami vlasů při větší simplifikaci. Simplifikace zde může mít přesto zničující efekt na různé ostré odlesky vytvořené díky osvětlovacímu modelu. Vizuálně se problém kontrastu projevuje při velmi velkých simplifikacích (je zobrazeno méně než 10% elementů) a použití hodně kontrastních barev. V reálných scénách v chlupech příliš ostré barevné přechody nebývají. Nejlepší obranou proti změně kontrastu je nepřipouštět příliš velké hodnoty simplifikace. Více o tomto problému viz [CHPR07].

KAPITOLA 4. ZJEDNODUŠOVÁNÍ MODELU VLASŮ 23 Obrázek 4.4: Příklad problému změny kontrastu. Detailní geometrie je vlevo nahoře, zjednodušená vpravo. Trojúhelníky jsou obarveny náhodně dvěma barvami, čtverce jsou pixely a tečky označují vzorky. Obrázky dole ukazují výslednou barvu pixelů. Zjednodušená verze má větší kontrast, protože je průměrováno méně trojúhelníků. Obrázek přejat z [CHPR07]. 4.4.5 Plynulá animace Velikost simplifikace se samozřejmě mění s animací daného objektu. Je proto nutné, aby vlasy nemizely skokově, ale postupně. To lze zařídit vytvořením určité přechodové zóny, kdy se některé vlasy postupně zužují, až úplně zmizí. Na obrázku 4.5 je ukázka tohoto přístupu s přechodovou zónou o velikosti t = 10% (na obě strany). Některé vlasy tak nemají průměr zvětšený pomocí s = 1/λ, ale o hodnotu menší (dle pozice v prioritní frontě). Všimněte si, že plocha pod každou křivkou je stejná jako bez použití přechodů (srovnejte obrázek 4.3 s 4.5). 4 3 2 1 0 s =.95 =.90 =.70 =.50 =.30 =.10 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 x Obrázek 4.5: Velikost vlasů se snižuje plynule, plocha pod křivkami je stejná jako na obrázku 4.3. Obrázek přejat z [CHPR07]. Při implementaci plynulé animace je nutné pamatovat na hraniční případy, které se mohou lišit v následujících parametrech: t e Skutečná velikost přechodové zóny (nepřesahující interval 0, 1 v prioritní frontě) s max Maximální zvětšení plochy (odpovídá hodnotě v x = 0) s min Minimální zvětšení plochy (odpovídá hodnotě v x = 1) Je-li λ t < 0, potom je simplifikace větší než přechodová zóna. Na obrázku 4.5 by to odpovídalo hodnotám λ < 0.1.

24 KAPITOLA 4. ZJEDNODUŠOVÁNÍ MODELU VLASŮ Je-li λ + t > 1, potom je simplifikace příliš malá. Na obrázku 4.5 by to odpovídalo hodnotám λ > 0.9. Ostatní případy se nachází mezi těmito dvěma hranicemi. Na obrázku 4.5 by to odpovídalo hodnotám λ 0.1, 0.9. λ pokud λ t < 0 t e = 1 λ pokud λ + t > 1 t pokud λ t 0 λ + t 1 (4.3) s min = { 1/λ pokud λ + t 1 s max = 1 pokud λ + t > 1 1 t 2 e/t { 0 pokud λ + t 1 s max (1 t e /t) pokud λ + t > 1 (4.4) (4.5) Skutečná hodnota úpravy průměru vlasu s se určí dle pozice v prioritní frontě x pomocí lineární interpolace: s = s min + (s max s min ) i(x) (4.6) Parametr i(x) závisí na pozici elementu v prioritní frontě: 1 pokud x λ t e (plné zvětšení) i(x) = 0 pokud x λ + t e (minimální zvětšení) pokud x > λ t e x < λ + t e (přechodová zóna) λ+t e x 2t e (4.7)

KAPITOLA 5. PRODUKČNÍ PROSTŘEDÍ 25 5 Produkční prostředí Implementace je určena pro produkční prostředí, kde se samozřejmě používají technologie typické pro toto odvětví. Pro tvorbu 3D grafiky (modelování, animace, nasvícení) slouží grafické editory jako například Autodesk Maya, Softimage XSI nebo 3D Studio MAX. Zobrazování probíhá ve vykreslovacích programech (rendererech) standardu RenderMan jako například 3Delight, PRMan nebo Pixie. Grafické studio je samozřejmě již zvyklé na některé nástroje a používá osvědčené postupy pro tvorbu grafiky. To je nutné respektovat při volbě prostředí pro implementaci. Programové vybavení používané ve studiu UPP pro modelování a vykreslování vlasů/chlupů: Autodesk Maya Program pro tvorbu 3D grafiky. http://www.autodesk.com/maya/ Joe Alter Shave and a Haircut Zásuvný model do Mayi pro modelování vlasů a chlupů, dále jen Shave. http://www.joealter.com/ 3Delight RenderMan Vykreslovací program dle specifikace RenderMan [Pix05]. http://www.3delight.com/ 5.1 Autodesk Maya Maya je jedním z mnoha programů pro tvorbu 3D grafiky a animace. V této aplikaci je vymodelována a nasvícena celá scéna včetně vlasů. Vykreslování zpravidla probíhá v externím rendereru, který bývá často integrován do rozhraní grafického editoru. Architektura programu Maya je naznačena na obrázku 5.1. Jakmile uživatel nějakým způsobem pracuje s uživatelským rozhraním (např. vytvoření či modifikace geometrických objektů), Maya pro každou akci generuje MEL (Maya Embedded Language) příkazy, které lze zadávat i samostatně do příkazové řádky v Maye. Tyto příkazy jsou teprve interpretovány a většina z nich operuje nad grafem scény DG (dependency graph), který vlastně představuje celou scénu (všechny 3D objekty, materiály, animace, atd.). DG je tvořen uzly, které obsahují data i operace. Data bývají uložena v podobě atributů, které je možné nastavovat prostřednictvím uživatelského rozhraní (resp. příkazů MEL). Typickým uzlem DG je například geometrický objekt. Jedním z možných rozšíření Mayi jsou různé uživatelské MEL skripty, které se využívají pro automatizaci často opakovaných činností. MEL je také možné použít pro vytvoření nebo úpravu grafického rozhraní editoru. Maya dále obsahuje C++ API, pomocí kterého je možné vytvářet zásuvné moduly. V této práci bude potřeba vyrobit zásuvný modul, který vytvoří nový: DG uzel Uzly představují základní stavební kameny DG. Kromě obecných uzlů je možné vytvářet i specializované uzly (například nová geometrická primitiva). Velkou výhodou je, že Maya sama automaticky zajistí uložení/načtení nových uzlů do/z souboru spolu s celou scénou v podobě DG. Více v části 6.2.5. MEL příkaz Nově vytvořené příkazy je možné volat z příkazové řádky či skriptů. Chovají se identicky jako vestavěné příkazy. Více v části 6.2.4.

26 KAPITOLA 5. PRODUKČNÍ PROSTŘEDÍ Obrázek 5.1: Zjednodušená architektura editoru Maya. 5.2 Shave and a Haircut Pro tvorbu vlasů resp. chlupů v Maye standardně slouží nástroje Maya Hair resp. Maya Fur. V produkci se často používá pro modelování vlasů zásuvný modul Shave and a Haircut od Joe Altera (ukázka na obrázku 5.2), který má oproti standardním nástrojům přítomných v Maye několik výhod: Uživatelsky přívětivější modelování vlasů (například možnosti česání). Stejné rozhraní pro chlupy i vlasy. Podpora exportu vlasů do souboru RIB, který používá RenderMan. Shave je zabudován i v dalších grafických editorech Softimage XSI a 3D Studio MAX. Obrázek 5.2: Ukázka z aplikace Maya a nástroje Shave and a Haircut. Shave má i vlastní API SDK, které ale obsahuje velké množství chyb a má omezené použití. Umožňuje totiž operovat jen nad vygenerovanými vlasy nikoliv nad řídícími.