Để tạo địa hình voxel
(a) Phương pháp phổ biến là tạo sơ đồ chiều cao bằng nhiễu Perlin. Một sơ đồ chiều cao về cơ bản là một hình ảnh đơn sắc đại diện cho các độ cao khác nhau bởi độ tối hoặc độ sáng của các pixel của nó.
Bạn sẽ xem xét từng pixel trong sơ đồ chiều cao này để tạo ra "ngăn xếp" các voxels lên đến các độ cao khác nhau (trục z) ở các vị trí (x, y) khác nhau, theo độ sáng của pixel đó trong hình ảnh chiều cao. Bởi vì hình ảnh nhiễu Perlin rất mịn (không có cạnh sắc nét với ánh sáng so với bóng tối), kết quả là bạn sẽ có địa hình cuộn trơn tru.
(b) Bạn có thể xây dựng nó tăng dần bằng cách tạo cảnh quan ra khỏi các khối đa diện khác nhau. Tạo một hình dạng vectơ đa diện gần đúng với hình dạng voxel bạn muốn. Sử dụng bất kỳ phương pháp đa điểm 3D nào (thường xuyên nhất là điểm trong lồi), kiểm tra điểm nào của lưới thế giới của bạn nằm trong khối đa diện đó. Ví dụ, xác định một kim tự tháp trong không gian. Sau khi kiểm tra mọi điểm trong khu vực địa phương trong không gian thế giới của bạn theo khối lượng hình chóp đó, bạn sẽ biết điểm nào nằm trong đó và bạn có thể đặt các ô đó là "hiện tại" nghĩa là chúng trở thành voxels chứ không phải là không gian trống. Bây giờ bạn có một kim tự tháp voxel trong không gian của bạn. Bạn có thể tiếp tục thêm các hình dạng của bất kỳ loại nào với nhau, theo cách này, cho đến khi bạn đã tạo thành một địa hình.
(c) (Thực sự giống như b ) Viết một công cụ mô hình hóa. Voxatron cho thấy điều này sẽ trông như thế nào. Đây chỉ là tạo các hình thức voxel trong một thế giới thay thế (trình chỉnh sửa) và sau đó nhập chúng vào thế giới trò chơi thời gian chạy thực tế của bạn. Tôi tin rằng Voxlap đã có trình soạn thảo mã nguồn mở đầu tiên cho voxels. Bạn có thể đặt các voxels riêng lẻ hoặc bạn có thể sử dụng một "bàn chải" voxel với các hình dạng / khối lượng khác nhau để vẽ các voxels vào thế giới của bạn.
Những gì bạn sẽ cần để xây dựng trò chơi dựa trên voxel của riêng bạn
Tôi bao gồm phần này bởi vì con đường voxel không phải là một con đường dễ dàng, ít nhất là không phải hiện tại. Gần đây, rất nhiều nghiên cứu một lần nữa được đưa vào các động cơ voxel bởi những người chơi lớn, hướng tới các ứng dụng kết xuất và vật lý.
Đơn giản có thể là một vấn đề, bởi vì việc xây dựng một thế giới từ các voxels thô là một cách tiếp cận thủ tục để xây dựng thế giới và điều này vốn không đơn giản . Xin lỗi, sẽ có một vài thuật ngữ kỹ thuật ở đây. Viết một công cụ voxel là một công việc khá nghiêm túc và đòi hỏi kiến thức về nhiều lĩnh vực phát triển công cụ trò chơi, đặc biệt là về các khái niệm không gian và điều này có nghĩa là hiểu toán học vectơ 3D, ma trận và tính toán cơ bản ở mức độ hợp lý.
Phải nói rằng, "thế hệ địa hình voxel" của bạn đòi hỏi một bối cảnh để hoạt động, vì động cơ voxel không thực sự phổ biến rộng rãi. Hãy tiến hành mô tả cơ bản về cách thức hoạt động của động cơ voxel.
Voxels là các khối xây dựng cơ bản của thế giới của bạn. Vị trí của chúng được xác định bởi lưới 3D (mảng) được lập chỉ mục số nguyên thay vì không gian dấu phẩy động liên tục (như được sử dụng trong các trò chơi 3D dựa trên vectơ). Đây sẽ là những "nguyên tử" trong thế giới của bạn. Chúng có thể cao 3 feet như trong các trò chơi như Minecraft, hoặc chúng có thể nhỏ hơn mắt nhân vật ảo của bạn thực sự có thể nhìn thấy, trừ khi được nhóm lại với nhau với số lượng lớn - giống như một số phân tử. Có hai loại:
- Voxels dựa trên lưới hình khối ( ví dụ ) - đây là một loại mới hơn, được sử dụng để đơn giản và dễ sử dụng kết hợp với công nghệ đồ họa hiện đại. Được sử dụng trong các trò chơi như MineCrat và Dungeon Keeper.
- Điểm voxels ( ví dụ , ví dụ ) - voxel gốc. Mỗi cái là một điểm riêng biệt, có thể va chạm trong không gian, mặc dù nó có thể được bao quanh bởi một thể tích giới hạn hình cầu. Chúng đơn giản hơn, vì vậy bạn có thể có nhiều hơn chúng trong thế giới của mình và do đó bạn có thể làm cho chúng nhỏ hơn, điều này thường thuận lợi. Hai trò chơi đã sử dụng chúng là Comanche và những năm 1990 được làm lại từ Lords of Midnight.
Dù bằng cách nào, cách tiếp cận của bạn để thao túng voxels trong thế giới của bạn cũng giống như sau.
Để xây dựng và di chuyển các đối tượng trong thế giới của bạn, bạn sẽ cần các công cụ toán học được đề cập ở trên. Ví dụ: để tạo một bức tường: Xây dựng một hộp có kích thước phù hợp trong không gian 3D, sử dụng các vectơ. Sử dụng toán học ma trận để biến đổi hộp của bạn thành góc quay và vị trí bạn mong muốn trong thế giới 3d của bạn (trong không gian vectơ liên tục). Đối với động cơ voxel, bước bổ sung bây giờ là sử dụng thuật toán điểm đa diện 3D để xác định voxels nào của bạn nằm trong không gian xoay đó.
Về cơ bản, đây là cách bạn sẽ xây dựng hầu hết các đối tượng trong thế giới của mình. Ngoài ra, bạn có thể viết các công cụ của riêng mình để "mô hình hóa" một nhân vật theo cách bạn có thể nói, Maya hoặc 3DS Max. Nhưng vì bạn đang mô hình hóa nhân vật của bạn ra khỏi voxels thay vì các điểm, cạnh và khuôn mặt, nên các phương pháp của bạn sẽ khác nhau đáng kể. Nếu bạn quyết định sau đó xoay các đối tượng này trong thế giới của mình, bạn sẽ cần sử dụng tương tự các phép biến đổi ma trận để làm như vậy.
Địa hình có thể phá hủy đơn giản như là loại bỏ một voxel tại một thời điểm theo một số phương pháp bạn chọn hoặc sử dụng các thao tác CSG (Cấu trúc hình khối rắn) trên khối lượng lớn các voxels để loại bỏ chúng theo một số lượng được xác định trước; ví dụ, nếu bắn chùm tia laser xuyên qua tảng đá, bạn có thể sử dụng một thể tích hình trụ để trừ đi các voxels ở đây chùm tia đang bắn xuyên qua tảng đá. CSG là một quy trình tương đối đơn giản bằng cách sử dụng các lưới không gian 3D tạo thành thế giới voxel của bạn và kiểm tra mọi ô trong một phần của lưới cơ sở (trong trường hợp này là đá) đối với lưới khác (trong trường hợp này là tia laser)
Để có "dòng chảy" vật chất (như Vigil đã gợi ý trong nhận xét về cát), bạn sẽ cần xem xét động lực học chất lỏng và automata di động. Chúng được sử dụng bởi tác giả của Pháo đài lùn, Tarn Adams, trong đó về cơ bản cũng là một thế giới voxel (mặc dù các voxels lớn hơn nhiều trong trường hợp này, có thể so sánh với Dungeon Keeper, nguyên tắc vẫn giữ nguyên). Đây là những chủ đề tiên tiến và không cần thiết cho động cơ voxel như được định nghĩa, vì vậy tôi sẽ để nó như một "cuống" cho nghiên cứu của riêng bạn.
CSG và động lực học chất lỏng mang lại cho tôi, cuối cùng, để tối ưu hóa. Các động cơ Voxel hiện đang được phát triển hầu như chỉ sử dụng các voxel octrees (SVOs) thưa thớt, là một phương pháp phân chia không gian voxel thành các độ phân giải khác nhau, bằng chứng trong video này cho thấy động cơ Atomontage sắp tới. Sử dụng octrees / SVO là cần thiết hơn là một lựa chọn tối ưu hóa, bởi vì các chi phí xử lý liên quan đến việc xử lý một lưới đồng nhất, lớn. Một octree về cơ bản là một cây (biểu đồ chu kỳ có hướng) trong đó mỗi nút có 8 hoặc các nút con tùy thuộc vào không gian mà nó đại diện có chứa bất kỳ khối lượng vật lý nào không. Các sơ đồ cho thấy không gian chia nhỏ quãng tám để tạo thành voxels ở đây .
Việc triển khai voxel mã nguồn mở tốt nhất mà tôi biết là Voxlap Engine của Ken Silverman , được sử dụng cho Voxelstein3D. Nó được viết bằng C ++ và thực hiện các hoạt động CSG cho biến dạng địa hình.