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?

Richard
fonte

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

Nathan Goings
fonte
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.

kanno41
fonte