Đường dốc hoặc ánh sáng là gì và nó hoạt động như thế nào? Nó khác với toon shading hay là cùng một khái niệm? Làm thế nào tính đặc trưng được tính khác nhau cho bóng đổ dốc so với blinn-phong hoặc lambert?
Đường dốc hoặc ánh sáng là gì và nó hoạt động như thế nào? Nó khác với toon shading hay là cùng một khái niệm? Làm thế nào tính đặc trưng được tính khác nhau cho bóng đổ dốc so với blinn-phong hoặc lambert?
Câu trả lời:
Trong bóng mờ Blinn / Phong truyền thống, bạn tính toán thuật ngữ khuếch tán cho một pixel bằng cách đo cosin của góc giữa bình thường ở bề mặt và hướng của ánh sáng. Vì vậy, trong trường hợp này, một shader đơn giản sẽ trông giống như thế này:
float DiffuseCoeff(in float3 pos, in float3 normal, in float3 lightPos) {
float3 lightDir = lightPos - pos;
lightDir.normalize();
return max(0.0, Dot(lightDir, normal));
}
Trong bóng đổ dốc, ý tưởng là điều chỉnh hệ số khuếch tán bằng kết cấu tra cứu 1D. Tùy thuộc vào những gì bạn đặt trong kết cấu này, bạn có thể tạo ra các hiệu ứng khác nhau. Do đó, hàm shader của chúng ta để tính hệ số khuếch tán trở thành:
texture1D rampTex;
float DiffuseCoeff(in float3 pos, in float3 normal, in float3 lightPos) {
float3 lightDir = lightPos - pos;
lightDir.normalize();
// Map value from [-1, 1] to [0, 1]
float rampCoord = Dot(lightDir, normal) * 0.5 + 0.5;
return tex1D(rampTex, rampCoord);
}
Ví dụ: nếu chúng ta muốn thực hiện một shader di động, điều chúng ta có thể làm là tạo ra một kết cấu đường nối mô phỏng chức năng bước:
Bạn cũng có thể sử dụng cùng một ý tưởng để tạo ra các hiệu ứng khác nhau cho ánh sáng gương. "Ramp" shading thực sự chỉ đề cập đến ý tưởng điều chỉnh giá trị bóng bằng một kết cấu.
EDIT : Team Fortress 2 sử dụng một shader dốc trong kết xuất của chúng. Bạn có thể kiểm tra các chi tiết trong bài báo này:
http://www.valvesoftware.com/publications 2007 / NPAR07_I IllustrativeRenderingInTeamFortress2.pdf
Xem trong Phần 5, tại tiểu mục có tên "Chức năng cong vênh khuếch tán"