تزييف الإضاءة العامة في جودو

من موسوعة حسوب
< Godot
مراجعة 16:40، 29 نوفمبر 2023 بواسطة Naser-dakhel (نقاش | مساهمات) (إضافة الصفحة)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

لم أنت بحاجة لتزييف الإضاءة العامة؟

تقدم جودو عدة طرق للإضاءة العامة global illumination بنقاط ضعف وقوة مختلفة، إلا أنه من الممكن تجنب استخدام الطرق المعروفة واستخدام طريقة مصنوعة يدويًا. هناك عدة أسباب لاستخدام الطريقة اليدوية للإضاءة العامة بدلًا من VoxelGI وSDFGI أو خرائط الإضاءة المثبتة:

  • تريد أن تمتلك أداة ممتاز للتصيير rendering إلا أنك لا تريد الخوض في عملية تثبيت خرائط الإضاءة المضنية.
  • تريد أن تستخدم الإضاءة العامة في الوقت الفعلي وأن تعمل عليها في مراحل مولدة تلقائيًا.
  • تريد ان تستخدم الإضاءة العامة في الوقت الفعلي بالكامل دون أن تعاني من مشاكل تسريب الضوء.

تغطّي الطريقتان المشروحتان في الأسفل تشتيت الإضاءة غير المباشر فقط، راعِ استخدام مسابر الانعكاس للإضاءة المرآوية specular lighting، إذ أنها طريقة لا تكلفك الكثير من الموارد للاستخدام بالتقاطع مع طرق التزييف هذه.

انظر أيضًا: لست متأكدًا إذا كان تزييف الإضاءة العامة يلائم احتياجاتك؟ انظر إلى أي تقنية إضاءة عامة يجب أن استخدم؟  للمقارنة بين تقنيات الإضاءة العامة GI المتوفرة في جودو 4.

تزييف إضاءة DirectionalLight3D العامة

مع أنّ السماء تقدم ضوئها المباشر الخاص إلا أن عقدة DirectionalLight3D الأساسية في المشهد تشعّ كمية كبيرة من الإضاءة، فعند استخدام طريقة لإضاءة عامة سيرتد الضوء على الأسطح الصلبة ويرتد مجددًا على معظم الأسطحة المظللة الخارجية.

يمكننا تزييف ذلك الأمر بإضافة عقدة DirectionalLight3D ثانية باتباع التغييرات التالية:

  • تدوير الضوء بمقدار 180 درجة، مما يسمح بتمثيل الضوء المرتد من عقدة DirectionalLight3D الأساسية.
  • ضبط الظلال Shadows إلى مُطفأة Off، مما يقلل حمل أداء الأضواء الثانوية مع السماح للمناطق المظللة بتلقي بعض الضوء (وهو ما نريده في هذه الحالة).
  • ضبط الطاقة Energy إلى 10% - 40% من القيمة الأصلية. ليس هناك قيمة مثالية هنا، لذا جرّب مع قيم الطاقة المختلفة بحسب الضوء وألوان المادة الاعتيادي.
  • ضبط المرآة Specular إلى 0.0؛ إذ لا يجب على الضوء الغير مباشر الانبعاث من انحناءات مرآوية، لذا نحن بحاجة لتعطيل الإضاءة المرآوية بالكامل للضوء الثانوي.

ملاحظة: هذه الطريقة تعمل بشكل أفضل في المشاهد الخارجية، إذ أن ضوء DirectionalLigh3D الثانوي سيكون مرئيًا بالنظر إلى أن الظلال معطلة على هذا الضوء. يمكن أن تكون هذه حيلة لتقليل طاقة DirectionalLight3D بشكل سلس عند الدخول إلى منطقة خارجية (والعكس عند الخروج منها). على سبيل المثال، يمكن لهذا أن يُنجز عن طريق عقدة Area3D وAnimationPlayer.

تزييف إضاءة ضوء عام موضعي

من الممكن اتباع الطريقة الخاصة بالعقدة DirectionalLight3D للأضواء الموضعية (مثل OmniLight3D وSpotLight3D)، إلا أن هذا يتطلب عملًا يدويًا بالنظر إلى أنها تتطلب التكرار لكل عقدة ضوء موضعي في المشهد للوصول إلى أفضل نتيجة.

يمكن إضافة OmniLight3D في الحالات المثلى لكل موقع يحتوي على كمية كبيرة من الضوء يشع على سطح كافي، إلا أنه بسبب قيود الوقت فهذا الأمر ليس ممكنًا (بالأخص عند توليد المراحل إجرائيًا).

إذا كنت على عجلة من أمرك فيمكنك وضع عقدة OmniLight3D ثنائية على موقع العقدة OmniLight3D الأساسية، ويمكنك إضافة العقدة كعقدة ابن للعقدة OmniLight3D الأساسية لكي تجعل من عملية تحريك وإخفاء العقدتين في ذات الوقت أمرًا أسهل.

أجرِ العمليات التالية في العقدة OmniLight3D الثانوية:

  • زِد من نطاق Range الضوء بنسبة 20-25%، وهذا سيسمح بالضوء الثانوي أن ينوّر ما هو غير منوّر بواسطة الضوء الأساسي.
  • اضبط الظلال Shadows إلى مطفأة Off، وهذا من شأنه أن يقلل حمل الأداء الخاص بالضوء الثانوي مع السماء للمناطق المظللة بأن تستقبل بعض الضوء (وهو ما نريده هنا).
  • اضبط الطاقة Energy إلى 10-40% من قيمتها الأصلية، ليس هناك قيمة مثالية هنا، لذا جرّب مع قيم الطاقة المختلفة بحسب الضوء وما يحيطه.
  • اضبط المرآة Specular إلى 0؛ إذ لا يجب على الضوء الغير مباشر الانبعاث من انحناءات مرآوية، لذا نحن بحاجة لتعطيل الإضاءة المرآوية بالكامل للضوء الثانوي.

يمكن استخدام الحيلة ذاتها للضوء SpotLight3D، وفي هذه الحالة يجب وضع الضوء SpotLight3D الثانوي بطريقة تعكس معظم الضوء الذي سيرتد، وهذا عادةً قريب من موقع تأثير SpotLight3D الأساسية.

نستخدم في المثال التوضيحي أدناه عقدة SpotLight3D لإضاءة أرض الغرفة، وبما أنه لا يوجد هناك أي إضاءة غير مباشرة فهذا يعني أن بقية الغرفة ستكون مظلمة؛ في الحياة الحقيقية ستكون حوائط الغرفة وسقفها مضائين بسبب الضوء الذي يرتد حول الغرفة. استخدام عقدة OmniLight3D بين العقدة SpotLight3D الأصل وأرضية الغرفة سيعطينا التأثير التالي:

faking global illumination comparison.png

مصادر