مدونة 3DWorld: https://3dworldgen.blogspot.com
3DWorld هو محرك ألعاب ثلاثي الأبعاد قائم على برنامج OpenGL متعدد المنصات، وقد عملت عليه منذ أن التحقت بدورة رسومات الكمبيوتر CS184 في جامعة كاليفورنيا في بيركلي عام 2001. وهو يتمتع بالميزات التالية:
وظائف وفئات وأغلفة الرسومات ثلاثية الأبعاد حول OpenGL
مولد/معالج تظليل مع إعادة التحميل السريع
إنشاء المحتوى الإجرائي للتضاريس والغطاء النباتي والمدن والديكورات الداخلية والخارجية للمباني وما إلى ذلك.
مولد الكون الإجرائي مع المجرات والنجوم والكواكب والأقمار وما إلى ذلك.
إنشاء تضاريس فوكسل ثلاثية الأبعاد إجرائية مع تحرير المستخدم في الوقت الفعلي
مولد التضاريس بما في ذلك وظائف الضوضاء المختلفة، والتآكل، وتحرير المستخدم في الوقت الفعلي، وقراءة/كتابة خريطة الارتفاع
البناء الإجرائي (الداخلي والخارجي)، والطرق، وتوليد المدينة
محاكاة فيزيائية لأنواع الكائنات البدائية وغيرها (> 10 آلاف كائن ديناميكي)
دورة ليلا ونهارا في الوقت الحقيقي مع الطقس (المطر والثلج والبرد والرياح والبرق)
المواد ذات الأساس الفيزيائي مع الانعكاس والانكسار
الظلال الديناميكية، والإغلاق المحيط، وما يصل إلى 1024 مصدر ضوء ديناميكي، وتأثيرات ما بعد المعالجة
الرسوم المتحركة الهيكلية والرسوم المتحركة الإجرائية
لعبة إطلاق النار من منظور الشخص الأول المدمجة "القاتل المبتسم"
بناء سفينة الفضاء + لعبة استعمار الكوكب
بناء مجموعة عناصر عالمية مفتوحة ووضع لعب الزومبي
الذكاء الاصطناعي للكمبيوتر للاعبين في لعبة FPS، وبناء اللعب، والسفن في لعبة الكون
مستورد لملف كائن Lightwave وتنسيقات 3DS وAssimp لتنسيقات الملفات الأخرى
دعم القراءة للأنسجة: JPEG، PNG، BMP، TIFF، TGA، DDS
مُحسّن للتحميل السريع والعرض في الوقت الفعلي للنماذج الكبيرة (> 1 جيجابايت من بيانات قمة الرأس/النسيج)
لقد قمت بتحويل المشروع من svn إلى git عند الالتزام 6607. معظم التعليمات البرمجية مكتوبة بلغة C++، مع GLSL للتظليل. والمقصود من هذا أن يكون مشروعًا متعدد المنصات. يتم تضمين ملفات مشروع Microsoft Visual Studio 2022. يتم أيضًا تضمين ملف تعريف linux/gcc، ولكنه أكثر تجريبية. راجع README.linux لمزيد من التفاصيل. يجب أن يتم إنشاء المشروع ضمن دول مجلس التعاون الخليجي على نظام التشغيل Linux مع بعض الأعمال، ولكن لقد مر وقت طويل منذ أن حاولت ذلك. لدي ملف تعريف قديم أصبح قديمًا، ولكن قد لا يتطلب إصلاحه وجعله قابلاً للاستخدام الكثير من العمل.
كن حذرًا، هذا مستودع كبير يبلغ حاليًا حوالي 1 جيجابايت. لقد قمت بتضمين الكود المصدري، وملفات التكوين، والأنسجة، والأصوات، والنماذج الصغيرة، وملفات الإضاءة، وبيانات المشهد، وخرائط الارتفاع، وملفات المشروع. لا يحتوي هذا الريبو على ملفات النماذج الكبيرة المستخدمة في بعض المشاهد، وسيتعين عليك تنزيلها بشكل منفصل. وهذا يعني أن بعض ملفات تكوين المشهد لن تعمل لأنها لا تستطيع العثور على البيانات المرجعية الخاصة بها. القائمة الحالية للتبعيات هي:
OpenGL 4.5 (يجب أن يأتي مع أحدث برامج تشغيل الرسومات لنظام التشغيل Windows 8/10/11)
OpenAL 1.1 (اختياري) (تثبيت النظام: https://www.openal.org/downloads/ أو يمكنك تجربة برنامج openal-soft الأحدث: https://github.com/kcat/openal-soft)
freeglut-2.8.1 (من المحتمل أن يعمل الإصدار 3.0 الحالي: https://sourceforge.net/projects/freeglut/)
freealut-1.1.0 (اختياري) (يتوفر إصدار واحد هنا: https://github.com/vancegroup/freealut)
zlib-1.2.11 (يمكنك تنزيل إصدار أحدث من هنا: https://zlib.net/)
glew-2.0.0 (من المحتمل أن يعمل 2.1.0 أيضًا: http://glew.sourceforge.net/)
gli (أحدث إصدار: https://github.com/g-truc/gli / الرأس فقط، مضمن في دليل التبعيات)
glm-0.9.9.0 (أحدث إصدار: https://glm.g-truc.net/0.9.9/index.html أو https://github.com/g-truc/glm / header فقط، مضمن في دليل التبعيات )
libpng-1.2.20 (اختياري) (الإصدار الخاص بي قديم جدًا؛ أحدث إصدار: https://libpng.sourceforge.io/index.html)؛ يمكن استبداله بـ stb_image في معظم الحالات، باستثناء تصدير صورة الخريطة.)
libtiff-4.3.0 (اختياري) (أحدث إصدار: http://www.simplesystems.org/libtiff/)
Assimp (اختياري) (راجع تعليمات البناء على https://github.com/assimp/assimp/blob/master/Build.md؛ ربما تكون تعليمات بناء vcpkg هي الأسهل.)
ليبتارجا (المصدر متضمن)
رؤوس STB: stb_image، stb_image_write، stb_dxt (المصدر مضمن)
لقد قمت بتضمين إصدارات مجردة من معظم هذه المكتبات في دليل التبعيات. لقد قمت بإزالة جميع الملفات الكبيرة التي لا يطلبها برنامج 3DWorld، وفي بعض الحالات حتى الأمثلة/الاختبارات/الوثائق. تم إنشاء هذه المكتبات باستخدام MS Visual Studio 2022 Community على نظام التشغيل Windows 11. إذا كنت تريد استخدامها، فستحتاج إلى نسخ الدلائل إلى الدليل الجذر وإعادة بناء أي مكتبات مطلوبة للإصدارات الأخرى من Windows أو Visual Studio. إذا قمت باستنساخ/تثبيت vcpkg، فيجب أن يكون على نفس مستوى دليل 3DWorld.
لاحظ أن العديد من هذه التبعيات قديمة ويمكن استبدالها بمكتبات أحدث. لقد كنت أركز على إضافة محتوى ولست مهتمًا جدًا بهذا. من المحتمل أن يتم استبدال Freeglut بـ SDL، ومكتبات الصور بـ STB أو DevIL. (يتم استخدام STB كإجراء احتياطي ولكنه لا يدعم جميع الصور المستخدمة.)
إذا كنت ترغب في إنشاء عالم ثلاثي الأبعاد، فيمكنك استخدام المشاريع الموجودة في المجلد التبعيات/، أو تنزيلها وإنشائها بنفسك وتغيير إعدادات المشروع لاستخدامها. أستخدم حاليًا هدف بناء مجتمع x64 MS Visual Studio 2022 لـ 3DWorld، لكن هدف بناء win32 يعمل أيضًا. مشروع MSVS 2019 3DWorld_msvs2019.vcxproj قديم حاليًا ولكن من الممكن جعله يعمل. يجب أن يتم تجميعه وتشغيله في وضع 32 بت إذا قمت بنسخ ملفات DLL من المجلد lib64/ إلى جذر الريبو وقمت بإجراء بعض التغييرات الأخرى في إعدادات المشروع.
إذا كان لديك نظام Linux، يمكنك محاولة البناء باستخدام ملف makefile المتوفر. يجب أن يكون الملف README.linux مفيدًا. لقد قمت ببناء برنامج 3DWorld وتشغيله في الغالب على Ubuntu 18.04 مع gcc 7 وUbuntu 20.04 مع gcc 9.
يأخذ 3DWorld اسم ملف التكوين في سطر الأوامر. إذا لم يتم العثور عليه، فإنه يقرأ ملف defaults.txt ويستخدم أي ملف (ملفات) تكوين مدرجة هناك. تتضمن بعض ملفات congig هذه نماذج مثل Sponza Atrium، وStanford Dragon، وsportscar، وما إلى ذلك. وهذه الملفات كبيرة جدًا بحيث لا يمكن تخزينها في git repo. لقد حاولت جعل برنامج 3DWorld ينشئ أخطاء غير فادحة إذا تعذر العثور على النماذج. يمكن العثور على العديد من النماذج الأكبر حجمًا في أرشيف McGuire Computer Graphics: http://casual-effacts.com/data/
لقد قمت بتجميع النماذج ثلاثية الأبعاد التي تعد كبيرة جدًا بحيث لا تتناسب مع GitHub repo ووضعتها على Google Drive هنا (حتى الإصدار 6 الآن): https://drive.google.com/file/d/1crN9rqT-LSvYyTZTw5wtkhwsubE651ex/view? usp=sharing يتم تخزين بعض هذه النماذج بالتنسيق الداخلي لبرنامج 3DWorld ولا يجوز إعادة استخدامها في مشاريع أخرى. والبعض الآخر يأتي من مواقع مثل Mixamo. يوجد أيضًا دليل للأنسجة يحتوي على مواد إضافية تستخدم في التصميمات الداخلية للمبنى والتي يمكن دمجها مع دليل مواد المشروع.
متطلبات النظام:
ويندوز 8/10/11؛ Linux عند استخدام ملف makefile مع gcc.
Microsoft Visual Studio 2019 أو 2022. يلزم وجود الإصدار الاحترافي أو المجتمعي لدعم OpenMP. يمكنك أيضًا محاولة استخدام gcc على نظام التشغيل Linux.
جيل جديد نسبيًا من Nvidia أو AMD GPU (يعمل على الكمبيوتر المحمول الخاص بي مع رسومات Intel، ولكن بمعدل 12-20 إطارًا في الثانية)
ذاكرة نظام بسعة 8 جيجابايت على الأقل للمشاهد الأكبر حجمًا
ذاكرة GPU سعة 4 جيجابايت على الأقل للمشاهد الأكبر حجمًا؛ يحتوي GPU الخاص بي على 12 جيجابايت من الذاكرة
استكشاف الأخطاء وإصلاحها: يبدو أن بعض الأنظمة (بطاقات AMD على وجه الخصوص) تتطلب سياق OpenGL الأساسي. يمكن تحديد ذلك عن طريق إضافة "use_core_context 1" في ملف التكوين. يمكن أيضًا تمكين هذا في scene_config/config_post.txt، وهو ملف يتم تطبيقه بعد قراءة جميع ملفات التكوين ذات المستوى الأعلى الأخرى. في بعض المواقف (بعض بطاقات Nvidia)، قد يكون استخدام السياق الأساسي أبطأ، ولهذا السبب لا أقوم بتمكينه افتراضيًا.
مفاتيح مفيدة (راجع ملف readme-keys.txt لمزيد من روابط المفاتيح):
أ، ق، د، ث: الحركة
q,e: تغيير السلاح (وضع اللعب)
'الفضاء': القفز/النار
'esc': إنهاء
"علامة التبويب": القائمة التي تظهر على الشاشة (تنقل باستخدام مفاتيح الأسهم و"X" للتبديل بين القوائم)
ب: تمكين الكائنات/الفيزياء/الذكاء الاصطناعي (للوضع الأرضي ووضع الكون)
F1: التبديل بين أوضاع الأرض/الكون/التضاريس المبلطة
F2: تبديل وضع اللعب
م: تبديل وضع ملء الشاشة
h: تبديل حركة الطيران
v: تغيير وضع الكاميرا (كرة بلورية/مدار مقابل منظور الشخص الأول)
الخامس: تبديل مظهر الماوس
K: تبديل وضع الخريطة العلوية
×: توقف
الماوس الأيسر: تشغيل/إجراء
الماوس الأيمن: النار
لدي حاليًا هذا الريبو للأغراض التعليمية بموجب ترخيص GPLv3. تتوفر بعض الوحدات الفرعية مع تراخيص أخرى متوافقة مع الاستخدام التجاري في حسابي على GitHub. ليس المقصود منها أن تكون أداة تجارية وأنا لا أحاول كسب المال هنا. كما أنني لا أبحث عن آخرين للعمل في المشروع في هذه المرحلة، على الرغم من أنني أقبل التعليقات وتقارير الأخطاء والاقتراحات. ربما ستتغير الأمور إذا قررت أن أصنع لعبة حقيقية من هذا. إذا كنت ترغب في استخدام شيء ما هنا لمشروعك، واسمحوا لي أن أعرف.
لا توجد وثائق أخرى لـ 3DWorld. ومع ذلك، لدي مدونة تتضمن وصفًا للخوارزميات والكثير من لقطات الشاشة: https://3dworldgen.blogspot.com
فيما يلي بعض لقطات الشاشة المرتبطة بمدونتي:
هنا منطقة بيع بالتجزئة في مبنى به رفوف من الرفوف. يمكن أن تحتوي المباني على عشرات الآلاف من العناصر التفاعلية التي يمكن للاعب أخذها وحملها. (config_heightmap.txt)
تعرض الكاميرات الموضوعة في غرف أخرى خلاصات فيديو في الوقت الفعلي على شاشات الأمان. (config_heightmap.txt)
الزومبي (مع إيجاد المسار وسلوكيات الذكاء الاصطناعي الأخرى) يتجولون ويسقطون في حمام سباحة داخلي. يحتوي سطح الماء على تموجات ورذاذ وانعكاسات وانكسارات. (config_heightmap.txt)
مرآب للسيارات به سيارات متوقفة وأنابيب رشاشات موجهة على السقف. (config_heightmap.txt)
قبو المبنى الإجرائي به أشخاص وإضاءة غير مباشرة وأنابيب موجهة على طول السقف. (config_heightmap.txt)
حي سكني إجرائي مع مباني المكاتب في الخلفية. هناك سيارات وأشخاص على الأرصفة وداخل المباني. (config_heightmap.txt)
التصميم الداخلي للمبنى الإجرائي - مكتبة تحتوي على كتب تم إنشاؤها إجرائيًا. (config_heightmap.txt)
المنازل والمباني المكتبية المولدة إجرائيًا ذات التصميمات الداخلية الكاملة. (config_heightmap.txt)
المجالات العاكسة (المعدنية)، والمنكسرة (الزجاجية)، والانبعاثية، والشفافة في المشهد الليلي مع الإضاءة غير المباشرة. مرسومة في الوقت الحقيقي. يمكن نقل المجالات بشكل تفاعلي. (config_white_plane.txt)
مدينة إجرائية بها المباني والطرق والسيارات والمشاة. (config_heightmap.txt)
مدينة إجرائية في الليل مع جسر في المقدمة. (config_heightmap.txt)
مدينة إجرائية مبكرة بها أشجار الصنوبر.
المدينة الإجرائية المبكرة.
التضاريس باستخدام ضوضاء التواء المجال مع محاكاة التآكل الهيدروليكي قبل وضع المدينة. (config_heightmap.txt)
وضع التضاريس المبلطة مع النهر والأشجار والعشب وما إلى ذلك (config_t.txt)
محاكاة تفاعلية مدمرة للنار/الدخان في الوقت الفعلي تشمل الأشجار والنباتات والعشب. (config_trees.txt)
النظام الشمسي الكوني الإجرائي مع حزام الكويكبات. (الكون/config_universe.txt)
مشهد ردهة Crytek Sponza مع مصدر ضوء ديناميكي يلقي الظل وإضاءة غير مباشرة. (سبونزا/config_sponza2.txt)
10000 نموذج لنموذج متحف مفصل للغاية تم وضعه في وضع التضاريس المبلطة (خريطة ارتفاع Puget Sound) وتم رسمه في الوقت الفعلي باستخدام الظلال والإضاءة غير المباشرة. (config_museum_tt_model.txt)
ردهة Crytek Sponza بأرضيات عاكسة و200 مصدر ضوء ديناميكي في الوقت الفعلي. (سبونزا/config_sponza2.txt)
العديد من المجالات والمكعبات العاكسة/المنكسرة مع توهين الضوء على أساس الكثافة في فناء مبنى المكاتب. (مابكس/config_mapx.txt)
مشهد سان ميغيل مع تساقط ثلوج ديناميكي وخريطة تغطية ثلجية متتبعة للمسار تم عرضها باستخدام تظليل مخصص. (config_san_miguel.txt)
تم عرض مشهد سان ميغيل في الوقت الفعلي باستخدام الإضاءة غير المباشرة المحسوبة مسبقًا والخرائط العادية والأسطح العاكسة المكعبة. (config_san_miguel.txt)
2 مليون شجرة صنوبر تم إنشاؤها من الناحية الإجرائية + موضوعة (500 ألف مرئية) تم رسمها في الوقت الفعلي في وضع التضاريس المبلطة باستخدام اللوحات الإعلانية الموضحة. (config_t.txt)
تكديس تفاعلي لـ 10000 صندوق ديناميكي في مشهد Mapx. يمكن نقل الأكوام وإسقاطها، ويمكن حفظ/إعادة تحميل/تحرير المشهد. (مابكس/config_mapx.txt)
كوكب تم إنشاؤه إجرائيًا بحلقات تحتوي على كويكبات صغيرة. (الكون/config_universe.txt)
حزام الكويكبات يحتوي على 10000 كويكب ديناميكي (دوار ومدار)، و100000 نقطة من جسيمات العفاريت، وسحب لوحة إعلانية كبيرة الحجم للغبار. (الكون/config_universe.txt)
وضع التضاريس المبلطة، يُظهر أشكالًا مختلفة من النباتات المولدة إجرائيًا، بما في ذلك العشب والزهور وأشجار الصنوبر وأشجار النخيل والأشجار المتساقطة. هذه في الواقع نماذج مضلعة تلقي بظلالها. (config_t.txt)
في الوقت الحقيقي، أعمدة ضوء ديناميكية من خلال الدخان الحجمي القائم على الضوضاء في مشهد Crytek Sponza. (سبونزا/config_sponza2.txt)
أرضيات معدنية عاكسة في مشهد كرايتيك سبونزا مع إضاءة غير مباشرة للشمس + السماء. (سبونزا/config_sponza2.txt)
تم رسم المجالات العاكسة والحلقة والمكعب في الوقت الفعلي في مشهد ديناميكي باستخدام زخارف انعكاس خريطة المكعب في ردهة مبنى المكاتب. المواد عبارة عن مزيج من المعادن والمواد العازلة باستخدام نماذج فيزيائية. (مابكس/config_mapx.txt)
مشهد المتحف مع الإضاءة غير المباشرة والأسطح العاكسة وخرائط الظل. هذا النموذج محكم من الناحية الإجرائية. (config_museum.txt)
مشهد منزل ثلجي ناتج عن سقوط مليار من جزيئات الثلج وتراكم الثلوج. يتم حساب الثلج مسبقًا ولكن يمكن عرضه في الوقت الفعلي. (المنزل/config_house_winter.txt)
محاكاة المطر وعرضه، بما في ذلك اكتشاف الاصطدام لكل قطرة مطر والأسطح الرطبة/العاكسة. (المنزل/config_house.txt)
يتم تطبيق الإضاءة والظلال غير المباشرة الناتجة عن الأضواء الكاشفة المتداخلة على الكائنات الديناميكية. (مابكس/config_mapx.txt)
محاكاة المياه بالموجات باستخدام فسيفساء الأجهزة في وضع التضاريس المبلطة. (config_t.txt)
تم إنشاء كهوف جليدية ثلاثية الأبعاد من الناحية الإجرائية مع إضاءة غير مباشرة. يمكن تحرير هذه التضاريس في الوقت الفعلي باستخدام الفرش ونيران الأسلحة. (config_ice_caves.txt)
تم رسم الكوكب الذي تم إنشاؤه من الناحية الإجرائية بالكامل في تظليل الأجزاء بدون أي مواد. ويشمل ذلك تكوين التضاريس (الجليد والثلج والصخور والغابات والصحراء والتراب) والمياه والسحب والغلاف الجوي. (الكون/config_universe.txt)