HLSL - Criando sombras em 2D


7

A maneira como eu crio sombras é pela seguinte técnica: http://www.catalinzima.com/2010/07/my-technique-for-the-shader-based-dynamic-2d-shadows/

Mas eu tenho perguntas para o HLSL. Do jeito que eu faço atualmente, tenho uma imagem em preto e branco, onde Preto significa 'objeto' e branco significa 'nada'. Então distorço a imagem como no tutorial. Faço isso com um sombreador de pixels, mas em vez de renderizar na tela, renderizo para uma textura, de volta ao meu aplicativo. Então pego isso, crio as sombras e depois a envio de volta à placa gráfica para desfazer a distorção, depois que a sombra é adicionada - isso volta e eu tenho um estêncil de sombra. Eu posso colocar isso na parte superior da imagem original e enviá-los de volta para a placa gráfica, que os coloca na tela.

Para mim, isso é um monte de idas e vindas. Existe uma maneira de evitar isso?

O problema que estou tendo é que preciso basicamente percorrer todas as posições na textura três vezes e usar a nova nova textura todas as vezes, em vez da original. Tentei ler os passes, mas não acho que estou indo na direção certa.

Socorro?

Respostas:


2

Estudei o método de Catalin por um bom tempo. O problema com esse método é que ele é perfeito em pixels. Isso requer muito trabalho no pixel shader para funcionar, embora com grande efeito.

Uma maneira muito mais rápida de criar sombras é através do vertex shader. Tentei o Krypton e estou pensando em adicionar malhas de sombra ao meu conteúdo apenas para usá-lo. Vídeo


0

O melhor que você poderá fazer é ter duas luzes.

Você notará que, em uma das etapas posteriores, a distorção da posição horizontal é armazenada no canal vermelho e a posição vertical é armazenada no canal verde. Atualmente, os canais azul e alfa não são utilizados, o que significa que você pode essencialmente executar esse sombreador em duas fontes de luz.

É um shader realmente complicado e caro, então eu não acho que você poderá cortar mais do que talvez um passo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.