Nigdzie nie mogę znaleźć dobrego powodu. Wektor odbicia zastosowany w phong ma prostą podstawę w fizyce. Ale wektor połówkowy zastosowany w blinnie najwyraźniej nie ma racjonalnych podstaw i nie stanowi właściwego odzwierciedlenia. A jednak jest stosowany w każdej tak zwanej „fizycznie” funkcji cieniowania. Jeśli jest to dobra podstawa fizyczna, chciałbym wiedzieć.
To, co udało mi się znaleźć, to kilka powodów:
Jest szybszy - informacje na ten temat są mieszane, ale i tak byłby to świetny powód ... w 1998 roku.
Lepiej radzi sobie z kątami większymi niż 90 stopni - o ile mogę powiedzieć, jedynym powodem jest to, że termin phong został niewłaściwie użyty. Iloczyn iloczynu odbicia i widoku daje kąt od -1 do +1. Zwykle kąt ten jest zaciśnięty od 0 do 1, jest to bezpośrednia przyczyna problemu 90 stopni. Ponownie znormalizuj kąt zamiast go mocować, a uzyskasz pełne pokrycie 180 stopni. Nie wierzę, że prosta operacja x * 0,5 + 0,5 wymyka się światowi grafiki od 40 lat.
lepiej radzi sobie z krawędziami - „problem” krawędzi występuje również w rozwiązaniu Blinna, tylko w mniejszym stopniu. Główną przyczyną jest niewłaściwa symulacja oświetlenia obszaru na terminalu, która powinna być niezbędna dla każdego „fizycznego” modułu cieniującego. Ale nawet w prostszych sytuacjach funkcja sigmoidalna może poprawnie aproksymować miękką linię terminatora. Mnożenie wyrażenia Lambera jest nieprawidłowe, ponieważ niewłaściwie tłumi ono określenie lustrzane, może to spowodować anulowanie wyrażenia Fresnela i prowadzić do dalszych błędów.
Ma długie odbicia na krawędzi - Wydaje mi się, że chociaż odbicia anizotropowe mogą być realistyczne, blinn nie jest właściwym sposobem na ich wdrożenie, ponieważ pojawiają się tylko na brzegu. To tylko szczęśliwy zbieg okoliczności, że błąd w nazwie H wydaje się realistyczny.
Żaden z tych powodów nie jest zadowalający, chcę rozwiązać to szaleństwo.
Chcę wyjaśnić, że nie mówię o Blinn i Phong specjalnie , ale zamiast o składowych wektora H i R, które są wykorzystywane jako podstawa dla tych shaderów, jak również innych.