Open Shading Language

Cycles Only

It is also possible to create your own nodes using Open Shading Language (OSL). Note that these nodes will only work for CPU rendering; there is no support for running OSL code on the GPU.

Para ativá-la, selecione Linguagem de Sombreamento Aberto como o sistema de sombreamento nas configurações de renderização.

Nó Script

Nó Scripts.

LSA foi desenhada para sombreamento baseado em nós, e cada sombreador LSA corresponde a um nó em uma configuração de nó. Para adicionar um sombreador LSA, adicione um nó script e conecte ele a um bloco de dados ou a um arquivo externo. Soquetes de entrada e saída serão criados a partir dos parâmetros do sombreador ao clicar no botão atualizar no Nó ou Editor de Texto.

Sombreadores LSA podem ser conectados ao nó de algumas diferentes maneiras. Com o modo Interno, um bloco de dados de texto é usado para armazenar o sombreador LSA, e o OSO bytecode é armazenado no próprio nó. Isso é útil para distribuir um arquivo blend com tudo armazenado nele.

O modo Externo pode ser usado para especificar um arquivo .osl de uma unidade, e isso será então automaticamente compilado em um arquivo .oso no mesmo diretório. Também é possível especificar um caminho para um arquivo .oso, que será então usado diretamente, com a compilação feita manualmente pelo usuário. A terceira opção é especificar apenas o nome do módulo, que será procurado no caminho de busca do sombreador.

O caminho de busca do sombreador está localizado no mesmo lugar que os scripts ou caminho de configuração, dentro de:

Linux
$HOME/.config/blender/3.2/shaders/
Windows
C:\Users\$user\AppData\Roaming\Blender Foundation\Blender\3.2\shaders\
macOS
/Users/$USER/Library/Application Support/Blender/3.2/shaders/

Dica

Para uso em produção, nós sugerimos usar um grupo de nó para agrupar os nós de script de sombreadores, e conectá-los a outros arquivos blend. Isso torna mais fácil fazer modificações aos nós depois a medida que soquetes são adicionados ou removidos, sem precisar atualizar os nós de script em todos os arquivos.

Escrevendo Sombreadores

For more details on how to write shaders, see the OSL specification. Here is a simple example:

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);
}

Encerramentos

LSA é diferente de, por exemplo, RSL ou GLSL, no fato de que não possui um laço de luz. Não há acesso a luzes na cena, e o material deve ser construído a partir de encerramentos que são implementados no próprio renderizador. Isso é mais limitado, mas também torna possível o renderizador fazer otimizações e assegura que todos os sombreadores possam ter importância amostrada.

The available closures in Cycles correspond to the shader nodes and their sockets; for more details on what they do and the meaning of the parameters, see the shader nodes manual.

BSDF

  • 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)

Hair

  • hair_reflection(N, roughnessu, roughnessv, T, offset)

  • hair_transmission(N, roughnessu, roughnessv, T, offset)

  • principled_hair(N, absorption, roughness, radial_roughness, coat, offset, IOR)

BSSRDF

  • bssrdf_cubic(N, radius, texture_blur, sharpness)

  • bssrdf_gaussian(N, radius, texture_blur)

Volume

  • henyey_greenstein(g)

  • absorption()

Other

  • emission()

  • ambient_occlusion()

  • holdout()

  • background()

Atributos

Some object, particle and mesh attributes are available to the built-in getattribute() function. UV maps and Color Attributes can be retrieved using their name. Other attributes are listed below:

geom:generated

Coordenadas de textura geradas.

geom:uv

Mapa UV padrão para a renderização.

geom:dupli_generated

For instances, generated coordinate from instancer object.

geom:dupli_uv

For instances, UV coordinate from instancer object.

geom:trianglevertices

Three vertex coordinates of the triangle.

geom:numpolyvertices

Número de vértices no polígono (sempre retorna três atualmente).

geom:polyvertices

Matriz de coordenadas de vértices do polígono (sempre três vértices atualmente).

geom:name

Nome do objeto.

geom:is_curve

É o objeto uma vertente ou não.

geom:curve_intercept

Aponta ao longo da vertente, da raiz à ponta.

geom:curve_thickness

Espessura da vertente.

geom:curve_tangent_normal

Normal Tangente da vertente.

path:ray_length

Distância do raio desde o último encontro.

object:location

Localização do objeto.

object:index

Número do índice de objeto.

object:random

Número randômico gerado por objeto a partir do índice e nome do objeto.

material:index

Número do índice de material.

particle:index

Número da instância de partícula.

particle:age

Idade da partícula em quadros.

particle:lifetime

Vida útil total da partícula em quadros.

particle:location

Localização das partículas.

particle:size

Tamanho das partículas.

particle:velocity

Velocidade das partículas.

particle:angular_velocity

Velocidade angular das partículas.

Traço

Nós suportamos a função traço(pos ponto, dir vetor, ...), para traçar raios a partir do sombreador LSA. O parâmetro «sombreador» não é suportado atualmente, mas atributos podem ser recuperados do objeto que foi atingido usando a função getmessage("traço", ..). Veja a especificação LSA para mais detalhes em como usar isso.

Essa função não pode ser usada em vez de iluminação; o principal objetivo é permitir sombreadores «examinar» a geometria próxima, por exemplo para aplicar uma textura projetada que pode ser bloqueada por geometria, aplicar mais «roupa» à geometria exposta, ou fazer outros efeitos tipo oclusão ambiente.