}w !"#$%&'()+,-./012345
M ASARYKOVA UNIVERZITA FAKULTA INFORMATIKY
Tvurˇ ˚ cí nástroj pro nefotorealistické vykreslování prostorových scén D IPLOMOVÁ PRÁCE
Jiˇrí Chmelík
Brno, 2007
Prohlášení Prohlašuji, že tato diplomová práce je mým puvodním ˚ autorským dílem, které jsem vypracoval samostatnˇe. Všechny zdroje, prameny a literaturu, které jsem pˇri vypracování používal nebo z nich cˇ erpal, v práci rˇ ádnˇe cituji s uvedením úplného odkazu na pˇríslušný zdroj.
Vedoucí práce: Mgr. Tomáš Staudek, Ph.D. ii
Podˇekování Rád bych tímto podˇekoval vedoucímu práce Mgr. Tomáši Staudkovi, Ph. D. za výborné vedení, cenné rady a pˇripomínky. Dˇekuji také Mgr. FIlipu Dostálovi a Pavlu Dankovi ˇ za poskytnutí obrázku˚ a fotografií které jsem v práci použil.
iii
Shrnutí V posledních letech je vˇenováno oblasti nefotorealistického vykreslování (NPR) stále více pozornosti. Vzniká velké množství teoretických cˇ lánku˚ a publikací, ale i prakticky zamˇerˇ ených aplikací pro tvorbu nefotorealistické poˇcítaˇcové grafiky. Tato práce rozšiˇruje mou bakaláˇrskou práci na téma "Implementace filtru pro nefotorealistické zobrazení 3D scény". Úˇcelem obou prací je seznámit cˇ tenáˇre s oblastí NPR v teoretické i praktické rovinˇe. Text této práce popisuje základní znalosti v oboru NPR a struˇcnˇe popisuje algoritmy použité pˇri vývoji zásuvného modulu. Výsledná implementace modulu poskytuje uživateli možnost vyzkoušet popsané algoritmy v praxi a vytváˇret z prostorových scén esteticky zajímavé nefotorealistické výstupy.
iv
Klíˇcová slova NPR, nefotorealistické zobrazení, grafický filtr, grafické techniky, výtvarné techniky, animace, imitace plátna, konvoluce obrazu
v
Obsah 1 Úvod . . . . . . . . . . . . . . . . . . . . . . . . 2 Nefotorealistické zobrazování – NPR . . . . . ˇ 2.1 Clenˇ ení podle typu vstupních dat . . . . . 2.1.1 2D NPR . . . . . . . . . . . . . . . 2.1.2 2.5D NPR . . . . . . . . . . . . . . 2.1.3 3D NPR . . . . . . . . . . . . . . . 2.1.4 VR NPR . . . . . . . . . . . . . . . ˇ 2.2 Clenˇ ení podle imitovaných stylu˚ . . . . . 2.2.1 Grafické techniky . . . . . . . . . . 2.2.2 Malíˇrské techniky . . . . . . . . . . 3 Grafické techniky . . . . . . . . . . . . . . . . . 3.1 Konvoluce obrazu . . . . . . . . . . . . . . 3.1.1 2D Obraz . . . . . . . . . . . . . . 3.1.2 Konvoluce . . . . . . . . . . . . . . 3.1.3 Implementace . . . . . . . . . . . . 3.1.4 Korekce barevného rozsahu . . . . 3.2 Zásobník objektu˚ . . . . . . . . . . . . . . 3.3 Zásobník hloubky . . . . . . . . . . . . . . 4 Malíˇrské techniky . . . . . . . . . . . . . . . . 4.1 Vykreslování po vrstvách . . . . . . . . . 4.1.1 Malíˇruv ˚ algoritmus . . . . . . . . . 4.1.2 Tvorba vrstev . . . . . . . . . . . . 4.1.3 Využití zásobníku˚ objektu˚ . . . . . 4.2 Tah štˇetcem . . . . . . . . . . . . . . . . . 4.2.1 Výpoˇcet rˇ ídících bodu˚ . . . . . . . 4.2.2 Smˇer tahu pˇri nulovém gradientu 4.2.3 Vykreslení tahu . . . . . . . . . . . 5 Další efekty . . . . . . . . . . . . . . . . . . . . 5.1 Nepravé barvy . . . . . . . . . . . . . . . . 5.1.1 Obarvení pˇred výpoˇctem . . . . . 5.1.2 Vliv hloubky . . . . . . . . . . . . 5.1.3 Algoritmus . . . . . . . . . . . . . 5.2 Efekt Plátna . . . . . . . . . . . . . . . . . 5.2.1 Procedurální textura . . . . . . . . 5.2.2 Textura naˇctená ze souboru . . . . 5.2.3 Aplikace textury . . . . . . . . . . 5.2.4 Animace . . . . . . . . . . . . . . . 6 Animace . . . . . . . . . . . . . . . . . . . . . . ˇ 6.1 Casová koherence snímku˚ . . . . . . . . . 6.2 Implementace . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1 2 2 2 2 3 4 4 4 6 8 8 8 8 9 10 10 12 14 14 14 14 17 17 17 18 19 22 22 22 23 23 24 24 25 25 26 27 27 29 vi
6.2.1 Grafické techniky . . . 6.2.2 Malíˇrské techniky . . . 6.2.3 Animace plátna . . . . 7 Použité technologie . . . . . . . . 7.1 Vývojové prostˇredí . . . . . . 7.2 Instalace modulu . . . . . . . 7.3 Nároˇcnost výpoˇctu˚ . . . . . . 7.4 Grafické uživatelské rozhraní 7.5 Licence . . . . . . . . . . . . . 8 Závˇer . . . . . . . . . . . . . . . . . A Obsah CD . . . . . . . . . . . . . . B Popis uživatelského rozhraní . . . C Ukázky . . . . . . . . . . . . . . . . Literatura . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
29 29 30 32 32 32 32 33 33 34 35 36 44 55
vii
Kapitola 1
Úvod Poˇcítaˇcová grafika je v dnešní dobˇe nedílnou souˇcástí každodenního života. Setkáváme se s ní snad ve všech oblastech lidské cˇ innosti. Ve filmovém cˇ i reklamním prumyslu, ˚ kde v nˇekterých pˇrípadech váháme, co bylo zachycenou skuteˇcnou kamerou ve skuteˇcném prostˇredí a co vzniklo s pomocí poˇcítaˇce. Ve stavebnictví, kde jsou návrhy vytváˇreny pˇredevším s využitím CAD systému˚ (poˇcítaˇcem podporovaný návrh - computer-aided design). V lékaˇrství se poˇcítaˇcová grafika používá pro zobrazení – vizualizaci jinak nepˇrehledných dat (poˇcítacˇ ová tomografie, rozmístˇení atomu˚ v molekule, . . . ). V kartografii pro tvorbu nových druhu˚ map a nové možnosti jejich zobrazování. Poˇcítaˇcová grafika je dnes používána i pro vytvárˇ ení umˇeleckých dˇel. První výše zmínˇený pˇríklad patˇrí do oblasti fotorealistického vykreslení – snahou je zde zobrazit scénu co nejrealistiˇctˇeji. Další uvedené pˇríklady naopak patˇrí do oblasti nefotorealistického zobrazení. Touto oblastí se zabývá i tato práce, pˇrevážnˇe pak možnostmi využití poˇcítaˇcu˚ pro vytváˇrení esteticky zajímavých obrazu˚ a animací. Ve druhé kapitole je objasnˇen pojem nefotorealiské vykreslování a je uvedeno základní cˇ lenˇení této oblasti poˇcítaˇcové grafiky. Další dvˇe kapitoly podrobnˇeji popisují grafické a malíˇrské techniky, pˇrevážnˇe z pohledu implementace zásuvného modulu, který je souˇcástí této práce. Pátá kapitola popisuje další implementované funkce a možnosti jejich využití. Šestá kapitola je vˇenována nefotorealistické animaci. V sedmé kapitole jsou struˇcnˇe popsány technologie a nástroje použité pˇri vývoji zásuvného modulu a další údaje související s používáním modulu. Kapitola osmá práci uzavírá a zabývá se možnostmi dalšího rozvoje modulu. V pˇrílohách je možné najít podrobnˇejší popis uživatelského rozhraní a také nˇekolik grafických ukázek vytvoˇrených pomocí implementovaného zásuvného modulu.
1
Kapitola 2
Nefotorealistické zobrazování – NPR Pojem nefotorealistické zobrazení, zkrácenˇe NPR (z anglického non-photorealistic rendering) oznaˇcuje oblast poˇcítaˇcové grafiky, která zkoumá možnosti využití poˇcítaˇcu˚ pro imitaci lidské tvorby. Vˇetšího zájmu se tato oblast doˇckala až pomˇernˇe nedávno (první mezinárodní konference vˇenovaná výhradnˇe nefotorealistické animaci a vykreslování (NPAR) byla poˇrádána v roce 2000). Pˇresto však jde o oblast pomˇernˇe rozsáhlou, kterou mužeme ˚ rozdˇelit do mnoha odlišných smˇeru. ˚ Tato kapitola podává jen velmi struˇcný pˇrehled technik z oblasti NPR. Podrobnˇejší informace je možno nalézt napˇríklad v [14], [6] nebo v [15].
2.1
ˇ Clenˇ ení podle typu vstupních dat
Jedna ze základních možností, jak rozdˇelit (nejen) netoforealistickou poˇcítaˇcovou grafiku, je na základˇe "dimenze" vstupní informace. Ke známým pojmum ˚ 2D a 3D se v NPR pˇridává ménˇe obvyklá oblast 2.5D (nˇekdy též oznaˇcována jako 2 1/2D). 2.1.1 2D NPR Základní techniky, pˇri nichž je vstupem jeden 2D obraz - muže ˚ jít o fotografii cˇ i realisticky vykreslenou 3D scénu. Protože nejsou k dispozici žádné další informace, tyto techniky jsou vˇetšinou založeny na metodách zpracování digitálního obrazu. Muže ˚ být využita napˇríklad Fourierova transformace, konvoluce (rozostˇrení, detekce hran) nebo úprava barev (posuny, prahování). Metody pro 2D NPR se stále cˇ astˇeji implementují i jako souˇcásti grafických balíku˚ (Corel, Adobe Photoshop, Gimp). Na obrázku 2.1 je ukázka nefotorealistického zobrazení s použitím fotografie jako vstupu. 2.1.2 2.5D NPR Tyto metody jsou založené na stejných výpoˇcetních postupech jako 2D NPR techniky. Používají se však pˇredevším pro zobrazování 3D scén. Vstupní informací je zde sada 2D obrazu, ˚ reprezentující 3D scénu - samotné realistické vykreslení a další obrazy zachycující dodateˇcné informace. Nejˇcastˇeji se jedná o zásobník hloubky (Z-buffer) a zásobníky objektu˚ (object buffers). Dále muže ˚ být použit napˇríklad obraz zachycující normály plošek cˇ i svˇetelná mapa. 2
ˇ ˇ 2.1. CLEN ENÍ PODLE TYPU VSTUPNÍCH DAT
(a)
(b)
Obrázek 2.1: Ukázka 2D NPR vytvoˇrená v programu Gimp. (a) Puvodní ˚ fotografie, (b) nefotorealistické vykreslení.
Díky využití tˇechto informací lze vytváˇret rozmanitˇejší a esteticky zajímavˇejší výstupy než u 2D NPR. Tyto techniky jsou vˇetšinou implementovány pˇrímo jako souˇcást programu˚ pro modelaci a zobrazení 3D scén. Uživateli se tak nabízejí další možnosti: souˇcasná zmˇena nastavení 3D scény a nastavení zpusobu ˚ vykreslení. Pˇrípadnˇe také možnost vytváˇret nefotorealistické animace. Do této kategorie patˇrí také modul pro NPR nazvaný Vincent, jenž je souˇcástí této práce. Spolu s vykreslenou scénou muže ˚ pˇri výpoˇctech použít zásobník hloubky a jeden cˇ i více zásobníku˚ objektu. ˚
2.1.3 3D NPR Základním vstupem tˇechto technik jsou puvodní ˚ data 3D scény - povrchová cˇ i objemová reprezentace tˇeles, informace o materiálech (texturách), osvˇetlení scény a další. Na základˇe tˇechto dat je pˇrímo spoˇcteno nefotorealistické zobrazení. Tyto techniky jsou obvykle algoritmicky i výpoˇcetnˇe velmi nároˇcné, avšak mohou poskytovat velmi kvalitní výsledky. 3D data lze velmi dobˇre uplatnit i pˇri tvorbˇe animací. Díky pˇresné znalosti pohybu˚ objektu˚ a kamery v cˇ ase mužeme ˚ zajistit zachování cˇ asové koherence snímku˚ animace (viz cˇ ást 6.1). 3
ˇ ˇ ˚ 2.2. CLEN ENÍ PODLE IMITOVANÝCH STYL U 2.1.4 VR NPR V posledních letech vznikají i systémy pro NPR pracující v prostˇredí virtuální reality. Vstupní data mohou být zadávána interaktivˇe pˇrímo uživatelem - ten pomocí virtuálních nástroju˚ (štˇetec, plechovka barvy, atp.) kreslí do virtuálního prostˇredí. Výstupem pak mohou být trojrozmˇerná umˇelecká díla. Viz obrázek 2.2. Více informací o této oblasti lze nalézt napˇríklad v [5] nebo v [11].
Obrázek 2.2: 2D snímek z díla vytvoˇreného v systému virtuální reality. Vytvoˇreno v laboratoˇri interakce cˇ lovˇeka s poˇcítaˇcem, FI MU. Pˇrevzato z [5], použito se svolením.
2.2
ˇ Clenˇ ení podle imitovaných stylu˚
Vˇetšina systému˚ pro nefotorealistické zobrazení se snaží napodobit jeden cˇ i více konkrétních výtvarných smˇeru. ˚ Je proto pˇrirozené dˇelit systémy pro NPR právˇe podle toho, jakou výtvarnou techniku imitují. Vˇetšinu nejznámˇejších stylu˚ v NPR mužeme ˚ rozdˇelit do dvou základních kategorií: grafické (kresebné) a malíˇrské techniky. 2.2.1 Grafické techniky Tˇechto technik neustále pˇribývá a postupnˇe vznikají nové, samostatné kategorie (vˇetšinou bez ustálených cˇ eských názvu) ˚ jako jsou pen-and-ink (perokresba), sketech-and-toon (skica), styl technických ilustrací a další. Kromˇe estetické hodnoty je v tˇechto technikách duležitá ˚ i hodnota informaˇcní. Aby výsledné obrazy zachycovaly všechny potˇrebné informace a pˇritom je podávaly co nejjednodušší formou. Pˇríkladem mohou být technické cˇ i lékaˇrské ilustrace (at’ už vytváˇrené ruˇcnˇe nebo pomocí poˇcítaˇce). Ty vznikají právˇe proto, že jsou „ˇcitelnˇejší“ než fotografie – vyzdvihují duležité ˚ rysy a zárovenˇ potlaˇcují nepodstatné detaily. K zachycení tvaru, povrchových vlastností a objemu objektu˚ se používá nˇekolik prvku, ˚ které jsou v ruzných ˚ systémech ruznˇ ˚ e kombinovány. 4
ˇ ˇ ˚ 2.2. CLEN ENÍ PODLE IMITOVANÝCH STYL U Siluety, hrany Hrany a hlavnˇe siluety jsou nejduležitˇ ˚ ejším prvkem pro rozpoznání tvaru˚ v obraze. Zkušený kreslíˇr dokáže pomocí nˇekolika cˇ ar zachytit vše podstatné - cílem je dosáhnout téhož pomocí poˇcítaˇce. Jednodušší metodou je vytváˇrení geometricky pˇresných cˇ ar na základˇe detekce hran ve 2D obraze (nejˇcastˇeji pomocí matematické konvoluce) cˇ i prosté zobrazení vybraných hran na základˇe 3D informace. Na konvoluci je založena i implementace grafických technik v modulu Vincent. Pro vylepšení výsledku˚ je zde možné použít zásobníky objektu˚ cˇ i mˇenit tloušt’ku hran v závislosti na hloubce scény. Druhou metodou jsou takzvané stylizované siluety. V tomto pˇrípadˇe nejde jen o nalezení „tˇech správných“ hran, ale i o zpusob, ˚ jakým jsou zachyceny. Snahou je imitovat nepˇresnosti ruˇcní tvorby – nerovné cˇ áry, nepˇresné spoje (nedotažené, pˇretažené spojnice cˇ ar), mˇenící se tlak na tužku, apod. Poˇcítaˇcem generovaná kresba s tˇemito vlastnostmi ztrácí vˇetšinu své mechanické pˇresnosti a strohosti a pusobí ˚ na diváka pˇrívˇetivˇejším dojmem. Ukázka stylizovaných siluet je na obrázku 2.3.
(a)
(b)
(c)
Obrázek 2.3: Ukázka stylizovaných siluet s použitím ruzných ˚ stylu˚ vykreslení. Pˇrevzato z [10].
Šrafování, polotónování Tyto postupy se používají k zachycení svˇetla a stínu v obraze. Pˇrináší také informace o plochách, strukturách a materiálech kreslených objektu. ˚ Používají se cˇ asto u cˇ ernobílých (binárních) obrazu, ˚ kde není jiný zpusob ˚ vyjádˇrení ruzných ˚ odstínu. ˚ Existuje mnoho ruz˚ ných implementací šrafování. Lze je založit na texturách (ruzným ˚ texturám ve scénˇe jsou pˇriˇrazeny ruzné ˚ druhy šrafování) nebo napˇríklad využít normál jednotlivých plošek a svˇetelného modelu 3D scény. Pˇri polotónování jsou plochy tvoˇreny opakováním urˇcitých elementu˚ – muže ˚ jít o písmena abecedy, jednoduché geometrické tvary, složité ornamenty, nebo dokonce o mozaiky 5
ˇ ˇ ˚ 2.2. CLEN ENÍ PODLE IMITOVANÝCH STYL U podobné dílum ˚ M. C. Eschera. Odstín plochy je pak urˇcen hustotou tˇechto elementu˚ nebo jejich vzájemnými kombinacemi. Jedním z nejznámˇejších autoru˚ v oblasti polotónování je V. Ostromoukhov, viz napˇríklad [13]. Barvy V NPR se cˇ asto používá jiný svˇetelný cˇ i barevný model než u klasického zobrazení. Muže ˚ jít o specifickou barevnou paletu (napˇríklad kˇriklavé barvy používané v komiksech) nebo o specifický význam barev. Napˇríklad pˇri vizualizaci map muže ˚ barva nést informaci o výšce cˇ i typu terénu. V technických ilustracích pak muže ˚ barva znázornovat ˇ normály povrchu˚ tˇeles. V modulu Vincent je možné použít efekt Nepravé barvy, který umožnuje ˇ obarvit jednotlivé objekty scény. V Programu Cinema4D existuje také efekt barevné vizualizace normál, který lze s modulem Vincent volnˇe kombinovat. 2.2.2 Malíˇrské techniky Všechny tyto techniky mají spoleˇcný základ: tahy štˇetcem, respektive jejich imitace. Muže ˚ jít o imitaci olejomalby, akvarelu, kaligrafického štˇetce nebo ruzných ˚ výtvarných "ismu" ˚ (impresionismus, pointilismus, ...). Nejˇcastˇeji používaná metoda vychází z reálného malíˇrského procesu – postupné nanášení jednotlivých tahu, ˚ budování díla od hrubé skici po jemné detaily. Nˇekteré NPR systémy jsou založeny na vizuální simulaci tahu˚ štˇetcem. Ty se soustˇredí pˇredevším na umístˇení a smˇery jednotlivých tahu. ˚ Jiné systémy jsou založeny na komplexní simulaci fyzikálních jevu˚ – šíˇrení kapaliny, pohyb barevných pigmentu˚ v kapalinˇe a jejich ulpívání na plátnˇe. Viz napˇríklad [4]. Postup nanášení tahu˚ štˇetcem je podrobnˇeji popsán v kapitole 4. Malba relaxací Malba relaxací (paint by relaxation) je metoda založená na postupném vykreslování jednotlivých tahu˚ štˇetcem. Ty jsou však hledány jiným zpusobem. ˚ Konkrétní styl vykreslení je zde definován takzvanou energetickou funkcí. Cílem výpoˇctu je nalézt zobrazení s minimální energií (spoˇctenou podle konkrétní energetické funkce). Základní energetická funkce odpovídá úspornému stylu – efektivnˇe zachytit vstupní obraz pˇri použití minimálního pocˇ tu tahu˚ štˇetcem. Relaxace je právˇe proces snižování (uvolnování) ˇ energie v obraze, založený na metodˇe pokus-omyl. Opakovanˇe jsou vytváˇreny nové návrhy vykreslení, napˇríklad na úrovni jednotlivých tahu˚ štˇetcem (jednotlivé návrhy se od sebe liší pozicemi rˇ ídících bodu˚ jednoho tahu) a je porovnána energie tohoto návrhu s energií stávajícího obrazu. Pokud je energie návrhu menší, je tento návrh pˇrijat. Tento postup se opakuje dokud není dosaženo koncových podmínek. Kvalita výstupu u této metody pak záleží na volbˇe vhodné energetické funkce a na možnostech algoritmicky generovat vhodné návrhy.
6
ˇ ˇ ˚ 2.2. CLEN ENÍ PODLE IMITOVANÝCH STYL U Obrazové analogie I pomocí této metody lze vytváˇret obrazy imitující malíˇrské techniky, avšak bez generování jednotlivých tahu˚ štˇetcem. Základem je hledání analogií mezi obrazy. Pro vstupní pár obrazu˚ – nefiltrovaný A a filtrovaný A´ a cílový nefiltrovaný obraz B chceme vytvoˇrit filtrovaný cílový obraz B´ takový, že analogie mezi B a B´ bude v urˇcitém smyslu stejná jako analogie mezi A a A´ viz obrázek 2.4. Postup má dvˇe základní fáze. V „tréninkové“ cˇ ásti uživatel vytvoˇrí filtr tím, že zadá vzorový nefiltrovaný a filtrovaný obraz A a A´. Poté urˇcí duležitost ˚ jednotlivých aspektu˚ analogie. Program se tak "nauˇcí" urˇcitý styl - filtr. V „aplikaˇcní“ cˇ ásti je takto vytvoˇrený filtr aplikován na nefiltrovaný cílový obraz B a je vytvoˇren filtrovaný cílový obraz B´. Výhodou této metody je pˇrirozený zpusob, ˚ jak definovat transformaci obrazu. Místo volby stylu a mnoha parametru˚ uživatel rˇ íká „chci, aby to vypadalo takhle“. Kritickou vlastností této metody je definice míry podobnosti obrazu, ˚ která je použita pro porovnávání filtrovaných a nefiltrovaných obrazu. ˚ Pˇredevším pak schopnost algoritmicky rozpoznat duležité ˚ rysy simulovaných umˇeleckých stylu. ˚ Proto u nˇekterých stylu˚ lze pomocí analogie obrazu˚ dosáhnout pˇrekvapivých výsledku, ˚ zatímco pro jiné styly – napˇríklad akvarel, nelze tuto metodu s úspˇechem použít.
(a)
(c)
(b)
(d)
Obrázek 2.4: Ukázka nefotorealistického vykreslení pomocí obrazové analogie. (a) Vstupní nefiltrovaný obraz - fotografie, (b) vstupní filtrovaný obraz - kresba pastelem, (c) cílový nefiltrovaný obraz, (d) cílový filtrovaný obraz. Pˇrevzato z [8]. 7
Kapitola 3
Grafické techniky Oblast grafických technik je rozsáhlá a zahrnuje nejruznˇ ˚ ejší styly od siluet, pˇres ruzné ˚ druhy šrafování a stínování, až k tvorbˇe mozaiek a polotónování. V modulu Vincent jsou grafické techniky založeny na matematické konvoluci. Díky kombinaci nˇekolika konvolucí, využití informací o scénˇe (zásobník hloubky a zásobníky objektu) ˚ a možnosti dodateˇcného obarvení pomoci efektu "Nepravé barvy", lze pomocí tˇechto grafických technik generovat divácky zajímavé výstupy. Nˇekolik ukázek je umístˇeno v pˇríloze C.
3.1
Konvoluce obrazu
3.1.1 2D Obraz Obraz mužeme ˚ definovat ruznými ˚ zpusoby ˚ – vždy záleží na oblasti použití. Zde vyjdeme z matematického modelu obrazové funkce z = f (x, y), která pro danou polohu (x, y) vrací urˇcitou informaci o obraze – z. Touto informací muže ˚ být jas obrazu, intenzita svˇetla o urcˇ ité vlnové délce, nebo jiná veliˇcina v závislosti na aplikaˇcní oblasti (data z poˇcítaˇcového tomografu, spektrální mˇerˇ ení svitu hvˇezd, atd.). V poˇcítaˇcové grafice obrazová funkce nejcˇ astˇeji vrací trojici hodnot – intenzity základních barevných složek obrazu (ˇcervená, zelená a modrá). Protože v poˇcítaˇcové grafice pracujeme s diskrétním obrazem koneˇcných rozmˇeru, ˚ mu˚ žeme omezit definiˇcní obor obrazové funkce na kartézský souˇcin dvou celoˇcíselných intervalu: ˚ hxmin , xmax i × hymin , ymax i. Každý prvek tohoto souˇcinu – jeden obrazový element oznaˇcujeme jako pixel (picture element). Omezíme i obor hodnot obrazové funkce. Pro cˇ ernobílý (binární) obraz vystaˇcíme s dvojicí hodnot: 0 a 1. U šedotónního obrazu bývá rozsah obvykle v celoˇcíselném intervalu h0, 255i. Stejný interval se používá i pro jednotlivé složky barevného obrazu (celkovˇe tak dostáváme pˇres 16 milionu˚ barev). 3.1.2 Konvoluce Konvoluce (obvykle znaˇcená operátorem ?) dvou spojitých funkcí dvou promˇenných je definována takto: Funkce h(x) se cˇ asto oznaˇcuje jako konvoluˇcní jádro. To mužeme ˚ pˇrirovnat k oknu, které se postupnˇe posouvá po obraze, proto se také nˇekdy oznaˇcuje pojmem windowed function. 8
3.1. KONVOLUCE OBRAZU I(x, y) ? h(x, y) =
R∞ R∞
I(x − a, y − b)h(a, b) da db
−∞ −∞
Rovnice 3.1.1: Konvoluce spojitých funkcí dvou promˇenných. Pˇri práci s digitálním obrazem se však používá diskrétní konvoluce, která je diskrétní podobou integrálu 3.1.1. 0 = (I ? h) Ii,j i,j =
m P
n P
Ii−x,j−y hx,y
x=−m y=−n
Rovnice 3.1.2: Konvoluce diskrétních funkcí dvou promˇenných. U diskrétní konvoluce lze konvoluˇcní jádro popsat maticí hodnot o rozmˇerech h−m, mi× h−n, ni. Význam konvoluce je následující. Máme vstupní obraz Ii,j (napˇríklad hodnoty 0 = (I ? h) jedné barevné složky obrazu) a konvoluˇcní jádro hi,j . Výsledný obraz Ii,j i,j získáme tak, že na každý bod (pixel) funkce Ii,j položíme konvoluˇcní jádro hi,j a spoˇcteme souˇcet dle 3.1.2. Pˇrevzato z [16]. Tímto postupem lze dosáhnout ruzných ˚ efektu. ˚ Nejˇcastˇeji se používá efekt potlaˇcení šumu (rozostˇrení obrazu) - v tomto pˇrípadˇe se cˇ asto používá konvoluˇcní jádro oznaˇcované ˇ jako Gaussuv ˚ filtr. Casté jsou také ruzné ˚ hranové detektory - Sobeluv ˚ filtr a Laplaceho filtr. Konkrétní podoby tˇechto konvoluˇcních jader jsou uvedeny v 3.1.3. 1 256
1 4 6 4 1 4 16 24 16 4 6 24 36 24 6 4 16 24 16 4 1 4 6 4 1
,
1 0 −1 2 0 −2 , 1 0 −1
1 2 1 0 0 , 0 −1 −2 −1
1 1 1 −8 1 1
1 1 1
Rovnice 3.1.3: Konvoluˇcní jádra. Po rˇ adˇe: Gaussuv ˚ filtr, Sobeluv ˚ vertikální filtr, Sobeluv ˚ horizontální filtr a Laplaceho filtr.
3.1.3 Implementace Víme, že digitální obraz (jednu barevnou složku) i konvoluˇcní jádro lze reprezentovat maticí hodnot. Ze vztahu 3.1.2 pak vidíme, že konvoluci diskrétních funkcí lze pˇrevést na skalární násobení matic. Z toho plyne jedna z výhod konvoluce - konstantní cˇ asová nároˇcnost. Pro dané velikosti vstupního obrazu a konvoluˇcního jádra se provede vždy stejný poˇcet násobení a sˇcítání, nezávisle na složitosti vstupního obrazu nebo hodnotách konvoluˇcního jádra. Pro snížení této cˇ asové nároˇcnosti lze navíc využít principu paralelismu cˇ i použít grafický hardware. Dále lze snadno dokázat, že dvˇe konvoluce s jádry o rozmˇerech h1, ni mají menší cˇ asovou složitost než jedna konvoluce s jádrem hn, ni (Pro vstupní obraz o rozmˇerech x × y 9
˚ 3.2. ZÁSOBNÍK OBJEKT U je v prvním pˇrípadˇe složitost 2xyn, ve druhém pˇrípadˇe pak xyn2 ). Tohoto faktu lze využít pro konvoluˇcní jádra, která lze rozložit na dvˇe jádra o velikostech h1, ni a hn, 1i (pˇri zachování výsledku konvoluce). V modulu Vincent je tento postup použit pˇri rozostˇrování obrazu bˇehem malíˇrských technik (viz cˇ ást 4.1.2). 3.1.4 Korekce barevného rozsahu Jak již bylo napsáno v cˇ ásti 3.1.1, pracujeme vždy s omezeným barevným rozsahem. Pˇri výpoˇctu konvoluce však muže ˚ výsledná hodnota intenzity ležet mimo tento rozsah. Jednoduchým pˇríkladem je použití triviálního konvoluˇcního jádra velikosti 1 × 1 s hodnotou 2 na vstupní hodnotu 150. Výsledkem bude hodnota 300, jež zˇrejmˇe leží mimo barevný rozsah. Jiným pˇríkladem muže ˚ být použití Sobelova filtru – v tom pˇrípadˇe mohou být výsledné hodnoty i záporné. Naivním rˇ ešením by bylo všechny hodnoty vˇetší než horní mez barevného rozsahu (v našem pˇrípadˇe hodnota 255) nastavit na tuto hodnotu a podobnˇe všechny hodnoty menší než dolní mez nastavit právˇe na tuto mez. Pˇri tomto rˇ ešení by však mohlo docházet k velké ztrátˇe informací. V extrémním pˇrípadˇe, kdy by výsledky konvoluce ležely napˇríklad v intervalu h−500, 0i, by po úpravˇe hodnot zbyl pouze cˇ erný obraz nenesoucí žádnou informaci, protože by všechny hodnoty byly pˇrepsány na nulu. V modulu Vincent jsou proto implementovány dvˇe možnosti korekce barevného rozsahu. Obˇe jsou založeny na stejném základním principu – po výpoˇctu konvoluce je zjištˇen barevný rozsah výsledného obrazu a ten je poté lineární interpolací pˇreveden na požadovaný rozsah. Metody se liší ve zpusobu ˚ zpracování záporných hodnot (které cˇ asto vznikají pˇri detekci hran). Posun barev. Interpolace je provádˇena pˇrímo. Tak je zachována nejvˇetší cˇ ást barevné informace, ale dochází k posunu hodnot, který není vždy žádoucí. Pˇri detekci hran (a šedotónním výstupu) budou rovné plochy šedé, vzestupné hrany svˇetlé a sestupné hrany tmavé. Absolutní hodnota. Pˇred interpolací jsou všechny záporné hodnoty pˇrevedeny na kladné. Tím se ztratí cˇ ást barevné informace, avšak neposouvají se všechny barvy. Pˇri detekci hran (a šedotónním výstupu) budou rovné plochy cˇ erné a hrany svˇetlé (nelze však podle barvy (odstínu) rozlišit vzestupné a sestupné hrany). Na obrázku 3.1 je ukázka jednotlivých druhu˚ korekce.
3.2
Zásobník objektu˚
Zásobník objektu˚ (z anglického object-buffer) je cˇ ernobílý, pˇrípadnˇe šedotónní obraz, vymezující oblast jednoho cˇ i více vybraných objektu˚ 3D scény. Pixely odpovídající viditelné cˇ ásti objektu jsou bílé, veškeré ostatní pixely jsou cˇ erné (viz obrázek 3.2). V pˇrípadˇe použití šedotónního obrazu ( jako v pˇrípadˇe programu Cinema4D i modulu Vincent ) jsou odstíny šedi použity pro vyhlazení hran (antialiasing) na pˇrechodu mezi objektem a pozadím. V rámci implementovaného modulu jsou zásobníky objektu˚ využity pro omezení rozsahu vykreslení. Takto lze omezit celý výpoˇcet grafických nebo malíˇrských technik, pˇrí10
˚ 3.2. ZÁSOBNÍK OBJEKT U
(a)
(b)
(c)
(d)
Obrázek 3.1: Ukázka korekce barevného rozsahu. Je použit Laplaceho filtr a inverze barev. (a) Puvodní ˚ scéna, (b) bez korekce rozsahu, (c) posun barev, (d) absolutní hodnota.
padnˇe i efekt Nepravé barvy, jen na urˇcitou cˇ ást scény. Pˇri použití více modulu bˇehem jednoho výpoˇctu je tak možné na jednom výsledném obraze vykreslit nˇekolik ruzných ˚ objektu˚ nˇekolika ruznými ˚ styly. V grafických technikách mohou být zásobníky objektu˚ využity také jako zdrojový obraz pro konvoluce, podobnˇe jako zásobník hloubky. Pˇri detekci hran mužeme ˚ tímto postupem zvýraznit siluety pˇríslušných objektu. ˚
(a)
(b)
(c)
Obrázek 3.2: (a) Bˇežné vykreslení 3D scény, (b) zásobník bližšího objektu, (c) zásobník vzdálenˇejšího objektu.
11
3.3. ZÁSOBNÍK HLOUBKY
3.3
Zásobník hloubky
Zásobník hloubky, oznaˇcovaný také jako pamˇet’ hloubky cˇ i Z-buffer, je šedotónní obraz zachycující informaci o hloubce 3D scény. Intenzita každého pixelu tohoto obrazu reprezentuje vzdálenost nejbližšího objektu, který se promítá na daný pixel. Jinými slovy – cˇ ím je objekt ve scénˇe hloubˇeji (dále od kamery), tím vˇetší je intenzita pˇríslušných pixelu˚ v zásobníku. V nˇekterých pˇrípadech (napˇríklad standardní nastavení kamery v programu Cinema4D) se však používá opaˇcný význam intenzity pixelu˚ – cˇ ím je objekt blíže, tím je intenzita vˇetší. V implementaci modulu Vincent i v dalším textu je proto použit tento význam zásobníku hloubky. Na obrázku 3.3 je ukázka bˇežného vykreslení a odpovídajícího zásobníku hloubky 3D scény.
(a)
(b)
Obrázek 3.3: (a) Bˇežné vykreslení 3D scény, (b) zásobník hloubky. V modulu Vincent lze zásobník hloubky v grafických technikách použít dvojím zpuso˚ bem. První možností je použít zásobník jako zdrojový obraz pro výpoˇcet konvoluce. Pˇri použití hranových detektoru˚ lze takto lépe rozlišit objekty v popˇredí a v pozadí scény. Mu˚ žeme jej také využít jako základ pro tónování obrazu, kdy vzdálené objekty mizí v pozadí, zatímco objekty v popˇredí více vystupují. Druhou možností využití zásobníku hloubky je efekt nazvaný Vliv hloubky. Vliv hloubky. Tento efekt lze použít u libovolné konvoluce a také u efektu Nepravé barvy (viz cˇ ást 5.1). Zásobník hloubky je zde použit k urˇcení míry, s jakou se daná konvoˇ luce (efekt nepravých barev) projeví v jednotlivých místech obrazu. Cím vˇetší je hodnota zásobníku v daném pixelu, tím více se konvoluce uplatní. Pˇri nulové hodnotˇe zásobníku hloubky se konvoluce nijak neuplatí a barva pixelu nebude zmˇenˇena. Pomocí tohoto efetku lze napˇríklad simulovat hloubku ostrosti scény - intenzita rozostˇrení jednotlivých pixelu˚ je rˇ ízena právˇe hodnotami zásobníku˚ hloubky. Jiným použitím je ovlivnˇení tloušt’ky hran a barevnosti objektu˚ - s pˇribývající vzdáleností od kamery klesá tloušt’ka hran a sytost barev vykreslení. 12
3.3. ZÁSOBNÍK HLOUBKY Princip efektu ukazuje následující pseudo-kód (pˇresný popis jednotlivých režimu˚ je umístˇen v pˇríloze B). Pro každý pixel v obraze a každou barevnou složku udˇ elej: c_refer // p˚ uvodní barva pixelu c_konv // barva pixelu po spoˇ ctení konvoluce (nebo efektu obarvení) c_out // výsledná hodnota z-buffer // hodnota zásobníku hloubky intenzita // intenzita efektu pokud je režim inverzní, tak z-buffer = 255 - z-buffer; hloubka = z-buffer / (255 * intenzita); pokud je hloubka > 1, tak hloubka = 1 pokud je režim založen na barvˇ e, tak c_out = hloubka * c_konv + (1 - hloubka) * c_refer jinak c_out = hloubka * c_konv ulož hodnotu c_out
13
Kapitola 4
Malíˇrské techniky Malba je umˇelecká interpretace svˇeta (reálného cˇ i imaginárního) na dvourozmˇerném plátnˇe. Umˇelec abstrahuje scénu – vyzdvihuje to podstatné a zjednodušuje neduležité ˚ detaily. Volbou struktury, velikosti a smˇeru jednotlivých tahu˚ štˇetcem je malíˇr schopen zachytit nejen tvary, ale také dynamiku a atmosféru celého díla. Pokroˇcilé nefotorealistické techniky imitující malbu vychází právˇe z tˇechto principu. ˚ Abstrahují vstupní obraz (hledáním jednotlivých objektu˚ ve scénˇe, rozostˇrením obrazu), umožnují ˇ volbu ruzné ˚ míry detailu˚ v ruzných ˚ cˇ ástech obrazu. Simulací fyzikálních jevu˚ (napˇríklad pomocí dynamiky kapalin) se snaží imitovat chování skuteˇcného štˇetce na skuteˇcném papíˇre (plátnˇe). Malíˇrské techniky modulu Vincent vycházejí z takzvaného malíˇrova algoritmu, respektive z jeho implementace metodou vykreslování po vrstvách (viz napˇríklad [8]). Tuto metodu jsem rozšíˇril o práci se zásobníkem objektu˚ a zásobníkem hloubky (viz cˇ ásti 3.3 a 3.2). Využití zásobníku˚ objektu˚ dává uživateli vˇetší kontrolu nad mírou detailu˚ ve výsledném obraze. Zásobník hloubky je použit pˇri hledání tahu˚ štˇetcem a pˇri jejich rˇ azení, cˇ ímž zlepšuje vizuální dojem z výsledného obrazu.
4.1
Vykreslování po vrstvách
4.1.1 Malíˇruv ˚ algoritmus Jako malíˇruv ˚ algoritmus bývá oznaˇcován postup bˇežnˇe používaný pˇri malbˇe. Malíˇr nejdˇríve vytvoˇrí hrubý náˇcrt a poté postupnˇe pˇridává menší detaily nanášením dalších tahu˚ štˇetcem (štˇetci). Pozdˇeji nanesené vrstvy barvy zpravidla cˇ ásteˇcnˇe nebo zcela pˇrekrývají vrstvy pˇredešlé, cˇ ehož se využívá pˇri míchání barev. 4.1.2 Tvorba vrstev Pˇri zpracování poˇcítaˇcem je vstupní obraz zpracováván postupnˇe v nˇekolika pruchodech ˚ – vrstvách. V první vrstvˇe je souˇcástí vstupu prázdné „plátno“ (obraz o pˇríslušných rozmˇerech, pokrytý bílou (ˇcernou) barvou), na které se nanáší jednotlivé tahy štˇetcem. V dalších vrstvách jsou tahy nanášeny vždy na výsledek pˇredchozí vrstvy. V pˇrípadˇe animace metodou pˇrekrývání (viz cˇ ást 6.2.2) je v první vrstvˇe použit místo prázdného plátna výsledek vykreslení z pˇredchozího snímku animace. Pro každou vrstvu jsou provedeny následující 14
4.1. VYKRESLOVÁNÍ PO VRSTVÁCH kroky: 1. Rozostˇrení. Puvodní ˚ obraz (fotorealistické vykreslení) je nejprve pomocí konvoluce rozostˇren. Ve všech dalších cˇ ástech výpoˇctu se používá tento rozostˇrený obraz. Míra rozostˇrení (velikost konvoluˇcního jádra n×n) je volena podle velikosti štˇetce urˇceného této vrstvˇe (R) a parametru rozostˇrení (fB ) podle vztahu n = RfB . Tak je zajištˇeno, že rozostˇrení potlaˇcí všechny detaily v obraze, které jsou výraznˇe menší než velikost použitého štˇetce. V implementaci je použita dvojice konvoluˇcních jader o velikostech 1 × n a n × 1 s hodnotami n1 . 2. Hledání tahu. ˚ Rozostˇrený obraz je poté rozdˇelen na cˇ tvercové oblasti (na pravém a spodním okraji mohou vzniknout oblasti obdélníkové). Velikost oblastí je rovna polomˇeru štˇetce. Stejné rozdˇelení obrazu je provedeno u výsledného obrazu. V každé oblasti je pak proveden test na zaˇcátek nového tahu. Pokud je test úspˇešný, je spoˇcten a ihned vykreslen nový tah štˇetcem zaˇcínající v této oblasti. Pˇri neúspˇešném testu je oblast ponechána beze zmˇeny. Tento test je založen na rozdílu barev mezi vstupním (rozostˇreným) obrazem a dosud vykresleným výsledkem. Celková chyba oblasti je urˇcena jako souˇcet euklidovských vzdáleností barev podle vztahu chyba =
Pp
(r1 − r2 )2 + (g1 − g2 )2 + (b1 − b2 )2
M
Rovnice 4.1.1: Euklidovská vzdálenost barev. kde M je množina všech pixelu˚ v oblasti. Tato hodnota je vydˇelena velikostí oblasti (poˇctem pixelu) ˚ a tak je urˇcena prumˇ ˚ erná chyba oblasti. Dále je urˇcena celková a pru˚ mˇerná hloubka oblasti. Aby byl tah vykreslen, musí být obˇe spoˇctené hodnoty vˇetší než prahové hodnoty urˇcené uživatelem. Práh pro rozdíl barev urˇcuje pˇrímo parametr „Rozdíl barev“. Práh pro hloubku je urˇcen z parametru „Hloubka“ podle následujícího vztahu, kde pv oznacˇ uje poˇcet použitých vrstev, cv pak cˇ íslo aktuální vrstvy. prahZ = (255/pv) ∗ (cv − 1) ∗ hloubka Rovnice 4.1.2: Urˇcení minimální hodnoty hloubky pro danou vrstvu. Takto je zajištˇeno, že nové tahy budou vykresleny jen tam, kde se vykreslený obraz významnˇe liší od puvodního ˚ (rozostˇreného) vykreslení a to jen tehdy, je-li oblast dostateˇcnˇe blízko kamery. 3. Pˇrekreslení. Po pruchodu ˚ všech oblastí obrazu a vykreslení všech potˇrebných tahu˚ štˇetcem je možné výpoˇcet této vrstvy ukonˇcit. V nˇekterých pˇrípadech (zejména jsou-li použity vysoké hodnoty krytí) je však vhodné všechny tahy seˇradit a vykreslit v tomto 15
4.1. VYKRESLOVÁNÍ PO VRSTVÁCH novém poˇradí. Pˇri vysokém krytí totiž tahy výraznˇe pˇrekrývají nejen pˇredchozí vrstvy, ale i pˇredešlé tahy z téže vrstvy. Vzhledem k postupnému procházení oblastí (shora dolu˚ a zleva doprava) tak muže ˚ být ve výsledku viditelná jistá jednotvárnost tahu. ˚ Tahy vpravo dole mohou pˇrekrývat tahy vlevo nahoˇre, nikoli naopak. ˇ Rešením muže ˚ být seˇrazení tahu˚ podle hloubky ("hloubka tahu" je maximum z hodnot zásobníku hloubky v bodech, odpovídajících rˇ ídícím bodum ˚ tahu) a vykreslit tahy od nejvzdálenˇejšího k nejbližšímu. Tak se vyhneme oné jednotvárnosti vykreslení a zárovenˇ tak mužeme ˚ zvýraznit dojem hloubky v obraze. V pˇrípadˇe malých hodnot krytí není poˇradí vykreslení tahu˚ v rámci jedné vrstvy natolik duležité ˚ (efekt jednotvárnosti tahu˚ není viditelný). Proto je možné rˇ azení a pˇrekreslení tahu˚ zcela vypnout a zkrátit tak cˇ as výpoˇctu. Algoritmus vykreslování po vrstvách popisuje následující pseudo-kód. vysledek = vytvoˇ r nový výsledný obraz (bílé nebo ˇ cerné plátno) nebo použij výsledek z pˇ redchozích výpoˇ ct˚ u pro každou R kryti fb refer T prahZ
vrstvu udˇ elej // velikost štˇ etce pro tuto vrstvu // intenzita krytí // intenzita rozostˇ rení // p˚ uvodní (referenˇ cní) obraz // rozdíl barev v oblasti // minimální hloubka pro tuto vrstvu
jadro = vytvor_konvolucni_jadro(R*fb, R*fb) //spoˇ ctení rozostˇ reného obrazu input = konvoluce(refer, jadro) rozdˇ el obraz na oblasti o velikosti R*R a pro každou oblast udˇ elej chyba = 0 Z = 0 pro každý pixel v oblasti udˇ elej vstup = naˇ cti barvu vstupního obrazu vystup = naˇ cti barvu výsledného obrazu hloubka = naˇ cti hodnotu zásobníku hloubky chyba = chyba + Euklid-rozdil(vstup, vystup) Z = Z + hloubka chyba = chyba / velikost-oblasti Z = Z / chyba-oblasti pokud je chyba > T a zároveˇ n Z > prahZ tak udˇ elej: najdi nový tah vykresli nový tah
16
ˇ 4.2. TAH ŠT ETCEM Ukázka postupného vytváˇrení obrazu algoritmem vykreslování po vrstvách je na obrázku C.6 grafické pˇrílohy. 4.1.3 Využití zásobníku˚ objektu˚ Vykreslování po vrstvách je založeno na myšlence postupného pˇridávání tahu˚ štˇetcem na základˇe rozostˇrení obrazu a hloubky scény. S využitím zásobníku objektu˚ mužeme ˚ ovlivnit pˇridávání tahu˚ na základˇe pozic jednotlivých objektu˚ ve scénˇe. Celý výpoˇcet nefotorealistického vykreslení modulu Vincent lze omezit na oblast urˇcenou zásobníkem objektu. ˚ Lze také použít více modulu˚ Vincent bˇehem jednoho zpracování vstupní scény. Další moduly v porˇ adí použijí jako vstup výsledek pˇredchozích modulu˚ (nevytváˇrí prázdné plátno) a nové tahy kreslí pˇres již vykreslený obraz. Jestliže využijeme tyto možnosti, mužeme ˚ v prvním modulu v poˇradí vykreslit celou scénu jedním cˇ i více pomˇernˇe velkými štˇetci - tak, abychom získaly hrubou skicu celého obrazu. V dalším modulu omezíme výpoˇcet jen na zásobník objektu, ˚ obsahující námi vybrané objekty a ty vykreslíme menšími štˇetci. Vybrané objekty - jejich vykreslení získá požadovanou míru detailu. ˚ Pˇri použití více modulu˚ a více zásobníku˚ objektu˚ je pak možné ruzné ˚ objekty ve scénˇe vykreslit s ruzným ˚ nastavením malíˇrských technik.
4.2
Tah štˇetcem
Tah štˇetcem je v modulu Vincent definován barvou tahu a seznamem rˇ ídících bodu. ˚ Pro vykreslení tahu je dále potˇreba znát velikost štˇetce a intenzitu krytí - tyto hodnoty jsou však stejné pro všechny tahy štˇetcem v jedné vrstvˇe. Na základˇe rˇ ídících bodu˚ je pomocí interpolace urˇcena výsledná dráha, po které je štˇetec tažen. 4.2.1 Výpoˇcet rˇídících bodu˚ Nejprve je nutné urˇcit polohu prvního rˇ ídícího bodu v rámci právˇe rˇ ešené oblasti. Tady je využito již spoˇctených euklidovských vzdáleností barev a rˇ ídícím bodem se stává bod s nejvˇetší euklidovskou vzdáleností. Tah tedy zaˇcíná tam, kde se vykreslený obraz nejvíce liší od vstupního. Další rˇ ídící body jsou hledány tak, aby vykreslený tah co nejlépe barevnˇe odpovídal vstupnímu obrazu a zárovenˇ bylo zachováno pˇrirozené zakˇrivení tahu (nemˇelo by docházet k prudké zmˇenˇe smˇeru tahu). Výpoˇcet jednoho rˇ ídícího bodu (oznaˇcme jej Pi+1 ) probíhá v nˇekolika krocích: −−−−→ 1. Nalezení smˇerového vektoru. Smˇerový vektor Pi Pi+1 urˇcuje posunutí mezi již známým bodem Pi a hledaným bodem Pi+1 . Pro jeho urˇcení je nutné znát barvy v bodˇe −−−−→ Pi a jeho okolí a také pˇredchozí smˇerový vektor Pi−1 Pi (pokud jej máme k dispozici). → V bodˇe Pi spoˇcteme vektor gradientu obrazu − gi . Gradient urˇcuje, ve kterém smˇeru dochází k nejvˇetší zmˇenˇe barvy. Je poˇcítán pomocí dvou konvolucí, s použitím So→ belových filtru. ˚ Jako smˇerový vektor pak použijeme jednu z kolmic na vektor − gi . Je −−−−→ použita ta, která svírá menší úhel s pˇredcházejícím smˇerovým vektorem Pi−1 Pi . 17
ˇ 4.2. TAH ŠT ETCEM V pˇrípadˇe, že rˇ ídící bod Pi leží v oblasti s malou zmˇenou barvy (zjištˇený gradient −−−−→ je velmi malý), tah pokraˇcuje v pˇredešlém smˇeru (smˇerový vektor Pi Pi+1 je shodný −−−−→ s vektorem Pi−1 Pi ). Speciálním pˇrípadem je hledání druhého rˇ ídícího bodu (P2 ), kde nemáme k dispozici pˇredcházející smˇerový vektor. Tomuto problému se vˇenuje cˇ ást 4.2.2. −−−−→ 2. Úprava vektoru. Nalezený vektor je nutné dále upravit. Smˇer vektoru Pi Pi+1 je upraven podle uživatelského parametru "Zakˇrivení". Ten urˇcuje do jaké míry se nalezený −−−−→ smˇer pˇrikloní k pˇredchozímu smˇerovému vektoru podle vztahu Pi Pi+1 = zakriveni ∗ −−−−→ −−−−→ Pi Pi+1 + (1 − zakriveni) ∗ Pi−1 Pi . Délka vektoru je upravena na velikost polomˇeru štˇetce. Blízkost rˇ ídících bodu˚ je vyžadována nejen pro zajištˇení plynulosti tahu, ale pˇredevším pro zachování podobnosti vstupního a vytváˇreného obrazu. −−−−→ 3. Pˇridání rˇídícího bodu. Po nalezení a úpravˇe smˇerového vektoru Pi Pi+1 získáme polohu hledaného rˇ ídícího bodu Pi+1 pouhým posunutím. Pro jeho pˇridání do tahu však musí být splnˇena alesponˇ jedna z následujících podmínek: •
Dosud nebyla dosažena minimální délka tahu.
•
Po pˇridání bodu a vykreslení tahu se výsledný obraz bude více podobat vstupnímu obrazu (euklidovská vzdálenost barev v bodˇe Pi+1 se po vykreslení tahu zmenší).
Jestliže není splnˇena ani jedna z tˇechto podmínek, rˇ ídící bod není pˇridán, tah je ukonˇcen a ihned vykreslen (druhou možností ukonˇcení tahu je dosažení maximální délky tahu). 4.2.2 Smˇer tahu pˇri nulovém gradientu Pˇri hledání druhého rˇ ídícího bodu je potˇreba vyˇrešit dva problémy, které se u dalších rˇ í→ dících bodu˚ již nevyskytují. Prvním je výbˇer kolmice na vektor gradientu − gi . Protože nemáme žádný pˇredchozí smˇerový vektor, jsou spoˇcteny obˇe varianty smˇerového vektoru a je vybrána ta, pˇri které bude vykreslením tahu dosaženo lepšího výsledku (menšího rozdílu barev). Druhý, komplikovanˇejší problém nastává, je-li v prvním rˇ ídícím bodˇe tahu velmi malý nebo nulový gradient barev (bod leží v oblasti rovnomˇernˇe pokryté jednou barvou). Otázkou je, kterým smˇerem tah povede. Ihned mužeme ˚ zavrhnout jednoduchá rˇ ešení jako tah nevykreslit vubec ˚ cˇ i použít jen jeden rˇ ídící bod. V prvním pˇrípadˇe by se mohlo stát, že by cˇ ást obrazu nebyla vykreslena vubec, ˚ v druhém pˇrípadˇe by sice byl vykreslen celý obraz, ale nebyla by dodržena podmínka minimální délky tahu a jednobarevná cˇ ást obrazu by pusobila ˚ "vyteˇckovaným" dojmem (všechny tahy v této oblasti by mˇely jen jeden rˇ ídící bod a proto by se vykreslily jako teˇcky). Další možností je urˇcit tahum ˚ smˇer náhodnˇe nebo naopak všem tahum ˚ pevnˇe urˇcit jeden konkrétní smˇer. Pˇri využití náhody pusobí ˚ výsledný obraz nepˇríjemnˇe roztˇrepeným, chaotickým dojmem. Vnesení náhody do vykreslení navíc zpusobí ˚ zvýšení nepˇríjemného šumu 18
ˇ 4.2. TAH ŠT ETCEM bˇehem animace. Pˇri použití pevnˇe zvoleného smˇeru pusobí ˚ obraz naopak jednotvárnˇe a nepˇrirozenˇe - všechny barevné plochy jsou vykresleny tahy se stejným smˇerem. V modulu Vincent je implementováno rˇ ešení, kdy je poˇcáteˇcní smˇer vybírán podle barvy tahu. Problém nalezení smˇeru tahu si pˇrevedeme na problém nalezení správného úhlu na jednotkové kružnici. Základní barvy (ˇcervenou, zelenou a modrou) použijeme k rozdˇelení kružnice na tˇri shodné výseˇce. K urˇcení ve které výseˇci leží hledaný úhel použijeme pomˇer barevných složek aktuálního tahu - správnou výseˇc ohraniˇcují dvˇe nejvíce zastoupené barevné složky. Pˇresný úhel - smˇer tahu je pak urˇcen z konkrétních hodnot barevných složek. Nˇekolik ruzných ˚ barev a jim odpovídající smˇerové vektory ukazuje obrázek 4.1.
Obrázek 4.1: Vztah mezi barvou a smˇerem tahu. Pˇri tomto rˇ ešení je každá barevná plocha pokryta tahy se stejným (podobným) smˇerem, ale zárovenˇ ruzným ˚ barevným plochám odpovídají ruzné ˚ smˇery tahu. ˚ Ve výsledném obrazu tak tahy štˇetcem mají vždy urˇcitý rˇ ád - nepusobí ˚ ani pˇríliš chaoticky, ale ani pˇríliš jednotvárnˇe. 4.2.3 Vykreslení tahu Jak již bylo zmínˇeno, tah je vždy vykreslen ihned po spoˇctení všech rˇ ídících bodu. ˚ Na základˇe tˇechto bodu˚ je urˇcena dráha tahu (v pˇrípadˇe modulu Vincent lineární interpolací) a po této dráze je tažen štˇetec o urˇcitém polomˇeru a s urˇcitou barvou. Hlavním problémem vykreslování tahu˚ je, jak kombinovat barvu tohoto tahu s barvou již vykresleného obrazu v pixelech, kudy tah prochází. Jednoduchým rˇ ešením je nebrat puvodní ˚ barvu vubec ˚ v potaz a ve všech pixelech pˇrímo nastavit novou barvu tahu. Tato metoda však znaˇcnˇe omezuje rozsah ruzných ˚ malíˇrských 19
ˇ 4.2. TAH ŠT ETCEM stylu, ˚ které jsme schopni imitovat. Vylepšením muže ˚ metoda založená na principu propustnosti svˇetla - viz napˇríklad [1]. Pˇri výpoˇctu zmˇeny barvy se vychází z faktu, že cˇ ím vˇetší je vrstva pigmentu (poˇcet nanesených tahu) ˚ tím menší je propustnost svˇetla touto vrstvou a tím tmavší je výsledná barva. Jiným pˇrístupem muže ˚ být aproximaˇcní model, který jsem použil pˇri implementaci modulu Vincent. Tento model je založen na myšlence, že s pˇridáváním dalších tahu˚ - dalších vrstev barvy se autor postupnˇe pˇribližuje k barvˇe výsledné. Pˇri vykreslení tahu je vždy urˇcen rozdíl mezi aktuálnˇe vykreslenou barvou a požadovanou barvou tahu. Na základˇe parametru "Krytí" je pak k puvodní ˚ barvˇe pˇriˇctena urˇcitá cˇ ást tohoto rozdílu. Pˇri maximálnˇe hodnotˇe krytí je vždy pˇriˇcten celý rozdíl a pixely tedy získají pˇresnˇe barvu tahu. Pˇri nulové hodnotˇe krytí by k puvodním ˚ hodnotám nebylo pˇriˇcteno nic a tah by se tedy vubec ˚ neprojevil. Použitý algoritmus zachycuje následující pseudo-kód. barva_p barva_t barva_v kryti T
// // // // //
p˚ uvodní barva barva tahu štˇ etcem výsledná barva intenzita krytí množina všech pixel˚ u aktuálního tahu štˇ etcem
//výpoˇ cet na základˇ e ˇ rídících bod˚ u a polomˇ eru tahu spoˇ cti T naˇ cti barva_t pro každý pixel v množinˇ e T a každou jeho barevnou složku udˇ elej: naˇ cti barva_p rozdil = barva_p - barva_t pokud (0 < rozdil*kryti < 1) tak udˇ elej: barva_v = barva_p + 1 pokud (-1 < rozdil*kryti < 0) tak udˇ elej: barva_v = barva_p - 1 jinak udˇ elej: barva_v = barva_p + kryti * rozdil ulož barva_v
V nˇekterých pˇrípadech (napˇríklad pˇri imitaci akvarelové malby) je vhodné použít velmi malé krytí. Pˇri práci s malými hodnotami krytí a rozdílu barev se však muže ˚ stát, že výsledný souˇcin bude zaokrouhlen na nulovou hodnotu (stále pracujeme s diskrétními hodnotami barev) a tah se tedy vubec ˚ neprojeví. Proto bylo nutné zahrnout testy na minimální hodnotu souˇcinu krytí a rozdílu barev. Pomocí tohoto modelu vykreslování tahu˚ (spoleˇcnˇe s vhodným nastavením dalších parametru) ˚ mužeme ˚ imitovat ruzné ˚ malíˇrské techniky. Od sytých a výrazných tahu˚ štˇetcem 20
ˇ 4.2. TAH ŠT ETCEM pˇri expresionismu cˇ i pointilismu, pˇres více se pˇrekrývající tahy impresionismu až po vytvárˇ ení spíše barevných ploch než jednotlivých tahu˚ štˇetcem pˇri imitaci akvarelu. V pˇríloze C jsou ukázky vykreslení jedné scény s použitím nˇekolika ruzných ˚ stylu. ˚
21
Kapitola 5
Další efekty Výsledná implementace této práce je distribuována jako jeden zásuvný modul. I z pohledu uživatele je veškerá funkcionalita soustˇredˇena do jednoho efektu pojmenovaného Vincent. Tento efekt lze bˇehem jednoho výpoˇctu aplikovat i vícekrát a volnˇe kombinovat s jinými efekty (zásuvnými moduly). Kromˇe možnosti nastavení stylu nefotorealistického vykreslení, zahrnuje implementace další možnosti: imitace plátna a takzvané nepravé barvy. Tyto volby lze použít samostatnˇe cˇ i volnˇe kombinovat s ruznými ˚ styly vykreslení.
5.1
Nepravé barvy
Tento efekt je urˇcen pˇredevším pro kombinaci s grafickými technikami modulu. Protože hlavním principem používaným v grafických technikách je detekce hran, výstupem jsou barevné hrany na cˇ erném pozadí. V pˇrípadˇe použití inverze barev a šedotónního výstupu pak tmavé hrany na svˇetlém pozadí. Efekt Nepravé barvy slouží k dodateˇcnému obarvení jednotlivých objektu˚ ve scénˇe. Ve spojení s vhodnˇe zvolenou kombinací hranových detektoru˚ je možné generovat obrazy cˇ i animace pˇripomínající ruˇcnˇe tvoˇrenou skicu nebo styl technických ilustrací.
5.1.1 Obarvení pˇred výpoˇctem Pˇri použití hranových detektoru˚ se muže ˚ stát, že nˇekteré hrany, které uživatel považuje za duležité, ˚ nejsou dostateˇcnˇe viditelné. Ke „zviditelnˇení“ tˇechto hran je možné pˇristoupit nˇekolika zpusoby: ˚ zásahem do 3D scény (zmˇenou osvˇetlení nebo textur), pˇrípadnˇe pˇridáním dalšího hranového detektoru s omezení na urˇcitý objekt ve scénˇe. Pokud však uživatel nechce nebo nemuže ˚ využít tˇechto možností, muže ˚ využít právˇe efektu Nepravé barvy s volbou „Obarvení pˇred výpoˇctem“. Pˇri použití této možnosti je efekt obarvení použit již pˇri výpoˇctu fotorealistického obarvení – pˇred všemi ostatními efekty NPR. Uživatel takto muže ˚ nastavit jeden cˇ i více objektu, ˚ které budou obarveny ještˇe pˇred výpoˇctem detekce hran. Zesvˇetlení objektu ve tmavé cˇ ásti scény, nebo použití kontrastních barev u pˇrekrývajících se objektu˚ tak zvýší intenzitu nalezené hrany. 22
5.1. NEPRAVÉ BARVY 5.1.2 Vliv hloubky U efektu Nepravé barvy je možné stejnˇe jako u konvolucí v grafických technikách použít techniku vlivu hloubky. Pro dosažení vizuálnˇe atraktivního dojmu je však nutné u efektu (efektu) ˚ obarvení nastavit Vliv hloubky stejnˇe, cˇ i podobnˇe jako u hranových detektoru. ˚ Napˇríklad scéna, kde by hrany s pˇribývající hloubkou scény rychle mizely, kdežto barvy by zustávaly ˚ stejné nebo mizely jen pozvolna, by vypadala znaˇcnˇe nepˇrirozenˇe. Pˇríklady použití jsou umístˇeny v pˇríloze C. 5.1.3 Algoritmus Následující pseudo-kód popisuje algoritmus použitý pro obarvení cˇ ásti scény urˇcené zásobníkem objektu. ˚ c_in c_out c_delta obj
// // // //
p˚ uvodní barva výsledná barva intenzita obarvení hodnota zásobníku objekt˚ u
zjisti c_delta Pro každý pixel v obraze udˇ elej: naˇ cti c_in naˇ cti c_out naˇ cti obj pokud je režim podle-intenzity, tak udˇ elej: intenzita = c_in_R + c_in_G + c_in_B / 3 c_out_R = intenzita * (c_delta_R + 1) c_out_G = intenzita * (c_delta_G + 1) c_out_B = intenzita * (c_delta_B + 1) pokud je režim relativní, tak udˇ elej: c_out_R = c_in_R * (c_delta_R + 1) c_out_G = c_in_G * (c_delta_G + 1) c_out_B = c_in_B * (c_delta_B + 1) pokud je režim absolutní, tak udˇ elej c_out_R = c_delta_R c_out_G = c_delta_G c_out_B = c_delta_B pokud je zapnut efekt Vliv hloubky, tak udˇ elej: c_out = UpravPodleZ(c_out, z, ...) ulož hodnotu c_out
Popis jednotlivých režimu˚ obarvení je uveden v pˇríloze B. 23
5.2. EFEKT PLÁTNA
5.2
Efekt Plátna
Pˇri imitaci výtvarných technik je hlavním cílem zvládnutí imitace použitého nástroje (tužka, pero a inkoust, štˇetec, ruzné ˚ druhy barev). Dalším duležitým ˚ prvkem je však imitace média, na kterém je dílo zachyceno. Vˇetšinou jde o papír nebo malíˇrské plátno. Špatná imitace tohoto média muže ˚ vést k výraznému zhoršení celkového dojmu vytváˇrených obrazu. ˚ Obraz, na kterém plátno vypadá nepˇrirozenˇe „umˇele“, cˇ i na kterém se plátno viditelnˇe opakuje, pusobí ˚ vizuálnˇe mnohem horším dojmem než stejný obraz bez imitace plátna. U nˇekterých technik (napˇríklad skica nebo akvarel) muže ˚ vhodnˇe použitá imitace plátna naopak výsledný dojem až neˇcekanˇe zvýšit. Obraz poté pusobí ˚ pˇrirozenˇejším, ucelenˇejším dojmem. Existují dva základní postupy, jak pˇristupovat k imitaci plátna: •
Imitace vzhledu. Jednodušší metoda, která je vˇetšinou aplikována až jako poslední krok v celém výpoˇctu NPR. Plátno považujeme za rovnou plochu s mnoha malými výstupky a prohlubnˇemi. "Výšku" plátna v jednotlivých bodech urˇcuje intenzita pixelu˚ použité textury. Na základˇe této výšky je pˇrímo mˇenˇena intenzita bodu˚ výsledného obrazu. Viz napˇríklad [1]. Tento zpusob ˚ je použit i v implementaci modulu Vincent.
•
Simulace fyzikálních vlastností. Komplexní pˇrístup, v nˇemž je médium zahrnuto již do výpoˇctu NPR. Muže ˚ být definováno matematickým modelem (jednotlivá vlákna papíru, schopnost absorpce vody, . . . ) cˇ i pomocí textury (jednotlivé body textury urcˇ ují napˇríklad tloušt’ku papíru). Ve výpoˇctu muže ˚ být médium použito pro výpoˇcet zasychání vody na papíˇre, šíˇrení jednotlivých barevných pigmentu, ˚ jejich seskupovaní apod. Viz napˇríklad [4]. Tento zpusob ˚ je výpoˇcetnˇe velmi nároˇcný, avšak muže ˚ poskytnout lepší výsledky než postup pˇredchozí.
5.2.1 Procedurální textura Procedurální textura je program, který vrací hodnotu textury v požadovaném bodˇe. Pˇrípadnˇe (jako v pˇrípadˇe modulu Vincent) je to program (funkce), který pˇri zadání rozlišení obrazu generuje celou texturu. Základními výhodami procedurálních textur oproti texturám ve formˇe bitmap je nezávislost na rozlišení a malá pamˇet’ová nároˇcnost. Pro generování textury plátna je možné použít šumové funkce (napˇríklad Perlinovu šumovou funkci) viz [16]. V modulu pro NPR není pro výpoˇcet procedurální textury použita klasická šumová funkce, ale postup syntézy textury z malého výchozího vzorku (128 x 128 hodnot), který odpovídá konkrétnímu výstupu šumové funkce. Pˇri syntéze textury je vzorek procházen (podle nastavení vstupních parametru) ˚ a jako výstupní hodnota je použita pˇrímo hodnota ze vzorku. Tento postup je výpoˇcetnˇe velmi rychlý a pˇritom splnuje ˇ všechny požadované vlastnosti: statistická invariance vzhledem k posunutí (vlastnost duležitá ˚ pˇredevším pro animaci plátna) a opakovatelnost (pro stejné vstupní hodnoty se generuje vždy stejná výstupní hodnota). Ukázka vygenerovaného plátna je na obrázku 5.1. Pˇri implementaci tohoto postupu jsem vyšel z dokumentace programu GIMP:
. 24
5.2. EFEKT PLÁTNA
Obrázek 5.1: Ukázka procedurálního plátna. Vzorek obsahuje 128 x 128 hodnot. Ukázka obsahuje 1000 x 220 hodnot. 5.2.2 Textura naˇctená ze souboru Vedle procedurálních textur, které se vˇetšinou používají pro své výhodné vlastnosti, je možné k imitaci plátna použít i "klasickou" texturu definovanou pevnou tabulkou hodnot (obrázek bmp, jpg, . . . ). To je výhodné zejména tehdy, jestliže chceme imitovat speciální druh média (pomaˇckaný, zrnitý papír; textil, sklo) a tento druh nejsme schopni imitovat procedurální texturou, nebo procedurální textura nedosahuje požadované kvality. Modul Vincent tuto možnost také umožnuje. ˇ Jako texturu plátna je možné použít libovolný obrázek ve všech základních grafických formátech (jpg, tiff, bmp, . . . ), které podporuje program Cinema4D. Rozlišení. Je možné použít obrázek o libovolném rozlišení. Pˇred výpoˇctem efektu plátna (již za bˇehu NPR modulu) je rozlišení textury porovnáno s rozlišením aktuálnˇe vykreslovaného obrazu. Je-li textura vˇetší, použije se jen levá horní cˇ ást textury. Je-li textura menší, použije se cˇ ást, pˇrípadnˇe celá textura vícekrát. Toto opakování se však ve výsledku muže ˚ negativnˇe projevit jako viditelná hrana na plátnˇe. Proto je vhodné používat jen textury s dostaˇceným rozlišením nebo použít takzvané bezešvé textury (levý a pravý okraj na sebe plynule navazují a stejnˇe tak horní a dolní okraj). Barevnost, barevná hloubka. Jako texturu plátna lze použít jak barevný, tak šedotónní obrázek. Barevná informace obrázku však není nijak využita a proto je barevný obraz pˇred výpoˇctem pˇreveden na šedotónní. Barevná hloubka textury je poté pˇrepoˇctena na rozsah 0 až 255. Nˇekolik ukázkových souboru˚ (obrázky ve formátu jpg) vhodných pro efekt plátna je dostupných na pˇriloženém CD. Autorem fotografií je Pavel Danˇek, použito se svolením. 5.2.3 Aplikace textury Po pˇrípravˇe textury – at’ už procedurálním vygenerováním, nebo naˇctením ze souboru (a úpravˇe velikosti a barevnosti) je pˇripravená textura kombinována s aktuálním výsledkem vykreslení podle následující rovnice: out = in + (scale ∗ (canvas − 127)) Rovnice 5.2.1: Aplikace textury. 25
5.2. EFEKT PLÁTNA kde out je výsledná intenzita (výpoˇcet probíhá po pixelech a po jednotlivých barevných složkách), in je vstupní intenzita vykresleného obrazu, canvas je intenzita plátna a scale je uživatelem zvolený parametr urˇcující intenzitu efektu. Na obrázku 5.2 je ukázka vykreslené scény bez a s použitím efektu plátna.
(a)
(b)
Obrázek 5.2: Efekt plátna. (a) Bez použití . (b) S použitím efektu plátna.
5.2.4 Animace V NPR modulu je implementována jednoduchá možnost animace plátna pomocí posunu textury. Animaci se podrobnˇeji vˇenuje následující kapitola.
26
Kapitola 6
Animace "Jen velmi málo kreslených filmu˚ je vysíláno živˇe – je to neskuteˇcná námaha pro zápˇestí autora." Simpsonovi. S oblastí ruˇcnˇe kresleného, cˇ i pomocí poˇcítaˇce animovaného filmu se setkáváme již desítky let. V posledních letech vznikají animované filmy usilující o fotorealismus (napˇríklad „Final Fantasy – Esence života“ „Gariho hra“), ty jsou však spíše výjimkou. Vˇetšina kreslených a animovaných filmu˚ patˇrí do oblasti NPR, i když jsou tak málokdy nazývány. Program Cinema4D, stejnˇe jako vˇetšina ostatních programu˚ pro tvorbu 3D modelu, ˚ umožnuje ˇ i vytváˇrení animací. Proto byla tato možnost implementována i v modulu Vincent. Základním pˇredpokladem pro dobrou NPR animaci je vhodnˇe nastavená animace vstupní scény. Není to však podmínka jediná. Vytváˇrení nefotorealistických animací v sobˇe skrývá nˇekolik problému, ˚ které se pˇri vytváˇrení samostatných, statických snímku˚ neobjevují. Proto je potˇreba do programu˚ pro NPR zahrnout speciální funkcionalitu pro podporu animací. Základní dva problémy, které je potˇreba vyˇrešit, jsou problém cˇ asové koherence snímku˚ a problém efektu koupelnových dveˇrí.
6.1
ˇ Casová koherence snímku˚
Aby divák vnímal animaci, cˇ i obecnˇe film, jako plynulý dˇej a ne jako sekvenci jednotlivých obrazu, ˚ je potˇreba zajistit dostateˇcnou návaznost (koherenci) po sobˇe jdoucích snímku. ˚ U realistického vykreslení animace vystaˇcíme s postupným, nezávislým vykreslováním jednotlivých snímku. ˚ Pˇri použití dostateˇcného poˇctu snímku˚ za vteˇrinu (frame-rate) pusobí ˚ animace ve vˇetšinˇe pˇrípadu˚ dostateˇcnˇe plynule. Tuto metodu však vˇetšinou nelze s úspˇechem použít pro NPR. Pˇredevším pˇri použití malíˇrských technik a hledání jednotlivých tahu˚ štˇetcem. I v pˇrípadˇe velmi podobných po sobˇe jdoucích snímku˚ se muže ˚ stát, že na každém z nich bude nalezena jiná sada tahu˚ štˇetcem (výsledné obrazy budou barevnˇe odpovídat vstupním snímkum, ˚ ale tahy „povedou jinudy“). To se ve výsledné animaci projeví jako nepˇríjemný efekt chvˇení cˇ i blikání obrazu (jitter). Existuje nˇekolik zpusob ˚ u˚ jak cˇ asovou koherenci vylepšit: •
Zachování tahu. ˚ Nejjednodušším rˇ ešení, jak zabránit zmˇenám v rozložení tahu˚ v obraze je úplné zachování tahu. ˚ Po výpoˇctu prvního snímku jsou všechny tahy (jejich 27
ˇ ˚ 6.1. CASOVÁ KOHERENCE SNÍMK U matematická reprezentace) uloženy do pamˇeti. Pˇri výpoˇctech dalších snímku˚ se tato data znovu využívají - tahy zustávají ˚ stejné a je mˇenˇena jen jejich barva. Pˇri této metodˇe sice je zachována cˇ asová koherence, ale vzniká jiný, vizuálnˇe nepˇríjemný problém – efekt koupelnových dveˇrí (shower door effect). Pˇri sledování takovéto animace mu˚ žeme mít obdobný pocit, jako když pozorujeme pohyb osob ve druhé místnosti pˇres prosklené dveˇre s cˇ ásteˇcnˇe pruhledným ˚ (napˇr. mléˇcným cˇ i hrbolatým) sklem. •
Pˇrekreslování. V této metodˇe se pro vylepšení cˇ asové koherence využívá dˇríve vykresleného snímku (snímku). ˚ První (každý klíˇcový) snímek animace je spoˇcten bˇežným zpusobem. ˚ Pˇrí výpoˇctu dalších snímku˚ je však jako souˇcást vstupu použit výsledek pˇredchozího výpoˇctu a pˇrípadné nové tahy jsou kresleny pˇres starší snímek. Nové tahy vznikají jen v tˇech oblastech obrazu, kde došlo k výrazné zmˇenˇe. Tak je zlepšena cˇ asová koherence animace a zárovenˇ se urychlí její výpoˇcet. Pro další zlepšení je možné použít techniku kumulativního rozdílového maskování (cumulative difference masking), viz napˇríklad [8], nebo techniku kumulativního chybového zásobníku, která je popsána v cˇ ásti 6.2.2. Tyto postupy ovlivnují ˇ rozhodování, ve kterých cˇ ástech obrazu budou vykresleny nové tahy.
•
Mapování tahu˚ - Optický tok. Jedním ze zpusob ˚ u, ˚ jak vylepšit cˇ asovou koherenci snímku˚ je „nalepit“ tahy štˇetcem na jednotlivé objekty scény. Abychom se však vyhnuli efektu koupelnových dveˇrí je nutné s jednotlivými tahy štˇetce v prubˇ ˚ ehu animace pohybovat tak, aby sledovaly pohyb pˇríslušných objektu. ˚ Jestliže pracujeme ve 2D nebo 2.5D a nemáme k dispozici pˇrímou informaci o pohybech tˇechto objektu, ˚ mu˚ žeme jejich pohyb odhadovat na základˇe výpoˇctu optického toku. (Optický tok udává právˇe rychlost a smˇer, jakým se pohybují jednotlivé objekty vuˇ ˚ ci kameˇre. Vˇetšinou je definován jako pole vektoru.) ˚ Cílem této metody je minimalizovat pˇrekreslování tahu˚ - jestliže se objekt ve scénˇe nehýbe, jsou beze zmˇeny použity tahy z pˇredchozího snímku. Naopak, jestliže se objekt bˇehem animace pohybuje, pohybují se zárovenˇ s ním všechny tahy, které jej znázornují, ˇ cˇ ímž se eliminuje efekt koupelnových dveˇrí. Nevýhodou této metody je velká cˇ asová nároˇcnost výpoˇctu optického toku. Navíc, pro jeho pˇresný výpoˇcet je nutné jako vstup použít nˇekolik pˇredcházejících, pˇrípadnˇe i nˇekolik následujících snímku˚ animace. Dalším problémem, který je spoleˇcný pro všechny metody mapování tahu, ˚ je hustota tahu˚ v jednotlivých cˇ ástech obrazu. Bˇehem animace se muže ˚ stát, že v nˇekterém místˇe se nahromadí více objektu˚ (a jim pˇríslušných tahu), ˚ zatímco v jiné cˇ ásti obrazu bude tahu˚ nedostatek. V tom pˇrípadˇe je potˇreba pˇrípadné pˇrebyteˇcné tahy zahodit a vygenerovat na potˇrebných místech nové.
•
Mapování tahu˚ - cˇ ásticové systémy. Ve 3D NPR technikách jsou k dispozici pˇresné údaje o pohybu jednotlivých objektu˚ a proto není nutné zabývat se výpoˇctem optického toku. „Nalepení“ tahu˚ na objekty je rˇ ešeno pomocí systému cˇ ástic, kdy každému tahu ve 2D obraze odpovídá jedna cˇ ástice (pˇrípadnˇe skupina cˇ ástic) ve 3D scénˇe (na povrchu pˇríslušného objektu). Pˇri výpoˇctu prvního snímku animace je vytvoˇreno toto 28
6.2. IMPLEMENTACE mapování mezi tahy a cˇ ásticemi. V dalších snímcích animace jsou tahy štˇetcem poˇcítány na základˇe pohybu cˇ ástic, pˇriˇcemž tyto mohou ovlivnit nejen novou pozici tahu, ale napˇríklad i tloušt’ku štˇetce bˇehem jednoho tahu, barvu apod. I pˇri této metodˇe mapování tahu˚ je potˇreba kontrolovat hustotu tahu˚ (ˇcástic) v jednotlivých oblastech 2D obrazu (3D scény). Tato metoda je podrobnˇeji popsána napˇríklad v [12]. •
Poˇcet snímku˚ za sekundu. Pˇresto, že frekvence snímku˚ za sekundu je zásadním faktorem pˇri vytváˇrení animací, v NPR, konkrétnˇe v malíˇrských technikách nemusí platit pˇrímá úmˇera mezi frekvencí a kvalitou výsledné animace. Jedním z duvod ˚ u˚ je výraznost šumu (chvˇení, blikání obrazu zpusobené ˚ pˇrekreslováním tahu˚ štˇetce). Ten je mnohem výraznˇejší pˇri vyšších frekvencích. Druhým duvodem ˚ muže ˚ být až pˇrílišná reálnost vykreslené animace. Pˇri vysoké frekvenci (30 snímku˚ za sekundu) muže ˚ být pohyb objektu˚ natolik plynulý, že animace bude na diváka pusobit ˚ spíše jako bˇežná animace s nechtˇenými vizuálními artefakty, než jako pohyblivý (nefotorealistický) obraz. Proto je nˇekdy vhodné u nefotorealistikých animací snížit poˇcet snímku˚ za sekundu. Pˇrestože klesne plynulost, muže ˚ být výsledná animace pusobit ˚ lepším dojmem.
poznámka: Vˇetšinou se používá pojem doˇcasná cˇ asová koherence (temporal time coherece). Po urˇcitém cˇ ase animace je vždy vygenerován nový referenˇcní snímek, od kterého je pak odvozována koherence dalších snímku. ˚ Generování referenˇcních snímku˚ muže ˚ probíhat v pravidelných intervalech (vždy po x snímcích), nebo dle potˇreby - napˇr. když se vstupní scéna prudce zmˇení. Duvodem ˚ tohoto zámˇerného narušení cˇ asové koherence je udržení podobnosti vstupu a výstupu. Pˇri pˇrílišném lpˇení na návaznosti jednotlivých snímku˚ se muže ˚ stát, že výsledná nefotorealistická animace se bude znaˇcnˇe lišit od puvodní, ˚ fotorealistické.
6.2
Implementace
6.2.1 Grafické techniky I v grafických technikách mohou nastat problémy s cˇ asovou koherencí snímku. ˚ Zejména pˇri použití stylizovaných siluet (viz napˇríklad [10]) a pˇri šrafování cˇ i polotónování obrazu. V modulu Vincent se však v grafických technikách používá jen metoda konvoluce obrazu (pˇrípadnˇe efekt nepravých barev), která koherenci snímku˚ nenarušuje. Animace lze díky tomu vytváˇret jednoduchým spojením nezávisle spoˇctených snímku. ˚ 6.2.2 Malíˇrské techniky V Modulu Vincent je možné pro animování malíˇrských technik použít kromˇe prostého spojování nezávisle spoˇctených snímku˚ také metodu pˇrekreslování (paint-over) s volitelnou frekvencí klíˇcových snímku. ˚ Pˇri výpoˇctu se vychází ze stejného algoritmu pro rozhodování, kde vzniknou nové tahy štˇetcem (viz cˇ ást 4.2). V pˇrípadˇe výpoˇctu klíˇcového snímku je vstupem bílé plátno, v pˇrípadˇe neklíˇcového snímku je vstupem nefotorealistické vykreslení 29
6.2. IMPLEMENTACE pˇredchozího snímku. Poˇcet tahu˚ vykreslených v neklíˇcových snímcích je závislý pˇredevším na hodnotˇe parametru „Rozdíl barev“. Pˇri malých hodnotách je generováno vˇetší množství tahu, ˚ ve snaze pˇriblížit nefotorealistické vykreslení co nejvíce puvodnímu ˚ obrazu. Animace tak více odpovídá vstupu, protože je však v každém snímku vykresleno více tahu, ˚ je více viditelné nepˇríjemné blikání, chvˇení animace. Pˇri velkých hodnotách rozdílu barev je situace opaˇcná – vzniká jen málo nových tahu, ˚ cˇ ímž se minimalizuje nepˇríjemné blikání, avšak výsledná animace se muže ˚ o to více lišit od puvodního ˚ vykreslení. Nepˇríjemný je pˇredevším jev, kdy na obraze zustane ˚ „stopa“ po pohybujícím se objektu. Pˇri pohybu objektu je potˇreba starou pozici objektu pˇrekrýt novými tahy v barvˇe scény za objektem. Díky vyšší toleranci rozdílu barev se však muže ˚ stát, že objekt není zcela pˇrekreslen a na obraze zustane ˚ jedna cˇ i nˇekolik malých oblastí s barvou objektu. Kvuli ˚ pˇríliš malé velikosti a barevné odlišnosti nejsou tyto oblasti pˇrekresleny ani na dalších snímcích (dokud se výraznˇe nezmˇení barva scény v dané oblasti) a ve výsledné animaci jsou viditelné jako stopa po objektu (viz obrázek 6.1, vlevo). Aby bylo možné použít dostateˇcnˇe velký rozdíl barev (a snížit tak množství nových tahu˚ a tím i chvˇení obrazu) a pˇritom zachovat vzhled vykreslené animace, implementoval jsem techniku akumulaˇcního chybového zásobníku. Akumulaˇcní chybový zásobník. Jde o pole hodnot, ve kterém se pro každý pixel obrazu uchovává hodnota chyby, která se nakumulovala z pˇredchozích snímku˚ animace. Tyto hodnoty jsou použity pˇri testování, zda bude v oblasti tah vykreslen. Hodnota aktuálnˇe spoˇcteného rozdílu barev je zvˇetšena o hodnotu chybového zásobníku. V pˇrípadˇe, že je v oblasti tah vykreslen, jsou hodnoty chybového zásobníku ve všech pixelech tohoto tahu vynulovány. Po vykreslení všech tahu˚ je znovu spoˇcten rozdíl barev mezi puvodním ˚ obrazem a nefotorealistickým vykreslením ve všech pixelech obrazu. Tyto hodnoty jsou pˇridány k aktuálním hodnotám v akumulaˇcním chybovém zásobníku. Takto je zajištˇeno, i pˇri použití vyšších hodnot rozdílu barev, že bˇehem nˇekolika snímku˚ jsou pˇrekresleny i oblasti, kde by jinak zustávala ˚ malá chyba. Na obrázku 6.1 jsou snímky z animace vykreslené bez použití a s použitím akumulaˇcního chybového zásobníku. Pˇríslušné animace jsou dostupné na pˇriloženém CD. 6.2.3 Animace plátna Naivním rˇ ešením je animovat pouze výtvarnou techniku a plátno ponechat statické. V tom pˇrípadˇe však vzniká velmi nepˇríjemný efekt koupelnových dveˇrí. Naopak komplexním rˇ ešením muže ˚ být systém dynamického plátna, viz [3]. Tento systém generuje pro každý snímek nové procedurální plátno na základˇe informací o 3D scénˇe (pˇredevším pohybu kamery). Ve výsledné animaci se pak plátno mˇení spoleˇcnˇe se scénou - posunuje se, rotuje, pˇribližuje cˇ i oddaluje. V implementovaném modulu je možnost ponechat plátno statické, nebo jej animovat jednoduchým vodorovným posunem - nezávisle na pohybu objektu˚ ve scénˇe. Tato metoda, pˇres svou jednoduchost, eliminuje efekt koupelnových dveˇrí a výraznˇe tak zlepšuje celkový dojem z výsledné animace. Uživatel má možnost nastavit rychlost pohybu plátna, cˇ ímž lze 30
6.2. IMPLEMENTACE
(a)
(b)
Obrázek 6.1: Snímky z animací pohybujícího se objektu. (a) Bez použití, (b) s použitím akumulaˇcního chybového zásobníku. cˇ ásteˇcnˇe sjednotit pohyb scény a pohyb plátna. Vzhledem k posunum ˚ textury bˇehem animace je vhodné používat procedurální texturu nebo bezešvou texturu naˇctenou ze souboru. V pˇrípadˇe nenavazující textury vznikají pˇri animaci nepˇríjemné, viditelné hrany.
31
Kapitola 7
Použité technologie 7.1
Vývojové prostˇredí
Zásuvný modul je naprogramován v jazyce C++ s použitím knihoven programu Cinema4D (verze 8.5) ve vývojovém prostˇredí Microsoft Visual Studio (verze 2005). Výsledkem pˇrekladu tˇechto zdrojových kódu˚ je dynamická knihovna (soubor s pˇríponou .cdl). Tento text byl napsán ve znaˇckování XML, s použitím editoru XMLmind XML Edior. Pro pˇrevod do dalších formátu˚ (pdf, html, rtf) byl použit modul xslt2 dostupný na FI MU.
7.2
Instalace modulu
Pro správné fungování modulu staˇcí pouze zkopírovat adresáˇr NPR (obsahuje dynamickou knihovnu a soubory zdroju˚ (resourses)) z pˇriloženého CD do pˇríslušného adresáˇre programu Cinema4D (obvykle Program files\MAXON\Cinema4D_R85\Plugins) - program Cinema4D automaticky kontroluje dostupné zásuvné moduly pˇri každém spuštˇení. Je-li modul nalezen, je naˇcten do pamˇeti a pˇripraven k použití. Modul byl testován v programu Cinema4D verze 8.5 a v demoverzích tohoto programu ve verzích 9.0, 9.6 a 10.0.
7.3
Nároˇcnost výpoˇctu˚
Všechny výpoˇcty modulu jsou založeny na pixelovˇe orientovaných transformacích obrazu. Z toho plyne, že nejduležitˇ ˚ ejším faktorem urˇcujícím nároˇcnost výpoˇctu je požadované rozlišení výstupního obrazu. Doba výpoˇctu modulu je také znaˇcnˇe závislá na nastaveném stylu vykreslení (poˇcet a velikosti použitých štˇetcu˚ cˇ i konvoluˇcních jader). Obecnˇe však lze rˇ íci, že pro netriviální scény je doba výpoˇctu modulu rˇ ádovˇe menší než doba výpoˇctu puvodního ˚ fotorealistického vykreslení. Pamˇet’ová nároˇcnost je opˇet závislá pˇredevším na zvoleném rozlišení a stylu vykreslení. Zde kromˇe poˇctu malíˇrských vrstev cˇ i poˇctu konvolucí hraje duležitou ˚ roli využití zásobníku˚ objektu. ˚ Celkovˇe jsou však pamˇet’ové nároky modulu opˇet rˇ ádovˇe menší než nároky celého programu. 32
7.4. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ
7.4
Grafické uživatelské rozhraní
Tvorba uživatelského rozhraní zásuvného modulu je omezena možnostmi, které program Cinema4D poskytuje. Nevýhodou tohoto pˇrístupu je nemožnost pˇresné specifikace pozice, velikosti cˇ i barev jednotlivých prvku˚ rozhraní. Naopak výhodou je jednotný vzhled programu a všech jeho modulu˚ (s možností volby vizuálního schématu). Lokalizace. Modul je navržen tak, aby veškeré prvky grafického rozhraní bylo možno lokalizovat. Nyní obsahuje dvˇe jazykové verze - cˇ eskou a anglickou. Pˇri každém spuštˇení programu je lokalizace modulu nastavena shodnˇe s lokalizací celého programu (pokud je požadovaná lokalizace dostupná). Textové rˇ etˇezce v jednotlivých jazycích jsou uloženy v bˇežných textových souborech. Proto je možné v pˇrípadˇe potˇreby snadno vytvoˇrit novou lokalizaci bez nutnosti zásahu do zdrojového kódu modulu. Možnosti zmˇeny parametru. ˚ Pro zjednodušení ovládání je uživateli nabídnuta k editaci vždy jen urˇcitá skupina parametru˚ podle zvoleného stylu vykreslení - ostatní parametry editovat nelze. U parametru˚ s cˇ íselnou hodnotou je tato hodnota ihned po zadání kontrolována a pˇrípadnˇe opravena. Nelze tedy zadat ne-ˇcíselnou hodnotu ani cˇ íslo mimo povolený interval hodnot. Vˇetšina parametru, ˚ kde není vyžadována cˇ íselná hodnota, je rˇ ešena formou rozbalovacích roletek, kde uživatel vybírá jednu z nˇekolika nabízených možností. Podrobným popisem jednotlivých prvku˚ rozhraní se zabývá pˇríloha B.
7.5
Licence
Modul pro NPR Vincent je šíˇren pod GPL v2 (GNU GENERAL PUBLIC LICENSE Verˇ sion 2), viz
. Ceské znˇení této licence je možné nalézt na pˇriloženém CD, pˇrípadnˇe na adrese .
33
Kapitola 8
Závˇer Cílem mé práce bylo vytvoˇrit zásuvný modul k programu Cinema4D pro nefotorealistické zobrazování prostorových scén. V textu práce popisuji oblast nefotorealistického vykreslování, se zamˇerˇ ením na implementované grafické a malíˇrské techniky a využití dodateˇcných informací o scénˇe v podobˇe zásobníku hloubky a zásobníku˚ objektu. ˚ Vˇenuji se také možnostem nefotorealistické animace a imitaci média (plátno, papír). Implementovaný modul pak umožnuje ˇ vykreslení 3D scény pomocí popsaných grafických cˇ i malíˇrských technik. Výpoˇcty jsou založeny na matematické konvoluci, porovnávání barev a využití informací o hloubce scény a umístˇení jednotlivých objektu. ˚ Dalším možným rozšíˇrením modulu by bylo napˇríklad pˇrímé využití 3D dat scény. S jejich využitím by bylo možné v oblasti grafických technik vytváˇret napˇríklad stylizované siluety, cˇ i šrafování ploch založené na normálách plošek 3D scény. V malíˇrských technikách by pak bylo možné použít techniku mapování tahu˚ na objekty a vylepšit tak možnosti animací. Jiným rozšíˇrením muže ˚ být oblast simulací fyzikálních vlastností štˇetce a média, pomocí kterých by bylo možné dále zlepšovat estetickou kvalitu výstupních obrazu. ˚ Oblast imitace lidské tvorby pomocí poˇcítaˇce a technik nefotorealistického vykreslování je relativnˇe nová, pˇresto již velmi rozsáhlá, co do poˇctu metod a pˇrístupu. ˚ Zárovenˇ je však atraktivní díky rozmanitosti a kvalitˇe výsledných obrazu. ˚ Modul Vincent ukazuje, že spojením výhod prostorových scén a technik zpracování digitálního obrazu lze vyvinout tvurˇ ˚ cí nástroj, s jehož pomocí jsme schopni vytváˇret zajímavé a kvalitní nefotorealistické obrazy a animace.
34
Pˇríloha A
Obsah CD Souˇcástí této práce je také pˇriložené CD, obsahující: •
zdrojový dokument této práce ve formátu XML (podle DTD DocBook),
•
tuto práci ve formátech PDF, HTML, RTF,
•
zdrojové kódy implementace modulu pro NPR,
•
výsledný pˇreložený modul pro program Cinema4D,
•
licenci, urˇcující možnosti šíˇrení modulu Vincent,
•
soubory s 3D modely pro program Cinema4D, urˇcené pro demonstraci možností NPR modulu,
•
ukázkové nefotorealistické obrazy a animace vytvoˇrené pomocí implementovaného modulu,
•
fotografie papíru a plátna vhodné pro použití v efektu imitace plátna.
35
Pˇríloha B
Popis uživatelského rozhraní Celé uživatelské rozhraní je rozdˇeleno do pˇeti záložek. První záložka (Obecné) umožnuje ˇ nastavit základní volby - výbˇer nˇekterého z pˇrednastavených stylu, ˚ urˇcení rozsahu vykreslení, pˇrípadnˇe zpusobu ˚ animace. Další záložky pak slouží k pˇresné specifikaci jednotlivých parametru˚ pro daný zpusob ˚ vykreslení. Obecné nastavení
Obrázek B.1: Obecné nastavení.
•
Styl vykreslení. Umožnuje ˇ vybrat jeden z pˇrednastavených stylu˚ vykreslení. Uživatel má na výbˇer nˇekolik malíˇrských stylu, ˚ nˇekolik ruzných ˚ grafických technik, volby „jen plátno“, „jen obarvení“ a „volitelný“ styl. Pˇrednastavené styly nejsou pevnˇe dané, slouží spíše jako výchozí šablony pro konkrétní nastavení pro danou scénu - uživatel má možnost jednotlivé parametry vykreslení dále upˇresnit.
•
Ulož, Naˇcti. Tlaˇcítka slouží k uložení (naˇctení) aktuálnˇe nastaveného stylu do (z) souboru. Po stisku tlaˇcítka je vyvoláno dialogové okno pro výbˇer souboru z adresáˇrové struktury. 36
B. P OPIS
UŽIVATELSKÉHO ROZHRANÍ
•
Metoda. Volba použité metody zpracování. Na výbˇer je „Malíˇrská“, „Grafická“ a „Žádná“ technika. Poslední volba je urˇcena pro pˇrípady, kdy uživatel chce využít jen efekt nepravých barev cˇ i efekt plátna.
•
Zpusob ˚ animace. Urˇcuje, jakým zpusobem ˚ bude rˇ ešena cˇ asová koherence snímku˚ (viz 6.1). Volba je aktivní pouze pro malíˇrské techniky.
•
Rozsah. Umožnuje ˇ volbu, zda bude vybraná metoda vykreslení použita pro celý obraz nebo jen pro urˇcený zásobník objektu. ˚ Omezení rozsahu lze využít pˇredevším v malíˇrských technikách. Pˇri první aplikaci efektu je vykreslen celý obraz, pˇri další aplikaci je pak pˇrekreslen jen zvolený objekt (napˇríklad menším štˇetcem nebo sytˇejšími barvami). Takto lze ovlivnit „kompozici“ výsledného obrazu.
•
ˇ Císlo zásobníku objektu. ˚ Specifikuje cˇ íslo použitého zásobníku objektu. ˚ Volba je aktivní pouze pokud je jako „Rozsah“ zvolena hodnota „zásobník objektu“. ˚
•
Šedotónní výstup. Jestliže je zvolena tato možnost, obraz je po provedení malíˇrské cˇ i grafické techniky pˇreveden na šedotónní. Pˇrípadné další efekty - Nepravé barvy anebo plátno jsou aplikovány již na šedotónní obraz.
•
Inverze barev. Obdobné jako pˇredchozí volba - po spoˇctení zvolené techniky je provedena inverze barev v obraze. Tato možnost, spoleˇcnˇe s šedotónním výstupem, je využívána pˇredevším pˇri detekci hran.
•
Inverze hloubky. Umožnuje ˇ inverzi hodnot zásobníku hloubky. Všechny výpoˇcty modulu Vincent pˇredpokládají zásobník hloubky ve stejném režimu, jaký standardnˇe generuje program Cinema4D - nejvzdálenˇejší objekty mají nulovou intenzitu, nejbližší objekty mají intenzitu maximální (viz cˇ ást 3.3). V nˇekterých situacích je však výhodné význam hodnot zásobníku otoˇcit.
•
Nepravé barvy. Zapíná a vypíná efekt nepravých barev.
•
Plátno. Zapíná a vypíná imitaci plátna. Ta je provádˇena jako poslední v poˇradí - po spoˇctení pˇríslušné metody a pˇrípadném obarvení pomocí nepravých barev.
Grafické techniky Uživatel má možnost použít až pˇet konvolucí. Všechny mají shodné možnosti nastavení: •
Jádro. Urˇcuje jaké konvoluˇcní jádro bude pro tuto konvoluci použito. Pˇri volbˇe „Žádné“ nebude tato konvoluce vubec ˚ použita.
•
Upravit. Tlaˇcítko slouží pro ruˇcní nastavení konvoluˇcního jádra. Lze zadat 7x7 celoˇcíselných hodnot konvoluˇcního jádra a parametr „Násobiˇc“. Touto hodnotou jsou pˇred výpoˇctem konvoluce vynásobeny všechny prvky konvoluˇcního jádra. Násobiˇc je 37
B. P OPIS
UŽIVATELSKÉHO ROZHRANÍ
Obrázek B.2: Záložka nastavení grafických technik. možné zadat ruˇcnˇe, nebo použít tlaˇcítko „spoˇcti“, které urˇcí hodnotu násobiˇce podle vztahu nasobic = 1/
7 P 7 P
hi,j (v pˇrípadˇe nulového souˇctu je použita hodnota 1).
i=1 j=1
•
Zdroj. Urˇcuje, který obraz bude použit jako vstup pro konvoluci. Jako zdroj je možné použít „Puvodní ˚ obraz“ což je puvodní ˚ fotorealistické vykreslení, pˇrípadnˇe výsledek dˇríve aplikovaných modulu. ˚ Dále muže ˚ být zdrojem výsledek pˇredchozích konvolucí, zásobník hloubky, nebo zásobník objektu. ˚
•
ˇ Císlo zásobníku objektu. ˚ Specifikuje cˇ íslo použitého zásobníku objektu. ˚ Volba je aktivní pouze pokud je parametr „Zdroj“ nastaven na hodnotu „Zásobník objektu“. ˚
•
Seˇctení. Slouží k volbˇe, zda bude výsledek konvoluce ponechán „tak, jak je“, nebo zda bude seˇcten s jiným obrazem. Je možné sˇcítat s puvodním ˚ obrazem, nebo s nˇekterých z výsledku˚ pˇredchozích konvolucí. Sˇcítání je realizováno po jednotlivých barevných složkách prostým sˇcítáním hodnot jednotlivých bodu˚ obrazu. Pomocí seˇctení lze napˇríklad kombinovat ruzné ˚ hranové detektory cˇ i seˇcíst nalezené hrany s puvodním ˚ obrazem a tak v nˇem tyto hrany zvýraznit.
•
Korekce. Urˇcuje zpusob ˚ korekce barevného rozsahu - viz cˇ ást 3.1.4.
•
Vliv hloubky. Urˇcuje zpusob ˚ použití efektu Vliv hloubky (viz cˇ ást 3.3). Tento efekt umožnuje ˇ mˇenit uplatnˇení konvoluce v závislosti na hloubce scény. V místech, kde je 38
B. P OPIS
UŽIVATELSKÉHO ROZHRANÍ
malá hloubka (objekty jsou blízko kamery) se konvoluce plnˇe projeví. Naopak v místech, kde je hloubka scény velká, není konvoluce použita a výsledné barvy pixelu˚ jsou ˇ urˇceny na základˇe zvoleného režimu tohoto efektu. V pˇrípadˇe volby „Cerné pozadí“ je použita cˇ erná barva. To je vhodné napˇríklad pro detekce hran - s pˇribývající hloubkou hrany ztrácí na intenzitˇe. Pˇri volbˇe „Barevné pozadí“ je v pixelech, kde se nepoužije konvoluce ponechána puvodní ˚ vstupní barva. Toho lze využít napˇriklad pˇri použití ˇ s Gaussovým filtrem. Další dva režimy - „Cerné pozadí - inverzní“ a „Barevné pozadí - inverzní“, pracují na stejném principu. Pˇred výpoˇctem je však otoˇcen význam hodnot zásobníku hloubky a konvoluce je tedy použita jen na pixely s vˇetší hloubkou. Jestliže tuto možnost použijeme napˇríklad pˇri rozostˇrení scény, pak výsledný obraz bude více rozostˇren v místech s vˇetší hloubkou. •
ˇ Intenzita. Specifikuje intenzitu efektu Vliv hloubky. Cím vˇetší intenzita, tím vˇetší vliv má hloubka scény na použití konvoluce. Pˇri malé intenzitˇe je výsledek konvoluce použit i v místech s vˇetší hloubkou scény.
Malíˇrské techniky.
Obrázek B.3: Záložka nastavení malíˇrských technik.
•
Poˇcet. Urˇcuje poˇcet štˇetcu˚ (vrstev), které budou pro vykreslení použity.
•
Št’etec 1 až 5. Základní parametry vykreslení. Tyto volby urˇcují velikosti štˇetcu, ˚ které se použijí pro vykreslení. Pˇri malých velikostech štˇetcu, ˚ bude obraz vykreslen velkým 39
B. P OPIS
UŽIVATELSKÉHO ROZHRANÍ
poˇctem menších tahu˚ a bude více odpovídat puvodnímu ˚ fotorealistickému vykreslení. Naopak pˇri použití velkých štˇetcu˚ bude obraz složen z menšího poˇctu tahu˚ a bude ménˇe vˇernou kopií vstupní scény. •
ˇ Krytí. Urˇcuje intenzitu krytí jednotlivých štˇetcu. ˚ Cím vˇetší je nastavená hodnota, tím vˇetší má štˇetec schopnost pˇrekrýt dˇríve nakreslené tahy.
•
Relativní velikosti štˇetcu. ˚ Jestliže je tato možnost zapnuta, jsou velikosti štˇetcu˚ ve všech vrstvách upraveny podle aktuálnˇe zvoleného rozlišení vykreslení. Tak je možné zachovat pˇribližnˇe stejný poˇcet tahu˚ štˇetcem a obdobný obrazu pˇri použití ruzných ˚ rozlišení. Jestliže je možnost vypnuta, nejsou velikosti štˇetcu˚ nijak upravovány.
•
Bílé plátno. Je-li možnost zapnuta, je na zaˇcátku vykreslení jako papír (plátno), na které jsou nanášeny tahy štˇetcem použita bílá plocha. Je-li možnost vypnuta, je použita cˇ erná plocha. Standardnˇe je použito bílé plátno, což odpovídá tomu, že i pˇri ruˇcní tvorbˇe se používá nejˇcastˇeji bílý papír. Avšak v nˇekterých pˇrípadech muže ˚ vhodné i plátno cˇ erné - napˇríklad pro imitaci kresby pastely na cˇ erný papír.
•
Min. délka tahu. Urˇcuje minimální délku tahu - poˇcet rˇ ídících bodu. ˚
•
Maximální délka. Urˇcuje maximální délku tahu - poˇcet rˇ ídících bodu. ˚ Minimální a maximální délka tahu znaˇcnˇe ovlivnují ˇ styl vykreslení. Pomocí velmi malých hodnot lze imitovat napˇríklad pointilismus. Pˇri použití vˇetších hodnot vznikají dlouhé tahy štˇetcem pˇripomínající napˇríklad expresionismus.
•
Rozdíl barev. Definuje jak velký barevný rozdíl jsme ochotni tolerovat mezi puvod˚ ním a nefotorealisticky vykresleným obrazem. Pˇri malé hodnotˇe parametru je snaha co nejvíce se pˇriblížit puvodnímu ˚ obrazu a proto vzniká vˇetší množství kratších tahu. ˚ Výsledný obraz tak barevnˇe více odpovídá puvodnímu, ˚ avšak muže ˚ pusobit ˚ více mechanicky. Pˇri vˇetší hodnotˇe rozdílu barev naopak vznikne menší množství delších tahu˚ - výsledek tak muže ˚ pusobit ˚ lepším dojmem, avšak barevnˇe se více liší od puvodního ˚ vykreslení.
•
Rozostˇrení. Urˇcuje intenzitu rozostˇrení obrazu pˇred hledáním jednotlivých tahu˚ - viz cˇ ást 4.1.2. Rozostˇrením jsou z obrazu odstranˇeny malé detaily a je tak usnadnˇeno hleˇ dání tahu˚ štˇetcem. Cím vˇetší je použito rozostˇrení, tím více detailu˚ je z obrazu odstranˇeno a tím snazší je nalézt tahy štˇetcem. Výsledný obraz se však tím více odchyluje od puvodního. ˚ Intenzita rozostˇrení (velikost konvoluˇcního jádra) je také pˇrímo úmˇerná délce výpoˇctu.
•
Zakˇrivení. Urˇcuje maximální zakˇrivení tahu (viz cˇ ást 4.2.1). Pˇri nulové hodnotˇe je nalezen jen poˇcáteˇcní smˇer tahu a všechny rˇ ídící body tahu leží na pˇrímce urˇcené tímto smˇerem - tah je tedy zcela rovný. Pˇri použití maximální hodnoty muže ˚ být úhel mezi dvˇema následujícími rˇ ídícími body až 90 stupnˇ u˚ a tah tak muže ˚ být velmi zakˇrivený. 40
B. P OPIS
UŽIVATELSKÉHO ROZHRANÍ
Opˇet záleží na imitovaném stylu - pˇri expresionismu mužeme ˚ povolit vˇetší hodnoty, pˇri impresionismu budeme naopak chtít tahy spíše rovnˇejší. •
Hloubka. Ovlivnuje ˇ omezení vzniku nových tahu˚ v závislosti na hloubce scény (viz cˇ ást 4.1.2). V první vrstvˇe jsou tahy vykreslovány bez ohledu na hloubku objektu˚ ve scénˇe. V dalších vrstvách jsou vykresleny jen ty tahy, které leží v oblastech s dostateˇcnˇe malou hloubkou (pˇríslušné objekty leží dostateˇcnˇe blízko kamery). Parametr hloubka urˇcuje právˇe maximální hloubku pro jednotlivé vrstvy. Pˇri nulové hodnotˇe parametru je povolena nulová hloubka ve všech vrstvách - jsou tedy vykresleny všechny tahy. Pˇri maximální hodnotˇe je hloubka scény rovnomˇernˇe rozdˇelena na tolik oblastí, kolik je použito štˇetcu. ˚ V pˇrípadˇe použití tˇrí vrstev jsou ve druhé vrstvˇe vykresleny jen tahy zaˇcínající v oblastech s hloubkou menší než dvˇe tˇretiny maxima a ve tˇretí vrstvˇe jen tahy zaˇcínající v první tˇretinˇe hloubky.
Nepravé barvy.
Obrázek B.4: Záložka nastavení nepravých barev.
•
Režim barev. Urˇcuje zpusob ˚ práce s barevnou informací pˇri výpoˇctu nepravých barev (algoritmus je uveden v cˇ ásti 5.1.3). Pˇri hodnotˇe „Podle intenzity“ je spoˇctena intenzita daného pixelu (prumˇ ˚ er jednotlivých barevných složek) a pixel je obarven na základˇe této intenzity. Všechny pixely se stejnou intenzitou tedy budou obarveny stejnˇe, pˇrestože jejich puvodní ˚ barvy se mohou lišit. Pˇri volbˇe „Relativní“ jsou jednotlivé barevné složky poˇcítány samostatnˇe. V režimu „Absolutní“ jsou barvy nastaveny pˇrímo na zvolenou hodnotu.
•
ˇ Cervená, modrá, zelená. Specifikují intenzitu obarvení jednotlivých barevných složek 41
B. P OPIS
UŽIVATELSKÉHO ROZHRANÍ
•
Rozsah. Obdobnˇe jako u obecného nastavení, tato volba urˇcuje zda bude efekt Nepravé barvy použit na celý obraz nebo jen na oblast vymezenou urˇcitým zásobníkem objektu. ˚
•
ˇ Císlo zásobníku objektu. ˚ Specifikuje cˇ íslo použitého zásobníku objektu. ˚ Volba je aktivní pouze pokud je ve volbˇe rozsah zvolena hodnota „Zásobník objektu“. ˚
•
Vliv hloubky. Urˇcuje zpusob ˚ využití zásobníku hloubky pˇri obarvení obrazu. Jednotlivé režimy i algoritmus jsou podobné jako u stejnojmenného parametru v grafických technikách.
•
Intenzita. Stejnˇe jako v grafických technikách, intenzita upravuje míru efektu (v tomto pˇrípadˇe obarvení) v závislosti na hloubce scény.
•
Pˇred výpoˇctem. Zapíná a vypíná obarvení pˇred výpoˇctem (viz cˇ ást 5.1.1).
Imitace Plátna
Obrázek B.5: Záložka nastavení plátna. •
Procedurální. Zapíná a vypíná procedurální plátno (viz cˇ ást 5.2.1).
•
Smˇer. Urˇcuje pozici svˇetla, které osvˇetluje plátno. Vzhledem ke struktuˇre plátna má výsledné vykreslení jen malý vliv. Volba je aktivní pouze pˇri zapnutí procedurální textury.
•
Ze souboru. Zapíná a vypíná plátno naˇctené ze souboru.
•
Výbˇer. Tlaˇcítko vyvolávající dialogové okno pro výbˇer souboru z adresáˇrové struktury.
•
ˇ Intenzita. Urˇcuje intenzitu efektu plátna. Cím vˇetší hodnota je zvolena, tím je plátno na výsledném obrazu výraznˇejší - jednotlivé prohlubnˇe a výstupky jsou více viditelné.
•
Rychlost animace. Urˇcuje zda, pˇrípadnˇe jak rychle, se bude plátno bˇehem animace pohybovat (viz cˇ ást 6.2.3). Pˇri nulové hodnotˇe není plátno animováno. Vyšší hodnoty urˇcují, o kolik bodu˚ se plátno posune mezi jednotlivými snímky.
42
B. P OPIS
UŽIVATELSKÉHO ROZHRANÍ
(a)
(b)
(c)
(d)
Obrázek B.6: Ukázka grafického rozhraní pˇri použití ruzných ˚ vizuálních stylu˚ programu Cinema4D. (a) „Standardní“, (b) „BlueBerry“, (c) „Mac OS 9“, (d) „Maja“. 43
Pˇríloha C
Ukázky
Obrázek C.1: Grafické techniky - kombinace více konvolucí s efekty Nepravé barvy a Vliv hloubky.
44
C. U KÁZKY
Obrázek C.2: Detekce hran pomocí Sobelova filtru. 45
C. U KÁZKY
Obrázek C.3: Využití zásobníku hloubky pro obarvení scény. 46
C. U KÁZKY
Obrázek C.4: Imitace technické ilustrace - detekce hran s efektem Nepravé barvy. 47
C. U KÁZKY
(a)
(b)
(c)
(d)
(e)
(f)
Obrázek C.5: Malíˇrské techniky. Postupné nanášení jednotlivých tahu˚ štˇetcem.
48
C. U KÁZKY
(a)
(b)
(c)
Obrázek C.6: Malíˇrské techniky. Scéna vykreslená pomocí (a) jedné, (b) dvou, (c) tˇrí vrstev. 49
C. U KÁZKY
Obrázek C.7: Imitace akvarelu. Použítí procedurálního plátna. 50
C. U KÁZKY
Obrázek C.8: Imitace expresionismu. Použití zásobníku˚ objektu˚ k rˇ ízení detailu˚ vykreslení. 51
C. U KÁZKY
Obrázek C.9: Nefotorealistické vykreslení fotografie. Je použita jen jedna vrstva vykreslení 52 s malou hodnotou krytí.
C. U KÁZKY
Obrázek C.10: Nefotorealistické vykreslení fotografie, imitace impresionismu. Autorem fo53 tografie je Pavel Danek, ˇ použito se svolením.
Literatura [1] Bousseau, A. a Kaplan, M. a Thollot, J. a Sillion, F.: Interactive watercolor rendering with temporal coherence and abstraction, ACM, 2006, 1-59593-357-3, . 4.2.3, 5.2 [2] Chmelík, J.: Implementace filtru pro nefotorealistické zobrazení 3D scény, FI MU, 2004, . [3] Cunzi, M. a Thollot, J. a Paris, S. a Debunne, G. a Gascuel, J. a Durand, F.: Dynamic Canvas for Non-Photorealistic Walkthroughs, A K Peters, LTD., 2003, . 6.2.3 [4] Curtis, C. a Anderson, S. a Seims, J. a Fleisher, K. a Salesin, D.: ComputerGenerated Watercolor, GRAIL, University of Washington, 1997, . 2.2.2, 5.2 [5] Dostál, F.: Surface Modelling in VR, FI MU, 2006, . 2.1.4, 2.2 [6] Gooch, A. a Gooch, B.: Non-photorealistic rendering, AK Peters, 2001, 1-56881-133-0, . 2 [7] Gooch, B. a Coombe, G. a Shirley, P.: Artistic Vision: Painterly Rendering Using Computer Vision Techniques, ACM, 2002, 1-58113-494-0, . [8] Hertzmann, A.: Algorithms for Rendering in Artistic Styles, Department of Computer Science, New York University, May 2001, . 2.4, 4, 6.1 [9] Hertzman, A.: Fast Paint Texture, ACM, 2002, 1-58113-494-0, . [10] Kalnis, R. a Davidson, P. a Markosian, L. a Finkelstein, A.: Coherent Stylized Silhouettes, ACM, 2003, . 2.3, 6.2.1 [11] Keefe, D. a Feliz, D. a Moscovich, T. a Laidlaw, D. a LaViola, J.: CavePainting: A Fully Immersive 3D Artistic Medium and Interactive Experience, ACM, 2001, 1-58113-292-1, . 2.1.4 [12] Meier, B.: Painterly rendering for animation, ACM, 1996, 0-89791-746-4, . 6.1 [13] Ostromoukhov, V. a Hersch, R.: Artistic screening, ACM, 1995, 0-89791-701-4, . 2.2.1 54
[14] Strothotte, T. a Schlechtweg, S.: Non-Photorealistic Computer Graphics - Modeling, Rendering, and Animation, Morgan Kaufmann, 2002, 1-55860-787-0, . 2 [15] Štábl, D.: Vizualizace algoritmu˚ nefotorealistického zobrazování, FI MU, 2006, . 2 [16] Žára, J. a Beneš, B. a Sochor, J. a Felkl, P.: Moderní poˇcítaˇcová grafika, Computer Press, 2004, 80-251-0454-0, . 3.1.2, 5.2.1
55