¿Cómo crear un objeto estampado con densidad de patrón variable en tiempo real?

8

Suponga que hay algún valor p, calculado por cuadro, que varía continuamente sobre la superficie de un objeto. El valor de pdetermina la densidad de algún patrón en la superficie. Por ejemplo, en un caso con solo dos densidades posibles si p < 0.3es alta densidad, de lo contrario es baja.

He pensado en una solución simple de alto nivel: crear dos texturas, cada una de diferentes densidades, y basadas en el valor de la pmuestra de la apropiada. Sin embargo, hay un problema con el límite entre las densidades altas y bajas.

Aquí hay un ejemplo para ilustrar el problema (tenga en cuenta que mi problema NO es exclusivo de este patrón de puntos de ejemplo. Describo los patrones con los que estoy trabajando más adelante):

ingrese la descripción de la imagen aquí

Y aquí está el umbral entre bajo y alto (que se muestra en la textura de alta densidad, pero eso no es relevante). Si debajo de la línea, implica que la textura de alta densidad debe ser muestreada.

ingrese la descripción de la imagen aquí

Y finalmente aquí está la comparación entre lo que se desea y lo que realmente sucedería usando este método:

ingrese la descripción de la imagen aquí

El problema es que cuando un círculo de alta densidad cruza la línea, se ignorará cuando pindique la textura de baja densidad que se muestreará, lo que dará como resultado un círculo truncado. No sé cómo resolver este problema porque pvaría cada cuadro, por lo que no puedo 'hornear' un límite entre las dos densidades. Es fácil evitar el problema inverso creando la textura de alta densidad desde la inferior (es decir, si un círculo está en la textura de baja densidad, asegúrese de que esté en la textura de alta densidad).

Me interesa si alguien tiene una manera de mejorar mi solución o si tiene otro método por completo. La restricción aquí es que pse calcula por cuadro en tiempo real. Otra restricción está relacionada con la textura del patrón: el patrón es blanco y negro, donde el negro es el patrón y el blanco es el fondo (como los círculos en el ejemplo). El patrón puede no ser solo formas idénticas repetidas, sino cualquier disposición de formas negras arbitrarias sobre un fondo blanco. (Tal vez el patrón es la elección incorrecta de la palabra).

No estoy familiarizado con la investigación en este campo, por lo que no estaba seguro de qué palabras clave buscar, por lo que incluso agradecería si alguien me pudiera orientar en la dirección correcta.

Ryan
fuente
3
¿Tu textura real también es solo puntos negros sobre blanco? Si es así, es posible que pueda generar la textura de forma procesal, por ejemplo, con muestreo de disco de Poisson con radios variables. De lo contrario, si su textura es en realidad algo más continua, la fusión podría ser una opción (sin embargo, eso no funcionaría bien para texturas nítidas como su ejemplo). Entonces, si pudiera aclarar cómo se ve su patrón / textura real, eso podría ayudar a obtener respuestas más útiles.
Martin Ender
1
¿Proceso después de? Algo así como una variante en la detección de bordes: escriba la distancia al centro de puntos más cercano y luego, en el espacio de la pantalla, busque en el vecindario del tamaño de punto de cada píxel cualquier valor (cercano a) cero. Esto le da puntos al espacio de la pantalla, por lo que tendría que escribir y meterse con derivados UV para volver al espacio de textura ... Tenga en cuenta que todavía tiene un problema de continuidad: a medida que el límite p alto / bajo se mueve por la superficie, aparecen puntos y desaparecer Si p puede ser continuo (un límite blando), es posible que pueda reducir / hacer crecer los puntos a lo largo del límite ...
Daniel M Gessel
1
Otra opción es investigar el mosaico de Wang. introducción , mosaico genético , gemas GPU
maogenc
1
¿Has mirado el bombardeo de texturas? http.developer.nvidia.com/GPUGems/gpugems_ch20.html
Mikkel Gjoel
1
¿Puede dar una idea del rango de formas / patrones que necesita cubrir y cuánta flexibilidad puede haber en el enfoque? La sugerencia de @ DanielMGessel de cambiar los radios del círculo en lugar de su densidad podría simplificar las cosas y proporcionar una animación más fluida, pero aún no está claro cuánto está limitado su enfoque.
trichoplax

Respuestas:

6

Para garantizar que las formas del patrón siempre estén completamente presentes o ausentes, nunca se corten, es necesario asegurarse de que pse use el mismo valor para todos los texels dentro de la forma. En su ejemplo de círculos, todos los texels en un círculo dado deben estar de acuerdo p.

Supongo que tiene alguna forma de evaluar pen un punto determinado de la superficie (ya sea que se mire desde una textura o se calcule desde alguna función). Entonces, una forma de garantizar que un grupo de texels obtenga el mismo pvalor es asegurarse de que todos lo busquen desde el mismo punto.

Los UV de este punto de evaluación podrían almacenarse en canales adicionales de la textura del patrón. Por ejemplo, puede hacer que los canales rojo y verde almacenen las coordenadas UV en las que evaluar p, el canal azul almacena el umbral en el que activar ese elemento del patrón y el alfa almacena el nivel gris antialias del patrón para mostrar. Los datos del umbral UV + también podrían estar en una textura secundaria separada si se desea.

Para generar esta textura de umbral UV +, a partir de una textura de patrón de entrada, puede buscar mediante programación componentes conectados (por ejemplo, buscando píxeles negros y relleno de inundación). Establezca el punto de evaluación para todos los texels en cada componente en el UV del centro del componente y genere un umbral aleatorio para él. Luego, al renderizar, use un sombreador de píxeles que muestree primero esta textura, luego busque pel punto de evaluación dado y lo compare con el umbral dado.

De esa manera, cada forma de patrón verá un pvalor y umbral uniformes , y se encenderá o apagará por completo. A medida que paumenta, más formas pasarán su umbral y aparecerán, dando la impresión de una densidad continuamente variable.

Nathan Reed
fuente
1
Realmente me gusta esta idea, tendré que probarla. Tiene mucho sentido ¡Gracias!
Ryan
0

Otro pensamiento es a lo largo de estas líneas. Si tiene un conjunto de puntos uniforme definido en el plano y una función de mapeo desde el plano a la superficie objetivo, entonces la función de densidad en la superficie es cómo se asignan las áreas desde la superficie plana al objetivo. Por lo tanto, un mapa de preservación de área daría como resultado puntos uniformes en el objetivo.

MB Reynolds
fuente