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
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
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
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.