Tôi không thể tìm thấy một lý do tốt cho việc này ở bất cứ đâu. Các vectơ phản xạ được sử dụng trong phong có một cơ sở đơn giản trong vật lý. Nhưng một nửa vectơ được sử dụng trong blinn dường như không có cơ sở hợp lý, và không tạo thành một sự phản ánh đúng đắn. Tuy nhiên, nó được sử dụng trong mọi chức năng tạo bóng được gọi là "dựa trên vật lý". Nếu có một cơ sở vật lý tốt cho nó, tôi muốn biết.
Những gì tôi có thể tìm thấy là một vài lý do:
Nó nhanh hơn - có thông tin lẫn lộn về điều này, nhưng ngay cả như vậy nó sẽ là một lý do tuyệt vời ... trong năm 1998.
Nó xử lý các góc cao hơn 90 độ tốt hơn - theo như tôi có thể nói lý do duy nhất cho việc này là vì thuật ngữ phong đã được sử dụng không đúng cách. Sản phẩm chấm của sự phản chiếu và khung nhìn cho một góc giữa -1 và +1. Thông thường góc này được kẹp thành 0 đến 1, đây là nguyên nhân trực tiếp của vấn đề 90 độ. Bình thường hóa góc thay vì kẹp nó và bạn có được phạm vi bảo hiểm 180 độ đầy đủ. Tôi từ chối tin rằng một thao tác x * 0,5 + 0,5 đơn giản đã lảng tránh thế giới đồ họa trong 40 năm.
nó xử lý các cạnh tốt hơn - "Vấn đề" cạnh cũng tồn tại trong giải pháp blinn, chỉ ở mức độ thấp hơn. Nguyên nhân chính là mô phỏng không chính xác ánh sáng khu vực tại điểm cuối, điều này rất cần thiết cho bất kỳ trình tạo bóng "dựa trên vật lý" nào. Nhưng ngay cả trong những tình huống đơn giản hơn, một hàm sigmoid có thể xấp xỉ một dòng terminator mềm một cách chính xác. Nhân vào một thuật ngữ lambert là không chính xác vì nó làm giảm thuật ngữ cụ thể không đúng, điều này có thể hủy bỏ một thuật ngữ fresnel và dẫn đến các lỗi tiếp theo.
Nó có các phản xạ dài ở rìa - Dường như với tôi rằng trong khi các phản xạ dị hướng có thể là hiện thực, thì blinn không phải là cách chính xác để thực hiện chúng, vì chúng chỉ xuất hiện ở rìa. Nó chỉ đơn thuần là một sự trùng hợp vui vẻ khi một lỗi trong thuật ngữ H xảy ra trông có vẻ thực tế.
Không có lý do nào trong số này là thỏa đáng, tôi muốn loại bỏ sự điên rồ này.
Tôi muốn làm rõ rằng tôi không nói cụ thể về blinn và phong , mà thay vào đó là về các thành phần vectơ H và R, được sử dụng làm cơ sở cho các shader này cũng như các shader khác.