Suponga que hay algún valor p
, calculado por cuadro, que varía continuamente sobre la superficie de un objeto. El valor de p
determina la densidad de algún patrón en la superficie. Por ejemplo, en un caso con solo dos densidades posibles si p < 0.3
es 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 p
muestra 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):
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.
Y finalmente aquí está la comparación entre lo que se desea y lo que realmente sucedería usando este método:
El problema es que cuando un círculo de alta densidad cruza la línea, se ignorará cuando p
indique 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 p
varí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 p
se 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.
Respuestas:
Para garantizar que las formas del patrón siempre estén completamente presentes o ausentes, nunca se corten, es necesario asegurarse de que
p
se 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 acuerdop
.Supongo que tiene alguna forma de evaluar
p
en 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 mismop
valor 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
p
el punto de evaluación dado y lo compare con el umbral dado.De esa manera, cada forma de patrón verá un
p
valor y umbral uniformes , y se encenderá o apagará por completo. A medida quep
aumenta, más formas pasarán su umbral y aparecerán, dando la impresión de una densidad continuamente variable.fuente
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.
fuente