Eu não liberei o código-fonte do Castle demo pelos motivos enumerados:
1. O código não está bem escrito (motivo: foi feito somente para teste)
2. Ele está bagunçado
3. Não está bem otimizado (foi uma espécie de "teste de laboratório" antes que eu colocasse isso em pratica)
4. É possÃvel fazer muito melhor que isso
Como eu disse, esse foi apenas um teste de laboratório pro projeto de verdade, que é a Ethanon Engine (
http://www.youtube.com/watch?v=FMFIaxrINVU). A versão beta do engine já está pronta. Estou escrevendo a documentação e alguns tutoriais antes de liberar. O engine será disponibilizado sob licensa LGPL, assim como a GameSpaceLib, então todos terão acesso a uma versão MUITO melhor que a do castle demo.
entityPos refere-se à posição da entidade (do objeto 2D) na cena. O posicionamento é tridimensional, sendo o eixo X e Y iguais aos do padrão de projeção da tela e o eixo Z aponta para cima. Assim como é no Age of Empires por exemplo (quando era 2D).
pos0 e pos1 podem ser 0 ou 1. Isso é usado nos shaders onde não podemos usar if e queremos escolher entre um valou ou outro no mesmo shader. Por exemplo, para escolher o valor de A ao invés de B, basta setar pos0 para 1.0 e pos1 para 1.0:
result = A * pos0 + B * pos1
Claro que isso não é o ideal. O ideal, principalmente num pixel shader, é usar dois shaders diferentes. Um para pegar A o outro para B, e é o que estou fazendo na Ethanon Engine.
No entanto o site da GSlib que mostra um efeito de luz por pixel bem semelhante, e este é bem explicado, apesar de ser bem mais simples:
http://asantee.net/gamespace/tutorial03 ... haders.zip