Ánh sáng trong một thế giới Minecraftian


10

Minecraft là một trò chơi chủ yếu dựa trên sơ đồ chiều cao và sử dụng thông tin heigtmap đó để tràn ngập thế giới với ánh sáng. Theo hiểu biết của tôi, điểm cao nhất trong sơ đồ chiều cao là điểm cuối của khu vực chịu ảnh hưởng của ánh sáng mặt trời. Mọi thứ phía trên được thắp sáng bởi ánh sáng mặt trời, mọi thứ bên dưới chỉ bị ảnh hưởng bởi ánh sáng gần đó trong bán kính 8 khối.

Do đó, nếu bạn có một hòn đảo nổi trên đỉnh thế giới của bạn, mọi thứ bên dưới sẽ được xem như là một hang động. Khi hai đèn ảnh hưởng đến cùng một điểm, ánh sáng sáng hơn sẽ thắng (không chắc về điều đó).

Dù bằng cách nào, có một vài vấn đề với mô hình chiếu sáng mineccraft: trước hết, nếu thế giới của bạn không có sơ đồ chiều cao, sẽ trở nên khó khăn hơn để tìm ra chính xác cái gì được cho là phát ra ánh sáng mặt trời và cái gì không. Một cách đơn giản là giả định rằng thế giới (trong trường hợp của tôi) là một tảng đá nổi và sau đó đi qua từng trục từ cả hai hướng và tìm ra nơi đá bắt đầu và kết thúc. Nhưng điều này không loại bỏ hoàn toàn vấn đề vì các vết lõm trong đá không được cho là trong bóng tối.

Bản thân Minecraft sẽ lưu trữ thông tin ánh sáng trong các khối của nó cùng với thông tin về vật liệu của một khối. Do đó, chỉ khi thế giới được sửa đổi, ánh sáng phải cập nhật. Thật không may, quá trình đó vẫn còn khá chậm trên các bản cập nhật và khi thay đổi ánh sáng nhanh, người ta có thể thấy độ trễ ánh sáng phía sau. Điều đó đặc biệt đúng nếu có nhiều khối thay đổi (TNT, hoàng hôn, v.v.) và bạn không chạy máy tính nhanh nhất (Hoặc Java trên máy Mac).

Từ hiểu biết còn hạn chế của tôi về đồ họa 3D, một thế giới như minecraft không phải là vấn đề lớn nhất. Làm thế nào bạn sẽ giải quyết vấn đề?

Tôi nghĩ rằng các yêu cầu cơ bản cho ánh sáng trong một thế giới voxel sẽ là

  1. cập nhật đủ nhanh để nó có thể xảy ra trong một khung hình duy nhất. Người ta có thể thực hiện việc chiếu sáng trong thiết bị đồ họa và tải thông tin ánh sáng đã thay đổi về RAM chính.
  2. thông tin ánh sáng phải nhanh chóng có sẵn cho logic trò chơi chính vì vậy không hoàn toàn dựa trên thiết bị đồ họa: lý luận: ánh sáng ảnh hưởng đến sự phát triển của cỏ, sinh sản của quái vật, v.v.
  3. các bản cập nhật ánh sáng sẽ phải là cục bộ hoặc có một số giới hạn khác để người ta không phải di chuyển toàn bộ thế giới có thể có kích thước rất lớn.

Ý tưởng chính là làm cho ánh sáng cập nhật nhanh, không nhất thiết phải đẹp hơn. Đối với các cải tiến hiệu suất kết xuất ánh sáng nói chung, người ta có thể dễ dàng thêm SSAO lên trên đó sẽ dẫn đến thế giới đẹp hơn nhiều.

Câu trả lời:


7

Ánh sáng trong Minecraft được tính toán không đồng bộ và được đưa vào hình học. Nó không được thực hiện trong thời gian thực.

Mỗi voxel lưu trữ ánh sáng cho voxel đó, có thể là một byte đơn (hoặc 2, notch sử dụng cách tiếp cận phân lớp để thực hiện chu kỳ ngày và đêm). Chỉ có 16 cấp độ ánh sáng. Để thắp sáng thế giới, Minecraft thực hiện 2 lần. Một cho ánh sáng mặt trời, và một cho lan truyền hoặc tràn ánh sáng vào hang động và như vậy. Ánh sáng được định vị bởi vì bất kỳ nguồn sáng nào cũng chỉ có thể truyền ánh sáng của nó cách xa tối đa 16 khối. Nước và dung nham hoạt động gần như giống nhau.

Thông tin thêm có sẵn trên blog của anh ấy: http://notch.tumblr.com/post/434902871/per-request-this-is-how-the-new-lighting-will-work


Tôi biết. Tôi nghĩ rằng tôi đã viết ở trên (trừ độ phân giải 4 bit độ sáng).
Armin Ronacher

1

Bạn không thể sử dụng GPU Render to Texture & nhân đôi kết quả của mình để bạn luôn có sẵn thông tin ánh sáng được tính toán để đọc lại từng khung hình?

Làm thế nào bạn tổ chức dữ liệu này để chiếu sáng hoàn toàn tùy thuộc vào bạn nhưng tôi không hiểu tại sao đây không phải là lựa chọn đầu tiên để điều tra nếu tất cả những gì bạn muốn làm là cải thiện tốc độ thuật toán chiếu sáng của bạn ..?


Chính xác những gì tôi đã nghĩ. Khá nhiều tất cả các GPU, không giống như hầu hết các CPU được THIẾT KẾ cho loại bài tập tính toán song song khổng lồ này.
Grant Peters

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.