Open Shading Language¶
Open Shading Language (OSL) je programovateľný systém tieňovania vyvinutý pre pokročilé mechanizmy prekresľovania. Umožňuje technickým umelcom a vývojárom písať vlastný kód tieňovača použitím skriptovacieho jazyka podobného jazyku C.
V Blenderi možno OSL použiť v rámci Cycles na definovanie vlastných tieňovačov povrchu, objemu a posunutia. Používatelia tak majú úplnú kontrolu nad správaním tieňovania, čo umožňuje procedurálne efekty, pokročilé modely osvetlenia a vlastnú materiálovú logiku založenú na geometrii, ktorá nemusí byť možná len pomocou zabudovaných uzlov tieňovača.
Na rozdiel od materiálov založených na uzloch sú OSL tieňovače vytvorené ako textové skripty použitím interného textového editora Blenderu Text Editor alebo načítané z externých súborov .osl alebo .oso. Tieto skripty sú potom kompilované a použité v editore tieňovačov prostredníctvom Uzla Skript.
Tip
OSL je obzvlášť užitočný na generovanie procedurálnych textúr, vlastných BRDF alebo implementáciu výskumných prototypov. Umožňuje tiež zdieľanie tieňovačov medzi kompatibilnými aplikáciami na prekreslenie, ktoré podporujú štandard OSL.
Použitie¶
Ak chcete v Blenderi používať jazyk Open Shading Language (OSL), postupujte podľa nasledujúcich krokov:
Povoliť prekresľovanie OSL
V ponuke povoľte Open Shading Language (OSL - jazyk otvoreného tieňovania).
Pridať uzol Skript
V editore tieňovačov pridajte uzol Skript a potom vo vlastnostiach uzla:
Nastavte Režim na Interný, ak chcete použiť textový blok údajov Blenderu, alebo
Nastavením na Externý načítate súbor tieňovača z disku (buď .osl alebo skompilovaný .oso).
Pre interný režim vytvorte v textovom editore nový textový blok údajov a potom doň napíšte alebo vložte kód OSL.
Blender automaticky skompiluje zdrojový súbor OSL. Ak je zdrojový súbor .osl, bude skompilovaný do bajtového kódu .oso. Chyby kompilácie sa zobrazia v systémovej konzole.
Použiť výstupy tieňovača
Po skompilovaní budú výstupy uzla odrážať parametre
výstupudefinované v OSL kóde. Tieto výstupy môžu byť pripojené k ľubovoľnej časti stromu uzlov materiálu.
Písanie tieňovačov¶
Ďalšie podrobnosti o tom, ako písať tieňovače, nájdete v dokumentácii OSL.
Tu je jednoduchý príklad:
shader simple_material(
color Diffuse_Color = color(0.6, 0.8, 0.6),
float Noise_Factor = 0.5,
output closure color BSDF = diffuse(N))
{
color material_color = Diffuse_Color * mix(1.0, noise(P * 10.0), Noise_Factor);
BSDF = material_color * diffuse(N);
}
Uzávery¶
OSL sa líši napríklad od RSL alebo GLSL tým, že nemá svetelnú slučku. V scéne nie je prístup k svetlám a materiál sa musí vytvoriť z uzáverov, ktoré sú implementované v samotnom prekresľovači. Je to obmedzenejšie, ale zároveň to umožňuje prekresľovaču vykonávať optimalizácie a zabezpečiť, aby všetky tieňovače mohli byť dôležitým spôsobom snímané.
Dostupné uzávery v Cycles zodpovedajú uzlom tieňovača a ich zásuvkám; viac informácií o tom, čo robia, a o význame parametrov nájdete v príručke uzlov tieňovača.
Viď aj
Dokumentácia k zabudovaným uzáverom OSL.
BSDF¶
diffuse(N)oren_nayar(N, zdrsnenie)diffuse_ramp(N, farby[8])phong_ramp(N, exponent, farby[8])diffuse_toon(N, veľkosť, vyhladenie)glossy_toon(N, veľkosť, vyhladenie)translucent(N)reflection(N)refraction(N, ior)transparent()microfacet_ggx(N, zdrsnenie)microfacet_ggx_aniso(N, T, ax, ay)microfacet_ggx_refraction(N, zdrsnenie, index lomu)microfacet_beckmann(N, zdrsnenie)microfacet_beckmann_aniso(N, T, ax, ay)microfacet_beckmann_refraction(N, zdrsnenie, index lomu)ashikhmin_shirley(N, T, ax, ay)ashikhmin_velvet(N, zdrsnenie)
Vlasy¶
hair_reflection(N, zdrsnenieU, zdrsnenieV, T, posuv)hair_transmission(N, zdrsnenieU, zdrsnenieV, T, posuv)principled_hair(N, pohlcovanie, zdrsnenie, radiálne zdrsnenie, obal, posuv, index lomu)
BSSRDF¶
Používa sa na simuláciu podpovrchového rozptylu.
- bssrdf(method, N, radius, albedo)¶
- Parametre:
method (string) – Metóda prekresľovania na simuláciu podpovrchového rozptylu. -
burley: Aproximácia fyzikálne založeného objemového rozptylu. Táto metóda je menej presná akorandom_walk, avšak v niektorých situáciách táto metóda rýchlejšie vyrieši šum. -random_walk_skin: Poskytuje presné výsledky pre tenké a zakrivené objekty. Náhodná prechádzka používa skutočný objemový rozptyl vo vnútri siete, čo znamená, že najlepšie funguje pre uzavreté siete. Problémy môžu spôsobiť prekrývajúce sa plochy a diery v sieti. -random_walk: Chová sa podobne akorandom_walk_skin, ale moduluje Polomer na základe Farby, Anizotropie a IOR. Táto metóda sa tak snaží zachovať väčšie detaily povrchu a farby ako metódarandom_walk_skin.N (vector) – Vektor normály bodu povrchu, ktorý sa tieňuje.
radius (vector) – Priemerná vzdialenosť, v ktorej sa svetlo rozptyľuje pod povrchom. Väčší polomer poskytuje jemnejší vzhľad, pretože svetlo preniká do tieňov a cez objekt. Vzdialenosť rozptylu sa špecifikuje samostatne pre kanály RGB, aby sa prekreslili materiály, ako je napríklad koža, kde sa červené svetlo rozptyľuje hlbšie. Hodnoty X, Y a Z sú mapované na hodnoty R, G a B v uvedenom poradí.
albedo (color) – Farba povrchu, alebo fyzikálne povedané, pravdepodobnosť, že sa svetlo odrazí pre každú vlnovú dĺžku.
Objem¶
henyey_greenstein(g)absorption()
Ďalšie¶
emission()ambient_occlusion()holdout()background()
Atribúty¶
Atribúty geometrie možno načítať funkciou getattribute(). Patria sem UV mapy, atribúty farieb a všetky atribúty vystupujúce z uzlov geometrie.
Nasledujúce zabudované atribúty sú dostupné aj prostredníctvom funkcie getattribute().
geom:generatedAutomaticky vygenerované súradnice textúry z nedeformovanej povrchovej siete.
geom:uvPredvolená UV mapa prekreslenia.
geom:tangentPredvolený vektor dotyčnice pozdĺž povrchu v priestore objektov.
geom:undisplacedPoloha pred presunom, v priestore objektu.
geom:dupli_generatedPre inštancie, vygenerovaná súradnica z objektu vzoru inštancie.
geom:dupli_uvPre inštancie, UV súradnica z objektu vzoru inštancie.
geom:triangleverticesSúradnice troch vrcholov trojuholníka.
geom:numpolyverticesPočet vrcholov na polygóne (v súčasnosti sa vždy vrátia tri).
geom:polyverticesPole súradníc vrcholov polygónu (v súčasnosti vždy tri vrcholy).
geom:nameNázov objektu.
geom:is_smoothJe plôška siete vyhladená alebo plocho tieňovaná.
geom:is_curveJe objekt krivka alebo nie.
geom:curve_intercept0..1 súradnica pre bod pozdĺž krivky, od koreňa po špičku.
geom:curve_thicknessHrúbka krivky v priestore objektu.
geom:curve_lengthDĺžka krivky v priestore objektu.
geom:curve_tangent_normalNormál dotyčnice vlákna.
geom:is_pointJe bod v mračne bodov alebo nie.
geom:point_radiusPolomer bodu v mračne bodov.
geom:point_positionPoloha stredu bodu v mračne bodov.
geom:point_randomNáhodné číslo, rôzne pre každý bod v mračne bodov.
path:ray_lengthVzdialenosť lúča od posledného zásahu.
object:randomNáhodné číslo, rôzne pre každú inštanciu objektu.
object:indexJedinečný index inštancie objektu.
object:locationUmiestnenie objektu.
material:indexJedinečné číslo indexu materiálu.
particle:indexJedinečné číslo inštancie častice.
particle:ageVek častíc v snímkach.
particle:lifetimeCelková životnosť častice v snímkach.
particle:locationPoloha častice.
particle:sizeVeľkosť častice.
particle:velocityRýchlosť častice.
particle:angular_velocityUhlová rýchlosť častice.
Trasovanie¶
Len CPU
Podporujeme funkciu trace(point pos, vector dir, ...) na sledovanie lúčov z tieňovača OSL. Parameter „shade“ (tieň) nie je v súčasnosti podporovaný, ale atribúty možno získať z objektu, ktorý bol zasiahnutý, použitím funkcie getmessage("trace", ..). Podrobnosti o jej použití nájdete v špecifikácii OSL.
Táto funkcia sa nemôže používať namiesto osvetlenia; jej hlavným účelom je umožniť tieňovačom „skúmať“ blízku geometriu, napríklad použiť premietanú textúru, ktorá môže byť blokovaná geometriou, použiť väčšie „opotrebenie“ na odhalenú geometriu alebo vytvoriť iné efekty podobné pohlcovaniu okolím.
Meta údaje¶
Metaúdaje o parametroch riadia spôsob ich zobrazenia v užívateľskom rozhraní. Podporované sú nasledujúce položky metaúdajov:
[[ string label = "My Label" ]]Vlastný zobrazený názov parametra v užívateľskom rozhraní.
[[ string widget = "null" ]]Skryje parameter z užívateľského rozhrania.
[[ string widget = "boolean" ]]alebo[[ string widget = "checkbox" ]]Zobrazí celočíselný parameter ako logické zaškrtávacie políčko.
[[ string widget = "filename" ]]Zobrazí parameter ako výber cesty k súboru.
[[ string widget = "mapper", string options = "left:0|right:1" ]]Zobrazí celočíselný parameter ako vyčíslenú ponuku. Reťazec možnosti definuje zoznam párov nápis-hodnota oddelených znakom
|.[[ string vecsemantics = "POINT" ]]Označuje vektorový parameter ako vstup pre presun (vektor polohy).
[[ string vecsemantics = "NORMAL" ]]Označuje vektorový parameter ako normálový vstup ( vektor smeru).
[[ string unit = "radians" ]]Označuje parameter hodnoty na pohyblivej desatinnej čiarke ako vstupný uhol, zobrazený v radiánoch.
[[ string unit = "m" ]]Označuje parameter hodnoty na pohyblivej desatinnej čiarke ako vstup vzdialenosti, zobrazený v metroch.
[[ string unit = "mm" ]]Označuje parameter hodnoty na pohyblivej desatinnej čiarke ako vstup vzdialenosti, zobrazený v milimetroch.
[[ string unit = "s" ]]or[[ string unit = "sec" ]]Označuje parameter hodnoty na pohyblivej desatinnej čiarke ako časový vstup, zobrazený v sekundách.
Limity¶
Dôležité
OSL nie je podporovaný pri GPU prekresľovaní, pokiaľ sa nepoužíva backend OptiX.
Niektoré funkcie OSL nie sú k dispozícii pri používaní vrstvy prístupu k údajom (backendu) OptiX. Príklady zahŕňajú:
- Zníženie spotreby pamäte vďaka funkciám, ako je načítanie textúr na požiadanie a
mip-mapovanie nie je k dispozícii.
- Vyhľadávanie textúr vyžaduje, aby OSL dokázal určiť konštantnú cestu k obrazovému súboru pre každé
volanie textúry.
Niektoré funkcie šumu nie sú k dispozícii. Príklady zahŕňajú Bunka, Jednoduché a Gabor.
Funkcia Sledovať nie je funkčná. V dôsledku toho uzly Pohlcovanie okolím a Skosiť nefungujú.