Estamos tratando de optimizar la iluminación en velocidad de llenado. Los chips gráficos integrados son muy lentos en el acceso a la memoria.
Hay dos Light Buffers: uno para Diffuse y otro para Specular. Ambos usan el formato R11G11B10F. ¿Hay alguna forma de empacar dos buffers en uno? Por ejemplo, usando el modelo de color Y'CbCr:
shader
color
optimisation
skif_engineer
fuente
fuente
Respuestas:
Es posible que desee ver The Compact YCoCg Framebuffer . Utiliza un búfer de 2 canales para almacenar la luminancia para cada píxel y los dos componentes de croma en la mitad de cada píxel, formando un tablero de ajedrez. También utiliza un filtro de muestreo ascendente con reconocimiento de bordes al final del cuadro para reconstruir los componentes de croma que faltan y convertirlos nuevamente a RGB.
Puede extender esto a un único búfer de 3 canales para almacenar la luminancia difusa, la luminancia especular y el croma con cuadros de verificación (suponiendo, según el diagrama en su pregunta, que es suficiente almacenar solo un par de valores de croma).
También puede considerar usar el formato R10G10B10A2, a menos que realmente necesite el rango del formato de punto flotante. Es la misma cantidad de ancho de banda, pero le dará mucha más precisión (R11G11B10F solo le da de 5 a 6 bits de mantisa por componente). Además, puede usar los 2 bits de alfa para almacenar un par de banderas, como su bandera difusa / especular.
fuente
Si está de acuerdo con que el especular sea solo blanco, podría poner difuso y especular en RGBA.
Parece que eso es lo que hace la unidad por su renderizado diferido.
Alguien descubriendo este problema: http://forum.unity3d.com/threads/specular-color-based-on-light-color.134412/
Los documentos que lo mencionan: https://docs.unity3d.com/Manual/RenderTech-DeferredLighting.html
fuente