Llenguatge d’aspecció obert¶
L'Llenguatge d’aspecció obert (OSL) és un sistema d’aspecció programable desenvolupat per a motors de revelat avançats. Permet a artistes i desenvolupadores tècniques d’escriure’s el codi per fer-se aspectors a mida amb un llenguatge de protocols tipus C.
A Blender, hom pot fer ús d’OSL amb Cycles per definir aspectors a mida de superfície, de volum i de desplaçament. Això ofereix a les usuàries un ple control sobre el comportament aspectiu, tot permetent efectes procedimentals, models d’il·luminació avançats i una lògica de materials basada en geometria personalitzada que pot no ser possible de fer només amb els nodes apsectors integrats.
A diferència dels materials basats en nodes, els aspectors amb OSL es redacten com a protocols textuals d’autora mitjançant l'Editor de text intern de Blender o carregant-lo des de documents externs .osl o .oso. Aquests protocols llavors es compilen i s’utilitzen a l’Editor d’aspecció mitjançant el Node protocol.
Truc
OSL és especialment útil per generar textures procedimentals, FDDBs personalitzades o implementar prototips de recerca. També permet compartir aspectors en múltiples aplicacions de revelat compatibles que admetin l’estàndard OSL.
Operativa¶
Per utilitzar l’Open Shading Language (OSL) amb Blender, seguiu aquests passos:
Habiliteu el revelat amb OSL
A , habiliteu Llenguatge d’aspecció obert.
Afegiu un Node protocol
A l’Editor d’aspecció, afegiu el Node protocol i llavors a les propietats del node:
Definiu el Mode com Intern per a utilitzar un bloc de dades de text de Blender, o bé
Definiu-lo com Extern per carregar un document aspector des del disc (sigui .osl o .oso compilat).
Per al mode intern, creeu un nou bloc de dades de text a l’Editor de text i, a continuació, escriviu o enganxeu-hi el codi OSL.
El Blender compilarà automàticament el document d’origen d’OSL. Si és un osl, es compilarà en bytecode oso.. Els errors de compilació es mostraran a la consola del sistema.
Useu sortides d’aspector
Un cop compilat, les sortides del node reflectiran els paràmetres de
outputdefinits en el codi OSL. Aquestes egressions es poden connectar a qualsevol part de l’arbre de nodes de material.
Redactant aspectors¶
Per més detalls sobre com formular els aspectors, vegeu la Documentació d’OSL.
Heus aquí un exemple senzill:
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);
}
Closes¶
L’OSL és diferent de, per exemple, RSL o GLSL, en el fet que no té un bucle de llum. No hi ha accés a llums en l’escena i el material ha de ser construït a partir de closes que s’implementin en el propi motor de revelat. Això és més limitat, però també fa possible que el revelador faci optimitzacions i s’asseguri que en tots els aspectors s’hi pot mostrejar la importància.
Les closes disponibles a Cycles corresponen als nodes aspector i els seus borns; per més detalls sobre el que fan i el significat dels paràmetres, vegeu el manual de nodes aspectors.
Vegeu també
Documentació sobre les closes integrades a OSL.
FDDB¶
diffuse(N)oren_nayar(N, roughness)diffuse_ramp(N, colors[8])phong_ramp(N, exponent, colors[8])diffuse_toon(N, size, smooth)glossy_toon(N, size, smooth)translucent(N)reflection(N)refraction(N, ior)transparent()microfacet_ggx(N, roughness)microfacet_ggx_aniso(N, T, ax, ay)microfacet_ggx_refraction(N, roughness, ior)microfacet_beckmann(N, roughness)microfacet_beckmann_aniso(N, T, ax, ay)microfacet_beckmann_refraction(N, roughness, ior)ashikhmin_shirley(N, T, ax, ay)ashikhmin_velvet(N, roughness)
Pèl¶
hair_reflection(N, roughnessu, roughnessv, T, offset)hair_transmission(N, roughnessu, roughnessv, T, offset)principled_hair(N, absorción, rugosidad, rugosidad_radial, barniz, desplazamiento, ir)
FBDRSD¶
S’utilitza per simular la dispersió de subsuperfície.
- bssrdf(method, N, radius, albedo)¶
- Paràmetres:
method (string) – Mètode de revelat per a simular la dispersió de subsuperfície. -
burley: Una aproximació a la dispersió de volums de base física. Aquest mètode és menys precís querandom_walk, per bé que en algunes situacions aquest mètode farà la resolutiva del soroll més ràpidament. -random_walk_skin: proporciona resultats precisos per a objectes prims i corbats. El Circuit aleatori (Random Walk)`utilitza una dispersió volumètrica real dins de la malla, el que significa que funciona millor per a malles tancades. La superposició de cares i forats a la malla pot causar problemes. ``random_walk`: es comporta de manera similar arandom_walk_skinperò modula el Radi basant-se en el Color, Anisotropia i IDR. D’aquesta manera, aquest mètode intenta retenir un major detall de la superfície i color querandom_walk_skin.N (vector) – Vector de normal del punt de superfície aspectada.
radius (vector) – Distància mitjana amb què la llum es dispersa per sota de la superfície. Un radi més alt dona una aparença més suau, ja que la llum sobreïx sobre les ombres i travessa l’objecte. La distància de dispersió s’especifica per separat per als canals RGB per a revelar materials com la pell, on la llum vermella es dispersa més profundament. Els valors X, Y i Z es mapegen sobre els valors R, G i B respectivament.
albedo (color) – Color de la superfície o, físicament parlant, la probabilitat que la llum es reflecteixi per a cada longitud d’ona.
Volum¶
henyey_greenstein(g)absorption()
Altres¶
emission()ambient_occlusion()holdout()background()
Atributs¶
Els atributs de geometria es poden llegir a través de la funció getattribute(). Això inclou els mapes UV, els atributs de color i qualsevol egressió d’atributs de nodes de geometria.
Els atributs integrats següents també estan disponibles a través de getattribute().
geom:generatedCoordenades de textura generades automàticament a partir d’una malla no deformada.
geom:uvMapa UV per defecte per a revelat.
geom:tangentVector tangencial per defecte al llarg de la superfície en l’espai d’objecte.
geom:undisplacedPosició abans del desplaçament, a l’espai d’objecte.
geom:dupli_generatedPer a instàncies, coordenada generada a partir de l’objecte instanciador.
geom:dupli_uvPer a instàncies, coordenada UV a partir de l’objecte instanciador.
geom:triangleverticesTres coordenades de vèrtex del triangle.
geom:numpolyverticesNombre de vèrtexs del polígon (ara per ara, sempre en retorna tres).
geom:polyverticesMatriu de coordenades de vèrtexs del polígon (ara per ara, sempre en retorna tres).
geom:nameNom de l’objecte.
geom:is_smoothÉS cara de malla d’aspecció suavitzada o aplanada.
geom:is_curveÉS l’objecte una corba o no.
geom:curve_interceptCoordenada 0..1 per al punt al llarg de la corba, des de l’arrel fins a la punta.
geom:curve_thicknessGruix de la corba en l’espai d’objecte.
geom:curve_lengthLongitud de la corba en l’espai d’objecte.
geom:curve_tangent_normalNormal tangencial del floc.
geom:is_pointÉS punt en un núvol de punts o no.
geom:point_radiusRadi del punt en el núvol de punts.
geom:point_positionPosició central del punt en el núvol de punts.
geom:point_randomNombre aleatori, diferent per cada punt del núvol de punts.
path:ray_lengthDistància de raig des de l’últim impacte.
object:randomNombre aleatori, diferent per a cada instància d’objecte.
object:indexÍndex d’instància única de l’objecte.
object:locationUbicació d’objecte.
material:indexNúmero d’índex únic del material.
particle:indexNúmero d’instància únic de la partícula.
particle:ageEdat de la partícula en fotogrames.
particle:lifetimeDurada total de la partícula en fotogrames.
particle:locationUbicació de la partícula.
particle:sizeMida de la partícula.
particle:velocityVelocitat de la partícula.
particle:angular_velocityVelocitat angular de la partícula.
Traçar¶
Sols CPU
Donem suport a la funció trace(point pos, vector dir, ...) per a radiotraçar des de l’aspector d’OSL. El paràmetre «shade» ara mateix no està admès, però els atributs es poden recuperar des de l’objecte que s’ha impactat utilitzant la funció getmessage("trace", ..). Vegeu l’especificació d’OSL per més detalls sobre com utilitzar-ho.
Aquesta funció no es pot utilitzar en lloc de la il·luminació; el principal propòsit és permetre als aspectors de «sondejar» la geometria pròxima, per exemple, per aplicar una textura projectada que pot ser bloquejada per geometria, aplicar més «desgast» a geometria exposada, o fer altres efectes d’estil oclusió ambiental.
Metadades¶
Les metadades de paràmetres controlen la seva visualització a la interfície d’usuària. S’admeten les entrades següents de metadades:
[[ string label = "My Label" ]]Nom a la interfície d’usuària de la visualització personalitzada del paràmetre.
[[ string widget = "null" ]]Amaga el paràmetre de la interfície d’usuària.
[[ string widget = "boolean" ]]o[[ string widget = "checkbox" ]]Visualitza un paràmetre enter com una casella de selecció booleana.
[[ string widget = "filename" ]]Visualitza el paràmetre com un selector de ruta de documents.
[[ string widget = "mapper", string options = "left:0|right:1" ]]Mostra un paràmetre enter com un menú enumerat. La cadena opcions defineix una llista de parelles amb valor etiqueta separats per
|.[[ string vecsemantics = "POINT" ]]Marca un paràmetre vectorial com a ingressió de translació (vector de posició).
[[ string vecsemantics = "NORMAL" ]]Marca un paràmetre vectorial com a ingressió de normals (vector direccional).
[[ string unit = "radians" ]]Marca un paràmetre de número de coma flotant com a ingressió d’angle visualitzada en radians.
[[ string unit = "m" ]]Marca un paràmetre de número de coma flotant com una entrada de distància expressada en metres.
[[ string unit = "mm" ]]Marca un paràmetre de número de coma flotant com a entrada de distància expressada en mil·límetres.
[[ string unit = "s" ]]o[[ string unit = "sec" ]]Marca un paràmetre de número de coma flotant com una entrada de temps expressada en segons.
Limitacions¶
Important
L’OSL no és compatible amb el revelat de GPU llevat que s’utilitzi el basament OptiX.
Algunes funcionalitats d’OSL no estan disponibles quan s’utilitza el basament OptiX. En són exemples:
- Les consultes de textura requereixen que OSL pugi determinar una ruta constant del document d’imatge per a cada
invocació de textura.
Algunes funcions de soroll no estan disponibles. Els exemples inclouen Cel·la, Simplex i Gabor.
La funció traçar no està operativa. Com a conseqüència, els nodes Oclusió ambiental i Bisellar no funcionen.