Tôi đang học về bản đồ bình thường. Tôi hiểu rằng các giá trị RGB được chuyển đổi thành XYZ, nhưng câu hỏi của tôi là nó được chuyển đổi như thế nào và tại sao bản đồ bình thường có màu xanh và màu tím?
Tôi đang học về bản đồ bình thường. Tôi hiểu rằng các giá trị RGB được chuyển đổi thành XYZ, nhưng câu hỏi của tôi là nó được chuyển đổi như thế nào và tại sao bản đồ bình thường có màu xanh và màu tím?
Câu trả lời:
Vì một bản đồ bình thường bao phủ các vectơ từ -1 đến 1, nên kéo dài phạm vi này thành 0-> 1, vì vậy tất cả các bản đồ có thể nằm gọn trong phạm vi RGB.
Vì vậy, thông thường chúng ta áp dụng một biến đổi trên bình thường để chuyển đổi nó thành một cái gì đó chúng ta có thể nhìn thấy.
vec3 colour = vec3(0.5) + normal * 0.5;
Màu xanh lam là do các bản đồ bình thường được cho là được sử dụng so với bình thường nguyên thủy (tam giác / v.v.) với hướng mặc định (0,0,1) để biểu thị không có độ lệch so với tam giác bình thường. Thông thường, shader mảnh cần xoay bình thường này so với bình thường trên mỗi pixel hiện tại khi chạy.
vec3 normal = (colour - vec3(0.5)) * 2.0;
Chỉ có không gian tiếp tuyến bản đồ bình thường chủ yếu là màu xanh. Điều này là do màu xanh lam biểu thị mức bình thường (0,0,1) sẽ là một bình thường không thay đổi khi tam giác nằm trong mặt phẳng x và y, tức là vuông góc với bề mặt. Các tiếp tuyến, x và bi-tiếp tuyến, y (còn được gọi là bi-normal) được mã hóa trong các kênh màu đỏ và màu xanh lá cây và các hình thức này để tạo ra một không gian tiếp tuyến bình thường cho một điểm trên bề mặt của tam giác.
Nếu bản đồ bình thường không gian tiếp tuyến chỉ mã hóa một màu đỏ (1.0, 0.0, 0.0) thì điều này sẽ tạo ra một không gian tiếp tuyến bình thường song song với bề mặt tam giác. Điều này không bao giờ được nhìn thấy bởi vì điều đó có nghĩa là hình tam giác sẽ chỉ được thắp sáng ở 90 độ từ bề mặt và xem vectơ tại điểm mà bạn sẽ không thể nhìn thấy hình tam giác.
Các bản đồ bình thường trong không gian thế giới mã hóa đơn vị bình thường trên một hình cầu để có thể chủ yếu là các màu khác nhau một khi được mã hóa từ [-1, 1] đến [0, 1] trên mỗi kênh.
Một so sánh có thể được nhìn thấy ở đây:
Trong thực tế, các bản đồ thông thường thường được mã hóa theo định dạng 2 kênh như BC5 , thực tế chỉ lưu trữ x và y với z được tái tạo như chúng ta biết đó là một vectơ đơn vị. Điều này cho phép bạn duy trì độ chính xác cao hơn với nhiều bit hơn mà không tăng kích thước tệp.
vec3 colour = vec3(0.5) + normal * 0.5;
này đang chuyển đổi RGB sang XYZ?