2011-07-23 28 views
11

Cada vez que borracho navego, veo una pregunta sobre el ancho de la pregunta sin respuesta. Y me hace preguntarme para qué fue diseñada realmente.¿para qué se usa realmente la función fwidth glsl?

Leyendo los documentos es abs (dFdx (p)) + abs (dFdy (p)).

Por lo tanto, no es la selección de mip clásica que es máxima (dx, dy). ¿Es para la selección alternativa de mip? Pero no encuentro un caso en el que abs (dx) + abs (dy) sea mejor. Debe haber algún papel de siggraph o algoritmo común que me falta por completo que usa esa función. Y debe ser realmente popular porque se convirtió en GLSL. Lo único que se me ocurre es un filtro de 2d post que me falta.
¿Pero qué? Estoy seguro de que alguien aquí lo sabe y una vez que lo ves es obvio. Entonces: ¿Qué algoritmo usa abs (dx) + abs (dy)?

+1

El filtro de postes 2D que mencionas es un buen ejemplo en realidad. – Bart

+0

pero, ¿qué filtro? – starmole

+4

Haga su elección. Anti-aliasing, detección de bordes, filtrado anisotrópico. De hecho, después de buscar Google, encontré un ejemplo. Usa [aquí] (http://prideout.net/blog/?p=22) donde se usa para suavizar un sombreado de cel shading. – Bart

Respuesta

9

En realidad, tiene bastante dinero con la sugerencia de filtro 2D. Cualquier filtro que dependa de algún tipo de métrica para la tasa de cambio entre un píxel y sus vecinos podría beneficiarse de esta función.

Ejemplos serían anti-aliasing, detección de bordes, filtrado anisotrópico. Estoy seguro de que hay más ejemplos que uno podría pensar.

Parece de su pregunta y comentarios que espera que haya una razón alucinante para que esta función se incluya en GLSL. Solo diría que es una función útil de tener. Quizás alguien con un conocimiento más profundo sobre el funcionamiento interno real de esta función podría proporcionar más detalles sobre lo que sucede detrás de escena (es decir, si hay alguna mejora en el rendimiento con respecto a un equivalente escrito a mano con dFdx y dFdy).

+0

Gracias por la respuesta. Tiene sentido. Lo que estaba buscando era realmente algo "alucinante". Por ejemplo, al observar la función de ruido GLSL, sé por qué está ahí, por qué debe ser manejada por entrada, etc. ¡Pero solo porque ya sabía sobre el ruido de Perlin! Así que supongo que esta función es igualmente importante en algún algoritmo del que no sé nada. Pero con la edad de la pregunta y nadie respondiendo con un enlace siggraph probablemente tenga razón: es un atajo útil, fácil de implementar y emular.De todos modos, gracias por la paciencia y lo siento si parecía un poco douchy :) – starmole

+0

Aquí hay un buen ejemplo de shader usando fwidth también: [terrain-contour-lines] (http://www.gamedev.net/topic/529926-terrain-contour-lines-using-pixel-shader /) – wil

3

esta es la derivada total para la función DF = dF/dx * dx + dF/dy * dy. ¿Observa la similitud? fWidth> = DF o en palabras fWidth es el cambio máximo posible en una variable de fragmento F, entre cualquiera de los píxeles adyacentes actuales de un fragmento. es decir, los 8 píxeles que lo rodean en el vecindario de 3x3.

Cuestiones relacionadas