Open Shading Language

Cycles Only

Também é possível criar seus próprios nós usando a Linguagem de Sombreamento Aberto (LSA). Note que esses nós irão funcionar apenas para renderização CPU; não há suporte para rodar código LSA na GPU.

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

Nó Script

../../_images/render_shader-nodes_osl_script-node.png

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.0/shaders/
Windows
C:\Users\$user\AppData\Roaming\Blender Foundation\Blender\3.0\shaders\
macOS
/Users/$USER/Library/Application Support/Blender/3.0/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

Para mais detalhes sobre como escrever sombreadores, veja `especificação LSA<https://github.com/imageworks/OpenShadingLanguage/blob/master/src/doc/osl-languagespec.pdf>`__. Aqui está um simples exemplo:

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

Alguns objetos, atributos de partículas e malhas são disponíveis para a função embutida getattribute(). Mapas UV e cores de vértices podem ser recuperadas usando seu nome. Outros atributos são listados abaixo.

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.