Castle Game Engine – engine game 3D/2D đa nền tảng miễn phí, mã nguồn mở dựa trên Pascal
(castle-engine.io)- Đây là một engine miễn phí, mã nguồn mở cho phép lập trình viên Pascal tạo game 3D·2D và UI trong cùng một dự án rồi phát hành lên nhiều nền tảng
- Trình biên tập trực quan và hệ thống component cùng xử lý các thành phần game·UI như scene, camera, điều hướng, ánh sáng, nút·hình ảnh·nhãn
- Hỗ trợ quy trình làm việc với mô hình 3D, hoạt ảnh 2D, sprite sheet và có thể tận dụng glTF, X3D, IFC cùng tích hợp Blender·Sketchfab
- Cung cấp các tính năng dựng hình như hiệu ứng shader, đổ bóng, gương, kết xuất dựa trên vật lý, bump mapping, hiệu chỉnh gamma, giúp thể hiện đa dạng đồ họa chỉ với engine mặc định
- Có công cụ build dòng lệnh, image Docker và tài liệu CI chính, tạo cấu trúc dễ áp dụng cho cả ứng dụng mã nguồn mở·thương mại
Trình biên tập và cách phát triển
- Castle Game Engine là engine game 3D/2D hướng tới desktop, di động, console và web
- Có thể thiết kế game 3D·2D và giao diện người dùng trong trình biên tập trực quan
- Hỗ trợ tự động co giãn UI và anchor
- Có thể tích hợp với nhiều IDE như Visual Studio Code, Lazarus, Delphi
- Component tách riêng phần viewport và cấu hình UI
- Thế giới 3D/2D có thể dùng scene, camera, điều hướng, primitive, ánh sáng...
- UI có thể dùng nút, hình ảnh, nhãn...
- Nền tảng mã sử dụng modern Object Pascal, mặc định mang lại tốc độ build nhanh và thực thi nhanh
Asset, đồ họa, triển khai
- Cách định nghĩa dữ liệu bao gồm mô hình 3D, hoạt ảnh 2D và sprite sheet
- Sử dụng các tiêu chuẩn mở như glTF và X3D để tích hợp với công cụ tạo nội dung·kho asset như Blender, Sketchfab
- Các tính năng đồ họa bao gồm hiệu ứng shader có thể kết hợp, đổ bóng, gương, kết xuất dựa trên vật lý, bump mapping, hiệu chỉnh gamma
- Mục tiêu đa nền tảng gồm Windows, Linux, macOS, FreeBSD, Raspberry Pi, Android, iOS, Nintendo Switch, web
- Có thể làm việc trên bất kỳ nền tảng desktop nào
- Tính thân thiện với mã nguồn mở và CI được hỗ trợ bởi công cụ build dòng lệnh và image Docker
- Cung cấp tài liệu và tệp chuẩn bị cho GitHub Actions, GitLab CI, Jenkins, Woodpecker CI và các CI khác
- Engine hoàn toàn là mã nguồn mở và có thể dùng để tạo mọi loại ứng dụng, bao gồm cả ứng dụng độc quyền
1 bình luận
Ý kiến trên Hacker News
https://castle-engine.io/why_pascal
Có lẽ cần dội chút gáo nước lạnh vào đây. Phần lớn các lý do được liệt kê — như an toàn, đa nền tảng, thư viện — đều là những thứ các ngôn ngữ hiện đại khác cũng có, và trong số đó tính dễ đọc được nêu ra, nhưng tôi khó mà đồng tình
Tôi làm việc với mã Pascal 8 tiếng mỗi ngày, nhưng không thấy nó dễ đọc hơn cú pháp C thông thường; ngược lại, tôi còn thấy nó kém dễ đọc hơn nhiều. Vì phải dùng cả từ để biểu diễn cú pháp, não khó phân biệt ngay “đây là cấu trúc mã” với “đây là mã thực sự”, và phải thật sự đọc các từ đó. Tôi cho rằng đây là một thiết kế rất kém năng suất
Trang này có cảm giác như được viết từ 20 năm trước. Đặc biệt những lý do như an toàn kiểu có lẽ sẽ thuyết phục hơn nhiều vào thời điểm đó
Không biết các ngôn ngữ khác có làm được như vậy không
Trừ những trường hợp cực đoan, chẳng hạn cố viết mã hướng đối tượng bằng một ngôn ngữ khó hiểu hoặc một ngôn ngữ dựa trên XML chỉ có các tính năng mệnh lệnh, tôi cho rằng tính dễ đọc phụ thuộc vào người đọc
Go cũng là ngôn ngữ khác duy nhất mà dù tôi không thật sự biết rõ bản thân ngôn ngữ này vẫn dễ theo dõi, nhưng Go đơn giản và hạn chế hơn nhiều về tính năng. Trong khi đó Free Pascal là một ngôn ngữ kiểu bồn rửa nhà bếp có đủ thứ, vậy mà vẫn khá dễ đọc
Tuy nhiên, lý do số một để dùng Free Pascal theo tôi không hẳn là bản thân ngôn ngữ, mà là Lazarus IDE, cùng các framework FCL và LCL. Trình biên dịch nhanh, bộ tối ưu hóa khá ổn, backend LLVM mới có thể dùng khi cần hiệu năng cao hơn, và nhiều nền tảng được hỗ trợ cũng là ưu điểm
Tương thích ngược cũng rất quan trọng. Nếu mã chạy tốt vài năm trước bị hỏng mà không có yếu tố bên ngoài, thì dù ngôn ngữ có sạch sẽ, nhất quán và tao nhã đến đâu, điều quan trọng với tôi vẫn là mã đang chạy tốt phải tiếp tục chạy
Và sau khi nhìn một từ vài lần, bạn không còn “đọc” nó theo nghĩa nói ở đây nữa, mà sẽ đối chiếu nó như hình ảnh với các từ khác trong vốn từ vựng trong đầu. Với điều kiện là từ vựng của ngôn ngữ không dùng những từ quá giống nhau, việc đọc từ không khó hơn đọc dấu ngoặc nhọn
Ký hiệu một ký tự có thể khó nắm bắt với một số người, giống như từ ngữ gây khó với bạn. Nếu có IDE tốt và cấu trúc mã tốt, việc phân biệt cấu trúc với mã cũng dễ hơn
Tuy nhiên, lý do chính khiến tôi muốn dùng một game engine Pascal cho game là vì có thể tránh garbage collection
Bài liên quan:
Why use Pascal? - https://news.ycombinator.com/item?id=36646890 - tháng 7 năm 2023, 307 bình luận
Modern Object Pascal Introduction for Programmers - https://news.ycombinator.com/item?id=36371434 - tháng 6 năm 2023, 3 bình luận
Castle Game Engine Roadmap - https://news.ycombinator.com/item?id=36365420 - tháng 6 năm 2023, 10 bình luận
Modern Object Pascal Introduction for Programmers - https://news.ycombinator.com/item?id=28079093 - tháng 8 năm 2021, 3 bình luận
Castle Game Engine: Cross-platform 3D and 2D game engine - https://news.ycombinator.com/item?id=23741883 - tháng 7 năm 2020, 20 bình luận
Castle Game Engine 6.4 released – physics, iOS services, shader pipeline upgrade - https://news.ycombinator.com/item?id=16207075 - tháng 1 năm 2018, 2 bình luận
Tôi cũng không còn nhớ lần cuối mình dùng một ngôn ngữ họ Pascal là khi nào. Năm 2001, trong lớp lập trình ở đại học, tôi phải dùng Delphi; trường dùng Delphi 4, còn tôi thì mua Delphi 5. Sau đó chắc tôi còn động tới nó thêm khoảng 1–2 năm, nhưng có lẽ từ sau 2005 thì hầu như không dùng nữa
Ở đại học, chúng tôi phải làm một chương trình quản lý tồn kho. Vì là khóa IT nên phần lớn mọi người thấy vất vả do lập trình không phải hướng của họ, nhưng tôi gần như là “thần đồng lập trình” nên thích nghi với Delphi ngay
Bản thân Delphi thì tôi không biết rõ, nhưng vừa bắt đầu code và gõ
var,begin,end,:=các kiểu là tôi nhận ra ngay đây là họ Pascal. Nhờ hồi cấp ba tôi có Turbo C và Turbo Pascal nên có thể đi trước một chútPhần khó là lưu dữ liệu tồn kho vào tệp nhị phân và tìm dữ liệu bằng tìm kiếm nhị phân. Gia sư khá cổ lỗ, nên có thể Delphi cũng đã có nhiều giải pháp dựng sẵn hơn, những thứ mà trong Go hay C# hiện đại ta coi là hiển nhiên
Ai cũng chật vật để build cho qua, và nghĩ lại thì đó là một kỷ niệm đẹp. Giờ tôi xếp Pascal cùng nhóm với Basic. Trông như một dự án thú vị, nhưng tôi không có hứng thú dùng Pascal nên với tôi đó là yếu tố khiến tôi không chọn nó
Dù vậy, tôi cũng không ngạc nhiên nếu vẫn còn một cộng đồng ủng hộ Pascal khá lớn. Nếu vậy thì đây là tin tốt cho họ
Trước đây khi chuyển mã Pascal sang C, tôi thường đổi
begin/endthành ngoặc nhọn, chuyển khai báo interface sang file header, và thay các hàm được đặt tên rõ ràng bằng những lời gọistrtokbí hiểm. So ra thì nó xấu xí một cách không cần thiếtBây giờ C là ngôn ngữ tôi thích nhất, nhưng sự gọn gàng của Pascal và tính thân thiện với người dùng của Delphi vẫn luôn nhắc tôi nhớ trải nghiệm phát triển tốt là như thế nào
Tôi đã dùng Android Studio 10 năm nay, nhưng nó hoàn toàn không sánh được với trải nghiệm Borland Delphi Architect 20 năm trước. Giờ có thể nó có nhiều tính năng cao cấp hơn, nhưng so ra thì gần như là một đống hỗn độn rời rạc
Sau khi học Basic ở nhà, lên cấp ba thì ngôn ngữ lập trình “nghiêm túc” đầu tiên tôi học là Pascal
Nhưng 1–2 năm sau, khi phát hiện ra C, tôi không còn nhìn lại Pascal nữa. C trông “chuyên nghiệp” hơn, linh hoạt hơn và gần phần cứng hơn. Pascal có vẻ phù hợp hơn để phát triển ứng dụng GUI, còn C thì trông như có thể xử lý mọi thứ, từ phần sâu bên trong hệ điều hành đến driver, game và ứng dụng GUI
Tất nhiên Pascal cũng có thể làm mọi thứ C làm, nên đó là suy nghĩ ngốc nghếch, nhưng với tôi hồi trẻ thì nó trông kém “nghiêm túc” và kém “chuyên nghiệp” hơn
Khoảng năm 1996–97, tôi đang nghịch hiệu ứng lửa bằng Turbo Pascal, nhưng hầu hết tutorial đều dùng
asmvàmode 13h, trong khi thứ tôi có chỉ là Turbo Pascal 5.5 không hỗ trợ từ khóaasmTôi mày mò một chút rồi đến cuối năm 1997 biết đến C, và sau khi thấy vòng lặp
forcủa C thì không đụng đến Pascal nữaHay đấy. Hy vọng dự án sẽ thành công. Lựa chọn ngôn ngữ khá thú vị; tôi luôn coi Pascal chỉ là một ngôn ngữ cũ, nhưng rõ ràng có vẻ tôi đã sai
Tôi xem code vì tò mò một codebase Pascal lớn trông như thế nào. Từ khoảng năm 2001 đến nay tôi chưa từng thấy mã Pascal nào có quy mô đáng kể
Điều đập vào mắt là tên file: tôi không thích cách mọi file nguồn đều được thêm tiền tố
castle. Nó khiến khó nhận ra file nói về cái gì hơn và làm mọi thứ trông na ná nhauCode thực tế thì tôi chưa từng dùng Pascal nên khó nói, nhưng bản thân engine trông khá ổn
yycho file yacc. Nó giúp dễ nhận ra file nào là file Castle, đồng thời tránh xung đột với file hoặc unit của thư viện khácGần như chỉ là bắt bẻ vô nghĩa
Tôi có cảm giác những lập trình viên Pascal đó hẳn đang làm việc cực kỳ năng suất
Ngược lại, với những ngôn ngữ phổ biến hơn như Rust mà tôi dùng cho dự án, tôi có ấn tượng rằng nhiều dự án thuộc kiểu “tạo lại grep lần thứ 1000, nhưng lần này làm cho đúng”
Việc sản phẩm Delphi bị Borland/Embarcadero quản lý tệ đến vậy thật sự rất đáng tiếc
Object Pascal là một ngôn ngữ tuyệt vời. Ngày nay nó có thể tạo mã native cho gần như mọi nền tảng. Binary được tạo ra nhỏ và tốc độ nhanh, gần ngang mức C, nên thường có thể xem là chạy nhanh hơn đoạn mã Python tương tự khoảng 100 đến 10000 lần
Castle Engine là một dự án khổng lồ, giúp tạo game và ứng dụng 3D theo kiểu RAD rất dễ dàng. Khác với các framework Pascal đồ sộ khác, nó không phải sản phẩm legacy mà đang được phát triển rất tích cực. Tôi thật sự rất kính trọng các nhà phát triển
Một dự án đồ sộ và ấn tượng tương tự là Mormot, một framework ORM/SOA/MVC dựa trên mã được tối ưu hóa cao
Việc tạo ứng dụng server bằng Object Pascal và Mormot rất dễ, và trong tình huống NodeJS xử lý được 500 request mỗi giây, mã Pascal có thể bước vào vùng hơn 10000 request mỗi giây
Vì vậy, khi các ngôn ngữ khác cần hàng chục server để xử lý tải, mã server dựa trên Object Pascal có thể dễ dàng chạy trên một server duy nhất. Dùng ngôn ngữ này có thể cắt giảm chi phí rất nhiều
Nhiều người chỉ nhớ Object Pascal như một ngôn ngữ dùng cho giáo dục, nhưng ngôn ngữ này đã tiến hóa và vẫn có những tính năng mà các ngôn ngữ khác không có. Điều đặc biệt quan trọng là RTTI, tức reflection. Chỉ có một mảng là còn tụt lại so với xu hướng hiện đại: multithreading/coroutine chưa được tích hợp vào chính ngôn ngữ như Go
Cuối cùng, mã viết từ 40 năm trước đến nay vẫn có thể compile và chạy được. Trong 40 năm đó, vô số ngôn ngữ đã nổi lên rồi biến mất, nhưng Pascal vẫn còn ở đây
Quay lại Castle Engine, dù không quen với Object Pascal, tôi vẫn khuyên bạn nhất định nên thử visual editor của họ. Thật sự rất ấn tượng
Thời lập trình bằng Pascal(Turbo/Borland) là quãng thời gian vui nhất. “Unit”, đơn vị compile, cứ thế hoạt động tốt, và tầng phụ thuộc chỉ cho phép dạng DAG. Compile và sử dụng đều rất nhanh, chỉnh sửa và debug cũng nhanh
Khi chuyển sang Delphi, có cảm giác như đã đánh mất điều gì đó. Không có nghĩa nó là sản phẩm tệ, nhưng mọi người bắt đầu nhìn sang nơi khác
Dù vậy, tôi vẫn trân trọng thời kỳ Pascal đã cho tôi điểm khởi đầu để chuyển từ Apple Basic sang C/C++, và giúp tôi vừa học vừa dùng dần inline assembly