DrakkenRidge: Building an open-world adventure for mobile VR

Sep 8, 2026|7 Min
Simeon Acker and Cyril Guichard
Simeon Acker and Cyril Guichard - Garage Collective
GUEST BLOG
Key art for DrakkenRidge VR by Garage Collective, Made with Unity. Composite image featuring a logo overlaid on a mountain landscape background. The lower thirds blend into a parchment texture. Within the circular logo is a blonde haired elf, a red-bearded dwarf, and a wizard with a white beard.

Trang web này đã được dịch bằng máy để thuận tiện cho bạn. Chúng tôi không thể đảm bảo tính chính xác hoặc độ tin cậy của nội dung được dịch. Nếu bạn có thắc mắc về tính chính xác của nội dung được dịch, vui lòng tham khảo phiên bản tiếng Anh chính thức của trang web.

Made with Unity, DrakkenRidge Đây là một game nhập vai hành động thế giới mở từ Garage Collective, được thiết kế và tối ưu hóa cho VR trên thiết bị di động. Trong bài viết khách mời này, nhóm chia sẻ cách họ tận dụng các kỹ thuật thiết kế và hiệu suất khác nhau khi sử dụng Hệ thống Thành phần Thực thể của Unity làm xương sống cho quá trình hiển thị.

Trailer của DrakkenRidge

Giới thiệu DrakenRidge VR

Chúng tôi là Garage Collective, đội ngũ đứng sau DrakkenRidge , một game nhập vai hành động thế giới mở được xây dựng cho VR, nơi bạn có thể đến bất kỳ điểm nào bạn nhìn thấy trên đường chân trời. Vào vai một Thợ săn pháp sư hùng mạnh và khám phá sáu hòn đảo được thiết kế thủ công tuyệt đẹp – mỗi hòn đảo đều hoàn toàn độc đáo, với những nhân vật, nhiệm vụ, hầm ngục và bí mật riêng.

Hành trình này sẽ đưa bạn từ những bãi biển ấm áp, dễ chịu đến những đỉnh núi tuyết hùng vĩ; từ những khu rừng tươi tốt, huyền bí đến những vực sâu hiểm trở dưới lòng đất. Chế tạo vật phẩm mới, chiến đấu với hàng tá sinh vật và kẻ thù được thiết kế tinh xảo, và mở khóa các trường phái ma thuật mới có thể biến mỗi cuộc chạm trán thành một trải nghiệm độc đáo.

Việc xây dựng một trò chơi có quy mô như thế này bởi một nhóm hai người có lẽ sẽ không thể thực hiện được nếu không có Hệ thống Thành phần Thực thể (Entity Component System ). Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách chúng tôi sử dụng những công cụ này để tạo ra trò chơi phiêu lưu quy mô lớn của mình.

Drakkenridge | Xây dựng game nhập vai VR thế giới mở bằng DOTS

Kết hợp các kỹ thuật để phát triển game mượt mà hơn

Việc sử dụng ECS ​​để xây dựng trò chơi mang lại nhiều lợi thế rất lớn, nhưng với tư cách là một studio độc lập nhỏ, chúng tôi cũng phải cân nhắc các yếu tố khác khi quyết định thiết kế và phát triển DrakkenRidge cho VR di động.

Có hai thách thức chính khi sử dụng ECS:

  • Quá trình học hỏi đầy gian nan: Việc phát triển với ECS đòi hỏi một sự thay đổi hoàn toàn về tư duy so với lối tư duy hướng đối tượng truyền thống.
  • Việc tách biệt hệ thống thực thể khỏi hệ thống đối tượng trò chơi truyền thống có thể khiến việc tương tác giữa chúng trở nên khó khăn.

Vậy câu hỏi đặt ra cho chúng ta là:

Những đối tượng và tương tác nào nên tận dụng sức mạnh của ECS, và những đối tượng nào nên giữ nguyên dạng GameObjects và MonoBehaviours truyền thống?

Entities trong DrakenRidge

DrakkenRidge bao gồm những môi trường mở rộng lớn, với hàng chục nghìn vật thể trong một không gian nhất định – và người chơi có thể nhìn thấy hàng nghìn vật thể cùng một lúc.

Việc hiển thị chúng dưới dạng GameObjects truyền thống đòi hỏi một lượng bộ nhớ lớn, vì công cụ cần phải đánh giá toàn bộ hệ thống phân cấp cảnh và tính toán các thành phần Transform cho mỗi đối tượng. Khi hiển thị hàng ngàn đối tượng, đặc biệt là trên thiết bị di động, GPU sẽ bị quá tải rõ rệt.

Vậy nếu ta lấy những đối tượng này và hiển thị chúng dưới dạng Entities thì sao?

DrakkenRidge VR

Với tư cách là Entities), chúng tránh được phần lớn chi phí hiển thị và bộ nhớ liên quan đến GameObjects , thay vào đó được nhóm lại với nhau thành các khối bộ nhớ bằng cách sử dụng Entities Graphics.hệ thống.system.

Ngoài ra, quy trình đồ họa của DrakkenRidge sử dụng rộng rãi kỹ thuật Texture Atlassing, cho phép các môi trường khổng lồ sử dụng ít vật liệu hơn (xem bài đăng trên blog của chúng tôi về Texture Atlassing tại đây ).

Entities Graphics có thể nhóm và xử lý tất cả các đối tượng có chung lưới và vật liệu, sau đó công cụ có thể tạo các lệnh vẽ được sắp xếp chặt chẽ và hiển thị nhiều đối tượng cùng một lúc.

Kết quả của việc này có thể tiết kiệm hàng trăm lô xử lý và lệnh SetPass.

Ảnh chụp màn hình DrakkenRidge từ Garage Collective, Made with Unity. Hình ảnh 3D mô phỏng phong cảnh đồi núi đá. Một cửa sổ ở góc hiển thị số lượng nhỏ các cuộc gọi SetPass (8) đối với hàng ngàn đối tượng.

Hiển thị hàng ngàn đối tượng – chỉ với tám lệnh SetPass

Hệ thống thực thể tùy chỉnh

DrakkenRidge sử dụng ECS ​​để hiển thị hàng ngàn đối tượng cùng một lúc. Nhưng ngay cả với những cải tiến hiệu năng vượt trội mà điều này mang lại, chúng ta vẫn có thể làm nhiều hơn nữa để nâng cao trải nghiệm trên các nền tảng VR di động.

Hệ thống soạn thảo từ xa

Tính năng đầu tiên mà chúng tôi tạo ra cho Entities DrakkenRidge là hệ thống xác thực khoảng cách. Nó xem xét nhiều biến số khác nhau để xác định khi nào một đối tượng nên được ẩn đi hoặc hiển thị cho người chơi.

Vì tầm nhìn của người chơi trải rộng rất xa trong thế giới mở, hàng ngàn vật thể ở xa có thể xuất hiện cùng một lúc. Hệ thống này ưu tiên việc xác định yếu tố nào nên được hiển thị nổi bật và yếu tố nào nên được làm mờ đi. Các hiệu ứng môi trường, chẳng hạn như sương mù ở khoảng cách xa, được sử dụng để che giấu sự chuyển tiếp khi các vật thể ở xa mờ dần khỏi tầm nhìn.

Ảnh chụp màn hình trong trò chơi từ DrakkenRidge VR của Garage Collective. Made with Unity. Hình ảnh được phủ lên trên là một cửa sổ hiển thị thành phần Tác giả khoảng cách với các giá trị tùy chỉnh để loại bỏ thực thể trong thời gian chạy.

Thành phần Tác giả Khoảng cách với các giá trị tùy chỉnh cho việc loại bỏ Thực thể trong thời gian chạy

Các giá trị loại bỏ duy nhất được tạo ra trong Trình chỉnh sửa cho mỗi Thực thể dựa trên nhiều tham số khác nhau. Dữ liệu này sau đó được chuyển đến các hệ thống tại thời điểm tạo thực thể .Chúng sử dụng dữ liệu đã được tính toán trước đó để đưa ra quyết định trong quá trình thực thi về thời điểm Entities nên được hiển thị hoặc loại bỏ.runtime decisions for when Entities should be rendered or culled.

Nhóm thực thể tùy chỉnh

Sử dụng hệ thống xác định khoảng cách DrakkenRidge , Entities có thể được gán vào các nhóm với quyền quyết định chung, cho phép, ví dụ, một khu vực của thành phố được hiển thị hoặc loại bỏ nhanh chóng dựa trên nhiều yếu tố trong trò chơi, thay vì mỗi thực thể trong thành phố tự quyết định riêng lẻ.

Ảnh chụp màn hình trong trình chỉnh sửa của DrakkenRidge VR, được tạo bằng Unity. Một khung cảnh thị trấn với những hộp va chạm màu xanh lam bao quanh một quán trọ. Bên trái là cửa sổ kiểm tra hiển thị các thực thể được nhóm lại với khả năng xử lý quyết định chung.

Entities được nhóm lại với quyền quyết định chung

Mức độ chi tiết của thực thể (Entity LODs)

Tính năng thứ ba của hệ thống tạo đối tượng dựa trên khoảng cách DrakkenRidge cho phép thay thế các đối tượng một cách nhanh chóng bằng một đối tượng khác có chi phí hiển thị thấp hơn. Kỹ thuật này ban đầu được viết ra để giải quyết vấn đề về chi phí cao của các shader và vật liệu.

Mặc dù các mô hình môi trường trong DrakkenRidge đã được tối ưu hóa rất cao, nhưng một số shader vẫn làm tăng thêm chi phí đáng kể. Hệ thống LOD (Mức độ chi tiết) của thực thể này cho phép chỉ hiển thị "các phiên bản của thực thể với các shader có chi phí cao hơn" khi cần thiết.

Khi các điều kiện được đáp ứng, hãy sử dụng LOD đơn giản hóa cho Thực thể.

When conditions are met, use a simplified LOD for the Entity.

Tối ưu hóa CPU

Các phép tính xác định khoảng cách của DrakkenRidge được thực hiện thông qua các Job biên dịch theo từng đợt để đạt hiệu suất CPU tối đa.

Unity Jobs là các hàm có thể được lên lịch chạy ngầm dưới dạng các tác vụ bất đồng bộ, và Burst Compiler.Tăng tốc các tác vụ nặng về CPU bằng cách chuyển đổi chúng thành mã máy gốc được tối ưu hóa cao.accelerates CPU-heavy tasks by translating them into highly optimized native machine code.

Mẹo: Một cách tối ưu hóa cho DynamicBuffer là ép kiểu nó thành NativeArray trước khi lặp: “var lodChildNativeArray = lodChildBufferData.AsNativeArray();”

Tip: One optimization for DynamicBuffer is to cast it to a NativeArray before iteration: “var lodChildNativeArray = lodChildBufferData.AsNativeArray();”

GameObjects và vật lý trong DrakkenRidge

Trong DrakkenRidge , 90% thế giới được hiển thị bằng ECS, hệ thống tự động chạy các tác vụ nền để duy trì môi trường hiển thị ở trạng thái đẹp mắt và tối ưu.

Nhưng với đội ngũ phát triển nhỏ gồm một lập trình viên và một họa sĩ, chúng tôi đã quyết định xây dựng nhiều tương tác VR cận cảnh bằng cách sử dụng GameObjects và MonoBehaviors truyền thống. Điều này cho phép rút ngắn thời gian lặp lại trong môi trường thử nghiệm nhanh và chu kỳ thiết kế thường xuyên.

Tương tác vật lý và chiến đấu

Các tương tác thực tế ảo trong DrakkenRidge chủ yếu được thúc đẩy bởi các mô phỏng vật lý. Điều này bao gồm mọi thứ, từ việc nắm bắt và thao tác các vật thể, đến leo trèo và parkour của người chơi, cho đến sử dụng phép thuật và chiến đấu cận chiến.

Người chơi có thể tương tác với các thử thách leo trèo dựa trên vật lý.

Chạy mô phỏng vật lý trong thế giới mở

Hệ thống chiến đấu trong DrakkenRidge kết hợp giữa hoạt ảnh độc đáo và các hành vi vật lý riêng biệt cho từng khớp. Mỗi AI sẽ tự quyết định cách khiến cái chết của mình trở nên thú vị và đáng giá dựa trên tình huống cụ thể.

Kết hợp vật lý từng khớp với hoạt ảnh được lập trình sẵn để tạo ra các phản ứng độc đáo.

Nhiều vật phẩm và phép thuật trong DrakkenRidge cho phép người chơi gây sát thương lên nhiều kẻ thù cùng một lúc, thường dẫn đến việc các mô phỏng vật lý được chạy đồng thời trên nhiều mô hình nhân vật.

Áp dụng vật lý chất nổ vào các nhóm trí tuệ nhân tạo

Tối ưu hóa vật lý

Việc mô phỏng vật lý theo thời gian thực có thể tốn kém, đặc biệt là trên các nền tảng di động. Để giúp giảm thiểu điều này, mỗi đối tượng vật lý trong thế giới sẽ theo dõi vị trí của người chơi và liệu người chơi có đang ở vị trí có thể tương tác với mô phỏng hay không.

Ví dụ, người chơi có thể leo lên những chuỗi dài được tạo thành từ các mắt xích dựa trên nguyên lý vật lý, tương tác với nhau và với thế giới xung quanh. Các bộ phận va chạm vật lý, khớp nối và vật thể cứng này được kích hoạt/vô hiệu hóa một cách linh hoạt dựa trên việc người chơi có trực tiếp thao tác hay đang quan sát chuỗi đó hay không.

Theo nguyên tắc chung, chúng tôi hiển thị các đối tượng ở khoảng cách rất xa, nhưng chỉ cho phép tương tác vật lý với các đối tượng ở gần. Trong một trò chơi thực tế ảo, nơi hành động diễn ra ở cự ly gần, điều này phù hợp với những gì người chơi mong đợi.

Các tối ưu hóa tiếp theo

Khi quyết định cách tối ưu hóa khả năng hiển thị cho VR trên thiết bị di động, chúng tôi đã xem xét cách thức xây dựng từng môi trường và chọn giải pháp phù hợp nhất với nhu cầu của mình.

Ngoài ECS, chúng tôi đã xem xét nhiều kỹ thuật khác nhau, bao gồm LOD và các đối tượng giả mạo .

LOD đối tượng trò chơi

Việc hiển thị GameObjects với LODs bao gồm việc có nhiều phiên bản của một đối tượng nhất định được hiển thị ở các khoảng cách khác nhau so với người chơi. Ví dụ, một mô hình nhà có độ chi tiết cao được thay thế bằng một phiên bản đơn giản hơn với số lượng đa giác thấp, giúp tiết kiệm thời gian hiển thị khi người chơi ở xa đối tượng.

Trong DrakkenRidge , mọi đối tượng đều được mô hình hóa theo phong cách nghệ thuật retro low-poly được tối ưu hóa cao, và phần lớn thế giới được xử lý thông qua ECS, vì vậy các LOD 3D truyền thống sẽ không mang lại lợi thế thực sự nào.

Tuy nhiên, khoảng cách tác giảHệ thống mà chúng tôi tạo ra được xây dựng để xử lý việc hiển thị LOD cho Entities ở xa khi cần thiết. system we created was built to handle rendering of LODs for distant Entities, when necessary.

Kẻ mạo danh

Hệ thống giả mạo (impostor system) lấy GameObjects 3D trong trò chơi và chuyển đổi chúng thành các bảng quảng cáo 2D khi người chơi ở xa chúng. Phương pháp này hiệu quả nhất đối với các vật thể ở xa, dày đặc như rừng cây. DrakkenRidge sử dụng kẻ mạo danh trong một số tình huống.

Ảnh chụp màn hình trong game DrakkenRidge VR của Garage Collective, Made with Unity. Hình ảnh 3D mô phỏng phong cảnh núi non đồi núi, với một đối tượng giả mạo khó nhận biết được đánh dấu rõ ràng ở phía sau.

Nếu được triển khai đúng cách, các mô hình giả mạo sẽ không thể phân biệt được với phiên bản 3D của chúng.

Tại DrakkenRidge, chúng tôi đã thử nghiệm nhiều kỹ thuật tối ưu hóa khác nhau, lựa chọn cẩn thận kỹ thuật nào sẽ được áp dụng. Unity ECS mang lại hiệu suất vượt trội nhất, cho phép hiển thị toàn bộ thế giới của chúng ta với chi phí thấp hơn nhiều so với việc sử dụng pipeline GameObject truyền thống.

Lời kết

Đối với DrakkenRidge , sự kết hợp giữa các kỹ thuật thiết kế và tối ưu hóa của chúng tôi đã chứng minh là công thức hoàn hảo, cho phép chúng tôi xây dựng một cuộc phiêu lưu thực tế ảo độc đáo. Thế giới mở được vận hành bởi ECS for Unity, và các tương tác cận cảnh được thiết kế với quy trình làm việc quen thuộc về GameObject và vật lý, cho phép nhóm thiết kế, thử nghiệm và lặp lại nhanh chóng.

Các game nhập vai thế giới mở dành cho VR trên di động không nhất thiết phải nằm ngoài tầm với, và chúng tôi mong chờ được thấy nhiều nhà phát triển hơn nữa tham gia vào cuộc phiêu lưu này!

DrakkenRidge VR: Maruk's Hammer

DrakkenRidge VR đã chính thức ra mắt . Khám phá thêm các trò chơi Made with Unity trên trang Steam Curator của chúng tôi và xem thêm các bài viết từ các nhà phát triển Unity trên Unity BlogResource Hub .