Các công cụ đường ống nội dung nên được nhúng trong công cụ?


10

Làm thế nào tối thiểu một công cụ trò chơi nên được? Bao nhiêu đường ống nội dung nên được nhúng trong công cụ?

Một số trường hợp sử dụng trong đó siêu động cơ có thể hữu ích:

  • Khi tải nội dung người dùng, người dùng không bắt buộc phải đóng gói họa tiết của mình, công cụ sẽ thực hiện khi tải.

  • Một tập lệnh yêu cầu một phông chữ ở kích thước lớn hơn nhiều so với được tạo trước, công cụ có thể phân tích cú pháp quảng cáo tệp ttf xây dựng một tập bản đồ kết cấu mới.

  • Rèn rèn .

Tất nhiên không ai trong số này là miễn phí. Điều này đòi hỏi các công cụ đường ống nội dung của bạn được viết bằng C ++. Các thư viện hỗ trợ bạn sử dụng trong đường ống cần được biên dịch để sử dụng trên thiết bị. Nó đòi hỏi việc tạo nội dung không được lỗi. Và nó thường làm cho động cơ của bạn lớn hơn và khó sử dụng.
Một số ưu và nhược điểm khác là gì?
Do các ưu điểm vượt trội hơn các nhược điểm?

Một số câu hỏi cụ thể:

  • Động cơ có nên tải các định dạng hình ảnh khác nhau? Một trình tải chỉ TGA là khá dễ dàng để mã tay.

  • Còn định dạng âm thanh thì sao? Có khả thi khi chỉ hỗ trợ tải tập tin wav? Những gì về các tập tin âm nhạc xung quanh thường rất lớn.

  • Động cơ có nên có khả năng phân tích cú pháp TTF động và tạo bản đồ không?

  • Kết cấu bao bì.

Câu trả lời:


11

Blog của Noel Llopis từ Inside Inside đã chạm vào điều này gần đây trong bài đăng "Chỉnh sửa trò chơi từ xa" . Đoạn mở đầu:

Tôi từ lâu đã là một fan hâm mộ của thời gian chạy trò chơi tối thiểu. Bất cứ điều gì có thể được thực hiện ngoại tuyến hoặc trong một công cụ riêng biệt, nên được đưa ra khỏi thời gian chạy. Điều đó khiến kiến ​​trúc trò chơi và mã rất gọn gàng và đơn giản .

(Bài viết được đọc rất khuyến khích, như với hầu hết các nội dung của Noel, cho dù bạn có đồng ý 100% hay không.)

Tôi tin rằng chìa khóa ở đây là giữ sự phức tạp bên ngoài động cơ. Bạn vẫn có thể linh hoạt, nhưng đó là tính linh hoạt trong đường ống nội dung. Và bạn có được hiệu suất tốt hơn bằng cách không dành thời gian chuyển đổi và di chuyển dữ liệu xung quanh.

Hiệu suất tốt hơn có thể chuyển thành thời gian lặp thấp hơn, kỳ lạ, mặc dù mất một số khả năng chỉnh sửa trong động cơ: dễ dàng hơn để thử một cái gì đó nếu bạn có thể tải trò chơi trong một giây.

Việc chấp nhận một số nguyên lý của " triết lý unix " sẽ giúp bạn giữ cho chuỗi công cụ của bạn linh hoạt: một đường ống mô-đun nhỏ.

Triết lý cá nhân của tôi: nướng càng nhiều dữ liệu càng nhiều càng tốt ngoại tuyến, nhưng cung cấp hỗ trợ công cụ để nhận dữ liệu nướng mới bất cứ lúc nào. (Lưu ý rằng dữ liệu mới này không cần phát huy cho đến khi có điểm thuận tiện: nhấn nút "làm mới", cấp độ tiếp theo bắt đầu, bạn chuyển sang khu vực mới, bất cứ điều gì. Chìa khóa là tìm điểm ngọt giảm thiểu thời gian lặp với độ phức tạp mã tối thiểu và nỗ lực mã hóa.)

Tại công ty của chúng tôi, hầu hết các công cụ dành cho nghệ sĩ / nhà thiết kế của chúng tôi đều tập trung vào các vấn đề về giao diện người dùng: dễ dàng thao tác với các tài sản đơn lẻ hoặc các lô của chúng, v.v. Đôi khi, chúng chỉ là các công cụ của bên thứ 3 như Photoshop hoặc 3DS Max. Các công cụ này xuất sang định dạng trung gian (thường là xml tham chiếu dữ liệu nhị phân nguồn, nhưng không phải luôn luôn). Định dạng trung gian được chọn bởi một công cụ "tạo dữ liệu" phụ trợ, giúp biến nó thành thứ gì đó hữu ích và tải nhanh cho nền tảng đích.

Tính di động đạt được bằng cách thêm các công cụ tạo dữ liệu phụ trợ bổ sung hoặc mở rộng các công cụ tạo dữ liệu phụ trợ hiện có, có lợi thế bổ sung là vô hình đối với người tạo nội dung.

Giờ đây, với dữ liệu gia tăng phù hợp, bạn có thể có các thay đổi ở định dạng nướng trong vài giây; động cơ của bạn có thể là nhện hoặc một công cụ có thể là nhện và sau đó những công cụ này sẽ xuất hiện trong hệ thống tài nguyên của bạn, sẵn sàng để tải lại khi thuận tiện.

Các công cụ - đặc biệt là các công cụ tạo dữ liệu phụ trợ - thường chậm chạp và lỗi hơn so với mã công cụ. Điều này là ổn, bởi vì chúng dễ dàng hơn để cấu trúc lại / viết lại, mở rộng và kiểm tra; bạn có thông số kỹ thuật cho hành vi của họ và khá đơn giản để kiểm tra chúng so với một số mã công cụ.

Ý kiến ​​của tôi về câu hỏi của bạn:

Động cơ có nên tải các định dạng hình ảnh khác nhau? Một trình tải chỉ TGA là khá dễ dàng để mã tay.

(Ngoài ra: ngay cả khi bạn sử dụng bộ giải mã TGA trong động cơ, đừng mã hóa nó. Bạn chỉ đang gặp rắc rối - có rất nhiều sự tinh tế với hầu hết các định dạng hình ảnh và rất nhiều công cụ không tuân thủ chính xác với định dạng có thể chưa được xác định rõ ràng. Tốt nhất bạn nên tìm mã thư viện được kiểm tra tốt hiện có để xử lý hình ảnh.)

Tôi có công cụ ở đây chuyển đổi từ TGA sang định dạng kết cấu bên trong của bạn, cộng với siêu dữ liệu.

Còn định dạng âm thanh thì sao? Có khả thi khi chỉ hỗ trợ tải tập tin wav? Những gì về các tập tin âm nhạc xung quanh thường rất lớn.

Chúng tôi sử dụng ba định dạng ở đây: nhạc được theo dõi (.xm), ADPCM (.wav) và Speex (.spx). Điều này chủ yếu là vì chúng tôi trên thiết bị cầm tay và các định dạng này rất nhẹ để giải mã.

Động cơ có nên có khả năng phân tích cú pháp TTF động và tạo bản đồ không? Kết cấu bao bì.

Atlasing là một vấn đề khó khăn: xem câu trả lời gần đây của câu hỏi của bạn. Nó hầu như luôn luôn đáng làm ngoại tuyến.

Ngoài ra, bạn có thể biến siêu dữ liệu trên mỗi ký tự thành cấu trúc nướng mã gần như không tải.

Khi kết thúc, bạn có thể dọn sạch và đóng gói đường ống này với trò chơi của mình cho cộng đồng mod. Bạn luôn có thể thêm các định dạng nguồn. Và không có gì ngăn bạn thu hẹp khoảng cách giữa các công cụ tạo nội dung và công cụ trong các trường hợp cụ thể; hy vọng mã nướng dữ liệu của bạn và mã nhện / mã chuyển có thể được tái cấu trúc thành các thư viện mà cuối cùng có thể được sử dụng trực tiếp bởi các công cụ tạo nội dung trong một số trường hợp. Nhưng tôi sẽ không thực hiện mục tiêu đầu tiên của mình, nhất thiết ... Chỉ cần lưu ý rằng đó sẽ là mục tiêu cuối cùng và để điều đó ảnh hưởng đến thiết kế của bạn một chút, và trước tiên hãy cho quả treo thấp.


Là một bản cập nhật, bạn có thể muốn xem xét sử dụng Định dạng tệp KTX cho kết cấu. Nó có lợi thế chủ yếu là "đọc vào structvà đi" trong hầu hết các giai đoạn GL (và từ nhận xét của bạn, có vẻ như bạn đang nhắm mục tiêu GL) trong khi vẫn linh hoạt và được xác định rõ.

Chi phí tiêu đề KTX có thể hơi cao đối với dữ liệu được nướng hoàn toàn, tùy thuộc vào mục tiêu của bạn và bạn có thể muốn từ bỏ hỗ trợ hoán đổi endian, tùy thuộc vào usecase của bạn ... nhưng ít nhất nó đáng để người xem xét thiết kế.


Công cụ tuyệt vời cảm ơn. Tôi chưa bao giờ xem xét việc xây dựng định dạng hình ảnh dễ dàng của riêng tôi. Có một thư viện tải kết cấu tối thiểu đã được xây dựng. Sau đó, một lần nữa, về cơ bản, đó là một luồng byte với chiều rộng, chiều cao và mã hóa (ví dụ GL_RGB555).
deft_code

1
Đừng xây dựng định dạng hình ảnh của riêng bạn nhiều như đưa hình ảnh vào định dạng chính xác mà DirectX, GL hoặc bất cứ điều gì bạn đang sử dụng muốn. =) Theo như các thư viện đi: có một tấn ra khỏi đó. Đối với các công cụ, tôi có xu hướng chỉ sử dụng công cụ thư viện ImageMagick ( fantemagick.org/script/index.php ) hoặc thậm chí các chương trình ... Mã ImageMagick là trường học cũ và hơi xấu, nhưng khá nhanh, linh hoạt và đường -thử nghiệm. Tôi chắc rằng những người khác sẽ có rất nhiều đề xuất khác; nếu bạn đang sử dụng ví dụ như C # cho toolchain của bạn, rất nhiều công cụ này sẽ đã được xây dựng thành NET libs ...
leander

1
"Tôi chắc rằng những người khác sẽ có rất nhiều đề xuất khác" MFC! :) Hoặc có lẽ là OpenIL. Tôi nghĩ một trong những điểm quan trọng về việc nướng tài sản thành các định dạng dành riêng cho nền tảng là khi bạn thêm nhiều định dạng nguồn và nhiều nền tảng hơn, số lượng kết hợp sẽ bùng nổ. Chuyển đổi tài sản nguồn thành định dạng trung gian và sau đó chuyển đổi tài sản đó thành định dạng dành riêng cho nền tảng sẽ cắt giảm số lượng tuyến chuyển đổi. Thêm một định dạng nguồn khác, chỉ cần viết một trình chuyển đổi sang định dạng trung gian. Thêm một nền tảng khác, thêm một thợ làm bánh vào định dạng mục tiêu nền tảng đó.
Chris Howe

1
Tôi sẽ nói thêm rằng việc giữ sự phức tạp bên ngoài động cơ không nhất thiết có nghĩa là chức năng không có sẵn cho động cơ. Giữ nó tách biệt mặc dù vậy nó dễ dàng tách khỏi động cơ là chìa khóa. Tôi không thể nhấn mạnh đủ mức độ hữu ích của nó để hỗ trợ tải tài sản nóng, tức là tải lại mọi thứ một cách nhanh chóng. Điều này cũng có thể mang lại nhiều sự phức tạp cho hệ thống của bạn, vì vậy bạn sẽ muốn đảm bảo rằng nó được xây dựng theo cách mà trò chơi không cần quan tâm đến việc tài sản đến từ đâu.
dash-tom-bang

3

Câu hỏi của bạn nghe có vẻ rất chủ quan và phụ thuộc nhiều vào đối tượng mục tiêu của bạn là ai.

Hãy lấy câu hỏi phân tích phông chữ / ttf của bạn. Nếu bạn đang lên kế hoạch cho các modder thêm phông chữ của riêng họ, thì có lẽ bạn muốn thực hiện quy trình nhập càng ít bước càng tốt. Nếu bạn thêm nhiều phông chữ / kích thước phông chữ vào trò chơi trong nội bộ, có thể bạn muốn có một công cụ hơi phức tạp mà một nghệ sĩ có thể sử dụng với một chút đào tạo. Nếu bạn sẽ thực hiện nó một lần trong nội bộ thì thời gian bạn dành cho một nhà nhập khẩu thích hợp có lẽ sẽ ít hơn so với việc dành thời gian để viết công cụ cho các trường hợp trước.

Đó thực sự là một vấn đề quy mô với mọi thứ khác. Các công cụ nhúng đáng để nỗ lực khi bạn đang làm một việc gì đó rất nhiều lần và muốn giảm sự phức tạp / lỗi phát sinh từ nó. Mỗi vòng loại bổ sung mà bạn thêm (tức là kết cấu TGA chỉ thay vì nhập, giả sử, PSD) sẽ dẫn đến nhiều thời gian hơn cho người dùng cuối.

Hãy nhớ rằng các công cụ nội dung thường được sử dụng bởi những người ít thiên về kỹ thuật (đọc: nghệ sĩ). Cá nhân, tôi thực sự thích cách Unity hoạt động khi bạn chỉ cần kéo vào một tệp nguồn (psd, 3ds, ttf, mp3, jpg, Mov, bất cứ điều gì) và nó sẽ tự động chuyển đổi nó sang định dạng bên trong. Các định dạng nội bộ chủ yếu được ẩn từ người dùng cuối. Nó cũng sẽ tự động chuyển đổi lại khi phát hiện thay đổi tệp nguồn. Nhưng đó là rất nhiều công việc.

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.