Ánh sáng xung quanh


7

Trên trang Wikipedia cho mô hình Phong , nó nói rằng thuật ngữ môi trường không đổi và chỉ được thêm vào các thuật ngữ khác. Nhưng trên các trang khác như LearnOpenGL, nó nói rằng bạn nên lấy thuật ngữ xung quanh và nhân nó với màu của đối tượng. Điều nào là đúng?


Lưu ý rằng sau này trong bài viết, wikipedia nói "Khi màu được biểu thị bằng các giá trị RGB, như thường thấy trong đồ họa máy tính, phương trình này thường được mô hình riêng cho các cường độ R, G và B, cho phép các phản xạ khác nhau hằng số ka, {\ displaystyle k _ {\ text {a}},} k _ {\ text {a}}, kd {\ displaystyle k _ {\ text {d}}} k _ {\ text {d}} và ks {\ displaystyle k _ {\ text {s}}} k _ {\ text {s}} cho các kênh màu khác nhau. "
Cort Ammon

Câu trả lời:


6

Đúng là cách OpenGL. Nếu bạn có ánh sáng trắng (giả sử vec3 (255,255,255)) và chỉ cần thêm nó vào một đối tượng màu xanh (vec3 (0,0,255)), thì đối tượng đó có vẻ là màu trắng, điều đó là sai. Nhưng nếu bạn nhân các màu này, đối tượng sẽ được chiếu sáng đầy đủ và có màu xanh chính xác (là sản phẩm mong muốn).

Điều với ánh sáng xung quanh là nó chỉ bị ảnh hưởng bởi cường độ ánh sáng xung quanh và màu sắc của vật thể, có nghĩa là nó không bị ảnh hưởng bởi vị trí ánh sáng, hướng hoặc bất cứ thứ gì thuộc loại này. Đó là lý do tại sao bạn có thể nghĩ về nó như "chỉ cần thêm nó là một hằng số".

Chúng tôi sử dụng ánh sáng xung quanh chủ yếu để mô phỏng ánh sáng phản xạ trong cảnh, rất khó để mô phỏng theo cách khác (không có tia sáng). Đó là một sự thay thế khá tốt và rẻ.


1
Cảm ơn bạn! Câu trả lời của bạn cũng như câu trả lời của Dan đã che đậy câu hỏi của tôi rất tốt. Tôi chắc chắn sẽ sử dụng kiến ​​thức mới này.
Daniel Kareh

4

Phương trình liên quan trên trang Wikipedia như sau:

Ip=kaia+mlights(kd(L^mN^)im,d+ks(R^mV^)αim,s)

Trong phương trình này, tất cả các thuật ngữ và không phải là số mà là màu sắc (cường độ RGB). Điều này bao gồm và : màu môi trường xung quanh của vật thể và màu chiếu sáng xung quanh, tương ứng. Thuật ngữ môi trường không phải là một hằng số: nó là sản phẩm của cường độ và suất phản chiếu, giống như các thuật ngữ cụ thể và khuếch tán. Sự khác biệt duy nhất là ánh sáng và hướng nhìn không phải là một yếu tố trong thuật ngữ này.kikaia

Thật là bất thường khi cóka khác với màu khuếch tán, vì vậy bạn có thể nghĩ về nó như nhân với "màu của vật thể". Điều đó nói rằng, nó khá phổ biến choia là một màu riêng biệt: ví dụ: nếu bạn đang sử dụng ánh sáng định hướng màu vàng cho ánh sáng mặt trời trực tiếp, bạn có thể muốn ánh sáng xung quanh có màu xanh lam để chiếu sáng cho ánh sáng bầu trời.


Cảm ơn bạn! Cả câu trả lời của bạn và câu trả lời của Michal đều giải thích cho tôi rất rõ. Tôi sẽ phải nhớ điều này vào lần tới khi mã shader.
Daniel Kareh

0

Tôi nghĩ chúng ta nên có cả hai và cũng có một yếu tố dựa trên vật liệu

Một số vật liệu có độ khuếch tán cao nên nó sẽ chỉ phản chiếu ánh sáng có màu của chính nó. Nhưng một số vật liệu cũng có thể phản ánh một số ánh sáng như nó là. Đối với shader phong tôi nghĩ rằng chúng ta sử dụng môi trường xung quanh phụ gia bởi vì đối tượng phong có xu hướng phản xạ tất cả ánh sáng và vì vậy ánh sáng xung quanh có thể được chiếu sáng bằng màu của ánh sáng đó, nhưng các đèn khác được sử dụng để tạo màu khuếch tán

Trái lại với lambert, nếu những gì tôi biết là đúng, là vật liệu có độ khuếch tán cao, và vì vậy ánh sáng xung quanh được thêm vào ánh sáng và nhân với màu của vật liệu

Tôi đoán shader hiện đại nên có một tham số để đặt yếu tố này và viết phương trình như thế này

float factor; // 0.0 - 1.0 maybe reflectiveness?
float3 light = (factor * ambient.rgb); // ambient light
light += _MainLightColor.rgb * dot(normal,_MainLightDirection); // lambert
// maybe also specular
float3 color = ((1 - factor) * ambient.rgb) + (matColor * light);

Thật ra tôi lấy khái niệm này từ vật liệu PBR, đã có một khái niệm về bảo tồn năng lượng. Tất cả ánh sáng có thể thắp sáng vật thể bằng cách khuếch tán hoặc phản xạ nhưng để tiết kiệm năng lượng, màu sắc khuếch tán hơn có nghĩa là sự phản xạ thấp hơn. Và vì vậy, ánh sáng xung quanh chỉ cần thêm năng lượng ánh sáng, sau đó được đối xử giống như ánh sáng khác

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.