Tại sao bản đồ bình thường chủ yếu là màu xanh?


44

Tại sao bản đồ bình thường chủ yếu là màu xanh thay vì màu ngẫu nhiên?

Tôi đoán các vectơ bình thường của một vật thể 3D có thể chỉ theo mọi hướng, như:

(1.0, 0.1, 0.5), (0.1, -0.5, 0.3), (-0.51, 0.46, -1.0) ... 

nhập mô tả hình ảnh ở đây

Câu trả lời:


71

Có hai loại bản đồ bình thường thường được sử dụng trong phát triển trò chơi. Cách bạn nghĩ họ nên làm việc là cách một loại hoạt động (bản đồ bình thường trong không gian mô hình), nhưng hầu hết các trò chơi sử dụng một loại khác (bản đồ bình thường không gian tiếp tuyến), đó là lý do tại sao bạn liên kết hầu hết các kết cấu màu xanh với bản đồ bình thường.

Ví dụ bản đồ không gian mô hình không gian bình thường

Với các bản đồ thông thường trong không gian mô hình , mỗi kênh mã hóa giá trị chính xác của bình thường bằng cách sử dụng cùng một hệ tọa độ như các đỉnh của mô hình mà nó sử dụng. Điều này có nghĩa là các phần khác nhau của bản đồ bình thường sẽ có màu sắc khác nhau, nhưng các pixel gần nhau thường sẽ có màu tương tự nhau. Một ví dụ về bản đồ bình thường không gian mô hình xuất hiện ở trên ( nguồn ).

Bản đồ bình thường không gian tiếp tuyến thường có màu xanh nhạt. Loại bản đồ này xác định các quy tắc trong không gian tọa độ duy nhất cho từng vị trí của pixel trên bề mặt của lưới. Nó sử dụng đỉnh (nội suy) bình thường như trục Z và hai vectơ trực giao khác, được gọi là tiếp tuyến và bitangent, như trục X và Y. Về cơ bản, bạn có thể nghĩ về các quy tắc trong bản đồ như là một "phần bù" so với thông thường cho pixel đó được tính bằng cách nội suy các quy tắc đỉnh. Các vectơ tiếp tuyến và bitangent cũng được nội suy từ dữ liệu đỉnh và xác định hướng nào trên lưới tương ứng với "lên" và "trái" trong bản đồ bình thường. Hình ảnh được cung cấp trong câu hỏi cung cấp một ví dụ tuyệt vời về bản đồ bình thường không gian tiếp tuyến điển hình trông như thế nào, vì vậy tôi sẽ không cung cấp một ví dụ khác ở đây.

Các thành phần của một phạm vi bình thường bình thường (không có ý định chơi chữ) từ [-1, 1]. Nhưng các thành phần của màu trong một phạm vi hình ảnh từ [0, 1](hoặc [0, 255]thường là chúng được chuẩn hóa thành [0, 1]). Vì vậy, quy tắc được thu nhỏ và bù đắp sao cho bình thường (0, 0, 1)trở thành màu sắc (0.5, 0.5, 1). Đây là màu xanh lam nhạt mà bạn nhìn thấy trong các bản đồ bình thường và nó cho thấy không có độ lệch so với đỉnh nội suy bình thường khi sử dụng các quy tắc không gian tiếp tuyến.

Lý do các quy tắc không gian tiếp tuyến được ưa thích hơn các quy tắc không gian mô hình là do chúng dễ tạo hơn và có thể được sử dụng cho nhiều mắt lưới. Ngoài ra, nếu được sử dụng với lưới hoạt hình, các quy tắc không gian tiếp tuyến luôn được sử dụng, vì các quy tắc luôn thay đổi.


6
Thích cách giải thích này - súc tích, bao gồm các phép toán, xây dựng các loại khác nhau được sử dụng cho các bản đồ thông thường và lý do chúng được sử dụng.
Tom 'Blue' Piddock

Cảm ơn bạn đã nhận được sự phân biệt giữa bitangentbinormalchính xác.
imallett

2
@imallett Có, các bề mặt có một bình thường, tiếp tuyến và bitangent, trong khi các đường cong có tiếp tuyến, bình thường và bất thường. Ít nhất đó là sự hiểu biết của tôi.
bcrist

8

Bản đồ bình thường chủ yếu chỉ ra bên ngoài từ một bề mặt. Giả sử bạn đi với ánh xạ thông thường của thành phần Z của vectơ thông thường XYZ là hướng "độ sâu" và ánh xạ tới thành phần B của không gian màu RGB, bạn sẽ kết thúc với hầu hết các vectơ bình thường có màu xanh lam.

Nếu kết cấu là màu đỏ, thì điều đó có nghĩa là bản đồ bình thường là một bề mặt chủ yếu chỉ về phía bên phải. Bạn có thể thấy tính năng đó trên hình ảnh mẫu của bạn là cạnh phải nhất của các vết sưng có màu hơi đỏ đối với chúng.

Một bề mặt hoàn chỉnh của một màu đỏ sẽ không có ý nghĩa gì. Điều đó sẽ chỉ ra một bề mặt hoàn toàn hướng về phía bên phải. Điều đó sẽ chỉ được mô hình hóa bằng hình học, không phải là một phần của bản đồ bình thường.


3
Để làm rõ điều này hơn một chút, sơ đồ bình thường KHÔNG phải là vectơ bình thường theo quan điểm của bạn, nhưng nó giữ bình thường từ góc nhìn của khuôn mặt, vì vậy sau khi bạn có khuôn mặt bình thường, bạn trộn nó với khuôn mặt normalmaps-normalvector. Và vì chủ yếu là màu xanh, là (0, 0, 1), điều này có nghĩa là bộ chuẩn hóa mà bạn đã nhận không thay đổi. (Hãy nghĩ về điều này, giống như bạn sẽ đặt mọi mặt phẳng trên sàn trước khi bạn vẽ nó, và sau đó sử dụng công cụ bình thường từ sơ đồ bình thường, điều này chủ yếu sẽ hướng lên trên, nếu bên phải hoặc bên trái, có gì đó không đúng với lưới của bạn).
tkausl
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.