1 điểm bởi GN⁺ 2024-02-21 | 1 bình luận | Chia sẻ qua WhatsApp
  • Đâ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

 
GN⁺ 2024-02-21
Ý 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 đó

    • Tôi đồng ý là đọc hằng ngày thì hơi nhàm, nhưng ngoài Pascal ra, tôi chưa từng thấy ngôn ngữ nào mà 3 năm sau quay lại vẫn có thể đọc ngay không vấn đề gì
      Không biết các ngôn ngữ khác có làm được như vậy không
    • Tôi khó đồng ý với điểm đó. Tôi từng làm nhiều dự án Free Pascal, C, C++ và các dự án khác, và trong các dự án lớn, mã người khác viết bằng Free Pascal dễ theo dõi hơn C/C++/Java, v.v.
      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
    • Trước hết là có tô sáng cú pháp
      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
    • Với những người ghét ký hiệu, từ ngữ có thể hữu ích. C rất súc tích, còn Pascal thì dài dòng. Khá giống khác biệt giữa C và Python
      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
    • Giữa C và Pascal, cái nào dễ đọc hơn là vấn đề sở thích. Cũng như màu sắc trong trình soạn thảo, tùy tâm trạng hoặc thời điểm trong ngày mà bên này hay bên kia có thể trông dễ đọc 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út
    Phầ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ọ

    • Có lẽ chúng ta thuộc tầm tuổi tương tự. Hồi cấp ba tôi làm vài game đơn giản và ứng dụng đồ họa bằng Turbo Pascal, rồi về sau làm ứng dụng nghiệp vụ bằng Delphi. Xét về thiết kế ngôn ngữ, tôi thấy khác biệt giữa Pascal và C không lớn đến vậy
      Trước đây khi chuyển mã Pascal sang C, tôi thường đổi begin/end thà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ọi strtok bí hiểm. So ra thì nó xấu xí một cách không cần thiết
      Bâ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
    • Giờ bạn muốn dùng ngôn ngữ nào hơn?
  • 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

    • Tôi cũng có trải nghiệm tương tự
      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 asmmode 13h, trong khi thứ tôi có chỉ là Turbo Pascal 5.5 không hỗ trợ từ khóa asm
      Tô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 for của C thì không đụng đến Pascal nữa
  • Hay đấ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

    • Hóa ra Go về cơ bản là Pascal có ngoặc nhọn, vậy mà chẳng ai gọi Go là lỗi thời
  • 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á nhau
    Code 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

    • Việc này chẳng khác gì thêm tiền tố yy cho 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ác
      Gầ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

    • Nếu lướt qua các thư viện Delphi/FPC có sẵn thì gần như chẳng thiếu thứ gì. Từ widget vẽ CAD cho đến framework để xây dựng hệ thống SCADA đều có. Phần lớn không nằm trên GitHub, mà nếu có thì cũng không được gắn hàng trăm sao
      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”
    • Object Pascal là một ngôn ngữ lập trình hiện đại. Nó hỗ trợ mọi thứ bạn kỳ vọng ở một ngôn ngữ hướng đối tượng hiện đại: class, unit, thuộc tính, generic, interface, reflection, closure, v.v.
  • 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