الفرق بين المراجعتين لصفحة: «Godot/3d/global illumination/faking global illumination»
Naser-dakhel (نقاش | مساهمات) إضافة الصفحة |
Naser-dakhel (نقاش | مساهمات) لا ملخص تعديل |
||
(1 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة) | |||
سطر 10: | سطر 10: | ||
== تزييف إضاءة DirectionalLight3D العامة == | == تزييف إضاءة DirectionalLight3D العامة == | ||
مع أنّ السماء تقدم ضوئها المباشر الخاص إلا أن عقدة | مع أنّ السماء تقدم ضوئها المباشر الخاص إلا أن عقدة <code>DirectionalLight3D</code> الأساسية في المشهد تشعّ كمية كبيرة من الإضاءة، فعند استخدام طريقة لإضاءة عامة سيرتد الضوء على الأسطح الصلبة ويرتد مجددًا على معظم الأسطحة المظللة الخارجية. | ||
يمكننا تزييف ذلك الأمر بإضافة عقدة | يمكننا تزييف ذلك الأمر بإضافة عقدة <code>DirectionalLight3D</code> ثانية باتباع التغييرات التالية: | ||
* تدوير الضوء بمقدار 180 درجة، مما يسمح بتمثيل الضوء المرتد من عقدة | * تدوير الضوء بمقدار 180 درجة، مما يسمح بتمثيل الضوء المرتد من عقدة <code>DirectionalLight3D</code> الأساسية. | ||
* ضبط '''الظلال Shadows''' إلى '''مُطفأة Off'''، مما يقلل حمل أداء الأضواء الثانوية مع السماح للمناطق المظللة بتلقي بعض الضوء (وهو ما نريده في هذه الحالة). | * ضبط '''الظلال Shadows''' إلى '''مُطفأة Off'''، مما يقلل حمل أداء الأضواء الثانوية مع السماح للمناطق المظللة بتلقي بعض الضوء (وهو ما نريده في هذه الحالة). | ||
* ضبط '''الطاقة Energy''' إلى 10% - 40% من القيمة الأصلية. ليس هناك قيمة مثالية هنا، لذا جرّب مع قيم الطاقة المختلفة بحسب الضوء وألوان المادة الاعتيادي. | * ضبط '''الطاقة Energy''' إلى 10% - 40% من القيمة الأصلية. ليس هناك قيمة مثالية هنا، لذا جرّب مع قيم الطاقة المختلفة بحسب الضوء وألوان المادة الاعتيادي. | ||
سطر 21: | سطر 21: | ||
<blockquote>ملاحظة: هذه الطريقة تعمل بشكل أفضل في المشاهد الخارجية، إذ أن ضوء <code>DirectionalLigh3D</code> الثانوي سيكون مرئيًا بالنظر إلى أن الظلال معطلة على هذا الضوء. | <blockquote>ملاحظة: هذه الطريقة تعمل بشكل أفضل في المشاهد الخارجية، إذ أن ضوء <code>DirectionalLigh3D</code> الثانوي سيكون مرئيًا بالنظر إلى أن الظلال معطلة على هذا الضوء. | ||
يمكن أن تكون هذه حيلة لتقليل طاقة <code>DirectionalLight3D</code> بشكل سلس عند الدخول إلى منطقة خارجية (والعكس عند الخروج منها). على سبيل المثال، يمكن لهذا أن يُنجز عن طريق عقدة Area3D و<code>AnimationPlayer</code>.</blockquote> | يمكن أن تكون هذه حيلة لتقليل طاقة <code>DirectionalLight3D</code> بشكل سلس عند الدخول إلى منطقة خارجية (والعكس عند الخروج منها). على سبيل المثال، يمكن لهذا أن يُنجز عن طريق عقدة Area3D و<code>AnimationPlayer</code>.</blockquote> | ||
من الممكن اتباع الطريقة الخاصة بالعقدة DirectionalLight3D للأضواء الموضعية (مثل OmniLight3D | == تزييف إضاءة ضوء عام موضعي == | ||
من الممكن اتباع الطريقة الخاصة بالعقدة <code>DirectionalLight3D</code> للأضواء الموضعية (مثل <code>OmniLight3D</code> و<code>SpotLight3D</code>)، إلا أن هذا يتطلب عملًا يدويًا بالنظر إلى أنها تتطلب التكرار لكل عقدة ضوء موضعي في المشهد للوصول إلى أفضل نتيجة. | |||
يمكن إضافة OmniLight3D في الحالات المثلى لكل موقع يحتوي على كمية كبيرة من الضوء يشع على سطح كافي، إلا أنه بسبب قيود الوقت فهذا الأمر ليس ممكنًا (بالأخص عند توليد المراحل إجرائيًا). | يمكن إضافة <code>OmniLight3D</code> في الحالات المثلى لكل موقع يحتوي على كمية كبيرة من الضوء يشع على سطح كافي، إلا أنه بسبب قيود الوقت فهذا الأمر ليس ممكنًا (بالأخص عند توليد المراحل إجرائيًا). | ||
إذا كنت على عجلة من أمرك فيمكنك وضع عقدة OmniLight3D ثنائية على موقع العقدة OmniLight3D الأساسية، ويمكنك إضافة العقدة كعقدة ابن للعقدة OmniLight3D الأساسية لكي تجعل من عملية تحريك وإخفاء العقدتين في ذات الوقت أمرًا أسهل. | إذا كنت على عجلة من أمرك فيمكنك وضع عقدة <code>OmniLight3D</code> ثنائية على موقع العقدة <code>OmniLight3D</code> الأساسية، ويمكنك إضافة العقدة كعقدة ابن للعقدة <code>OmniLight3D</code> الأساسية لكي تجعل من عملية تحريك وإخفاء العقدتين في ذات الوقت أمرًا أسهل. | ||
أجرِ العمليات التالية في العقدة OmniLight3D الثانوية: | أجرِ العمليات التالية في العقدة <code>OmniLight3D</code> الثانوية: | ||
* زِد من '''نطاق Range''' الضوء بنسبة 20-25%، وهذا سيسمح بالضوء الثانوي أن ينوّر ما هو غير منوّر بواسطة الضوء الأساسي. | * زِد من '''نطاق Range''' الضوء بنسبة 20-25%، وهذا سيسمح بالضوء الثانوي أن ينوّر ما هو غير منوّر بواسطة الضوء الأساسي. | ||
سطر 36: | سطر 37: | ||
* اضبط '''المرآة Specular''' إلى 0؛ إذ لا يجب على الضوء الغير مباشر الانبعاث من انحناءات مرآوية، لذا نحن بحاجة لتعطيل الإضاءة المرآوية بالكامل للضوء الثانوي. | * اضبط '''المرآة Specular''' إلى 0؛ إذ لا يجب على الضوء الغير مباشر الانبعاث من انحناءات مرآوية، لذا نحن بحاجة لتعطيل الإضاءة المرآوية بالكامل للضوء الثانوي. | ||
يمكن استخدام الحيلة ذاتها للضوء | يمكن استخدام الحيلة ذاتها للضوء <code>SpotLight3D</code>، وفي هذه الحالة يجب وضع الضوء <code>SpotLight3D</code> الثانوي بطريقة تعكس معظم الضوء الذي سيرتد، وهذا عادةً قريب من موقع تأثير <code>SpotLight3D</code> الأساسية. | ||
نستخدم في المثال التوضيحي أدناه عقدة SpotLight3D لإضاءة أرض الغرفة، وبما أنه لا يوجد هناك أي إضاءة غير مباشرة فهذا يعني أن بقية الغرفة ستكون مظلمة؛ في الحياة الحقيقية ستكون حوائط الغرفة وسقفها مضائين بسبب الضوء الذي يرتد حول الغرفة. استخدام عقدة OmniLight3D بين العقدة SpotLight3D الأصل وأرضية الغرفة سيعطينا التأثير التالي: | نستخدم في المثال التوضيحي أدناه عقدة <code>SpotLight3D</code> لإضاءة أرض الغرفة، وبما أنه لا يوجد هناك أي إضاءة غير مباشرة فهذا يعني أن بقية الغرفة ستكون مظلمة؛ في الحياة الحقيقية ستكون حوائط الغرفة وسقفها مضائين بسبب الضوء الذي يرتد حول الغرفة. استخدام عقدة <code>OmniLight3D</code> بين العقدة <code>SpotLight3D</code> الأصل وأرضية الغرفة سيعطينا التأثير التالي: | ||
[[ملف:faking global illumination comparison.png|مركز|لاإطار]] | [[ملف:faking global illumination comparison.png|مركز|لاإطار]] | ||
== مصادر == | == مصادر == |
المراجعة الحالية بتاريخ 19:09، 29 نوفمبر 2023
لم أنت بحاجة لتزييف الإضاءة العامة؟
تقدم جودو عدة طرق للإضاءة العامة 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
الأصل وأرضية الغرفة سيعطينا التأثير التالي: