2010-08-27 43 views
7

Khi tôi đang đọc Sách Đỏ, tôi vẫn khá bối rối, rằng openGL có thể có tối đa 8 đèn trong cảnh (số tùy thuộc vào việc triển khai, nhưng phải là arround 8).Đèn OpenGL giới hạn

Nhưng tôi có thể tưởng tượng được số lượng các tình huống cần nhiều ánh sáng hơn, vì vậy tôi nghĩ có một mánh khóe trong game dev.

Ví dụ: bạn có đường phố rất dài với 50 đèn đường, hoặc bạn có thể có đội 20 người sử dụng đèn pin. Làm thế nào bạn thực sự mô phỏng những tình huống đó? Có một vấn đề, ánh sáng đó chỉ chiếm một phần của lưới, chứ không phải toàn bộ hình nón giữa nguồn và vật thể, vì vậy nếu chúng ta không có 100% không khí sạch, thì cũng phải có một số loại mô phỏng. Cách này được thực hiện, và trò chơi chạy mượt mà (tôi đọc cũng cho phép tất cả 8 đèn có thể tiêu diệt FPS)

Trả lời

10

8 đèn là giới hạn của đường ống GL cố định, nơi bạn bật mỗi chế độ, chế độ cài đặt, thông số, v.v. Bây giờ bạn có trình tạo pixel và ánh sáng được thực hiện trong bóng đổ. Ở đó bạn có thể sử dụng số lượng lớn các đèn động (không được nướng vào kết cấu). Bạn chỉ cần cung cấp đầy đủ các thông số của đèn này (có thể, trong một kết cấu) và kiểm tra xem có bao nhiêu đèn mà trình đổ bóng của bạn có thể xử lý. Ngoài ra, trong shader bạn có thể cull ánh sáng quá yếu (đóng góp quá ít vào giá trị pixel) hoặc chỉ là những người quá xa.

Cập nhật: đổ bóng phức tạp với phân nhánh thậm chí có thể tạo ra ánh sáng (nghĩ về đường phố dài hoặc cây thông Noel). Nó có thể hiệu quả hơn cung cấp số lượng lớn các tham số.

+0

update: kỹ thuật này đã được thảo luận rất nhiều, đây là một liên kết: http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=267432 – alxx

+0

đèn Yếu được không phải là một tính năng shaders, kể từ khi khả năng bật/tắt đèn có thể được thực hiện bên ngoài đường ống cố định thiết kế một trình quản lý ánh sáng, chỉ bật đèn quan trọng. – Luca

+0

Trình quản lý ánh sáng bật/tắt đèn cho toàn cảnh. Trình tạo pixel có thể thực hiện trên mỗi pixel, xem sự khác biệt? Bằng cách này, 8 đèn trong đường ống truyền thống là trên mỗi đỉnh, trong khi đổ bóng làm ánh sáng trên mỗi pixel - một điều hoàn toàn khác. – alxx

4

Một trong những thủ thuật sẽ được sử dụng trong trò chơi là mô phỏng ánh sáng với kết cấu.

Vì vậy, trong ví dụ về ánh sáng đường phố của bạn, các vùng "sáng" sẽ thực sự là hình ảnh kết cấu sáng hơn. Chỉ các đèn gần nhất sẽ là nguồn sáng để có được hiệu ứng chính xác.

Có các cách tiếp cận tương tự, trong đó các kết cấu bán trong suốt hoặc kết cấu có hình nón trong suốt được phủ lên cảnh để tạo hiệu ứng tương tự.

Đừng quên rằng để tính toán bóng tối vv trong thời gian thực có nghĩa là cảnh phải được hiển thị từ quan điểm của ánh sáng để tính cường độ ánh sáng tại bất kỳ vị trí cụ thể nào. Vì vậy, đối với 8 đèn bạn đang hiển thị cảnh (hoặc một phần của cảnh) tối đa 8 lần trước khi thực sự hiển thị cảnh để hiển thị. Ngay cả khi điều này được thực hiện trên GPU hơn là CPU nó rất tốn kém.

5

Ánh sáng là một chủ đề rất phức tạp trong đồ họa máy tính.

Điều thực sự quan trọng là, tất nhiên, ánh sáng đối tượng, mô phỏng ánh sáng thế giới thực hoặc hiệu ứng mà chúng tôi đang nhắm mục tiêu. Môi trường ánh sáng có thể được sáng tác bởi nhiều nguồn để ước tính hiệu quả thực sự mà chúng ta đang cố gắng đạt được.

Triển khai ánh sáng OpenGL là đèn động, là điểm trừu tượng ánh sáng cho phép "ánh sáng" (có nghĩa là, đưa ra màu) cho các đỉnh được hiển thị (được sử dụng cho hình tam giác hiển thị). ... các đỉnh được chiếu sáng, nhận được sự đóng góp màu sắc cho mỗi ánh sáng.

Như bạn đã đề cập, quá trình kết xuất mất nhiều thời gian hơn đèn chúng tôi đã bật. Để giảm thiểu điều này, bạn có khả năng khác nhau.

  • Loại bỏ ánh sáng (loại trừ ánh sáng đóng góp ít thay đổi màu) và điều này được xác định bằng các thuộc tính ánh sáng (khoảng cách, hình nón, suy giảm, quan điểm và vật cản).
  • Ánh sáng tĩnh, sử dụng kết cấu để mô phỏng ánh sáng trên các vật thể không bao giờ di chuyển.

Ánh sáng cố định OpenGL góp phần vào màu đỉnh, được nội suy với các màu đỉnh khác để rasterize hình tam giác. Trong trường hợp hình học được tạo thành bởi vài hình tam giác, bạn không thể thấy bất kỳ hình nón ánh sáng nào bên trong mỗi tam giác, bởi vì màu của đoạn của nó là kết quả của nội suy của ba màu (ba đỉnh).

Để đạt được ánh sáng chính xác hơn, phần mềm sẽ xác định từng màu (pixel) màu (ánh sáng pixel) theo cùng cách mà một đỉnh được tô màu bằng đèn, nhưng bạn có thể hiểu, có thể có nhiều điểm ảnh hơn các đỉnh. Cách tiếp cận là tính toán (sử dụng trình đổ bóng hoặc mở rộng OpenGL) đóng góp của ánh sáng cho mỗi pixel của hình học trong giai đoạn rasterization hoặc xác định màu pixel bằng cách sử dụng ánh sáng hoãn lại.

Chiếu sáng trì hoãn sử dụng nhiều họa tiết (tương ứng với chế độ xem) để lưu trữ thông số đèn cho mỗi pixel được hiển thị. Bằng cách này, bạn thực hiện tính toán ánh sáng sau khi hình ảnh được tạo ra, xác định đóng góp ánh sáng pixel một lần cho mỗi pixel, thay vì một lần cho mỗi pixel hình học.