Nacházíte se zde: Rhino3D.cz > Články > Zásuvné moduly > Brazil 2.0 pro Rhino - 2. díl: parametry


Brazil 2.0 pro Rhino - 2. díl: parametry

Publikováno: 19.7.2005 | Autor: Jan Slanina | Rubrika: Zásuvné moduly | Komentáře: 3 - Doporučit

Brazil 2. díl - ikonaMinule jsme si v Brazilu pro Rhinoceros vyrenderovali několik jednoduchých obrázků a ukázali jsme si základní postup práce při vytvoření materiálů a nastavení scény pro výpočet. Teď si trochu promrskáme některé parametry v Brazilu – tedy alespoň ty, které už fungují ;-)

Nejprve si příkazem BrazilOptions vyvoláme okno s parametry Brazilu a podíváme se do první záložky.

General > Common parameters

Common parameters

Po kliknutí na Use customs size se odkryjí volby pro nastavení velikosti renderovaného obrázku. Buď můžete do políček Width a Height zadat vlastní rozměr nebo můžete vybrat napravo jednu z přednastavených velikostí. Pokud je zatrženo Use viewport size, bude velikost renderovaného obrázku odpovídat velikosti aktivního renderovaného pohledu Rhina.

Oddíl Lens se týká nastavení čočky objektivu a nabízí ortogonální, perspektivní, sférickou a panoramatickou projekci.

V záložce General Options najdeme zejména parametry pro čtverečky, tzv. buckets, ve kterých se vykresluje renderovaná scéna. V oddílu Bucketing options můžete změnit jejich velikost parametrem Size nebo můžete pomocí volby Order určit způsob jejich vykreslování, podle toho, jestli vás při začátku výpočtu zajímá nejvíce střed obrazovky, okraj obrazovky a podobně.

General options

Záložka Image sampling neboli vzorkování obrazu obsahuje nastavení tzv. antialiasingu, což je vyhlazování zubatých hran a zrnitosti obrázku.

Image sampling

U antialiasingu se zastavíme déle a začneme trochu zeširoka. Antialiasing má totiž zcela zásadní vliv na kvalitu výsledného obrázku - volba nedostatečného antialiasingu zaviní vznik zubatých hran, zašumělých ploch a roztřesených linií, naproti tomu příliš kvalitní antialiasing může mnohonásobně prodloužit dobu výpočtu bez výrazného zvýšení kvality obrázku. Klíčovým pojmem antialiasingu je vzorkování - sampling. Probereme si tedy nejdříve podrobně tento pojem. Následující text jsem s laskavým svolením Tassose Ringase převzal z jeho stránky http://ringas.netfirms.com/brazil/Brazil_Notes.htm, na které shromažďuje informace z diskusní skupiny Brazilu. Jenom bych chtěl upozornit, že většina ostatních informací na výše zmíněné stránce se týká staré verze Ghost a v dnešní době je již neplatná.

Představte si, že 'obrázek' je 2D projekcí vaší 3D scény, tak, jak ji vidí kamera. (tzn. nepřemýšlejte o 'obrázku' jako o výsledném renderu). Pokud zoomujete, řekněme, na hranu objektu pod nějakým úhlem, všimnete si, že můžete zoomovat - přibližovat se - prakticky do nekonečna (tedy téměř) - hrana zůstává stále pod stejným úhlem a vy můžete stále přesněji určit, které body ve vašem obrázku čára protíná.

Asi je vám však jasné, že pokud byste chtěli zachovat detail nekonečně přiblíženého obrázku ve výsledném renderu (bitmapě), musela by mít tato bitmapa nekonečné rozlišení. To samozřejmě není reálné. Místo toho budete muset použít vzorky. To znamená, že se podíváte na určitý bod (sampling point, vzorkovací bod), abyste viděli, jak bude obrázek vypadat.

Rozmístění těchto vzorkovacích bodů nazýváme Sampling Pattern - vzorkovací obrazec. Tento termín můžete hned zapomenout, s vzorkováním samotným nemá co do činění. Řekněme, že umístíme naše vzorkovací body do pravidelného obrazce, konkrétně po jednom do každého pixelu. Pokud bychom tedy renderovali obrázek v rozlišení 1024x768 bodů, měli bychom 1024 vzorků na šířku a 768 na výšku v pravidelném obrazci.

Řekněme, že vzorek v jednom pixelu indikuje, že zasáhnul objekt. A ve vedlejším pixelu vzorek indikuje, že objekt minul. Nyní to udělejte pro celý obrázek. Dostanete render, který je hrubě schodkovitý (říkejme tomu vzorkování 1:1). Důvodem tohoto „schodkování" je, že obsahuje pouze informaci 'zasažený nebo minutý'. Pixel buď zobrazuje objekt, nebo ne. Neříká nic o tom, abychom se vrátili k příkladu s hranou, jak daleko je hrana od prvního pixelu a jak blízko je ke druhému a naopak. Je to pouhý odhad.

Nyní předpokládejme, že pro jeden pixel uděláme více než jeden vzorek. Udělejme třeba 4 vzorky.
První pixel bude hlásit: zásah zásah zásah mimo.
Druhý „zjistil" toto: mimo mimo mimo mimo
Nyní místo toho, abychom pouze řekli, zda má pixel zásah nebo je mimo, můžeme říci, že hrana objektu je na prvním pixelu přítomna ze 75% a na druhém pixelu není přítomna vůbec. To nám dává mnohem více informací o tom, jak by měl obrázek ve skutečnosti vypadat (abychom si trochu obohatili názvosloví, pořizování více vzorků na jednom pixelu říkáme Oversampling, převzorkování)

Nyní pořiďme 9 vzorků na pixel a dejme tomu, že první pixel vrátí tyto hodnoty: zásah zásah zásah zásah zásah zásah zásah mimo mimo.
Nyní můžeme říct, že objekt je na prvním pixelu přítomen z cca. 78%. To je dokonce ještě přesnější než minule. To znamená, že čtyři vzorky na pixel byly také jenom odhad.

Asi si dovedete představit, že pokud bychom pořídili 16 nebo 256 vzorků, dostali bychom ještě přesnější výsledky, ale stále by to byly jen odhady. A pochopitelně platí, že čím více vzorků pořídíme, tím déle bude výpočet trvat.

A naopak, můžete pořídit také méně než jeden vzorek na pixel. Řekněme, že pořídíte jeden vzorek na 2 pixely. Pro zjednodušení předpokládejme, že máme řadu pěti pixelů.
První pixel je zasažený.
Druhý pixel jsme nekontrolovali.
Třetí pixel je zasažený.
Čtvrtý pixel jsme nekontrolovali.
Pátý pixel je minutý.
Nyní vidíte, že o scéně víme ještě méně, než když jsme začali. Nicméně jsme pořídili o 50% méně vzorků, což znamená,že můžete renderovat (teoreticky) dvakrát rychleji. A mimochodem, říkáme tomu UnderSampling, podvzorkování.

Za pomoci malé lsti můžeme zaplnit prázdná místa v druhém a čtvrtém pixelu.
První pixel hlásí zásah a třetí také zásah, takže můžeme předpokládat, že na druhém pixelu je objekt také zasažený. I přes to, že to nevíme zcela jistě, můžeme na tuto možnost bezpečně vsadit. Třetí pixel hlásí zásah a pátý byl minutý, takže můžeme říci, že čtvrtý se nachází mezi zásahem a minutím, takže je na 50% zasažený a 50% minutý. Pokud by byl třetí pixel bílý a pátý černý, pak by byl čtvrtý 50% šedý. Tento „trik" nazýváme interpolace.

Nyní postoupíme zase o krok dále...
Řekněme že nevěříte tomu, že čtvrtý pixel bude z 50% šedý, když vezmete v úvahu, že třetí byl bílý a pátý byl černý - to jsou dvě velice rozdílné hodnoty.
Také ale nechcete pořizovat vzorek pro každý pixel, protože jste si jistí, že druhý pixel by měl být bílý - je přece situován mezi 2 jiné bílé pixely (předpokládejme, že první je také bílý). Pak byste mohli vzít dodatečný vzorek pouze pro čtvrtý pixel. Nyní řekněme, že pixel je z 33% šedý, místo 50%. Nyní tedy opět víte více o skutečném vzhledu obrázku, ačkoliv jste nemuseli pořizovat tolik vzorků. Tento proces, kdy pořizujeme více vzorků pouze selektivně pro určité pixely, nazýváme Adaptive Sampling neboli adaptivní vzorkování, protože se adaptuje na předchozí vzorky.

Ať už použijete jakýkoliv postup, nikdy nedosáhne vaše bitmapa 100% přesný výsledek. Stále to bude aproximace a čím lepší se zdá být aproximace, tím přiměřeněji vzorkovaný váš obrázek bude.
Nový termín : Adequate Sampling, přiměřené vzorkování. Opačný termín: Inadequate Sampling, nepřiměřené vzorkování - tam, kde si snadno všimnete, že nebyl použit dostatek vzorků.

A jak to vše souvisí s nastavením vzorkování v Brazilu? Zcela jednoduše. Hodnoty Min samples a Max samples představují počet vzorků v mocninách dvojky, takže Max samples = 2 znamená 2 ^ 2 = 4 vzorky na bod, 3 znamená 8 vzorků na bod, 0 znamená 1 vzorek (protože 2 ^ 0 = 1) a tak dále. Naproti tomu záporná čísla udávají, kolik okolních bodů sdílí jediný vzorek.

Pokud je hodnota Max samples vyšší než Min samples, nastal čas pro adaptivní vzorkování a odkryje se nám hned několik nových voleb. Na následujících obrázcích uvidíte v akci parametr Show adaptive, který obarví zvolenou (v mém případě červenou) barvou ty body, u kterých došlo k adaptivnímu vzorkování na vyšší hodnotu, než je Min samples.

Object edge: jsou detekovány hrany objektů, které jsou následně adaptivně vzorkovány s vyšším počtem vzorků.

antialiasing 01

Spatial: hodnota, vyjádřená v jasové složce barevného modelu HSV, o niž se musí sousední pixely lišit, aby bylo pořízeno více vzorků (počet vzorků si pak algoritmus určí někde mezi Min a Max samples). Čím bude barva tmavší, tím více vzorků bude pořizováno, protože „klesají požadavky" na jasovou odlišnost sousedních bodů a do adaptivního vzorkování budou přibrány i body, které se „zase tak moc neliší". Takže si adaptivní vzorkování bude všímat i gradientů barev, zejména těch prudších (jemně přechody ho moc zajímat nebudou, pokud nebude hodnota nastavená extrémně nízko). Naopak čím bude hodnota vyšší, tím méně bodů bude adaptivně vzorkováno, protože to by už mezi nimi musel být jo velký kontrast, aby si jich adaptivní vzorkovač všimnul (v takovém případě si všímá zejména kontrastních hran mezi objektem a pozadím).

Na následujících obrázcích vidíte efekt výše zmíněných parametrů. Bylo použito vzorkování [-1,0], takže "nudné" pasáže, kde se neuplatnilo adaptivní vzorkování, jsou mírně rozmlžené (na jeden vzorek připadají 4 pixely, protože na jeden pixel připadá 2 ^ (-2) = 1/4 vzorku) a oblasti s adaptivním vzorkováním jsou zcela ostré bez antialiasingu, protože na jeden pixel připadá jeden vzorek (2 ^ 0 = 1). Všimněte si posledního obrázku, který ukazuje dvě extrémní hodnoty. Při nejnižší hodnotě (HSV = 0,0,0 - čistě černá) jsou vzorkovány všechny body, protože jesou vzorkovány i sousední body s nulovým rozdílem, jinými slovy se na jejich jasový rozdíl nebere ohled, protože jsou vzorkovány úplně všechny. Naopak při hodnotě HSV = 0,0,255 (čistě bílá) nebyl v našem případě vzorkován žádný bod, protože by byl vzorkován pouze maximální možný kontrast sousedních bodů, například by si smlsnul na hraně bílé krychle na černém pozadí.

antialiasing 02

antialiasing 03

Temporal: zabijte mě, ale nevím. Tento parametr je nový, v Brazilu 1.2 ještě nebyl a žádná dokumentace k novému Brazilu zatím neexistuje. Možná se jedná o potlačení tzv.temporal effects, tedy blikání a neklid bodů, které je patrné zejména v animacích (typická hláška, která tento nežádoucí efekt doprovází: „vypadá to, jako by po té zdi lezli mravenci" :-).

Normal: zde jsem opět na tenkém ledě. Tento režim pracuje podobně jako Object Edge, nedělá však celé hrany, ale bere v úvahu i vnitřní zlomy a zvlnění polygonových sítí, stejně jako jejich průsečíky. Je zde číselný parametr, jehož nastavení mi není zcela jasné - lze jej nastavit od 0 do 1, efekt roste pozvolně a těsně před hodnotou 1 se jeho vliv výrazně zvyšuje, až na hodnotě 1 adaptivně vzorkuje téměř celý objekt.

antialiasing 04

antialiasing 05

antialiasing 06

Z-depth: očividně něco s hloubkou Z-bufferu (vypadá to jako ořezová rovina, vzdalující se od kamery, ale s vyššími hodnotami se do toho nějak míchají hrany objektů, tak nevím).

Pro úplnost - od kraje koule po opačný kraj foťáku je délka 20 jednotek, od kamery Rhina k objektivu foťáku je to cca. 30 jednotek.

antialiasing 07

Tolik tedy k antialiasingu a pojďme ke světlům. V nejnovější beta-verzi se objevily vlastnosti stínů světelných zdrojů. Ne vše zatím funguje jak má, proto se podíváme zatím alespoň na funkce, které už pracují.

Když vytvoříte světlo (například kuželové, příkazem KuželovéSvětlo resp. Spotlight), vyberete jej a stisknete F3, objeví se okno Vlastnosti (Properties). Horní roletové tlačítko si musíte přepnout na Světlo (Light) a objeví se panel s detailními vlastnostmi světla:

vlasntosti světla

Zatrhávací tlačítko On určuje, zda je světlo zapnuté nebo vypnuté. Pod ním se nachází políčko Type, které určuje typ světelného zdroje. Typ zdroje je přebírán přímo z Rhina - jaký světelný zdroj vytvoříte, takový zde bude implicitně nastaven. V Rhinu můžete vytvořit následující zdroje (jedná se zároveň o názvy příkazů, kterými zdroj vytvoříte):

BodovéSvětlo (PointLight)
KuželovéSvětlo (SpotLight)
SměrovéSvětlo (DirectionalLight, v Brazilu se nazývá Parallel Light)
PlošnéSvětlo (RectangularLight)
LineárníSvětlo (LinearLight, v Brazilu je bráno jako plošné světlo)

Každé světlo má svoji vlastní sadu prarametrů pro definici osvětlení a stínů, proto nebudeme zabíhat do příliš velkých podrobností a podíváme se alespoň na nejpoužívanější kuželové světlo. Mimochodem u plošného světla mi nefungovaly stíny a Brazil s tímto světlem velice často padal.

Když vytvoříte kuželové světlo a zobrazíte si jeho vlastnosti, kupodivu uvidíte, že Brazil jej v políčku Type uvádí jako Point light, bodové světlo, nicméně stíny jsou v pořádku, jako od kuželového světla. Hned následující políčko má název Shadow shader a vztahuje se ke vzhledu stínů. Jednotlivé položky tohoto menu jsou přiblíženy na následujícím obrázku. Samozřejmě platí, že s vyšší kvalitou a měkkostí stínů roste také výpočetní čas:

stíny 01

Následuje pár paprametrů, jejichž význam jsem buď nějak nepochopil nebo jsou zcela triviální a tedy se jimi nebudeme zabývat a konečně se dostáváme k záložce Shadows shader, která řídí kvalitu renderovaných stínů. Níže vidíte pár experimentů s nastavením hodnot min_num_samples a max_num_samples, udávajícími minimální a maximální počty vzorků na každý bod oblasti ve stínu. Jak je z obrázků patrné, s rostoucími počty vzorků do určité meze roste kvalita a dál už zůstává víceméně stejná (či spíše její zvyšování je okem nepostřehnutelné), ovšem výpočetní čas se neustále zvyšuje a to docela dramaticky. Ještě bych měl uvést, že jsem použil typ stínu Sphere Area Ray Shadow.

stíny 02

Dalším parametrem je Radius, který udává míru "rozmlžení" stínu. Níže opět vidíte několik obrázků s různým nastavením tohoto parametru.

stíny 03

Poslední parametr max_error by měl udávat maximální přípustnou chybu ve výpočtu osvětlení. Pokud je shledáno, že chyba je vyšší než tato hodnota, je pořízen další vzorek a to tak dlouho, dokud není splněna hodnota maximální přípustné chyby nebo dokud není dosažena hodnota maxomálního počtu vzorků.

To je prozatím vše, příště si povíme něco o nastavení prametrů oblohy a radiozity a další články o Brazilu budou následovat, jakmile budou vydávány nové WIP verze s dalšími funkcemi. Nezapomeňte se často na tento server vracet, aby vám nic neuniklo. A hlavně experimentujte s Brazilem, ať máte náskok a ať jej znáte jako své boty, než vyjde plná verze.

Související odkazy

Související články

Nahoru ↑

Diskuse k článku

  • [3] Jan SLanina17. 08. 2005, 11:17 – reakce na [2]

    reagovat

    Každopádně je lepší Brazil, to je úplně jiná váhová kategorie. Flamingo je zamýšleno spíše jako jednoduchý render na určitý typ scén (design, strojírenství atd.) kde je na scéně pár objektů a taky stojí skoro třetinu toho, co Brazil... Brazil používají profesionální firmy v oblasti reklamy, herního průmyslu, filmu a vizualizací s nabízí mnohem více funkcí než Flamingo, ale taky je mnohem složitější.

  • [2] delph – 17. 08. 2005, 09:10

    Reaguje: [3] - reagovat

    je lepší brazil a nebo flamingo?

  • [1] furo21. 07. 2005, 08:34

    reagovat

    nádherné pokračovanie sľubne sa rozbiehajúcej série. na brazil sa naozaj teším, aj keď držím slovo,tj. kým nebude final, nevyskúšam ho... hlavne,nech už je hotový, takéto články ma dokážu naozaj navnadiť.