Castle Game Engine – เอนจินเกม 3D/2D ข้ามแพลตฟอร์มฟรีและโอเพนซอร์สที่พัฒนาบน Pascal
(castle-engine.io)- เป็นเอนจินฟรีและโอเพนซอร์สที่ช่วยให้นักพัฒนา Pascalสร้างเกม 3D·2D และ UI ภายในโปรเจกต์เดียว แล้วแจกจ่ายไปยังหลายแพลตฟอร์มได้
- วิชวลเอดิเตอร์และระบบคอมโพเนนต์รองรับทั้งซีน กล้อง การนำทาง แสง และองค์ประกอบเกม·UIอย่างปุ่ม ภาพ และป้ายข้อความไปพร้อมกัน
- รองรับเวิร์กโฟลว์สำหรับโมเดล 3D, แอนิเมชัน 2D และสไปรต์ชีต พร้อมใช้งาน glTF, X3D, IFC และการเชื่อมต่อกับ Blender·Sketchfab ได้
- มีความสามารถด้านการเรนเดอร์ เช่น shader effects, เงา, กระจก, physically based rendering, bump mapping และ gamma correction ทำให้สร้างงานกราฟิกได้หลากหลายด้วยเอนจินพื้นฐานเพียงตัวเดียว
- มีเครื่องมือ build ผ่าน command line, Docker image และเอกสาร CI หลัก ๆ ทำให้มีโครงสร้างที่นำไปใช้ได้ง่ายทั้งกับแอปพลิเคชันโอเพนซอร์ส·เชิงพาณิชย์
เอดิเตอร์และแนวทางการพัฒนา
- Castle Game Engine เป็นเอนจินเกม 3D/2D สำหรับเดสก์ท็อป มือถือ คอนโซล และเว็บ
- สามารถออกแบบเกม 3D·2D และส่วนติดต่อผู้ใช้ได้ในวิชวลเอดิเตอร์
- รองรับการปรับสเกล UI อัตโนมัติและ anchor
- ผสานการทำงานกับ IDE ได้หลายตัว เช่น Visual Studio Code, Lazarus, Delphi
- คอมโพเนนต์แบ่งการจัดการ viewport และองค์ประกอบ UI ออกจากกัน
- โลก 3D/2D สามารถใช้ซีน กล้อง การนำทาง primitive และแสงได้
- UI สามารถใช้ปุ่ม ภาพ และป้ายข้อความได้
- พื้นฐานโค้ดเป็น modern Object Pascal พร้อมการ build ที่รวดเร็วและการทำงานที่รวดเร็วเป็นค่าเริ่มต้น
แอสเซ็ต กราฟิก และการแจกจ่าย
- รูปแบบการกำหนดข้อมูลครอบคลุมโมเดล 3D, แอนิเมชัน 2D และสไปรต์ชีต
- ใช้มาตรฐานแบบเปิดอย่าง glTF และ X3D เพื่อเชื่อมต่อกับเครื่องมือสร้างและคลังแอสเซ็ตอย่าง Blender, Sketchfab ได้
- ความสามารถด้านกราฟิกรวมถึง shader effects ที่ผสมกันได้, เงา, กระจก, physically based rendering, bump mapping และ gamma correction
- เป้าหมายข้ามแพลตฟอร์มได้แก่ Windows, Linux, macOS, FreeBSD, Raspberry Pi, Android, iOS, Nintendo Switch และเว็บ
- สามารถทำงานได้จากทุกแพลตฟอร์มเดสก์ท็อป
- ความเป็นมิตรต่อโอเพนซอร์สและ CIรองรับด้วยเครื่องมือ build ผ่าน command line และ Docker image
- มีเอกสารและไฟล์พร้อมใช้สำหรับ GitHub Actions, GitLab CI, Jenkins, Woodpecker CI และ CI อื่น ๆ
- เอนจินเป็นโอเพนซอร์สอย่างสมบูรณ์ และสามารถใช้สร้างแอปพลิเคชันได้ทุกประเภท รวมถึงแอปพลิเคชันแบบ proprietary
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
https://castle-engine.io/why_pascal
คงต้องขอเทน้ำเย็นใส่สักหน่อย เหตุผลส่วนใหญ่ที่ยกมานั้นเป็นสิ่งที่ภาษาโมเดิร์นอื่น ๆ ก็มีเช่นกัน เช่น ความปลอดภัย, ครอสแพลตฟอร์ม, ไลบรารี และหนึ่งในนั้นมี ความอ่านง่าย รวมอยู่ด้วย ซึ่งผมเข้าใจได้ยาก
ผมต้องทำงานกับโค้ด Pascal วันละ 8 ชั่วโมงทุกวัน แต่ไม่ได้รู้สึกว่ามันอ่านง่ายกว่าไวยากรณ์ C ทั่วไปเลย กลับคิดว่าอ่านยากกว่ามากด้วยซ้ำ เพราะต้องใช้คำเต็ม ๆ เพื่อแสดงไวยากรณ์ ทำให้สมองแยกได้ไม่ทันทีว่า “นี่คือโครงสร้างของโค้ด” กับ “นี่คือโค้ดจริง ๆ” และต้องอ่านคำนั้นจริง ๆ ผมคิดว่านี่เป็นการออกแบบที่ไร้ประสิทธิภาพมาก
หน้านี้ให้ความรู้สึกเหมือนเขียนขึ้นเมื่อ 20 ปีก่อน โดยเฉพาะเหตุผลอย่าง type safety ถ้าเป็นตอนนั้นคงน่าเชื่อถือกว่านี้มาก
ไม่แน่ใจว่าภาษาอื่นทำแบบนี้ได้หรือไม่
ถ้าไม่ใช่กรณีสุดโต่ง เช่น พยายามเขียนโค้ดเชิงวัตถุด้วยภาษาที่อ่านยากมาก หรือภาษา XML-based ที่มีแต่ฟีเจอร์เชิง imperative ผมคิดว่าความอ่านง่ายขึ้นอยู่กับผู้อ่าน
Go ก็เป็นอีกภาษาเดียวที่ผมตามอ่านได้ง่ายทั้งที่ไม่ค่อยรู้จักตัวภาษา แต่ Go มีฟีเจอร์ที่เรียบง่ายและจำกัดกว่ามาก ในขณะที่ Free Pascal เป็น ภาษาแบบ kitchen sink ที่ใส่อะไรมาแทบทุกอย่าง แต่ก็ยังถือว่าอ่านง่าย
อย่างไรก็ตาม เหตุผลอันดับหนึ่งที่ใช้ Free Pascal น่าจะไม่ใช่ตัวภาษาเอง แต่เป็น Lazarus IDE, เฟรมเวิร์ก FCL และ LCL มากกว่า คอมไพเลอร์ที่เร็วและ optimizer ที่ใช้ได้, แบ็กเอนด์ LLVM ใหม่ที่ใช้ได้เมื่อต้องการประสิทธิภาพมากขึ้น, รวมถึงแพลตฟอร์มที่รองรับจำนวนมากก็เป็นข้อดีเช่นกัน
ความเข้ากันได้ย้อนหลัง ก็สำคัญมากเช่นกัน ถ้าโค้ดที่เคยทำงานได้ดีเมื่อไม่กี่ปีก่อนพังโดยไม่มีปัจจัยภายนอก ไม่ว่าภาษาจะสะอาด สอดคล้อง และสง่างามแค่ไหน สิ่งที่สำคัญสำหรับผมคือโค้ดที่เคยทำงานได้ดียังคงทำงานต่อไปได้
แล้วพอเห็นคำบางคำหลายครั้งเข้า คุณจะไม่ได้ “อ่าน” มันในความหมายที่พูดถึงตรงนี้ แต่จะเทียบมันในหัวเหมือนเทียบกับคำอื่น ๆ และภาพในคลังคำศัพท์ของตัวเอง หากสมมติว่าในศัพท์ของภาษาไม่ได้ใช้คำที่คล้ายกันมาก ๆ การอ่านคำก็ไม่ได้ยากกว่าการอ่านวงเล็บปีกกา
สัญลักษณ์ตัวเดียวอาจเข้าใจยากสำหรับบางคน เช่นเดียวกับที่คำต่าง ๆ เป็นแบบนั้นสำหรับคุณ หากมี IDE ที่ดีและโครงสร้างโค้ดที่ดี การแยกโครงสร้างออกจากโค้ดก็ทำได้ง่ายขึ้น
แต่เหตุผลหลักที่อยากใช้เอนจินเกม Pascal สำหรับทำเกมคือสามารถหลีกเลี่ยง garbage collection ได้
บทความที่เกี่ยวข้อง:
Why use Pascal? - https://news.ycombinator.com/item?id=36646890 - กรกฎาคม 2023, 307 ความคิดเห็น
Modern Object Pascal Introduction for Programmers - https://news.ycombinator.com/item?id=36371434 - มิถุนายน 2023, 3 ความคิดเห็น
Castle Game Engine Roadmap - https://news.ycombinator.com/item?id=36365420 - มิถุนายน 2023, 10 ความคิดเห็น
Modern Object Pascal Introduction for Programmers - https://news.ycombinator.com/item?id=28079093 - สิงหาคม 2021, 3 ความคิดเห็น
Castle Game Engine: Cross-platform 3D and 2D game engine - https://news.ycombinator.com/item?id=23741883 - กรกฎาคม 2020, 20 ความคิดเห็น
Castle Game Engine 6.4 released – physics, iOS services, shader pipeline upgrade - https://news.ycombinator.com/item?id=16207075 - มกราคม 2018, 2 ความคิดเห็น
จำไม่ได้แล้วว่าครั้งสุดท้ายที่ใช้ภาษาในตระกูล Pascal คือเมื่อไหร่ ปี 2001 ในวิชาเขียนโปรแกรมที่มหาวิทยาลัยต้องใช้ Delphi และที่โรงเรียนเป็น Delphi 4 แต่ผมซื้อ Delphi 5 มาเอง หลังจากนั้นคงได้แตะต่ออีกสัก 1–2 ปี แต่คิดว่าหลังปี 2005 แทบไม่ได้ใช้แล้ว
ที่มหาวิทยาลัยเราต้องทำโปรแกรมจัดการสินค้าคงคลัง เป็นหลักสูตร IT เลยมีหลายคนที่ลำบากเพราะการเขียนโปรแกรมไม่ใช่ทางของตัวเอง แต่ผมค่อนข้างจะเป็น “เด็กอัจฉริยะด้านโปรแกรมมิง” เลยปรับตัวกับ Delphi ได้ทันที
ตัว Delphi เองผมไม่ค่อยรู้จัก แต่พอเริ่มเขียนโค้ดแล้วพิมพ์
var,begin,end,:=ฯลฯ ก็รู้ทันทีว่าเป็นตระกูล Pascal เพราะตอนมัธยมผมมีทั้ง Turbo C และ Turbo Pascal เลยพอได้เปรียบอยู่บ้างส่วนที่ยากคือการเก็บข้อมูลสินค้าคงคลังลงไฟล์ไบนารี แล้วค้นหาข้อมูลด้วย binary search อาจารย์ผู้ช่วยสอนค่อนข้างหัวเก่า ดังนั้น Delphi อาจมีวิธีสำเร็จรูปในตัวมากกว่านี้อยู่แล้วก็ได้ แบบที่ใน Go หรือ C# สมัยใหม่มองว่าเป็นเรื่องปกติ
ทุกคนต่างปวดหัวกับการทำให้ build ผ่าน และพอมองย้อนกลับไปตอนนี้ก็เป็นความทรงจำที่ดี ตอนนี้ผมจัด Pascal ไว้หมวดเดียวกับ Basic ดูเป็นโปรเจกต์ที่น่าสนใจ แต่ผมไม่มีความสนใจจะใช้ Pascal เลยกลายเป็นปัจจัยที่ทำให้ผมไม่เลือกใช้
ถึงอย่างนั้นก็ไม่แปลกใจถ้ายังมีกลุ่มผู้สนับสนุน Pascal จำนวนไม่น้อยอยู่ ถ้าเป็นแบบนั้น นี่ก็คงเป็นเรื่องดีสำหรับพวกเขา
เมื่อก่อนเวลาย้ายโค้ด Pascal ไป C ก็มักจะแค่เปลี่ยน
begin/endเป็นวงเล็บปีกกา ย้ายประกาศ interface ไปไว้ในไฟล์ header แล้วเปลี่ยนฟังก์ชันที่ตั้งชื่อดี ๆ ให้กลายเป็นการเรียกstrtokที่เหมือนรหัสลับ พอเทียบกันแล้วมันดูน่าเกลียดโดยไม่จำเป็นตอนนี้ C เป็นภาษาที่ผมชอบที่สุด แต่ความสะอาดของ Pascal กับความเป็นมิตรต่อผู้ใช้ของ Delphi ยังทำให้ผมนึกถึงอยู่เสมอว่าประสบการณ์นักพัฒนาที่ดีเป็นอย่างไร
ผมใช้ Android Studio มา 10 ปีแล้ว แต่ยังเทียบประสบการณ์ Borland Delphi Architect เมื่อ 20 ปีก่อนไม่ได้เลย ตอนนี้อาจมีฟีเจอร์ขั้นสูงกว่าก็จริง แต่เมื่อเทียบกันแล้วมันออกแนวความยุ่งเหยิงที่แยกส่วนกันมากกว่า
หลังจากเรียน Basic ที่บ้าน ภาษาเขียนโปรแกรม “จริงจัง” ภาษาแรกที่ได้เรียนตอนเข้ามัธยมคือ Pascal
แต่พออีก 1–2 ปีให้หลังได้เจอ C ผมก็ไม่หันกลับไปมอง Pascal อีกเลย C ดู “โปร” กว่า ยืดหยุ่นกว่า และใกล้ฮาร์ดแวร์มากกว่า Pascal ดูเหมาะกับการพัฒนาแอป GUI มากกว่า ส่วน C ดูเหมือนจะทำได้ทุกอย่าง ตั้งแต่ส่วนลึกของระบบปฏิบัติการ ไดรเวอร์ เกม ไปจนถึงแอป GUI
แน่นอนว่าเป็นความคิดโง่ ๆ เพราะ Pascal ก็ทำได้ทุกอย่างที่ C ทำ แต่สำหรับตัวผมตอนเด็ก มันดู “จริงจัง” และดู “โปร” น้อยกว่า
ราวปี 1996–97 ผมใช้ Turbo Pascal เล่นทำเอฟเฟกต์ไฟ แต่ tutorial ส่วนใหญ่ใช้
asmกับmode 13hและสิ่งที่ผมมีมีแค่ Turbo Pascal 5.5 ที่ไม่รองรับคีย์เวิร์ดasmลองปรับอยู่พักหนึ่ง แล้วปลายปี 1997 ก็รู้จัก C พอเห็นลูป
forของ C แล้วก็ไม่แตะ Pascal อีกเลยเจ๋งดี ขอให้โปรเจกต์ไปได้สวย การเลือกภาษาน่าสนใจ และผมมักมอง Pascal เป็นแค่ภาษาเก่า ๆ มาตลอด แต่ดูเหมือนผมจะคิดผิดจริง ๆ
ผมอยากรู้ว่า codebase Pascal ขนาดใหญ่ หน้าตาเป็นอย่างไร เลยเข้าไปดูโค้ด ไม่ได้เห็นโค้ด Pascal ที่มีขนาดจริงจังมาตั้งแต่ราวปี 2001 แล้ว
สิ่งที่สะดุดตาคือชื่อไฟล์ วิธีที่เติม
castleไว้หน้าทุกไฟล์ซอร์สผมไม่ค่อยชอบ มันทำให้เข้าใจยากขึ้นว่าไฟล์นั้นเกี่ยวกับอะไร และทำให้ทุกอย่างดูคล้ายกันไปหมดส่วนโค้ดจริงผมพูดยากเพราะไม่เคยใช้ Pascal แต่ตัวเอนจินเองดูเจ๋งดี
yyให้ไฟล์ yacc หรอก มันทำให้ดูง่ายว่าไฟล์ไหนเป็น ไฟล์ของ Castle และยังหลีกเลี่ยงการชนกับไฟล์หรือ unit จากไลบรารีอื่นได้ด้วยค่อนข้างเป็นการจับผิดที่ไม่มีสาระ
รู้สึกว่านักพัฒนา Pascal พวกนั้นน่าจะทำงานออกมาได้อย่างมีผลิตภาพมาก ๆ
ในทางกลับกัน สำหรับภาษาที่นิยมกว่าซึ่งผมใช้ในโปรเจกต์อย่าง Rust ผมรู้สึกว่าหลายโปรเจกต์ออกแนว “สร้าง grep ขึ้นใหม่เป็นครั้งที่ 1000 แต่คราวนี้ทำถูกต้องแล้ว”
น่าเสียดายจริง ๆ ที่ผลิตภัณฑ์ Delphi ถูก Borland/Embarcadero บริหารจัดการได้แย่ขนาดนั้น
Object Pascal เป็นภาษาที่ยอดเยี่ยม ทุกวันนี้สามารถสร้างโค้ดเนทีฟสำหรับแทบทุกแพลตฟอร์มได้ ไบนารีที่สร้างออกมามีขนาดเล็กและทำงานเร็ว อยู่ในระดับใกล้เคียงกับ C จึงมองได้ว่าโดยทั่วไปเร็วกว่าโค้ด Python ที่คล้ายกันประมาณ 100–10000 เท่า
Castle Engine เป็นโปรเจกต์ขนาดใหญ่มาก และช่วยให้สร้างเกมกับแอปพลิเคชัน 3D ในแนวทาง RAD ได้ง่ายมาก ต่างจากเฟรมเวิร์ก Pascal ขนาดใหญ่อื่น ๆ มันไม่ใช่ผลิตภัณฑ์เก่าแบบเลกาซี แต่ยังพัฒนาอย่างคึกคักมาก ขอชื่นชมนักพัฒนาจริง ๆ อย่างสูง
โปรเจกต์ที่ใหญ่และน่าประทับใจใกล้เคียงกันคือ Mormot ซึ่งเป็นเฟรมเวิร์ก ORM/SOA/MVC ที่มีฐานโค้ดปรับแต่งประสิทธิภาพมาอย่างสูง
การสร้างแอปพลิเคชันเซิร์ฟเวอร์ด้วย Object Pascal และ Mormot ทำได้ง่าย และในสถานการณ์ที่ NodeJS จัดการได้ 500 คำขอต่อวินาที โค้ด Pascal ก็อาจเข้าสู่ระดับ มากกว่า 10000 รายการต่อวินาที ได้
ดังนั้นในเวลาที่ภาษาอื่นต้องใช้เซิร์ฟเวอร์หลายสิบเครื่องเพื่อรับโหลด โค้ดเซิร์ฟเวอร์ที่ใช้ Object Pascal ก็สามารถรันบนเซิร์ฟเวอร์เครื่องเดียวได้สบาย ๆ การใช้ภาษานี้ช่วยลดต้นทุนได้อย่างมาก
หลายคนจดจำ Object Pascal ว่าเป็นเพียงภาษาสำหรับการศึกษา แต่ภาษานี้พัฒนามาแล้ว และยังมีฟีเจอร์ที่ภาษาอื่นไม่มีอยู่ด้วย สิ่งที่สำคัญเป็นพิเศษคือ RTTI หรือรีเฟลกชัน มีเพียงด้านเดียวที่ตามกระแสสมัยใหม่ไม่ทัน คือมัลติเธรด/โครูทีนไม่ได้ถูกรวมเข้าเป็นส่วนหนึ่งของภาษาเองเหมือน Go
สุดท้าย โค้ดที่เขียนไว้เมื่อ 40 ปีก่อนก็ยังคอมไพล์และรันได้ในปัจจุบัน ตลอด 40 ปีนั้นมีภาษามากมายที่ได้รับความนิยมแล้วหายไป แต่ Pascal ยังอยู่
กลับมาที่ Castle Engine แม้คุณจะไม่คุ้นกับ Object Pascal ก็ขอแนะนำให้ลองใช้ วิชวลเอดิเตอร์ ของพวกเขาให้ได้ มันน่าทึ่งจริง ๆ
ช่วงที่เขียนโปรแกรมด้วย Pascal(Turbo/Borland) เป็นช่วงที่สนุกที่สุด หน่วยคอมไพล์อย่าง “Unit” ทำงานได้ดีไปเอง และลำดับชั้นของ dependency อนุญาตเฉพาะรูปแบบ DAG เท่านั้น การคอมไพล์และการใช้งานเร็วมาก การแก้ไขและดีบักก็เร็วเช่นกัน
พอย้ายมาที่ Delphi ก็รู้สึกเหมือนสูญเสียอะไรบางอย่างไป ไม่ได้หมายความว่ามันเป็นผลิตภัณฑ์ที่แย่ แต่ผู้คนเริ่มหันไปมองที่อื่น
ถึงอย่างนั้น ผมก็ยังเห็นคุณค่าของช่วงเวลานั้น เพราะ Pascal เป็นจุดเริ่มต้นที่ช่วยให้ย้ายจาก Apple Basic ไปสู่ C/C++ ได้ และยังได้ค่อย ๆ ใช้อินไลน์แอสเซมบลีเพื่อเรียนรู้ด้วย