Làm thế nào chúng ta phải sửa chữa độ sáng với căn bậc hai?


7

Gần đây tôi đã xem video này nói từ góc độ vật lý, hầu hết các cách chúng ta xử lý màu sắc trên máy tính là không chính xác vì độ sáng nằm trên thang logarit chứ không phải tuyến tính. Là một lập trình viên đồ họa mới làm quen, tôi muốn biết cách xử lý thông tin để làm cho đồ họa của tôi trở nên tốt hơn. Tôi tìm các công cụ quét tia nhưng để raster, làm mờ, phân loại và điều chỉnh ánh sáng như HDR, tôi phải làm gì với thông tin này?

Vì vậy, tôi đoán tôi có một số câu hỏi. (xin lỗi rất nhiều)

  1. Hầu hết dữ liệu kết cấu được lưu trữ ở định dạng mà độ sáng rgb không chính xác vì nó không được căn bậc hai (phải không?) Do đó nếu chúng ta muốn hiển thị chính xác
  2. Khi sử dụng kết cấu là công thức gaussian về mặt kỹ thuật không chính xác? Nếu vậy những gì sẽ là phương pháp chính xác về mặt toán học.
  3. Phần nào của vấn đề này là màn hình chịu trách nhiệm? Nó vuông hay squareroot các giá trị nó nhận được?
  4. Phần nào của vấn đề là GPU chịu trách nhiệm khi bạn yêu cầu nó lấy mẫu màu tại một điểm? Nó vuông hay squareroot các giá trị nó nhận được?
  5. Mọi người có biết về tài sản này và chỉ không hành động vì nó vuông một số là một tính toán đắt tiền? Nếu vậy, chúng ta có một cách tốt để nhanh chóng xấp xỉ số bình phương của các số từ 0-1 không?
  6. Làm thế nào để bạn áp dụng kiến ​​thức từ video đó trong đồ họa của bạn?

Câu trả lời:


12

Những gì video đang nói về được gọi là chỉnh sửa gamma và đó là một chủ đề rất quen thuộc đối với các lập trình viên đồ họa. 30 phút đầu tiên của cuộc nói chuyện của John Hable về kết xuất Uncharted 2 là phần giới thiệu yêu thích của tôi về "tại sao các lập trình viên đồ họa nên quan tâm đến gamma", cũng như là một giới thiệu tốt về kết xuất HDR. Nếu bạn không muốn xem cuộc nói chuyện (mặc dù tôi rất khuyến khích), Tầm quan trọng của việc tuyến tính cũng là một bài viết hay và Charles Poynton có Câu hỏi thường gặp về Gamma đi sâu vào chi tiết kỹ thuật và giải thích thuật ngữ được sử dụng.

Nhân tiện, vuông / squareroot chỉ là một xấp xỉ; các đường cong gamma sRGB được những gì đang phổ biến nhất được sử dụng trong thực tế (xem các công thức có nhắc đếnCsrgbClinear). Xem thêm câu hỏi liên quan này về gamma và không gian màu. Đó là một chủ đề phức tạp hơn một chút so với video làm cho âm thanh. :)

Để trả lời các câu hỏi cụ thể của bạn:

  1. Có, hầu hết dữ liệu hình ảnh được lưu trữ ở định dạng gamma, vì vậy các giá trị pixel không biểu thị độ chói tuyến tính. Tôi sẽ không mô tả nó là "không chính xác", vì mã hóa gamma có đặc tính hữu ích là đặt nhiều giá trị hơn trong bóng tối, điều này tốt hơn cho độ chính xác nhận thức (như được đề cập trong video). Mã hóa gamma là hoàn toàn cần thiết để tạo ra hình ảnh đẹp chỉ với 8 bit cho mỗi thành phần RGB; nếu bạn lưu trữ các giá trị tuyến tính, bạn sẽ cần nhiều hơn 12 bit cho mỗi thành phần để có đủ độ chính xác trong bóng tối.

  2. Để chính xác hơn về mặt vật lý, khi làm mờ hình ảnh, người ta nên chuyển đổi nó thành độ chói tuyến tính, sau đó làm mờ (Gaussian hoặc cách khác), sau đó chuyển đổi nó trở lại không gian màu ban đầu.

  3. Màn hình chấp nhận dữ liệu hình ảnh ở định dạng gamma. Vì vậy, các giá trị pixel không biểu thị độ chói tuyến tính và độ sáng đầu ra không tỷ lệ tuyến tính với các giá trị pixel.

    Nếu đó là một màn hình hiệu chuẩn, chất lượng tốt, thì nó chấp nhận dữ liệu trong một không gian màu cụ thể như sRGB hoặc Adobe RGB và tái tạo màu sắc chính xác dựa trên định nghĩa của không gian màu đó. Nếu đó là một màn hình uncalibrated tào lao, sau đó ai mà biết được những gì bạn sẽ nhận được, nhưng nó sẽ là một cái gì kinda như sRGB.

  4. GPU có thể được cấu hình để làm nhiều việc khác nhau ở đây. Các GPU hiện đại có hỗ trợ phần cứng để tự động chuyển đổi giá trị giữa gamma và tuyến tính khi lấy mẫu kết cấu hoặc lưu trữ giá trị ra bộ đệm khung, nhưng lập trình viên phải kích hoạt rõ ràng bằng cách sử dụng API như Direct3D hoặc OpenGL.

  5. Mọi người đồ họa máy tính chắc chắn biết về chủ đề này và điều quan trọng là phải làm cho đúng khi xây dựng một trình kết xuất thực tế cho phim, trò chơi AAA, v.v. Tuy nhiên, rất nhiều ứng dụng "hàng ngày" hơn như trình duyệt web và trình chỉnh sửa hình ảnh (thậm chí là Photoshop, như video đề cập) không thực sự xử lý gamma chính xác.

    Đó không phải là vấn đề về sức mạnh xử lý; có thể đó là một vấn đề 20 năm trước, nhưng ngày nay, ngay cả điện thoại di động cũng có khả năng xử lý dồi dào để chuyển đổi hình ảnh giữa gamma và tuyến tính. Lý do tại sao trình duyệt web và trình chỉnh sửa hình ảnh vẫn không có quyền này là do sự kết hợp giữa (a) thiếu hiểu biết, (b) không tin rằng gamma đủ quan trọng để có giá trị đúng và (c) đơn giản là bị mắc kẹt với hành vi xấu bởi vì đó là cách đó trong một thời gian dài và người dùng đã mong đợi nó, vì vậy họ sẽ bối rối nếu có gì đó thay đổi.

  6. Như đã đề cập, chúng ta phải suy nghĩ rất nhiều về gamma khi xây dựng trình kết xuất. Hầu hết các tính toán (ví dụ ánh sáng) nên được thực hiện trong không gian tuyến tính, nhưng kết cấu đầu vào và hình ảnh đầu ra phải ở trong không gian gamma. Ngoài ra, có thể một số phần kết xuất như kết hợp UI sẽ xảy ra trong không gian gamma vì nó quen thuộc hơn với các nghệ sĩ (nó hoạt động giống như kết hợp lớp Photoshop và như vậy). Ngoài ra, chúng tôi phải quyết định xem các mục tiêu kết xuất nội bộ sẽ được lưu trữ trong không gian tuyến tính hay gamma, vì nó sẽ ảnh hưởng đến độ chính xác. Và chúng ta phải có được tất cả các chuyển đổi đúng, để dữ liệu được chuyển đổi giữa tuyến tính và gamma tại các điểm phù hợp trong quá trình kết xuất.


1
Bạn thực sự có thể biến các hiệu ứng Photoshop thành cấu hình nhận biết nó chỉ không được bật theo mặc định vì khả năng tương thích ngược và ít gây bất ngờ nhất cho người dùng cũ. Tâm trí bạn mặc dù nó không hoàn hảo. Tôi sẽ nói rằng nói chung TẤT CẢ quy trình chỉnh sửa màu sắc của chúng tôi hoàn toàn bị đánh bại bởi vì nếu được xử lý theo bản chất ngày sau đó. Vì vậy, trong 5 tôi đề xuất (d) bởi vì nó khó khăn và tốn thời gian để xây dựng lại một tiêu chuẩn bao gồm tất cả mới có thể thay thế các tiêu chuẩn cũ.
joojaa
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.