Autor Wątek: Tłumienie światła dla otwartych przestraszeni  (Przeczytany 1361 razy)

Offline Romanus

  • Użytkownik

# Lipiec 29, 2006, 05:40:18
Tłumienie światła (dla świateł pozycyjnych) możemy obliczyć ze wzoru:
tłumienie = 1/(Kc + Kl*d + kq*d^2), gdzie
d - odległość pomiędzy pozycją światła a vertexem
Kc = GL_CONSTANT_ATTENUATION
Kl = GL_LINEAR_ATTENUATION
Kq = GL_QUADRATIC_ATTENUATION

Obliczenia związane z oświetleniem są prawdopodobnie najbardziej czasochłonne przy generowaniu grafiki. Postanowiłem, że w moim engine zanim światło będzie "rysowane" przejdzie testy, czy jest w frustrze widoku i czy przypadkiem nie jest zasłonięte. To czy przejdzie te testy uzależniłem od siatki w której, na przykład znajduje się stożek (światło) o kącie rozwarcia 30 stopni (ostrosłup o podstawie sześciokąta foremnego). Utworzenie takiej siatki jest banalne; znając pozycję, kierunek wiązki światła, kąt rozwarcia i długość (wysokość tego ostrosłupa)[oczywiście dla 180 może być sześcian a dla 90 prostopadłościan] wiązki światła aż do "wytłumienia". [oczywiście realnie to nie ma sensu, wiem, wiem]. I z tą wysokością pojawia się problem.
Ponieważ standardowo tłumienie = 1, czyli wysokość ostrosłupa dąży do nieskończoności i fotony lecą sobie hen, hen. Raczej marny pożytek z bryły okalającej tą wiązkę światła, ponieważ, jeśli wiązka znajdzie się w frustrze widoku, to prawdopodobnie będzie choćby mała szparka, przez którą zobaczymy tą bryłę (jest nieskończenie długa). Co za tym idzie będziemy musieli wyręderować światło i narysować cień dla obiektów z frustry widoku, a dokładniej dla podgrupy z tej frustry widoku-oka które nie są zasłonięte względem światła. Mogę pomajstrować przy współczynnikach Kc, Kl, Kq i zbadać dla jakiego ‘d’ tłumienie jest na przykład mniejsze od e = 0.001. A tym samym poznać "długość wiązki światła", czyli wysokość ostrosłupa "okalającego" tą wiązkę. To już lepiej, szczególnie dla otwartych dużych przestraszeni, ponieważ mamy już bryłę, która może podlegać różnym testom. Jak Wy rozwiązujecie ten problem? Biorąc pod uwagę, że świateł może być w ch*&, ponieważ możemy zastosować GLSL (i na przykład Bump Mapping dla każdego "naszego" światła).

Offline Mr. Spam

  • Miłośnik przetworów mięsnych