Reflexão e refração impossíveis sem o traçado de raios recursivos?

Estou escrevendo um renderizador de raytracing em tempo real baseado em GPU usando um shader de computação GLSL. Até agora, ele funciona muito bem, mas me deparei com um problema aparentemente insolúvel quando se trata de ter reflexões e refrações simultaneamente.

Minha lógica me diz que, para ter reflexos e refrações em um objeto, como o vidro, o raio teria que se dividir em dois, um raio se refletia na superfície e o outro se refratava através da superfície. As cores finais desses raios seriam então combinadas com base em alguma função e, finalmente, usadas como a cor do pixel de onde o raio se originou. O problema que tenho é que não consigo dividir os raios no código de sombreador, pois precisaria usar a recursão para fazer isso. Pelo meu entendimento, as funções em um sombreador não podem ser recursivas porque todas as funções GLSL são como funções embutidas em C ++ devido a problemas de compatibilidade com o hardware GPU mais antigo.

É possível simular ou falsificar a recursão no código de sombreador, ou posso obter reflexão e refração simultaneamente sem usar recursão? Não consigo ver como isso pode acontecer sem recursão, mas posso estar errado.

questionAnswers(1)

yourAnswerToTheQuestion