Linguagem de sombreamento aberto¶
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.
Nota
On Linux, C/C++ compiler tools (in particular /usr/bin/cpp
)
must be installed to compile OSL scripts.
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/2.80/shaders/
- Windows
C:\Users\$user\AppData\Roaming\Blender Foundation\Blender\2.80\shaders\
- macOS
/Users/$USER/Library/Application Support/Blender/2.80/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)
Cabelo¶
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()
Outro¶
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
- Para instâncias, coordenada gerada a partir de um objeto duplicador.
geom:dupli_uv
- Para instâncias, coordenada UV a partir de objeto duplicador.
geom:trianglevertices
- 3 coordenadas de vértices do triângulo.
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.