paint-brush
Xây dựng trình xem cấp độ cho The Legend Of Zelda - Twilight Princesstừ tác giả@hackerclz1yf3a00000356r1e6xb368
Bài viết mới

Xây dựng trình xem cấp độ cho The Legend Of Zelda - Twilight Princess

từ tác giả Tommy6m2024/08/03
Read on Terminal Reader

dài quá đọc không nổi

Tôi bắt đầu lập trình trình xem BMD trên web cho Twilight Princess (Nintendo GameCube) vì tôi yêu thích trò chơi này và với tư cách là một nhà sản xuất trò chơi, tôi bị cuốn hút bởi việc phân tích các cấp độ và đắm mình vào chi tiết về cách chúng được tạo ra.
featured image - Xây dựng trình xem cấp độ cho The Legend Of Zelda - Twilight Princess
Tommy HackerNoon profile picture
0-item


Dự án này chắc chắn là một trong những dự án tiên tiến nhất của tôi. Tôi bắt đầu lập trình trình xem BMD trên web cho Twilight Princess (Nintendo GameCube) vì tôi yêu thích trò chơi này và với tư cách là nhà sản xuất trò chơi, tôi bị cuốn hút bởi việc phân tích các cấp độ và đắm mình vào chi tiết về cách chúng được tạo ra. Dự án này là cách để tôi khám phá niềm đam mê đó và hiểu sâu hơn về trò chơi mà tôi yêu thích. Đó là một trải nghiệm học tập đầy thử thách và bổ ích. Tôi rất hào hứng muốn xem dự án này sẽ đưa tôi đến đâu và tôi sẽ thực hiện những khám phá mới nào trong suốt chặng đường. Cho đến nay, dự án này đã khiến tôi mất hàng tháng trời nghiên cứu. Nghiên cứu dựa trên công việc của hơn 20 người khác đã điều tra và chia sẻ kiến thức cũng như phát hiện của họ về rarc, bmd, gcm yaz0, j3d, tev, v.v. Tôi tình cờ gặp một số người mà tôi đã viết ra để cung cấp cho họ Tín dụng:


Xin gửi lời cảm ơn tới: ("LordNed", "thakis", "Jasper St. Pierre", "Kiwi", "Nhóm mô phỏng cá heo", "Gamma", "Zan") - vì những nỗ lực tiên phong của họ!

Nước, Sương mù, Họa tiết hoạt hình là những tính năng hiện có trong lộ trình

Biểu tình

Chương trình được lập trình bằng ba.js và webGL. Nó chạy ở tốc độ 60 khung hình/giây không đổi trong trình duyệt Chrome. Rất tiếc, tôi không thể chia sẻ Trình xem tương tác (mô hình, phòng, v.v.) với bạn vì tôi không muốn biết giới hạn sử dụng hợp lý nghiên cứu là bao xa. Thưởng thức đoạn phim của tôi:


https://api.fenixfox-studios.com/assets/d43523dd-5cbe-4da4-9c7d-2d275690050a

Thông số kỹ thuật

BMD và BDL là các định dạng tệp được Nintendo sử dụng để lưu trữ dữ liệu mô hình trong các trò chơi GameCube và Wii. Chúng là một phần của thư viện J3DGraph của Nintendo, là một thành phần của bộ công cụ JSYSTEM lớn hơn. BMD xuất hiện lần đầu trong game Luigi's Mansion. Khi đó nó là định dạng mô hình duy nhất được sử dụng trong Super Mario Sunshine. Wind Waker còn giới thiệu thêm định dạng BDL, đây là một phần mở rộng của BMD với một phần bổ sung dành cho các lệnh FIFO vật chất được gọi là MDL3. MDL3 được sử dụng để cải thiện hiệu quả kết xuất. Super Mario Galaxy 2 là trò chơi cuối cùng sử dụng định dạng mô hình này.


JSYSTEM là bộ công cụ phát triển trò chơi độc quyền được Nintendo sử dụng để tạo trò chơi cho máy chơi game của mình. Nó bao gồm nhiều thư viện và công cụ khác nhau cho các tác vụ như mô hình 3D, hoạt hình và vật lý. J3DGraph là một thư viện trong JSYSTEM cung cấp các chức năng xử lý đồ họa 3D và chịu trách nhiệm về các định dạng tệp BMD và BDL. BMD là viết tắt của MoDel nhị phân và BDL là viết tắt của Danh sách hiển thị nhị phân.


Bộ công cụ JSYSTEM được phát hiện bởi các kỹ sư đảo ngược và người điều chế trò chơi vào đầu những năm 2000, khi họ bắt đầu phân tích và dịch ngược mã của trò chơi Nintendo GameCube và Wii. Họ phát hiện ra rằng nhiều trò chơi có chung cấu trúc mã và thư viện, điều này khiến họ nghi ngờ về sự tồn tại của một bộ công cụ phát triển chung. Sau nhiều nghiên cứu và thử nghiệm, họ đã có thể xác định và trích xuất các thư viện JSYSTEM từ trò chơi, đồng thời bắt đầu ghi lại và thiết kế ngược các thành phần khác nhau của nó, bao gồm thư viện J3DGraph cũng như các định dạng tệp BMD và BDL.


Khi sự hiểu biết về JSYSTEM ngày càng tăng, các modder bắt đầu phát triển các công cụ của riêng họ để làm việc với định dạng JSYSTEM và bắt đầu tạo các mô hình, kết cấu tùy chỉnh của riêng họ và thậm chí tạo trò chơi mới bằng thư viện JSYSTEM. Điều này dẫn đến việc tạo ra một cộng đồng mod sôi động vẫn tiếp tục tồn tại cho đến ngày nay, với nhiều modder chia sẻ những phát hiện và công cụ của họ trực tuyến.

Phát triển

Lúc đầu, tôi không thực sự quan tâm đến các định dạng vùng chứa *.dol hoặc *.gcm thực tế vì những người khác đã làm rất tốt việc cung cấp các công cụ sẵn sàng sử dụng (sau này chính tôi đã tạo trình đọc gcm). Sau một hồi tìm kiếm, tôi tìm thấy các thư mục có vẻ như chứa một số nội dung thú vị, như phòng và các thành phần khác. Các khu vực rộng lớn, chẳng hạn như Faron Woods, được chia thành nhiều phần và lưu thành các tệp riêng biệt, sau này sẽ được hợp nhất để tạo thành khu vực hoàn chỉnh.


Nhưng tôi muốn bắt đầu dễ dàng. Có lẽ một cái gì đó đơn giản! Sau khi giải nén hầu hết nội dung trong thư mục, tôi sắp xếp các tệp theo kích thước và tìm thấy một đối tượng siêu đơn giản. Khi tôi kiểm tra tệp trong HexWorkshop , tôi tình cờ tìm thấy các điểm đánh dấu như VTX, INF, DRW và SHP. Từ vị trí đỉnh, tôi có thể biết đó là một chiếc hộp phẳng có núm cửa đơn giản. Tôi nhanh chóng nhận ra đó là cánh cửa từ ngôi đền lòng hồ.


Tôi biết vật thể trông như thế nào và tôi biết nơi để tìm thông tin cơ bản như tọa độ đỉnh cũng như thông tin kết cấu.


Tài liệu định dạng BMD


Bạn phải cẩn thận vì một số thông tin đơn giản là không chính xác đối với trường hợp của bạn. Một số thuộc tính nhất định khác với những gì các tài liệu đó nói. Nhưng có một bảng định dạng như vậy là tất cả những gì bạn cần để trích xuất mô hình 3d và kết cấu của nó!


Sau nỗ lực trích xuất thành công ít nhất một đối tượng đơn giản, tôi nghĩ rằng đã đến lúc phải đào sâu hơn và giải quyết một khu vực hoàn chỉnh! Được trang bị cùng một thuật toán mà tôi vừa viết, tôi đã chọn tệp có tên R00_00. Tôi đã hy vọng đó sẽ là Làng Ordon hoặc Rừng Faron. Nhưng điều đó không quan trọng vì tất cả những gì tôi nhận được chỉ là một đống rác. Rõ ràng là một trường hợp sai thứ tự đỉnh. Nhìn vào hình ảnh này bạn có thể biết đó là phòng gì không?


Từng hình một, tôi từ từ thử nước. Đây đó, những vách đá và bia mộ bắt đầu xuất hiện. Rõ ràng là tôi đang nhìn vào khu vực Nghĩa địa Kakariko.


Sau một thời gian, tôi đã có thể tạo ra kết quả này: một số đối tượng bị thiếu, một số khuôn mặt bị đảo ngược và dường như không một họa tiết nào được áp dụng chính xác.


Giải pháp có phần khó hiểu. Mặc dù một số hình dạng nhất định có chỉ số vật liệu cụ thể được xác định nhưng chúng không có mối quan hệ 1:1 đơn giản. Thay vào đó, bạn phải xem Phân cấp cảnh được xác định trong phần INF của tệp BMD. Hệ thống phân cấp này bao gồm một cây các nút có thể đại diện cho hình dạng hoặc vật liệu. Thông thường, hệ thống phân cấp sẽ bắt đầu bằng vật liệu, theo sau là một số hình dạng. Ví dụ: bạn có thể thấy nội dung như (mat1, shp2, shp5, shp6, mat2, shp1, shp12...). Trong trường hợp này, các hình dạng 2, 5 và 6 đều sẽ sử dụng chất liệu 1, v.v.



Chà, thật tuyệt, nhưng tất cả những ai đã từng chơi trò chơi đó đều có thể nhận thấy rằng vật liệu đang có vấn đề. Màu sắc không ổn, không có sự pha trộn giữa các chất liệu và nhìn chung trông khá tối. Tại thời điểm này, tôi sẽ đi sâu vào phần đáng kinh ngạc nhất của tất cả những điều này. GameCube sử dụng các giai đoạn TEV hoặc các giai đoạn Môi trường kết cấu để xử lý các tác vụ này. Các giai đoạn TEV chịu trách nhiệm pha trộn họa tiết, quản lý màu sắc và áp dụng các hiệu ứng trong suốt. Lưu ý thực tế là GameCube không thực sự hỗ trợ các hiệu ứng trong suốt như chúng ta biết ngày nay với hai lượt kết xuất và các đối tượng ở xa được hiển thị trước. Có một số kho GitHub, một số bài viết, một số chủ đề diễn đàn. Hãy nắm trong tay càng nhiều thông tin càng tốt!


Một phần quan trọng hơn mà tôi cần thêm vào là các hiệu ứng khí quyển như sương mù, hoa cỏ và mây. Cho đến thời điểm này, tôi không thể tạo thành công hiệu ứng sương mù và hoa nở, nhưng tôi đã tìm thấy bóng đám mây và đặt chúng vào Giai đoạn TEV hòa trộn. Tôi vẫn đang tìm tọa độ UV chính xác cho các đám mây.


Kết quả cuối cùng của căn phòng đó là như thế này: (Thực sự phải mất khá nhiều thời gian mới đi được đến mức này)


Phần kết luận

Dự án này là một hành trình đáng kinh ngạc. Việc dành thời gian tìm hiểu xem những người thông minh giải quyết hạn chế kỹ thuật trước đây như thế nào đã giúp tôi trân trọng vẻ đẹp phức tạp của Công chúa Chạng vạng. Tôi đã đạt được tiến bộ tốt nhưng vẫn còn rất nhiều điều cần khám phá và thực hiện. Tôi dự định tiếp tục phát triển thiết bị xem này, bổ sung thêm các tính năng như sương mù, BTK (Hoạt hình họa tiết) và các hiệu ứng không khí khác để làm cho nó trở nên chính xác và sống động nhất có thể.