Jazyk otvoreného tieňovania#
Len Cycles
Je tiež možné vytvoriť si vlastné uzly použitím Jazyka otvoreného tieňovania Open Shading Language (OSL). Tieto uzly budú fungovať iba s vrstvou prístupu k údajom (backendom) CPU a prekresľovania OptiX.
Pre povolenie, v nastaveniach Prekreslenie vyberte ako systém tieňovania Open Shading Language.
Poznámka
Niektoré funkcie OSL nie sú k dispozícii pri používaní vrstvy prístupu k údajom (backendu) OptiX. Príklady zahŕňajú:
Zníženie využitia pamäte, ktoré ponúkajú funkcie, ako je načítanie textúr na požiadanie a mip mapovanie, nie je k dispozícii.
Vyhľadávanie textúr vyžaduje OSL, aby bolo možné určiť konštantnú cestu k súboru obrázka 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 Skosenie nefungujú.
Uzol Skript#
OSL bol navrhnutý pre tieňovanie na základe uzlov a každý OSL tieňovač zodpovedá jednému uzlu v nastavení uzlov. Ak chcete pridať OSL tieňovač, pridajte uzol skriptu a prepojte ho s textovým blokom údajov alebo externým súborom. Vstupné a výstupné zásuvky sa vytvoria z parametrov tieňovača po kliknutí na tlačidlo aktualizácie v uzle alebo v textovom editore.
Tieňovače OSL je možné prepojiť s uzlom niekoľkými rôznymi spôsobmi. V režime Interný sa na uloženie tieňovača OSL používa textový blok údajov a bytový kód OSO je uložený v samotnom uzle. To je užitočné na distribúciu blend súboru so všetkým, čo je v ňom zabalené.
Režim Externý možno použiť na zadanie súboru .osl
z disku, ktorý sa potom automaticky skompiluje do súboru .oso
v tom istom priečinku. Je tiež možné zadať cestu k súboru .oso
, ktorý sa potom použije priamo, pričom kompiláciu vykoná užívateľ ručne. Treťou možnosťou je zadať len názov modulu, ktorý sa vyhľadá v ceste vyhľadávania tieňovačov.
Cesta vyhľadávania tieňovačov sa nachádza na rovnakom mieste ako cesta skriptov alebo konfigurácie, v časti:
- Linux
$HOME/.config/blender/4.2/shaders/
- Windows
C:\Users\$user\AppData\Roaming\Blender Foundation\Blender\4.2\shaders\
- macOS
/Users/$USER/Library/Application Support/Blender/4.2/shaders/
Tip
Na použitie v produkcii odporúčame použiť skupinu uzlov na zabalenie uzlov skriptu tieňovača a prepojiť ich s inými blend súbormi. To uľahčuje následné vykonávanie zmien v uzle pri pridávaní alebo odstraňovaní zásuviek bez toho, aby bolo potrebné aktualizovať uzly skriptov vo všetkých súboroch.
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:generated
Automaticky vygenerované súradnice textúr z nedeformovanej povrchovej siete.
geom:uv
Predvolená UV mapa prekreslenia.
geom:tangent
Predvolený vektor dotyčnice pozdĺž povrchu v priestore objektov.
geom:undisplaced
Poloha pred presunom, v priestore objektu.
geom:dupli_generated
Pre inštancie, vygenerovaná súradnica z objektu vzoru inštancie.
geom:dupli_uv
Pre inštancie, UV súradnica z objektu vzoru inštancie.
geom:trianglevertices
Súradnice troch vrcholov trojuholníka.
geom:numpolyvertices
Počet vrcholov na polygóne (v súčasnosti sa vždy vrátia tri).
geom:polyvertices
Pole súradníc vrcholov polygónu (v súčasnosti vždy tri vrcholy).
geom:name
Názov objektu.
geom:is_smooth
Je plôška siete vyhladená alebo plocho tieňovaná.
geom:is_curve
Je objekt krivka alebo nie.
geom:curve_intercept
0..1 súradnica pre bod pozdĺž krivky, od koreňa po špičku.
geom:curve_thickness
Hrúbka krivky v priestore objektu.
geom:curve_length
Dĺžka krivky v priestore objektu.
geom:curve_tangent_normal
Normál dotyčnice vlákna.
geom:is_point
Je bod v mračne bodov alebo nie.
geom:point_radius
Polomer bodu v mračne bodov.
geom:point_position
Poloha stredu bodu v mračne bodov.
geom:point_random
Náhodné číslo, rôzne pre každý bod v mračne bodov.
path:ray_length
Vzdialenosť lúča od posledného zásahu.
object:random
Náhodné číslo, rôzne pre každú inštanciu objektu.
object:index
Jedinečný index inštancie objektu.
object:location
Umiestnenie objektu.
material:index
Jedinečné číslo indexu materiálu.
particle:index
Jedinečné číslo inštancie častice.
particle:age
Vek častíc v snímkach.
particle:lifetime
Celková životnosť častice v snímkach.
particle:location
Poloha častice.
particle:size
Veľkosť častice.
particle:velocity
Rýchlosť častice.
particle:angular_velocity
Uhlová 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 parametrov riadia ich zobrazenie v užívateľskom rozhraní. Podporované sú nasledujúce metaúdaje:
[[ string label = "My Label" ]]
Názov parametra v užívateľskom rozhraní
[[ string widget = "null" ]]
Skryť parameter v užívateľskom rozhraní.
[[ string widget = "boolean" ]]
a[[ string widget = "checkbox" ]]
Zobrazí celočíselný parameter ako zaškrtávacie políčko typu logická hodnota.