Llenguatge d’aspecció obert¶
L'Open Shading Language (OSL) és un sistema d’aspecció programable desenvolupat per a motors de revelat avançats. Permet a artistes i desenvolupadores tècniques d’escriure codi d’aspectors personalitzats amb el llenguatge de protocols en C.
A Blender, OSL es pot utilitzar amb Cycles per definir aspectors personalitzats de superfície, volum i desplaçament. Això proporciona als usuaris un control total sobre el comportament aspectiu, tot permetent efectes procedimentals, models d’il·luminació avançats i una lògica de material basada en geometria personalitzada que pot no ser possible només amb els nodes apsectors integrats.
A diferència dels materials basats en nodes, els aspectors OSL es redacten com a protocols textuals d’autora fets amb l'Editor de text els intern de Blender o carregat des de documents externs .osl o .oso. Aquests protocols es compilen després i s’utilitzen a l’Editor d’aspecció mitjançant el Node protocol.
Truc
OSL és especialment útil per generar textures procedimentals, FDDBs personalitzats o implementar prototips de recerca. També permet compartir aspectors en múltiples aplicacions de revelat compatibles que suporten l’estàndard OSL.
Operativa¶
Per utilitzar l’Open Shading Language (OSL) amb Blender, seguiu aquests passos:
Habiliteu el revelat OSL
A , habiliteu Open Shading Language.
Afegiu un Node protocol
A l’Editor d’aspecció, afegiu-hi el Node protocol aleshores a les propietats del node:
Definiu el Mode com Intern per a utilitzar un bloc de dades de text 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 OSL. Si és un osl, es compilarà a bytecode oso.. Els errors de compilació es mostraran a la consola del sistema.
Usar egressions d’aspector
Un cop compilades, les egressions 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);
}
Tancaments¶
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 tancaments que s’implementen 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.
Els tancaments 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 els tancaments integrats 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ó subsuperficial.
- bssrdf(method, N, radius, albedo)¶
- Paràmetres:
method (string) – Mètode de revelat per a simular la dispersió subsuperficial. -
burley: Una aproximació a la dispersió de volums de base fçisica. Aquest mètode és menys precís querandom_walkde tota manera, 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. Circuit aleatori 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 Radis 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 dins d’ombres i a través de 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 vers als 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 mapes UV, 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 del 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 a cada punt en el 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¶
Només CPU
Donem suport a la funció trace(point pos, vector dir, ...), per a radiotraçar des de l’aspector 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 de visualització personalitzada del paràmetre a la interfície d’usuària.
[[ 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" ]]Mara 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 metre.
[[ 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 reduccions d’ús de la memòria que ofereixen funcionalitats com la càrrega de textures a la carta i
el mip-mapping no estan disponibles.
- Les consultes de textura requereixen OSL per a poder determinar una ruta constant del document d’imatge constant 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.