Como lidar com a refração quando os raios começam dentro de um objeto aninhado

Estou construindo um raytracer simples para fins educacionais e quero adicionar refração a objetos. Usando a Lei de Snells, sou capaz de criar um novo raio recursivamente nos pontos de interseção. O raytracer suporta atualmente apenas esferas e eu uso uma cena em que tenho várias esferas aninhadas umas nas outras com diferentes índices de refração.

Se eu iniciar um raio de fora das esferas, tudo parece simples. Você começa com o índice de refração da cena e, assim que atinge a primeira esfera, refrata o raio usando o índice de refração antes e o índice de refração do material da esfera até atingir a próxima esfera e assim por diante. Usando as normais da interseção, posso determinar se entro ou saio da esfera.

No entanto, eu não entendo como devo lidar com folhas de esfera e o que fazer se o raio não começar na parte externa da cena.

Posso pegar uma pilha dos índices de refração e subir uma camada assim que sair de uma esfera?Como posso determinar com que índice de refração tenho que iniciar se começar dentro das esferas?

Exemplo

Você tem três esferas, com índices de refração 0,9, 1,1 e 0,8 do externo para o interior. O índice de ar é 1,0

Sua câmera está fora da esfera e aponta para o centro da esfera:

O índice inicial é 1.0, você primeiro atinge a esfera externa com o índice 0,9 e refrata de 1,0 a 0,9 e salva que seu raio agora está no material 0,9você atinge a esfera do meio e percebe a constante material de 1,1; desde que você salvou o 0,9, sabe que deve refratar de 0,9 a 1,1 e salvar o 1,1, além do 0,9você atinge a esfera interna e refrata de 1,1 a 0,8 e economiza até agora 0,9, 1,1 e 0,8você atinge a esfera interna novamente (desta vez, sai dela, para verificar seus valores salvos e saber que precisa voltar para 1.1)... até você estar fora

Problema agora, quando a câmera está dentro da esfera. Você não saberá para qual índice de refração você precisa alternar.

questionAnswers(2)

yourAnswerToTheQuestion