Estamos tentando otimizar a iluminação na taxa de preenchimento. Os chips gráficos integrados são muito lentos no acesso à memória.
Existem dois amortecedores de luz: um para difuso e outro para especular. Ambos usam o formato R11G11B10F. Existe alguma maneira de empacotar dois buffers em um? Por exemplo, usando o modelo de cores Y'CbCr:
shader
color
optimisation
skif_engineer
fonte
fonte
Respostas:
Você pode querer olhar para o Compact YCoCg Framebuffer . Ele usa um buffer de 2 canais para armazenar a luminância de cada pixel e os dois componentes de croma na metade dos pixels, formando um tabuleiro de xadrez. Ele também usa um filtro de upsampling com reconhecimento de borda no final do quadro para reconstruir os componentes de croma ausentes e converter novamente em RGB.
Você pode estender isso para um único buffer de 3 canais para armazenar a luminância difusa, luminância especular e croma quadriculado (supondo com base no diagrama da sua pergunta que basta armazenar apenas um par de valores de croma).
Você também pode considerar o uso do formato R10G10B10A2, a menos que realmente precise do intervalo do formato de ponto flutuante. É a mesma quantidade de largura de banda, mas oferece muito mais precisão (o R11G11B10F fornece apenas de 5 a 6 bits de manutenção por componente). Além disso, você pode usar os 2 bits de alfa para armazenar algumas bandeiras, como sua bandeira difusa / especular.
fonte
Se você está bem com especular sendo apenas branco, você pode colocar difuso e especular em RGBA.
Parece que é isso que a unidade faz por sua renderização adiada.
Alguém que descobre esse problema: http://forum.unity3d.com/threads/specular-color-based-on-light-color.134412/
Os documentos que o mencionam: https://docs.unity3d.com/Manual/RenderTech-DeferredLighting.html
fonte