Tại sao H (blinn) được sử dụng thay vì R (phong) trong bóng râm?


22

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.

Câu trả lời:


24

Đối với bề mặt phản chiếu hoàn hảo Phong mô hình có ý nghĩa. Tuy nhiên, n trong (RV) ^ n của Phong-model cho xấp xỉ các bề mặt cứng hơn đến từ đâu? Đâu là lý thuyết mà bạn phải nâng kết quả của sản phẩm chấm lên sức mạnh ngoại trừ việc nó chỉ xuất hiện để đưa ra kết quả phù hợp theo kinh nghiệm?

Đối với mô hình Blinn, có lý thuyết microfacet dựa trên vật để hỗ trợ tất cả các thành phần trong phương trình và cũng có bằng chứng thực nghiệm cho thấy mô hình gần đúng với bề mặt thế giới thực hơn (mặc dù không hoàn hảo). Nửa vectơ trong mô hình Blinn được sử dụng làm đầu vào cho hàm phân phối bình thường (NDF), đây là một phép tính gần đúng về cách các microfacet được phân phối về bề mặt bình thường như chức năng của độ nhám bề mặt. Tức là khi vectơ H chỉ vào hướng bình thường, giá trị là cao nhất vì hầu hết các microfacet đều chỉ theo hướng đó và xác suất giảm theo khi góc giữa vectơ bình thường và vectơ H tăng lên.

Mặc dù vậy, mô hình Blinn không hoàn hảo bằng bất kỳ phương tiện nào và ví dụ, nó không tính đến thuật ngữ hình học của mô hình microfacet (ví dụ như che bóng và che giấu các microfacet có tầm quan trọng tăng lên trong góc chăn thả).


Tôi không nói về việc thực hiện cụ thể của phong mà thực sự không có cơ sở vật chất. Nhưng tôi không thể thấy lý thuyết microfacet hỗ trợ H tốt hơn R như thế nào làm cơ sở cho một vectơ phản xạ. Không có mô hình tạo bóng nào được hỗ trợ theo kinh nghiệm, mọi người đều thất bại trong việc tái tạo vật liệu thực theo bổ sung "Xác thực thử nghiệm BRDF" năm 2005. Theo tôi, các microfacet được mô hình hóa trong phong thông qua sản phẩm chấm R · V, có thể đóng vai trò là một cơ sở cho một điểm nổi bật chính xác hơn thông qua chức năng ánh xạ lại hoặc đoạn đường nối. Một hàm năng lượng đơn giản là ánh xạ lại đơn giản nhất, không chính xác nhất.
BmB

2
@BmB Không, microfacet không được "mô hình hóa trong phong" mà sử dụng phân phối xác suất của microfacet được xác định bằng NDF, đó là "được lấy mẫu" với vectơ H. NDF thường đối xứng về bình thường (đẳng hướng / dị hướng) vì vậy sẽ rất hợp lý khi sử dụng H-vector cho nó. Tôi nói có bằng chứng thực nghiệm rằng Blinn-mô hình hơn chặt chẽ xấp xỉ vật liệu thế giới thực hơn Phong.
JarkkoL

Bất kỳ sự phản chiếu nào không nằm dọc theo vectơ phản chiếu không phải là sự phản chiếu gương hoàn hảo. Sản phẩm chấm tạo ra giá trị phản xạ cho các góc không hoàn hảo. Nhất thiết, chúng phải được sản xuất bởi microfacets. Do đó, sản phẩm chấm có mô hình microfacets. Một dấu chấm đơn giản tạo ra một phân phối tuyến tính. Nhưng phân phối có thể được mô hình hóa bởi bất kỳ chức năng nào với R cũng như H. Điều này không giải thích gì về tính hợp lệ của H so với R.
BmB

1
@BmB Tôi đề nghị bạn đọc về lý thuyết microfacet và cụ thể về phần NDF để hiểu khái niệm này. Điều đó sẽ giúp bạn có được câu trả lời cho câu hỏi của bạn.
JarkkoL

1
Bạn nên mở một câu hỏi mới về microfacets và NDF vì rõ ràng có rất nhiều bạn không hiểu về những khái niệm này và những bình luận không phải là nơi thích hợp để giải thích chúng.
JarkkoL

6

Trên thực tế, tôi nghĩ rằng chính bạn đã liệt kê các lý do tại sao Blinn là mặc định hơn Phong.

Trên thực tế, mỗi lý do bạn liệt kê là một khu vực nơi Blinn tỏ ra vượt trội so với Phong.

Nhìn chung, tất cả những điều này dẫn đến Blinn là một mặc định tốt hơn Phong.

Blinn có hoàn hảo không? Có tốt hơn Phong không?

Không.

Nhưng nó một mặc định hợp lý. Hãy thoải mái thay Phong cho Blinn trong bất kỳ trình kết xuất / đổ bóng nào bạn viết.


Đồng ý, đây chính xác là nó. Không phải mô hình là hoàn hảo. Xấp xỉ của Blinn là trên hết là tối ưu hóa hiệu suất hồi đó, vì tính nửa góc là rẻ hơn nhiều. Hóa ra nó cũng có vẻ tốt hơn hầu hết thời gian.
Damon

-2

Tôi đã phát hiện ra lý do cho vectơ H được sử dụng. Thật không may, nó không phải là cách nó được sử dụng trong hầu hết các mô hình tô bóng, sau đó có thể được kết luận là không chính xác.

Đối với ánh sáng vật lý dựa trên ánh sáng phản xạ phải tuân theo các phương trình fresnel. (Hầu hết các shader "dựa trên vật lý" không) Các micrô cũng phải tuân theo các phương trình fresnel, dựa trên góc tới của ánh sáng cũng như chỉ số khúc xạ của giao diện để tạo ra kết quả chính xác.

Theo định luật phản xạ góc tới phải được nhân đôi với góc phản xạ dọc theo bề mặt bình thường. Để một tia sáng chiếu vào máy ảnh - mà chúng ta biết nó đã làm - nó phải được phản chiếu từ ánh sáng - mà chúng ta biết hướng của. Do đó, bề mặt bình thường phải bằng cách suy ra là trục gương cho hai hướng này. Điều này cho chúng ta một nửa vectơ H nằm giữa chúng. Tính bằng cách chuẩn hóa tổng của cả hai.

Bây giờ bằng cách tính góc giữa hướng sáng L và nửa vectơ H, chúng ta thu được góc tới đối với sự phản xạ đặc trưng của microfacet và có thể làm giảm chính xác nó bằng thuật ngữ fresnel.

Lưu ý rằng hướng xem bằng R cho microfacet đó, H không phải là thuật ngữ phản chiếu. Blinn, Cook, Torrance và Sparrow có thể hút nó. Phong và Fresnel đã đúng.


Thuật ngữ Fresnel là một phần của phương trình BRDF microfacet và microfacet riêng lẻ không tính đến điều này vì chúng được mô hình hóa như là các phản xạ hoàn hảo. Ngoài ra, bạn không tính góc giữa vectơ L và H mà vectơ N và H. Điều này sẽ cho bạn một gợi ý tại sao H đang được sử dụng. Bạn cần thêm một chút kiến ​​thức về chủ đề này để kết luận ai đúng hay "đúng hơn";)
JarkkoL

Một microfacet của vật liệu có các tính chất tương tự như vật liệu. Do đó, một microfacet của một gương phản xạ không hoàn hảo có thể tự nó là một phản xạ hoàn hảo. Logic của bạn là vô căn cứ và không có ích. N chấm H không có ý nghĩa vật lý.
BmB

4
Không, đó không phải là cách mô hình microfacet hoạt động. Logic của tôi là âm thanh hoàn hảo vì bất cứ ai hiểu ngay cả những điều cơ bản của mô hình microfacet đều có thể xác nhận. Mỗi microfacet là gương phản xạ hoàn hảo (nghĩa là phẳng về mặt quang học) và sự phản xạ không hoàn hảo của vật liệu xuất phát từ phương sai của các quy tắc microfacet như được định nghĩa bởi NDF. Sự kiên trì của bạn để thách thức những lời khuyên hoàn toàn hợp lệ là điều thú vị;)
JarkkoL

Bạn đã không đưa ra lời khuyên nào, tất cả những gì bạn đã làm là kiên trì khẳng định mình đúng mà không có gì để sao lưu và ném những lời lăng mạ. H là bình thường của microfacet, không phải là sự phản chiếu. Sự phản ánh có thể được tính toán với bình thường. Vật lý cơ bản không đồng ý với bạn.
BmB
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.