Mapeamento de textura OSL [duplicado]
Eu sou novo no OSL e no Blender. Estou usando o seguinte código para gerar um círculo em um avião. O plano, no entanto, parece estar dividido em dois triângulos. Alguém pode explicar como consertar isso para que meu círculo OSL seja mapeado corretamente? Obrigada!
shader Circle(
float rad=0.75 [[float min=0, float max=1]],
float sharp=0.8 [[float min=0, float max=1]],
int rep=1[[int min=1, int max=10]],
point cent=point(0.5, 0.5, 0),
output color c = 0)
{
point pt = point(rep*u, rep*v,0);
float ctx = floor(pt[0])+cent[0];
float cty = floor(pt[1])+cent[1];
point ct = point(ctx, cty, 0);
float d = fmod(distance(ct, pt), rep)/rad;
c = 1-smoothstep(0.5*sharp, 1-0.5*sharp, d);
}

Respostas
u
e v
são variáveis globais fornecidas pelo OSL. Eles se referem aos paramétricos U e V; as coordenadas baricêntricas normalizadas do ponto de sombreamento no triângulo sombreado atualmente. Eles são os mesmos U e V que são retornados no vetor 2D obtido no nó Geometria > Saída paramétrica .
Para obter o U e V do quadrante, conforme mapeado, você deve procurar o U e V no mapa UV ativo do objeto, usando getattribute()
:
shader Circle(
float radius = 0.75,
float sharpness = 0.8,
int tiles = 1,
point center = point(0.5, 0.5, 0.0),
output color c = (0.0)
)
{
vector UV = (0.0);
int hasUV = getattribute( "geom:uv", UV);
point pt = point(tiles*UV[0], tiles*UV[1],0);
float ctx = floor(pt[0])+center[0];
float cty = floor(pt[1])+center[1];
point ct = point(ctx, cty, 0);
float d = fmod(distance(ct, pt), tiles)/radius;
c = 1-smoothstep(0.5*sharpness, 1-0.5*sharpness, d);
}
.. mas aqui, encontramos uma promessa não cumprida no manual do Blender, que a julgar pela idade desta resposta , você pode esperar que já tenha sido corrigida. Estranhamente, no que diz respeito ao usuário, a implementação de OSL do Blender se recusa a dar um valor a geom:uv
, a menos que haja um nó Image Texture em algum lugar da árvore. (Se você deseja avaliar algum outro mapa UV pelo nome em seu OSL, a árvore também deve conter um nó de Mapa UV com o mesmo nome, conectado ao nó Textura de Imagem ).
Então, sua árvore acaba ficando assim:

Espero que esta resposta economize algum tempo .. :)