Asignación de texturas OSL [duplicado]
Soy nuevo en OSL y Blender. Estoy usando el siguiente código para generar un círculo en un avión. Sin embargo, el plano parece estar dividido en dos triángulos. ¿Alguien puede explicar cómo solucionar este problema para que mi círculo OSL se asigne correctamente? ¡Gracias!
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);
}

Respuestas
u
y v
son variables globales proporcionadas por OSL. Se refieren a los paramétricos U y V; las coordenadas baricéntricas normalizadas del punto de sombreado en el triángulo sombreado actualmente. Son los mismos U y V que se devuelven en el vector 2D que obtiene del nodo Geometría > Salida paramétrica .
Para obtener la U y la V del cuadrante, según lo mapeado, debe buscar la U y la V en el mapa UV activo del 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);
}
... pero aquí, nos encontramos con una promesa incumplida en el manual de Blender, que a juzgar por la antigüedad de esta respuesta , es de esperar que ya se haya solucionado. Curiosamente, en lo que respecta al usuario, la implementación de OSL de Blender se niega a dar un valor a geom:uv
, a menos que haya un nodo Image Texture en algún lugar del árbol. (Si desea evaluar algún otro mapa UV por nombre en su OSL, el árbol también debe contener un nodo Mapa UV con el mismo nombre, conectado al nodo Textura de imagen ).
Entonces su árbol termina con este aspecto:

Espero que esta respuesta te ahorre algo de tiempo .. :)