2012-01-18 19 views
5

Estoy tratando de crear un sombreado de vértice/fragmento de estructura alámbrica en Unity. Parece posible según this paper. Las ideas generales parecen ser que pasa un vector de distancia calculado en el sombreador de vértices a cada fragmento en el sombreador de fragmentos, que puede usar para determinar qué brillo dibujará la línea de estructura de alambre en función de su posición dentro de un polígono.¿Es posible acceder a todos los vértices en un polígono en un sombreado de vértices?

De todo lo demás que he leído, parece que solo se tiene acceso a un solo vértice en un sombreado de vértices. Necesitaría acceso a todos los vértices vecinos en un polígono para ecah vertex. El documento parece implicar que no es necesario un sombreador de geometría, lo cual es bueno porque Unity aún no los admite.

¿Qué me estoy perdiendo? ¿Nunca es posible acceder a los vértices vecinos en un sombreado de vértices? ¿Es lo que estoy tratando de hacer imposible sin sombreadores de geometría?

Respuesta

2

Usted parece tener de hecho un exceso de leer el párrafo en 2.1 que dice

Paso G1 generalmente se realiza siempre en el vertex shader. El paso G2 se debe realizar en el sombreador de geometría, ya que el sombreador de geometría tiene acceso a todos los vértices del polígono (siempre que sea un triángulo). En consecuencia, si no se utiliza el sombreador de geometría, el sombreador de vértices necesita recibir los otros vértices como atributos para calcular las distancias. Esto implica que el código de la aplicación no es invariable para saber si se usa el método wireframe, que se deben transmitir datos adicionales a , y, finalmente, que el uso de primitivas indexadas es excluido ya que los atributos de un vértice dependen de qué triángulo es dibujado.

De modo que cuando no utiliza el sombreador de geometría, no conoce los otros vértices de un triángulo y, por lo tanto, tiene que transmitirlos como atributos de vértices adicionales. Entonces para cada vértice de un triángulo tienes dos atributos adicionales de vec3 que contienen las posiciones de los otros dos vértices de este triángulo. Y, por supuesto, como dice el texto, no se puede usar un dibujo indexado, ya que esos dos atributos no solo dependen de la posición del vértice, sino también del triángulo al que pertenece este vértice.

+0

Gracias por su ayuda. ¿Sabes si estas restricciones son algo que se puede superar dentro del motor de Unity? ¿Es posible pasar esta información adicional en un sombreador Cg como los que usa Unity? ¿De dónde se realizaría ese pase? – aardvarkk

+0

@aardvarkk Estas restricciones no se pueden superar ya que son restricciones del hardware/interfaz subyacente y no del motor o del lenguaje de sombreado. Un sombreador de vértices solo tiene acceso a un solo vértice y debe otorgarle a los otros dos atributos de este vértice. No tengo ninguna experiencia con Unity, pero Cg por supuesto tiene atributos por vértice y estoy seguro de que Unity tiene algunos medios para darle a los vértices de su modelo los atributos personalizados. –

+0

@aardvarkk ¿Tiene más preguntas con respecto a su pregunta original (si puede acceder a los vecinos en VS y si su meta es imposible sin GS)? No obtendrás respuestas diferentes de nadie que entienda los sombreadores de vértices y geometría. Unity no tiene nada que ver con eso, ya que no puede superar mágicamente las limitaciones del hardware de gráficos subyacente. –

Cuestiones relacionadas