nói dối e blog

Đã Đến Lúc Bắt Đầu Một Dự Án Công Cụ 3D Dành Cho Thiết Bị Di Động.

Đã đến lúc khởi động một dự án động cơ 3D dành riêng cho thiết bị di động

Vào cuối năm 2011, công ty Jianyue (Giản Hành) mà chúng tôi sáng lập đã được Tập đoàn Giải trí Văn hóa Alibaba (Alibaba Culture & Entertainment Group) mua lại toàn bộ cổ phần. Toàn bộ nhân sự của Jianyue sau đó đã chuyển đổi thành một nhóm làm game trực thuộc Alibaba, tập trung vào lĩnh vực giải trí rộng lớn.

Khung ECS Trong Lua

Trước đây tôi đã viết một bài luận về việc áp dụng mô hình ECS trong game “Overwatch”. Gần đây tôi muốn thử nghiệm xây dựng một khung ECS đơn giản bằng Lua, nên đã dành thời gian nghiên cứu kỹ hơn.

Qua quá trình phân tích, tôi nhận ra rằng: Khái niệm ECS thực chất không hề mới mẻ, mà xuất phát từ nhu cầu phát triển gắn liền với đặc điểm của từng ngôn ngữ lập trình. ECS được khởi xướng trong ngành công nghiệp game, hầu hết các framework liên quan đều được xây dựng trên nền tảng C++. Đây là một sự phản tư sâu sắc về mô hình hướng đối tượng truyền thống của C++. Thay vì dùng kế thừa, ECS xây dựng đối tượng dựa trên tổ hợp các thành phần (Component). Chính mô hình đối tượng này mới là cốt lõi của triết lý thiết kế ECS. Khi rời khỏi môi trường mô hình đối tượng của C++, ECS không còn là ý tưởng độc đáo nữa.

Một Số Mẹo Khi Triển Khai Khung ECS Bằng Lua

Dưới đây là phiên bản viết lại bằng tiếng Việt phong phú và sinh động, dựa trên nội dung gốc nhưng với cách diễn đạt khác biệt hoàn toàn:

Nghệ thuật xây dựng framework ECS bằng Lua

Trong thời gian gần đây, khi phát triển một framework ECS bằng ngôn ngữ Lua, tôi đã khám phá ra nhiều kỹ thuật cú pháp độc đáo của Lua mang lại hiệu quả cao. Bộ ba thành phần cốt lõi của kiến trúc ECS gồm:

Quản Lý Tập Hợp Thực Thể (Entity) Trong Mô Hình ECS

Gần đây mình đang tập trung xây dựng một số công việc nền tảng dựa trên mô hình ECS (Entity-Component-System). Trong quá trình triển khai, mình gặp phải một câu hỏi chưa rõ ràng: Làm thế nào để xử lý một cách hiệu quả các hệ thống (system) liên quan trực tiếp đến tập hợp các thực thể (entity)?

Mình đã nghiên cứu kỹ lưỡng các tài liệu hiện có về ECS. Đa phần tài liệu trên mạng đều được xuất bản từ vài năm trước, thậm chí cách đây hơn chục năm. Hầu hết các nguồn này đều nhấn mạnh vào những nguyên tắc cốt lõi của ECS: Thành phần (component) chỉ chứa dữ liệu thuần túy (không có phương thức), và hệ thống (system) phải là hàm thuần túy (không lưu trạng thái). Từ góc nhìn này, Unity thực chất chỉ là một hệ thống EC (Entity-Component), chứ chưa thực sự tuân thủ mô hình ECS đầy đủ. Do đó, việc tìm kiếm các mẫu thiết kế (design pattern) liên quan đến hệ thống trong Unity có thể không phù hợp.

Thiết Kế Hệ Thống Tệp Tài Nguyên

Trong lần trước, chúng ta đã đề cập đến việc engine sẽ được phát triển trên nền tảng PC và trực tiếp gỡ lỗi trên thiết bị. Theo phương pháp phát triển truyền thống - đóng gói ứng dụng rồi mới chạy - chắc chắn không thể đáp ứng được nhu cầu phát triển nhanh. Do đó, một cơ chế đồng bộ tài nguyên hiệu quả là điều kiện tiên quyết.

Trải Nghiệm Thực Tế BenQ WiT ScreenBar

Vài tuần trước, một người bạn từ công ty BenQ đã tặng tôi một chiếc đèn màn hình. Vì thiết kế không chiếm diện tích bàn làm việc nên tôi đã vui vẻ nhận món quà đặc biệt này.

Là một lập trình viên đã “dán mắt” vào màn hình suốt hơn 30 năm kể từ thời tiểu học mà vẫn giữ được thị lực ổn định, tôi luôn ý thức rõ tầm quan trọng của ánh sáng môi trường khi sử dụng máy tính. Công việc của tôi thường kéo dài đến đêm khuya nên tôi cực kỳ khắt khe với chất lượng ánh sáng. Khi thiết kế văn phòng làm việc, tôi đã đầu tư hệ thống chiếu sáng chuyên nghiệp, nhưng mỗi khi rời màn hình để ghi chép hay đọc tài liệu, ánh sáng tổng vẫn chưa đáp ứng đủ nhu cầu. Dù biết rõ điều này, tôi vẫn không muốn đặt thêm đèn bàn vì ngại chiếm chỗ. Hơn nữa, bàn làm việc của tôi khá rộng nên ánh sáng từ các loại đèn thông thường khó phủ toàn bộ không gian.

0%