
Phân tích chuỗi Game Web3 (2): Sản xuất và chế tác công nghiệp (công nghệ và mỹ thuật)
Tuyển chọn TechFlowTuyển chọn TechFlow

Phân tích chuỗi Game Web3 (2): Sản xuất và chế tác công nghiệp (công nghệ và mỹ thuật)
Bài viết này chủ yếu phân tích về sản xuất và chế tác công nghiệp (mỹ thuật và công nghệ) trong lĩnh vực Web3 Gaming.
Tác giả: Jake @Antalpha Ventures, Blake @Akedo Games, Jawker @Cipherwave Capital
Lời mở đầu
Do các công ty phát triển khác nhau áp dụng kiến trúc (kiến trúc tổ chức dự án + trung đài) khác nhau, mức độ chú trọng vào dự án và tổ chức trung đài cũng khác biệt. Một số nơi thiên về dự án mạnh, trung đài yếu; một số khác lại tập trung vào trung đài mạnh, dự án yếu. Do đó, loạt bài viết này sẽ phân tích chủ yếu theo các chức năng và quy trình liên quan đến phát triển trò chơi. Dựa trên cơ sở đó, bài viết thứ hai trong chuỗi này sẽ tập trung phân tích sản xuất và chế tạo công nghiệp hóa trong lĩnh vực Web3 Gaming (về mỹ thuật và công nghệ). Sau khi một trò chơi được phê duyệt, bộ phận thiết kế đã xác định rõ các chi tiết như lối chơi cốt lõi, tính hấp dẫn, bao gồm phát triển nhân vật, hướng dẫn hành vi người chơi, bản đồ và cốt truyện. Vì vậy, nhóm thiết kế trò chơi cần phối hợp với đội ngũ mỹ thuật và kỹ thuật để đưa quá trình phát triển trò chơi Web3 tiến vào giai đoạn thiết kế và phát triển.

Nguồn: Thông tin thị trường công khai

Nguồn: Buming Technology
Sản xuất và chế tạo công nghiệp: Tổng quan phần kỹ thuật
Sau khi nhóm thiết kế làm rõ yêu cầu, các đội lập trình kỹ thuật phía trước và phía sau cần hiện thực hóa thiết kế trò chơi do bộ phận thiết kế đề ra, viết mã trò chơi và đảm bảo hiện thực hóa kỹ thuật của trò chơi. Trong quá trình thực hiện cụ thể, có thể chia thành lập trình phía trước (frontend) và phía sau (backend). Trưởng nhóm kỹ thuật cần quản lý toàn bộ quy trình kỹ thuật, bao gồm nhưng không giới hạn ở việc xác định phương án thực thi kỹ thuật chính, tối ưu hóa hiệu suất mọi mặt, và hướng dẫn xây dựng khung nền tảng底层.
-
Lập trình frontend: Bao gồm hiển thị, tối ưu hóa và logic liên quan, xử lý file âm thanh, hình ảnh và văn bản.
-
Lập trình backend: Bao gồm phía máy chủ, như cấu trúc cơ sở dữ liệu, truyền tải dữ liệu, kiểm tra xác thực, lưu trữ và phương thức giao tiếp v.v.
Hình dưới đây minh họa các thành phần frontend và backend trong phát triển trò chơi Web3. Phần sau sẽ phân tích chi tiết hai phần này.

Nguồn: Yousha Game Circle; Được tổng hợp bởi Jake
Sản xuất và chế tạo công nghiệp: Kỹ thuật Frontend
Phát triển chương trình frontend của trò chơi tập trung vào giao diện, tương tác và trải nghiệm người dùng. Về mặt tương tác và trải nghiệm người dùng, cần đặc biệt chú trọng vào tính tương tác và trải nghiệm người dùng, bao gồm thiết kế và hiện thực hóa giao diện người dùng (UI), phát triển hệ thống tương tác người dùng (UI), cũng như tạo ra hoạt ảnh và hiệu ứng hình ảnh. Ngoài ra, kỹ sư frontend còn phải đảm bảo trò chơi mang lại trải nghiệm người dùng nhất quán trên các nền tảng khác nhau, bao gồm cả thiết bị để bàn và di động. Trong việc hiện thực hóa logic trò chơi, nhà phát triển cần chú ý đến hành vi của nhân vật trong trò chơi, thực thi các quy tắc trò chơi, quản lý điểm số và tiến độ, cũng như cơ chế phản hồi sự kiện trong trò chơi. Nhà phát triển cần viết mã hiệu quả, liền mạch để đảm bảo gameplay mượt mà, công bằng và đầy thách thức.
Vì vậy, theo những mục tiêu trên, các nhà phát triển frontend cần sử dụng ngôn ngữ lập trình liên quan (như C#, C++ v.v.), sử dụng các game engine (như Unreal, Unity, Source, CryEngine v.v.) để tạo giao diện trò chơi, điều chỉnh hiệu ứng hoạt ảnh và biểu đạt âm thanh. Thị trường hiện có nhiều công cụ game engine cho nhà phát triển lựa chọn, cần căn cứ vào nhu cầu cụ thể của nhà phát triển để chọn công cụ game engine phù hợp. Các game engine khác nhau có trọng tâm hỗ trợ cộng đồng phát triển khác nhau, dưới đây là sở thích và nhu cầu của nghiên cứu phát triển trò chơi đối với việc lựa chọn game engine:
-
Yêu cầu dự án: Các loại trò chơi khác nhau đặt ra yêu cầu khác nhau về lựa chọn engine. Ví dụ, đối với các trò chơi AAA nhấn mạnh hiệu ứng hình ảnh, Unreal Engine hoặc CryEngine có thể phù hợp hơn; trong khi các trò chơi nhỏ trên nền tảng di động thì Unity có thể là lựa chọn tốt hơn.
-
Độ dốc học tập và hỗ trợ cộng đồng: Một engine dễ nắm bắt và sử dụng có thể giảm đáng kể độ khó phát triển. Hơn nữa, cộng đồng sôi nổi có thể cung cấp nguồn tài nguyên phong phú và hỗ trợ, giúp nhà phát triển nhanh chóng tìm ra giải pháp khi gặp vấn đề.
-
Hiệu suất và tối ưu hóa: Hiệu suất và khả năng tối ưu hóa của engine cực kỳ quan trọng đối với hiệu quả vận hành trò chơi.
-
Chi phí và giấy phép: Một số engine có thể yêu cầu trả phí hoặc có các yêu cầu giấy phép cụ thể. Nhà phát triển cần cân nhắc giữa ngân sách và nhu cầu dự án.
-
Mở rộng và tùy biến: Cùng với sự phát triển liên tục của ngành công nghiệp trò chơi, game engine phải có khả năng thích nghi với xu hướng công nghệ mới và nhu cầu mới. Tìm hiểu về khả năng mở rộng và tùy biến của engine sẽ giúp nhà phát triển đối phó tốt hơn với những thay đổi trong tương lai.
Dựa trên phân tích nhu cầu trên, dưới đây sẽ giới thiệu và phân tích sơ lược hai game engine tiêu biểu Unity và Unreal Engine.
-
Unity là một game engine hỗ trợ nhiều nền tảng chính như Windows, Mac, iOS, Android v.v. Unity có tính tùy biến cao, cho phép nhà phát triển viết script bằng
C#hoặcJavaScript. Ngoài ra, Unity cung cấp cửa hàng tài nguyên phong phú, nơi nhà phát triển có thể mua và tải về các plugin, mô hình và âm thanh khác nhau. Những ưu điểm chính của Unity bao gồm cộng đồng sôi nổi, khả năng tương thích đa nền tảng tuyệt vời, môi trường phát triển dễ tiếp cận và lượng lớn gói bên thứ ba. Các nhà phát triển có thể tự tạo gói chức năng và bán trên cửa hàng chính thức của Unity. Hiện nay, mỗi tháng có hơn 1,5 triệu nhà phát triển truy cập cửa hàng, với hơn 56.000 gói có sẵn. Nhìn từ góc độ thương mại hóa và kiếm tiền, Unity đa dạng hơn, các kênh kiếm tiền bao gồm SDK Monetization, dịch vụ mạng trò chơi Unity Cloud, dịch vụ thoại Vivox, dịch vụ lưu trữ máy chủ nước ngoài Multiplay, nền tảng phân phối nội dung UDP, dịch vụ xây dựng đám mây Unity v.v. Trong đó, SDK Monetization cho phép nhà phát triển tích hợp, Unity trực tiếp đóng vai trò cổng phân phối quảng cáo, hiện dịch vụ này đã thay thế giấy phép thương mại của engine trở thành nguồn thu chính của Unity. Các trò chơi nổi tiếng toàn cầu như Escape from Tarkov, Temtem, Call of Duty Mobile và Hearthstone chứng minh Unity là một trong những game engine xuất sắc nhất trên thị trường. Tuy nhiên, khả năng tối ưu hóa hiệu suất của Unity tương đối kém, xử lý cảnh quy mô lớn và mô hình độ phân giải cao khá hạn chế. Trải nghiệm UI của Unity thua kém Unreal, do đó nhà phát triển phải thêm nhiều gói bên thứ ba để hoàn thiện chức năng engine. Về lập trình, Unity sử dụngC#vàJavaScript, dẫn đến một số vấn đề thích ứng trong quá trình phát triển. Vào tháng 3 năm 2020, Unity chính thức ra mắt phiên bản mới nhất2019.3, bao gồm đường ống render chất lượng cao HDRP (High Definition Render Pipeline) và đường ống render phổ thông URP (Universal Render Pipeline), tăng cường hiệu quả hình ảnh và khả năng tối ưu hóa. Đồng thời bổ sung trình chỉnh sửa view hiệu ứng, hệ thống theo dõi ánh sáng thời gian thực v.v., giúp nó thích nghi tốt hơn với nhu cầu thị trường hiện tại và áp dụng vào sản xuất trò chơi lớn. -
Unreal Engine là một game engine mã nguồn mở hiệu suất cao, nổi tiếng với hiệu ứng hình ảnh xuất sắc và động cơ vật lý mạnh mẽ. Nó hỗ trợ C++ và lập trình trực quan Blueprints, cung cấp trình chỉnh sửa vật liệu và hệ thống chiếu sáng mạnh mẽ, có thể tạo ra hình ảnh trò chơi chân thực. Đối với nhà phát triển, Unreal không chỉ miễn phí sử dụng mà còn cho phép nghiên cứu mã nguồn để nâng cao hiệu quả phát triển. Ngoài ra, Unreal Engine có sẵn Blueprints, vì vậy ngay cả những người không phải lập trình viên cũng có thể hoàn thành thiết kế trò chơi thông qua giao diện trực quan kéo-thả. Thêm vào đó, Unreal Engine có khả năng tương thích đa nền tảng và hệ thống UI có thể tùy chỉnh cao. Về phí, Unreal áp dụng mô hình kinh doanh engine truyền thống. Mô hình phí đầu tiên là thu 5% cố định trên phần doanh thu trò chơi vượt quá 1 triệu USD; mô hình thứ hai là bán tài nguyên chính thức hoặc bên thứ ba trên cửa hàng, hưởng 12% lợi nhuận. Về sản phẩm và danh tiếng, các trò chơi nổi tiếng toàn cầu như Borderlands, Batman: Arkham Asylum và Final Fantasy 7 Remake đều sử dụng Unreal Engine. Tuy nhiên, đường cong học tập của Unreal Engine khá dốc, dễ tiếp cận nhưng khó thành thạo, đòi hỏi thời gian và kinh nghiệm nhất định để nắm vững.
Theo phân tích dữ liệu từ Medium và Jingke, vào năm 2021, thị phần toàn cầu của Unity đạt 49,5%, thị phần toàn cầu của Unreal là 9,7%, tạo nên cục diện cạnh tranh độc quyền song phương. Một báo cáo nghiên cứu thị trường khác cho thấy vào năm 2023, thị phần của Unity và Unreal Engine lần lượt là 48% và 13%. Bảng dưới đây so sánh chi tiết hai nền tảng này về đồ họa, tính năng, mã và biểu hiện.

Nguồn: Incredibuild; Phân tích tổng hợp của Jake
Về mặt hiệu ứng hình ảnh và thị giác, Unreal Engine có thể đạt hiệu quả hơi vượt trội so với Unity, nhưng chênh lệch rất nhỏ. Xét về độ dễ tiếp cận, Unity dễ làm quen hơn với người mới bắt đầu, và C# mà Unity yêu cầu thường cho tốc độ biên dịch nhanh hơn và thời gian lặp ngắn hơn; trong khi Unreal Engine khó hơn với người mới về xử lý hoạt ảnh và đồ họa. Trong thực tế sử dụng, hiệu quả mong muốn trong Unreal Engine cũng có thể đạt được bằng Unity. Cả hai phần mềm đều có thể gọi API hoặc công cụ để đạt hiệu quả biểu hiện đồ họa tốt hơn và hiệu quả cao hơn. Theo thống kê, trong thực tế, kỹ sư mã nguồn thường ưa thích Unity hơn, trong khi kỹ sư mỹ thuật kỹ thuật yêu cầu biểu hiện đồ họa cao hơn lại ưa thích Unreal Engine.

Giao diện thực tế Unity, Nguồn: Thông tin thị trường công khai

Giao diện thực tế Unreal Engine, Nguồn: Thông tin thị trường công khai
Tương tự, ngoài Unity và Unreal, các nhà phát triển kỹ thuật frontend còn có thể lựa chọn các game engine khác, dưới đây là một vài game engine phổ biến để tham khảo:
-
CryEngine nổi tiếng với hiệu ứng hình ảnh chất lượng cao và động cơ vật lý mạnh mẽ. Nó cung cấp chiếu sáng toàn cục thời gian thực và mô hình, vật liệu chất lượng cao, cho phép nhà phát triển tạo ra trò chơi đẳng cấp thế giới chân thực. Tuy nhiên, tài liệu và nguồn lực cộng đồng của CryEngine tương đối ít, đối với người mới bắt đầu có thể gặp khó khăn nhất định khi học tập.
-
GameMaker Studio 2 là công cụ phát triển trò chơi, có thể dùng để tạo trò chơi 2D hoặc 3D. Có nhiều công cụ và trình chỉnh sửa hỗ trợ hiện thực hóa ý tưởng trò chơi của nhà phát triển, chuyển dự án cuối cùng từ cùng nguồn tài nguyên ban đầu sang nhiều nền tảng. GameMaker Studio 2 cung cấp giao diện biểu tượng thao tác kéo-thả (Drag and Drop, viết tắt DnD™) trực quan và dễ dùng, cho phép tạo trò chơi bằng logic mã ảo. Đồng thời có thể dùng ngôn ngữ script GML để tạo trò chơi, thậm chí kết hợp cả hai, dùng thao tác DnD™ gọi hàm.
-
Godot Engine là một game engine mã nguồn mở đa năng, đa nền tảng cho cả trò chơi 2D và 3D, có thể chạy trên nhiều hệ điều hành như Windows, macOS, Linux v.v. Trò chơi được tạo ra có thể chạy trên PC, Android, iOS, HTML5 v.v. Thiết kế trò chơi dựa trên kiến trúc nút, bộ render 3D được thiết kế để tăng cường hiệu ứng hình ảnh trò chơi 3D. Chức năng trò chơi 2D với công cụ tích hợp làm việc theo tọa độ pixel, có thể kiểm soát hiệu ứng trò chơi 2D.
Bất kể chọn game engine nào, nhà phát triển kỹ thuật frontend đều cần xem xét tình hình sử dụng thực tế. Vì trò chơi Web3 là sản phẩm tiêu dùng, các cơ chế chơi đa dạng (như tập trung, đồng cảm, tưởng tượng) và trải nghiệm tương tác cảm xúc nhập vai (như vui vẻ, sợ hãi, khao khát, trưởng thành, thư giãn, nhẹ nhàng và bất ngờ v.v.) là điều kiện tiên quyết quan trọng để người tiêu dùng tiếp tục chi tiêu. Dưới đây lấy ví dụ về mô phỏng vật lý và hệ thống vẽ (hệ thống render/renderer) trong quá trình chơi trò chơi để phân tích các chi tiết kỹ thuật và vấn đề trải nghiệm người dùng mà kỹ thuật viên frontend cần cân nhắc khi sử dụng game engine.
Nếu không có mô phỏng hiệu ứng vật lý chính xác, dù trò chơi có hoành tráng đến đâu cũng sẽ trông tĩnh lặng, buồn tẻ và cứng nhắc. Các cảnh đa dạng trong trò chơi đều liên quan đến nguyên lý vật lý và động cơ vật lý. Động cơ vật lý là một thành phần, trao cho các đối tượng trong thế giới trò chơi thuộc tính vật lý thực tế (như khối lượng và hình dạng v.v.), và trừu tượng hóa thành mô hình vật rắn (bao gồm ròng rọc, dây v.v.), khiến các vật thể trong trò chơi mô phỏng chuyển động thực tế và quá trình va chạm dưới tác dụng của lực. Nghĩa là dựa trên mô hình cơ học cổ điển Newton, thông qua API đơn giản tính toán chuyển động, xoay và va chạm của vật thể trò chơi, đạt được hiệu ứng chuyển động và va chạm thực tế. Trong quá trình tính toán, áp dụng lý thuyết và tính toán từ nhiều môn khoa học như động học và động lực học.
-
Động học: Ngành con của cơ học mô tả và nghiên cứu quy luật thay đổi vị trí vật thể theo thời gian từ góc độ hình học (không liên quan đến tính chất vật lý của vật thể và lực tác dụng lên vật thể). Động học điểm nghiên cứu phương trình chuyển động, quỹ đạo, chuyển vị, vận tốc, gia tốc và các đặc điểm chuyển động khác của điểm, cũng như biến đổi trong các không gian khác nhau. Động học là ngành con của cơ học lý thuyết, sử dụng phương pháp hình học để nghiên cứu chuyển động vật thể. Trong công việc, kỹ thuật frontend cần cân nhắc thêm các giả định, cố gắng sát với quy tắc vật lý thực tế đồng thời giảm độ phức tạp tính toán. Các giả định phổ biến bao gồm: không xem xét chuyển động dưới tác dụng lực ngoài, coi một vật thể như bộ phận hình học, trừu tượng hóa thành mô hình chuyển động chất điểm, chỉ xem xét các thuộc tính vật thể (như vị trí, vận tốc, góc v.v.).
-
Động lực học: Chủ yếu nghiên cứu mối quan hệ giữa lực tác dụng lên vật thể và chuyển động của vật thể. Đối tượng nghiên cứu của động lực học là vật thể vĩ mô có vận tốc chuyển động xa thấp hơn vận tốc ánh sáng. Trong động cơ vật lý trò chơi, chủ yếu liên quan đến động lực học vật rắn, bao gồm các định lý cơ bản của động lực học hệ chất điểm, từ định lý động lượng, định lý mô men động lượng, định lý động năng và các định lý khác suy ra từ ba định lý cơ bản này. Trong đó, động lượng, mô men động lượng và động năng là các đại lượng vật lý cơ bản mô tả chuyển động của chất điểm, hệ chất điểm và vật rắn. Trong công việc và kỹ thuật tính toán, các yếu tố và giả định cần cân nhắc bao gồm: ảnh hưởng của lực ngoài đến chuyển động vật thể, tác dụng lực (trọng lực, lực cản, lực ma sát v.v. tác dụng lên khối lượng và hình dạng vật thể, thậm chí cả vật thể đàn hồi), giả định vật rắn và vật thể trong trò chơi sát với chuyển động thực tế v.v.
Sử dụng động cơ vật lý, nhà phát triển trò chơi chỉ cần cân nhắc gán hình dạng (giả định phân bố đều) và lực cho vật thể trò chơi, quá trình tính toán chuyển động và va chạm sẽ tự động hoàn tất dưới sự điều khiển của game engine. Và dựa trên phân tích động cơ vật lý trên, đội kỹ thuật frontend không cần đào sâu vào kiến thức động học phức tạp và tính toán, tối ưu hóa va chạm, chỉ cần nhập tham số vào động cơ vật lý. Tuy nhiên cần lưu ý rằng, để tận dụng hiệu quả động cơ vật lý, đội kỹ thuật frontend không chỉ cần hiểu kiến thức cơ bản về chuyển động vật lý, mà còn cần nhận biết các hiện tượng đặc biệt do mô phỏng rời rạc trong trò chơi gây ra, để tránh sai lệch hình ảnh. Kỹ thuật viên frontend giàu kinh nghiệm còn cần cân nhắc tính mượt mà của trò chơi, suy nghĩ về hiệu suất vận hành trò chơi v.v.
Trước khi xây dựng mô hình chuyển động vật rắn trong trò chơi, cần cân nhắc nhiều yếu tố sau:
-
Mô hình được thiết lập có phải là vật rắn hay không, mức độ biến dạng đàn hồi sau khi chịu lực;
-
Khi chuyển động hoặc chịu lực, hình dạng và kích thước có thay đổi không;
-
Khi chuyển động hoặc chịu lực, vị trí tương đối giữa các điểm bên trong vật thể có thay đổi không;
Vì vậy, dựa trên phân tích trên, đội kỹ thuật frontend cần thiết lập tâm, hình dạng, khối lượng, hướng chuyển động ban đầu và quỹ đạo của vật thể. Hơn nữa, đối với trọng lực và chuyển động vật thể, cần đặc biệt thiết lập trọng tâm vật thể, giả định mô hình vật thể là đồng nhất và tâm trùng với trọng tâm. Khi thiết lập chuyển động vật thể, cần cân nhắc phân tích lực tác dụng lên vật thể thành lực tại điểm trung tâm và mô men quay quanh điểm trung tâm. Việc thiết lập tham số cần phù hợp với nhận thức của người chơi về vật thể và chuyển động, để tạo cảm giác nhập vai, nếu không người chơi sẽ mất cảm giác, khó tạo cảm xúc nhập vai trong quá trình chơi. Hình dưới đây là sơ đồ phân tích lực và mô men:

Nguồn: Thông tin thị trường công khai
Để đạt được hành vi vật lý chân thực, vật thể trong trò chơi cần tăng tốc đúng cách (phù hợp với nhận thức con người), và chịu tác dụng của va chạm, trọng lực v.v. Trước hết cần lưu ý rằng, khi thiết lập chuyển động mô hình vật thể 3D, phải xác định xem mô hình vật thể có phải là vật thể lồi hay không, tức là đường nối giữa hai đỉnh bất kỳ không rời khỏi bề mặt vật thể. Mặc dù hầu hết vật thể thực tế không phải là lồi, nhưng trong mô phỏng vật lý, vật thể lồi thường là xấp xỉ lý tưởng. Khi động cơ vật lý tính toán và mô phỏng va chạm, vật thể lồi có thể tạo ra hành vi thụ động chính xác hơn, như va chạm và rơi xuống v.v. Hình dạng va chạm lồi đạt được sự cân bằng giữa hình dạng va chạm gốc và hình dạng va chạm lõm, có thể biểu diễn mọi hình dạng phức tạp. Điều khiển vật lý bằng script có thể cung cấp đặc tính động cho đối tượng như xe, máy móc thậm chí vải vóc. Tất nhiên, lưới đầu vào có thể là lõm, động cơ vật lý sẽ tính toán phần lồi của nó. Tùy theo độ phức tạp đối tượng, sử dụng nhiều hình dạng lồi thường cho hiệu suất tốt hơn so với sử dụng hình dạng va chạm lõm. Godot cho phép tạo hình dạng lồi gần khớp với đối tượng rỗng qua phân tích lồi, nhưng lợi thế hiệu suất này sẽ giảm khi số lượng hình dạng lồi quá nhiều. Với đối tượng lớn, phức tạp như cả màn chơi, khuyến nghị sử dụng hình dạng lõm. Khi mô hình hóa hình dạng vật thể, các kiểu tham chiếu thường dùng bao gồm cầu (SPHERE), lập phương (BOX), hình nang (CAPSULE), hình trụ (CYLINDER) và bao lồi (CONVEX_HULL) v.v., có thể thêm các tham số như điểm trung tâm, góc xoay, kích thước v.v. để kỹ thuật frontend sử dụng.
Khi mô phỏng chuyển động vật thể, cần quá trình tính toán bổ sung. Khi nhập mô hình, việc thêm động cơ vật lý có thể vô hiệu, do đó có thể bao vật thể bằng một Mesh đơn giản, để tư thế vật thể theo Mesh. Mesh được tạo bằng Babylon có thể trực tiếp thêm thuộc tính vật lý, hoặc tự định nghĩa Shader để tạo. Mặc dù tự định nghĩa Shader khá phức tạp, nhưng hiệu quả đạt được tốt hơn. Trong thao tác thực tế của trình chỉnh sửa, chọn thể hiện lưới và sử dụng menu Mesh ở đầu cửa sổ xem 3D, có thể tạo một hoặc nhiều hình dạng va chạm lồi. Trình chỉnh sửa cung cấp hai chế độ tạo:
-
Tạo va chạm lồi đơn sử dụng thuật toán
Quickhull, tạo nút ColisionShape với hình dạng va chạm lồi tự động sinh. Vì chỉ tạo một hình dạng, hiệu suất tốt hơn, phù hợp với mô hình vật thể nhỏ. -
Create Multiple Convex Collision Siblings sử dụng thuật toán
V-HACD, tạo ra vài nút ColisionShape, mỗi nút có một hình dạng lồi. Vì tạo nhiều hình dạng, nên đánh đổi hiệu suất để chính xác hơn với vật thể lõm. Với đối tượng độ phức tạp trung bình, có thể nhanh hơn so với dùng một hình dạng va chạm lõm đơn.
Đối với hình dạng va chạm lõm, hình dạng lõm là lựa chọn chậm nhất, nhưng cũng chính xác nhất trong Godot. Chỉ có thể dùng hình dạng lõm trong StaticBodies. Trừ khi chế độ vật rắn là tĩnh, nếu không chúng không thể dùng với KinematicBodies hoặc RigidBody. Khi không dùng GridMaps để thiết kế màn chơi, hình dạng lõm là phương pháp va chạm tốt nhất cho màn chơi. Đồng thời có thể xây dựng một lưới va chạm đơn giản trong phần mềm mô hình 3D và để Godot tự động tạo hình dạng va chạm. Có thể chọn MeshInstance và dùng menu Mesh ở đầu cửa sổ xem 3D để tạo hình dạng va chạm lõm từ trình chỉnh sửa. Trình chỉnh sửa cung cấp hai tùy chọn:
-
Create Trimesh Static Body tạo một StaticBody chứa hình dạng lõm khớp với hình học lưới.
-
Create Trimesh Collision Sibling tạo một nút CollisionShape, hình dạng lõm khớp với hình học lưới.
Cần lưu ý rằng, nên giữ số lượng hình dạng càng ít càng tốt để cải thiện hiệu suất, đặc biệt với các đối tượng động như RigidBodies và KinematicBodies; tránh dịch chuyển, xoay hoặc thu phóng CollisionShapes để hưởng lợi từ tối ưu hóa nội bộ của động cơ vật lý. Khi dùng một hình dạng va chạm chưa chuyển đổi duy nhất trong StaticBody, thuật toán giai đoạn rộng của engine có thể loại bỏ các PhysicsBodies không hoạt động. Nếu gặp vấn đề hiệu suất, phải cân nhắc giữa độ chính xác và hiệu suất. Hầu hết trò chơi không có va chạm chính xác 100%, các trò chơi đều tìm ra phương pháp sáng tạo để che giấu hoặc khiến nó không rõ ràng trong quá trình chơi bình thường.


Nguồn: Thông tin thị trường công khai
Nội dung trên lấy mô phỏng vật lý làm ví dụ để phân tích nội dung mà nhà phát triển frontend cần hoàn thành và lưu ý; tiếp theo sẽ lấy hệ thống vẽ (hệ thống render/renderer) làm ví dụ để phân tích nhiệm vụ nhà phát triển frontend cần hoàn thành. Hệ thống vẽ cũng là một trong những phần cao nhất và khó nhất trong toàn bộ game engine. Về lý thuyết, render cần giải quyết hai vấn đề: tính đúng đắn toán học (toán học, vật lý và thuật toán) và độ chính xác của hiệu ứng vẽ (ánh sáng, góc không gian, tán xạ, khúc xạ, phản xạ v.v.), nhằm tạo cảm giác nhập vai cho người dùng. Trong quá trình thực hiện và thực tiễn, cần giải quyết bốn vấn đề thực tế sau:
-
Phức tạp cảnh: Render nhiều vật thể trong cảnh đơn ở nhiều góc độ, và khi tạo từng khung hình trò chơi, cần lặp lại nhiều lần tính toán; trong nhiều cảnh, render nhiều vật thể ở nhiều góc độ sẽ phức tạp hơn;
-
Thích ứng sâu phần cứng: Khả năng của phần cứng như PC, điện thoại ảnh hưởng đến việc chạy thuật toán và đầu ra. Đối với phần cứng, cần xử lý các công việc lấy mẫu kết cấu tốn thời gian và các phép tính toán học phức tạp như sin, cos, hàm mũ và logarit v.v. Ngoài ra, đơn vị phần cứng thực hiện tính toán底层 cũng cần xem xét hỗ trợ tính toán độ chính xác hỗn hợp;
-
Ngân sách hiệu suất: Dù yêu cầu hình ảnh trò chơi cao đến đâu, game engine cũng phải đảm bảo hình ảnh trò chơi hoàn tất tính toán trong 33 mili giây (tức 1/30 giây). Với trò chơi nhập vai sâu quy mô lớn, trong thời gian ngắn hình ảnh trò chơi có thể thay đổi lớn, nhưng yêu cầu thời gian tính toán không thể rút ngắn. Hơn nữa, cùng với sự phát triển ngành công nghiệp trò chơi, yêu cầu độ tinh tế ngày càng cao, yêu cầu tốc độ khung hình và độ phân giải hình ảnh ngày càng cao. Ngân sách thời gian mỗi khung hình ngày càng ít, nhưng yêu cầu chất lượng hình ảnh ngày càng cao;
-
Phân bổ ngân sách thời gian cho mỗi khung hình: Về tỷ lệ hiệu suất card đồ họa, GPU có thể chiếm tỷ lệ nhiều hơn CPU. Thuật toán render đồ họa không được chiếm quá nhiều tài nguyên tính toán CPU, tài nguyên tính toán cần phân bổ cho các mô-đun khác trong hệ thống.


Nguồn: Buming Technology
Theo phân tích trên, tính toán là một trong những chức năng cốt lõi quan trọng nhất của hệ thống vẽ và render, tức là thực hiện các thao tác tính toán trên hàng chục triệu đỉnh, pixel, đơn vị tính toán logic và kết cấu. Nói đơn giản, trong thao tác cụ thể, nhiều mặt phẳng được xây dựng từ tam giác sau khi qua ma trận chiếu, được chiếu lên không gian màn hình; thông qua raster hóa chuyển dữ liệu đỉnh thành fragment, mỗi phần tử trong fragment tương ứng với một pixel trong bộ đệm khung hình, quá trình này chuyển hình ảnh thành hình ảnh 2D gồm các ô lưới. Trong quá trình tô màu và vẽ, tại mỗi điểm pixel nhỏ, tính toán chất liệu và kết cấu tương ứng điểm pixel, tô màu pixel thành màu tương ứng. Hơn nữa, để tăng cảm giác nhập vai và chân thực, cần điều chỉnh ánh sáng và hoa văn vật thể theo thực tế, render hiệu quả cuối cùng, sau đó xây dựng bộ đệm đỉnh và bộ đệm chỉ số, rồi truyền dữ liệu lưới vào card đồ họa. Quá trình "chiếu - raster hóa - tô màu và vẽ - hậu xử lý và tính toán ánh sáng" trên chính là quá trình vẽ.

Nguồn: Buming Technology
Cụ thể hơn, vật thể và cảnh cần render có hình dạng hình học, chất liệu, hoa văn và ứng dụng đa dạng, do đó trong thao tác render thực tế cần phân tích cụ thể từng trường hợp. Thông thường, tệp mô hình cần lưu nhiều đỉnh, bao gồm vị trí đỉnh, hướng pháp tuyến tại đỉnh, tọa độ UV đỉnh và dữ liệu thuộc tính khác. Trong hầu hết trường hợp, tính toán hướng tam giác của mỗi mô hình, sau đó dùng vector pháp tuyến của vài tam giác gần đó để trung bình, có thể nhận được hướng pháp tuyến tại đỉnh đó; trong thực tế, dùng dữ liệu chỉ số và dữ liệu đỉnh mô tả tam giác tệp mô hình, đặt tất cả đỉnh vào một mảng, chỉ lưu thông tin vị trí chỉ số ba đỉnh, có thể tiết kiệm dung lượng lưu trữ xuống 1/6 so với ban đầu.
Kết cấu là cách biểu đạt rất quan trọng của chất liệu. Đối với cảm nhận loại chất liệu, nhiều khi không do tham số chất liệu quyết định, mà do kết cấu quyết định. Ví dụ, sự phân biệt biểu hiện thị giác giữa bề mặt kim loại trơn bóng và bề mặt phi kim loại rỉ sét là do kết cấu độ nhám phân biệt. Trong quá trình tô màu và vẽ, hiệu suất tiêu thụ của lấy mẫu kết cấu rất lớn và phức tạp, mỗi lần lấy mẫu kết cấu cần lấy dữ liệu 2x4, tổng cộng 8 điểm pixel, và cần 7 lần nội suy. Lưu ý rằng, lấy mẫu kết cấu cần tránh các vấn đề răng cưa v.v., tránh hiện tượng rung hình và lệch vị trí do thay đổi góc nhìn; do đó khi lấy mẫu, cần lấy bốn điểm, nội suy bốn điểm, đồng thời lấy mẫu theo tỷ lệ trên hai lớp kết cấu là không thể thiếu.
Khi tô màu và vẽ, cần ghép và kết hợp các yếu tố khác nhau, lúc này mã Shader do engine tạo ra sẽ được biên dịch thành một khối dữ liệu nhị phân, tức một Block, nó sẽ được lưu trữ cùng mạng. Sự kết hợp đa dạng lưới và mã Shader tạo nên thế giới trò chơi phong phú. Đối với chất liệu khác nhau của cùng mô hình, có thể dùng chất liệu, kết cấu và mã Shader riêng trong từng lưới con riêng. Vì mỗi lưới con chỉ dùng một phần dữ liệu, do đó chỉ cần lưu giá trị offset vị trí bắt đầu và kết thúc trong bộ đệm chỉ số. Hơn nữa, trong thao tác thực tế tô màu và vẽ, để tiết kiệm không gian, có thể dùng chung một pool tài nguyên (như pool lưới, pool kết cấu v.v.). Cần lưu ý rằng, trong quá trình render thể hiện hóa, chia sẻ một bộ dữ liệu đỉnh cực kỳ giảm tỷ lệ sử dụng bộ nhớ video và giảm băng thông bộ nhớ video. Đồng thời, đối với trò chơi yêu cầu cao, việc dùng thể hiện hóa cần xử lý kỹ thuật bổ sung khác, như thao tác chọn từng vật thể đơn lẻ v.v.
Trong quá trình hậu xử lý và tính toán ánh sáng, cần cân nhắc nhiều chiều như cường độ ánh sáng, góc ánh sáng, góc nhìn người dùng, tán xạ và khúc xạ, mức độ hấp thụ ánh sáng của chất liệu v.v. Ví dụ, trong pipeline Built-in của Unity, muốn hoàn thành hiệu ứng hậu xử lý, có thể dùng plugin hậu xử lý Post Processing Stack để đạt mục tiêu, hoặc dùng phương pháp OnRenderImage() kết hợp Shader để tự định nghĩa. Phương pháp này có thể áp dụng hiệu ứng hậu xử lý mong muốn lên cảnh, độ tự do rất cao, có thể sửa đổi và mở rộng bất cứ lúc nào. Trong game engine, quá trình tính toán xử lý ánh sáng khá phức tạp, có thể tham khảo hình dưới đây về phân tích ánh sáng và biểu thức phương trình, độc giả quan tâm có thể tự thử nghiệm điều chỉnh tham số. Cùng với sự phát triển tinh tế ngành công nghiệp trò chơi, biểu hiện ánh sáng đang trở thành xu hướng quan trọng trong biểu hiện cấp cao ngành công nghiệp trò chơi, các công nghệ render liên quan cũng có thể áp dụng trong hoạt hình, phim ảnh, thực tế ảo v.v.


Nguồn: Buming Technology
Cần bổ sung rằng, hệ thống vẽ game engine là một loại khoa học kỹ thuật máy tính, cần hiểu sâu về kiến trúc, hiệu suất, tiêu thụ năng lượng, tốc độ và giới hạn của card đồ họa mới có thể phát huy hoàn toàn hiệu quả engine. Hơn nữa, GPU có khả năng xử lý song song tốc độ cao cực mạnh, có thể với chi phí thấp tạo một nhóm bản đồ độ sâu che khuất, sau đó loại bỏ một phần mô hình vật thể, có thể tối ưu hóa khả năng xử lý cảnh phức tạp.
Sản xuất và chế tạo công nghiệp: Kỹ thuật Backend
Công việc backend chủ yếu bao gồm logic phía máy chủ và xử lý dữ liệu, giao tiếp mạng và đồng bộ hóa v.v. Về mặt logic máy chủ, nhà phát triển backend cần chịu trách nhiệm xử lý logic phía máy chủ và lưu trữ dữ liệu trò chơi, bao gồm quản lý tài khoản người chơi, đồng bộ trạng thái thế giới trò chơi và hỗ trợ tương tác đa người chơi v.v. Đồng thời, nhà phát triển cần thiết kế và hiện thực hóa kiến trúc cơ sở dữ liệu hiệu quả, dùng để lưu tiến độ trò chơi, thành tích người chơi, vật phẩm ảo v.v. Ngoài ra, hệ thống backend còn cần xử lý yêu cầu từ client trò chơi, bao gồm tương tác giữa người chơi, dữ liệu số lượng người dùng, nâng cấp nhân vật và mua tài nguyên v.v. Trò chơi Web3 có thể tham khảo kiến trúc backend dưới đây. Chịu ảnh hưởng bởi tốc độ truyền tải, thời gian thanh toán v.v., dựa trên trình độ kỹ thuật truyền thông và mã hóa hiện tại, kiến trúc backend trò chơi Web3 lớn hiện nay chưa thể hoàn toàn xây dựng trên blockchain.

Nguồn: Thông tin thị trường công khai
Trong phát triển mạng backend và đồng bộ hóa trò chơi, nhà phát triển backend sử dụng các loại giao thức mạng như TCP/IP, HTTP và WebSocket v.v. để thiết lập liên kết truyền thông ổn định giữa client và server. Trong quá trình phát triển này, cần thiết kế và hiện thực hóa giao thức mạng để hỗ trợ trao đổi dữ liệu tần suất cao và cập nhật trạng thái trò chơi thời gian thực. Chiến lược giao tiếp mạng hiệu quả và cơ chế đồng bộ hóa có thể giảm độ trễ, đảm bảo tất cả người chơi trong thế giới trò chơi nhìn thấy trạng thái nhất quán. Đặc biệt trong trò chơi mạng, truyền tải và đồng bộ dữ liệu thời gian thực là cốt lõi đảm bảo trải nghiệm người dùng tốt.
Khi nghiên cứu phát triển backend, cần chú ý nâng cao tính mở rộng, ổn định và hiệu suất tổng thể. Về hiệu suất, backend không chỉ cần đạt độ trễ thấp và phản hồi tính toán nhanh trong bộ nhớ đệm, mà còn yêu cầu có thể giao tiếp thời gian thực với server về mặt giao thức HTTP; về tính ổn định và hiệu quả, các server cần được cô lập, để tránh một server gặp sự cố ảnh hưởng toàn bộ hệ thống; về tính mở rộng cao, nhà phát triển cần chú ý đến việc mở rộng dung lượng tính toán và chức năng, dùng nhiều server con kết nối với server đơn, giao tiếp qua các kênh như TCP, IPC v.v., nâng cao khả năng xử lý thông tin và yêu cầu trong giai đoạn đỉnh điểm. Hình dưới đây là sơ đồ cấu trúc tổng thể đại diện cho kỹ thuật backend, có thể tham khảo về lưu trữ, dịch vụ và tương tác v.v.

Nguồn: Thông tin thị trường công khai
Đối với trò chơi Web3 nhiều người dùng, nhiều cảnh, để đảm bảo trải nghiệm người dùng trò chơi, giảm áp lực truy cập lượng lớn trong thời gian ngắn, nhà phát triển có thể thiết lập nhiều server. Trong mỗi server, nhiều mô-đun thế giới có thể tạo thành nhóm, đáp ứng nhu cầu hiệu dụng trò chơi của lượng lớn người dùng. Đồng thời, trong thiết lập nhiều server, có thể hỗ trợ thao tác thời gian thực của lượng lớn người dùng, trong quá trình truy cập và yêu cầu đông đảo, cố gắng giảm độ trễ. Hình dưới đây là sơ đồ tham khảo nhiều server và thế giới.

Nguồn: Thông tin thị trường công khai
Kỹ thuật frontend và backend của trò chơi Web3 không hoàn toàn tách rời, ở nhiều khía cạnh cần phối hợp mới hoàn thành hỗ trợ kỹ thuật tổng thể. Ví dụ, về vấn đề hack, kỹ thuật frontend và backend đều có thể phát huy ưu thế riêng, phối hợp phát hiện hack. Trong quá trình hỗ trợ tổng thể kỹ thuật frontend và backend, frontend có thể phát huy ưu thế như Unity v.v., backend có thể phát huy ưu thế về yêu cầu và ghi dữ liệu v.v., nói chung phối hợp ở các khía cạnh sau:
-
Chống tăng tốc: Xác minh server, client phối hợp;
-
Mã hóa dữ liệu bộ nhớ: Sử dụng plugin từ Unity AssetStore để mã hóa bộ nhớ client, giảm mức độ phụ thuộc vào tất cả dữ liệu trong client;
-
CD giao thức: Ngăn chặn truy cập thường xuyên một giao thức. Có thể giới hạn tần suất truy cập, ví dụ 300ms đến 1000ms chỉ truy cập một lần;
-
Mã hóa giao thức: Thêm byte vào header giao thức;
-
Ngăn WPE gửi gói lặp: Chống nhận thưởng và vào lặp;
-
Giám sát kênh không nạp tiền: Giám sát tình trạng nhận tiền và tài sản qua kênh không nạp tiền;
-
Chống tăng tốc di chuyển và thao tác: Logic phát hiện có thể đặt trong tiến trình người chơi và tiến trình cảnh;
Trên đây lấy ví dụ hack để minh họa sự phối hợp giữa kỹ thuật frontend và backend. Thông qua tìm hiểu sâu về quá trình phát triển trò chơi frontend và backend, hiểu rõ mỗi bên chịu trách nhiệm nhiệm vụ khác nhau nhưng lại gắn bó chặt chẽ, cùng tạo nên một hệ thống trò chơi hoàn chỉnh. Trải nghiệm trò chơi hấp dẫn đến từ sự tương tác phong phú của frontend và hỗ trợ mạnh mẽ của backend. Trên đây chỉ là phần giới thiệu đơn giản về kỹ thuật trò chơi Web3, nếu độc giả quan tâm sâu hơn đến kỹ thuật frontend và backend, có thể tham khảo các sách sau để học thêm:
-
Toán học trong lập trình trò chơi Web3:《Foundations of Game Engine Development, Vol 1: Mathematics》《Phương pháp Toán học trong Trò chơi 3D và Đồ họa Máy tính》《3D Math Primer for Graphics and Game Development》《Essential Mathematics for Games and Interactive Applications》《Geometric Algebra for Computer Science》《Chi tiết Giải thuật Công cụ Hình học trong Đồ họa Máy tính》《Visualizing Quaternions》《Diễn giải Độ phân kỳ, Xoáy, Gradient》《Hình học Tính toán》
-
Lập trình trò chơi:《Learning Unreal Engine Game Development》《Blueprints Visual Scripting for Unreal Engine》《Introduction to Game Design, Prototyping, and Development》《Thực chiến Unity 5》《Thuật toán và Kỹ thuật Lập trình Trò chơi》《Mẫu Lập trình Trò chơi》《Cross-Platform Game Programming》《Android NDK Game Development Cookbook》《Xây dựng Trò chơi FPS với Unity》《Dự án Thực tế Ảo Unity》《Thực tế Tăng cường》《Thực tế Tăng cường Thực tế》《Game Programming Golden Rules》《Best Game Programming Gems》《Advanced Game Programming》
-
Game engine:《Kiến trúc Game Engine》《3D Game Engine Architecture》《3D Game Engine Design》《Lập trình Script Nâng cao trong Trò chơi》《Mẫu Hiện thực Ngôn ngữ Lập trình》《Sổ tay Giải thuật Garbage Collection: Nghệ thuật Quản lý Bộ nhớ Tự động》《Tối ưu hóa Trò chơi Video》《Tối ưu hóa Trò chơi Unity 5》《Bí mật Thuật toán Hiệu quả》《Lập trình Assembly X86 Hiện đại》《GPU Programing for Games and Science》《Bộ xử lý Toán học Vector trong Trò chơi》《Công cụ Phát triển Trò chơi》《Thiết kế Trải nghiệm Người dùng Công cụ Phát triển Trò chơi》
-
Đồ họa máy tính và render:《Render 3D Thời gian Thực với DirectX và HLSL》《Đồ họa Máy tính》《Nguyên lý và Thực hành Đồ họa Máy tính: Mô tả bằng C》《Principles of Digital Image Synthesis》《Xử lý Ảnh Số》《Kỹ xảo Lập trình Trò chơi 3D》《Kỹ thuật Bóng Thời gian Thực》《Đồ họa Máy tính Thời gian Thực》《Real-Time Volume Graphics》《Thuật toán và Kỹ thuật Ray Tracing》《Physically Based Rendering》《Phương pháp Lập trình Đồ họa》《Thực tiễn Render và Tính toán với Direct3D》《Shader Đồ họa》《Ngôn ngữ Shader OpenGL》《OpenGL Insights》《Illumination Toàn cầu Nâng cao》《Render Thể tích Sản xuất》《Texturing and Modeling》《Xử lý Mạng Polygon》《Mức Chi tiết cho Đồ họa 3D》《Thiết kế Engine 3D cho Bản đồ Toàn cầu Ảo》《Render Không Chân thực》《Isosurfaces》《Phép màu Đồ họa Máy tính》
-
Âm thanh trò chơi:《Game Audio Programming》
-
Vật lý và hoạt ảnh trò chơi:《Bản sắc Mã hóa: M
Chào mừng tham gia cộng đồng chính thức TechFlow
Nhóm Telegram:https://t.me/TechFlowDaily
Tài khoản Twitter chính thức:https://x.com/TechFlowPost
Tài khoản Twitter tiếng Anh:https://x.com/BlockFlow_News










