Você sempre precisa multiplicar pelo termo cosseno (isso faz parte da equação de renderização). Embora quando você difunde indiretamente usando ray-tracing e, portanto, integração monte-carol (que é a técnica mais comum nesse caso), você deve dividir a contribuição de cada amostra pelo seu PDF . Isso é bem examinado aqui .
Observe também que, na referência mencionada, se o PDF tiver termos que você também encontra nas equações de renderização, você poderá otimizar o código, se desejar, cancelando esses termos.
Não esqueça que o BRDF de uma superfície difusa é ρ / π onde ρ representa o albedo da superfície. Então, precisamos dividir o resultado por π. Embora, no caso do componente difuso indireto, não se esqueça de que deveríamos ter dividido o resultado do castRay pelo PDF da variável aleatória, que, como mostramos anteriormente neste capítulo, é 1 / (2π). DividirDiffus indireto por 1 / (2π) equivale a multiplicar esse valor por 2π. E como o albedo também é dividido por π, podemos simplificar o código ...
Você tem uma situação semelhante. Se você olhar o PDF para a amostragem de cosseno, perceberá que os termos podem ser cancelados. O que não significa que eles não sejam estritamente necessários. Eles são apenas cancelados um ao outro, o que permite otimizar um pouco o código (e evitar algumas divisões, multiplicações etc.). Você está mais na micro-otimização aqui ... o que pode ser confuso se você tentar aprender a teoria apenas olhando para o código otimizado (que geralmente não é comentado adequadamente).
( C o s ( θ ) . . . )PD F= ( C o s ( θ ) . . . )c o s ( θ )π= . . .