Co możemy zrobić w przypadku uderzenia w materiał półprzeźroczysty. Możemy pomniejszyć kolor światła źródła o transmitancje materiału. Możemy pomniejszyć go o wartość kosinusa kąta pomiędzy normalną, a kierunkiem promienia symulując tym samym ubytek energii promienia w wyniku rozproszenia. Możemy wreszcie uwzględnić efekt Fresnella.
Wszystkie wspomniane metody zostały zaimplementowane jako osobne klasy wywodzące się z
ShadowTester
. Jest to specjalna klasa do ustalania koloru światła w punkcie uderzenia. Pierwszy najprostszy tester
SolidShadowTester
nie implementuje przeźroczystych cieni. Drugi AttenuationShadowTester
uwzględnia tłumienie ośrodka. Trzeci AttenuationTransmittanceShadowTester
dodatkowo uwzględnia trasmitancje materiału. Czwarty AttenuationTransmittanceAngleShadowTester
bierze pod uwagę kąt padania promienia do normalnej. Przy czym dla bardziej realistycznego efektu podnoszony jest on do potęgi Constants.TRANSFLUENT_SHADOWS_ANGLE_POWER_EXPONENT=0.25
. Ponieważ wartości kąta zawierają się od 0 do 1, wyginamy więc krzywą tak, że $cos^{0.25}>cos$. Cienie są więc o wiele bardziej jasne, i w ten sposób są bardziej realistyczne. Ostatni tester AttenuationTransmittanceAngleFresnellShadowTester
w warunkach lokalnego oświetlenia okazał się najgorszy. Potrafi wygenerować całkowicie ciemne cienie w wyniku całkowitego wewnętrznego odbicia. Ale zostawiłem go mimo wszystko dla porównania.
Brak komentarzy:
Prześlij komentarz