Yocto/GL คือชุดของไลบรารี C++17 ขนาดเล็กสำหรับสร้างอัลกอริธึมกราฟิกแบบฟิสิคัลที่เผยแพร่ภายใต้ใบอนุญาต MIT Yocto/GL ถูกเขียนขึ้นในรูปแบบที่เน้นข้อมูลโดยเจตนาเพื่อความสะดวกในการพัฒนาและใช้งาน Yocto/GL ถูกแบ่งออกเป็นไลบรารีขนาดเล็กเพื่อให้การนำทางโค้ดง่ายขึ้น ดูเอกสารประกอบแต่ละไฟล์ส่วนหัว
yocto/yocto_math.{h}
: เวกเตอร์ขนาดคงที่, เมทริกซ์, เฟรมตายตัว, การแปลงyocto/yocto_color.{h}
: การแปลงสี, การปรับสี, ฟังก์ชันการจับคู่โทนสี, การให้เกรดสี, การจับคู่สี, ปริภูมิสีyocto/yocto_geometry.{h}
: รังสี, กรอบขอบ, ฟังก์ชันเรขาคณิต, จุดตัดของรังสี-ดั้งเดิม, การทับซ้อนของจุด-ดั้งเดิมyocto/yocto_noise.{h}
: เสียงเพอร์ลินyocto/yocto_sampling.{h}
: การสร้างตัวเลขสุ่ม การสร้างจุดและทิศทาง ยูทิลิตี้มอนติคาร์โลyocto/yocto_shading.{h}
: การประเมินและการสุ่มตัวอย่างฟังก์ชันเฟรส, กลีบ bsdf, กลีบส่งผ่าน, ฟังก์ชันเฟสyocto/yocto_image.{h,cpp}
: ประเภทข้อมูลรูปภาพอย่างง่าย, การปรับขนาดรูปภาพ, การทำแผนที่โทน, การแก้ไขสี, รูปภาพตามขั้นตอน, ดวงอาทิตย์-ท้องฟ้าตามขั้นตอนyocto/yocto_shape.{h,cpp}
: โครงสร้างข้อมูลรูปร่างอย่างง่าย ยูทิลิตี้สำหรับจัดการตาข่ายสามเหลี่ยม ตาข่ายสี่ส่วนและชุดเส้น การคำนวณค่าปกติและแทนเจนต์ การแบ่งย่อยเชิงเส้นและ Catmull-Clark การสร้างรูปร่างตามขั้นตอน การแยกรังสี และการสืบค้นจุดที่ใกล้เคียงที่สุดyocto/yocto_scene.{h,cpp}
: การแสดงฉากและการประเมินคุณสมบัติyocto/yocto_bvh.{h,cpp}
: การแยกรังสีและการสืบค้นจุดที่ใกล้เคียงที่สุดของ meshes สามเหลี่ยม, quads meshes, ชุดเส้น และฉากอินสแตนซ์โดยใช้ลำดับชั้นของวอลุ่มที่มีขอบเขตสองระดับyocto/yocto_trace.{h,cpp}
: การติดตามเส้นทางของพื้นผิวและเส้นขนที่รองรับการส่องสว่างของพื้นที่และสภาพแวดล้อม ไมโครเฟสต์ GGX และการกระเจิงใต้พื้นผิว การสุ่มตัวอย่างที่มีนัยสำคัญหลายรายการyocto/yocto_sceneio.{h,cpp}
: การทำให้ภาพ รูปร่าง และฉากเป็นอนุกรมyocto/yocto_modelio.{h,cpp}
: การแยกวิเคราะห์และการเขียนระดับต่ำสำหรับรูปแบบ Ply, Obj, Stlyocto/yocto_pbrtio.{h,cpp}
: การแยกวิเคราะห์และการเขียนระดับต่ำสำหรับรูปแบบ Pbrtyocto/yocto_cli.{h}
: ยูทิลิตี้การพิมพ์และการแยกวิเคราะห์บรรทัดคำสั่งyocto/yocto_parallel.h
: ยูทิลิตี้การทำงานพร้อมกัน (เลิกใช้แล้ว)คุณสามารถเห็นการทำงานของ Yocto/GL ได้ในแอปพลิเคชันต่อไปนี้ที่เขียนขึ้นเพื่อทดสอบไลบรารี:
apps/ytonemap.cpp
: การแปลงและการดูภาพapps/ycolorgrade.cpp
: การจัดระดับสีของภาพapps/yconvert.cpp
: การแปลงฉากapps/yconverts.cpp
: การแปลงรูปร่างapps/ytrace.cpp
: การแสดงฉากแบบออฟไลน์และแบบโต้ตอบapps/ycutrace.cpp
: การเรนเดอร์ฉากออฟไลน์และโต้ตอบด้วย CUDAapps/yview.cpp
: การดูฉากแบบโต้ตอบต่อไปนี้เป็นภาพทดสอบบางส่วนที่แสดงผลด้วยตัวติดตามเส้นทาง รูปภาพเพิ่มเติมรวมอยู่ในไซต์โครงการ
Yocto/GL ดำเนินตาม "โมเดลการเขียนโปรแกรมเชิงข้อมูล" ที่ทำให้ข้อมูลมีความชัดเจน ข้อมูลถูกจัดเก็บไว้ในโครงสร้างที่เรียบง่ายและเข้าถึงได้โดยใช้ฟังก์ชันฟรีหรือเข้าถึงโดยตรง ข้อมูลทั้งหมดเป็นแบบสาธารณะ ดังนั้นเราจึงไม่พยายามห่อหุ้มข้อมูล เราทำเช่นนี้เนื่องจากสิ่งนี้ทำให้ Yocto/GL ง่ายต่อการขยายและเรียนรู้เร็วขึ้น พร้อมกระแสข้อมูลที่ชัดเจนยิ่งขึ้น ซึ่งง่ายกว่าเมื่อเขียนโค้ดแบบขนาน เนื่องจาก Yocto/GL ใช้เพื่อการวิจัยและการสอนเป็นหลัก ข้อมูลที่ชัดเจนจึงสามารถถูกแฮ็กได้มากกว่าและเข้าใจง่ายกว่า
อ็อบเจ็กต์เกือบทั้งหมดใน Yocto/GL มีค่าความหมาย ซึ่งหมายความว่าทุกสิ่งสามารถคัดลอกและซีเรียลไลซ์ได้เพียงเล็กน้อย และไม่จำเป็นต้องจัดการหน่วยความจำ แม้ว่าสิ่งนี้จะมีข้อเสียเปรียบจากการใช้สำเนาปลอม แต่ก็มีประโยชน์ในการรับประกันว่าจะไม่มีความเสียหายของหน่วยความจำเกิดขึ้น ซึ่งกลายเป็นปัญหาสำคัญสำหรับผู้ใช้ C++ มือใหม่ แม้แต่ในไลบรารีขนาดเล็กมากเช่นนี้
ในแง่ของรูปแบบโค้ด เราชอบแนวทางการทำงานมากกว่าแบบเชิงวัตถุ โดยนิยมใช้ฟังก์ชันฟรีมากกว่าวิธีคลาส ฟังก์ชันและข้อมูลทั้งหมดถูกกำหนดไว้ในเนมสเปซ yocto
ดังนั้นไลบรารีจึงสามารถเรียกกันและกันได้เพียงเล็กน้อย
การใช้เทมเพลตใน Yocto เป็นเหตุผลของการปรับโครงสร้างหลายครั้ง ตั้งแต่ไม่มีเทมเพลตไปจนถึงการใช้เทมเพลตจำนวนมาก ณ จุดนี้ Yocto ใช้เทมเพลตบางส่วนเพื่อให้อ่านง่าย ในอนาคต เราจะเพิ่มการใช้เทมเพลตในโค้ดทางคณิตศาสตร์ ในขณะที่ยังคงพิมพ์ API จำนวนมากไว้อย่างชัดเจน
สำหรับการจัดการข้อผิดพลาดใน IO เราจะส่งคืนวัตถุสถานะหรืออินเทอร์เฟซที่ใช้แฟล็กบูลีนและสตริงข้อผิดพลาด ข้อยกเว้นภายในจะถูกใช้เมื่อใช้โดยไลบรารีภายนอก แต่ไม่เช่นนั้นจะไม่มีการใช้ข้อยกเว้น ในขณะนี้ ข้อยกเว้นใช้เพื่อรายงาน "ข้อผิดพลาดของโปรแกรมเมอร์" เท่านั้น กล่าวคือ เมื่อเงื่อนไขเบื้องต้นหรือเงื่อนไขหลังถูกละเมิดในฟังก์ชัน เพียงแค่ใช้ไลบรารีมาตรฐานเท่านั้น
ห้องสมุดเผยแพร่ภายใต้ใบอนุญาต MIT เรารวมการพึ่งพาภายนอกต่างๆ ในการเผยแพร่ซึ่งแต่ละอันมีใบอนุญาตของตนเอง ซึ่งเข้ากันได้กับใบอนุญาตที่เลือก
ไลบรารีนี้ต้องการคอมไพเลอร์ C++17 และคอมไพล์บน OsX (Xcode >= 11), Windows (MSVC >= 2019) และ Linux (gcc >= 9, clang >= 9)
คุณสามารถสร้างแอปพลิเคชันตัวอย่างโดยใช้ CMake กับ mkdir build; cd build; cmake ..; cmake --build .
การขึ้นต่อกันที่จำเป็นของ Yocto/GL จะรวมอยู่ในการแจกจ่ายและไม่จำเป็นต้องติดตั้งแยกต่างหาก
Yocto/GL รองรับการสร้างการสาธิต OpenGL หรือไม่ การสนับสนุน OpenGL ถูกเปิดใช้งานโดยการกำหนดตัวเลือก cmake YOCTO_OPENGL
การพึ่งพา OpenGL จะรวมอยู่ใน repo นี้
Yocto/GL รองรับการใช้ Embree ของ Intel สำหรับการหล่อรังสี ดูไฟล์ CMake หลักสำหรับวิธีลิงก์ไปยังไฟล์ดังกล่าว การสนับสนุน Embree ถูกเปิดใช้งานโดยการกำหนดตัวเลือก cmake YOCTO_EMBREE
จำเป็นต้องติดตั้ง Embree แยกต่างหาก
Yocto/GL รองรับการใช้ Open Image Denoise ของ Intel เพื่อลดสัญญาณรบกวน ดูไฟล์ CMake หลักสำหรับวิธีลิงก์ไปยังไฟล์ดังกล่าว เปิดใช้งานการสนับสนุน Open Image Denoise โดยการกำหนดตัวเลือก cmake YOCTO_DENOISE
จำเป็นต้องติดตั้ง OIDN แยกต่างหาก