حجم الظل
تحتاج هذه المقالة إلى مصادر إضافية للتحقق . ( يوليو 2024 ) |

حجم الظل هو تقنية تستخدم في رسومات الكمبيوتر ثلاثية الأبعاد لإضافة ظلال إلى مشهد مُقدم. اقترحها فرانك كرو لأول مرة في عام 1977 [1] كهندسة تصف الشكل ثلاثي الأبعاد للمنطقة المحجوبة عن مصدر الضوء. يقسم حجم الظل العالم الافتراضي إلى قسمين: مناطق مظللة ومناطق غير مظللة.
يعتبر تنفيذ عازلة الاستنسل لحجم الظلال بشكل عام من بين أكثر تقنيات التظليل في الوقت الفعلي عملية للاستخدام على أجهزة الرسومات ثلاثية الأبعاد الحديثة [ بحاجة لمصدر ] . وقد تم ترويجها من خلال لعبة الفيديو Doom 3 ، وأصبح هناك اختلاف معين في التقنية المستخدمة في هذه اللعبة يُعرف باسم Carmack's Reverse.
أصبحت أحجام الظل أداة شائعة للتظليل في الوقت الفعلي، إلى جانب تعيين الظلال الأكثر احترامًا . تتمثل الميزة الرئيسية لأحجام الظلال في أنها دقيقة بالنسبة للبكسل (على الرغم من أن العديد من التطبيقات تعاني من مشكلة تظليل ذاتي بسيطة على طول حافة الصورة الظلية، انظر البناء أدناه)، في حين تعتمد دقة خريطة الظل على ذاكرة الملمس المخصصة لها بالإضافة إلى الزاوية التي تُلقى بها الظلال (في بعض الزوايا، تتأثر دقة خريطة الظل بشكل لا مفر منه). ومع ذلك، تتطلب هذه التقنية إنشاء هندسة الظل، والتي يمكن أن تكون مكثفة لوحدة المعالجة المركزية (حسب التنفيذ). تتمثل ميزة تعيين الظل في أنها غالبًا ما تكون أسرع، لأن مضلعات حجم الظل غالبًا ما تكون كبيرة جدًا من حيث مساحة الشاشة وتتطلب الكثير من وقت التعبئة (خاصة للأشياء المحدبة)، في حين أن خرائط الظلال لا تحتوي على هذا القيد.
بناء
لإنشاء حجم ظل، قم بإسقاط شعاع من مصدر الضوء عبر كل رأس في الجسم الذي يلقي الظل إلى نقطة ما (عادةً ما تكون عند اللانهاية). ستشكل هذه الإسقاطات معًا حجمًا؛ أي نقطة داخل هذا الحجم تكون في الظل، وكل شيء خارجه مضاء بالضوء.
بالنسبة للنموذج متعدد الأضلاع، يتم تشكيل الحجم عادةً عن طريق تصنيف كل وجه في النموذج إما على أنه يواجه مصدر الضوء أو يواجه بعيدًا عن مصدر الضوء. تشكل مجموعة جميع الحواف التي تربط الوجه المواجه بالوجه البعيد الصورة الظلية بالنسبة لمصدر الضوء. يتم دفع الحواف التي تشكل الصورة الظلية بعيدًا عن الضوء لإنشاء وجوه حجم الظل. يجب أن يمتد هذا الحجم على مدى المشهد المرئي بالكامل؛ غالبًا ما يتم تمديد أبعاد حجم الظل إلى ما لا نهاية لإنجاز ذلك (انظر التحسين أدناه). لتشكيل حجم مغلق، يجب تغطية الطرف الأمامي والخلفي لهذا البثق. تسمى هذه الأغطية "أغطية". اعتمادًا على الطريقة المستخدمة لحجم الظل، قد يتم تغطية الطرف الأمامي بالكائن نفسه، وقد يتم أحيانًا حذف الطرف الخلفي (انظر ممر العمق أدناه).
هناك أيضًا مشكلة في الظل حيث تكون الوجوه على طول حافة الصورة الظلية ضحلة نسبيًا. في هذه الحالة، سيكون الظل الذي يلقيه الكائن على نفسه حادًا، ويكشف عن جوانبه المتعددة الأضلاع، في حين أن نموذج الإضاءة المعتاد سيكون له تغيير تدريجي في الإضاءة على طول الجانب. وهذا يترك أثرًا خشنًا للظل بالقرب من حافة الصورة الظلية يصعب تصحيحه. ستعمل زيادة كثافة الأضلاع على تقليل المشكلة، ولكن لن تقضي عليها. إذا تم تحديد الجزء الأمامي من حجم الظل، فقد يتم إزاحة حجم الظل بالكامل قليلاً بعيدًا عن الضوء لإزالة أي تقاطعات ذاتية للظل ضمن مسافة الإزاحة لحافة الصورة الظلية (يُستخدم هذا الحل بشكل أكثر شيوعًا في رسم الظل ).
الخطوات الأساسية لتشكيل حجم الظل هي:
- ابحث عن جميع حواف الصورة الظلية (الحواف التي تفصل الوجوه الأمامية عن الوجوه الخلفية)
- قم بتمديد جميع حواف الصورة الظلية في الاتجاه بعيدًا عن مصدر الضوء
- أضف غطاءً أماميًا و/أو غطاءً خلفيًا لكل سطح لتشكيل حجم مغلق (قد لا يكون ذلك ضروريًا، اعتمادًا على التنفيذ المستخدم)

تنفيذات المخزن المؤقت للإستنسل
بعد Crow، أظهر Tim Heidmann في عام 1991 كيفية استخدام مخزن الاستنسل لعرض الظلال بأحجام الظلال بسرعة كافية لاستخدامها في التطبيقات في الوقت الفعلي. هناك ثلاثة أشكال شائعة لهذه التقنية، وهي depth pass و depot fail و exclusive-or ، ولكنها جميعًا تستخدم نفس العملية:
- قم بإظهار المشهد كما لو كان بالكامل في الظل.
- لكل مصدر ضوء:
- باستخدام معلومات العمق من هذا المشهد، قم بإنشاء قناع في مخزن الاستنسل يحتوي على ثقوب فقط حيث لا يكون السطح المرئي في الظل.
- قم برسم المشهد مرة أخرى كما لو كان مضاءً بالكامل، باستخدام عازل الاستنسل لإخفاء المناطق المظللة. استخدم المزج الإضافي لإضافة هذا الرسم إلى المشهد.
يظهر الاختلاف بين هذه الطرق الثلاث في إنشاء القناع في الخطوة الثانية. تتضمن بعضها تمريرتين، وبعضها تمريرة واحدة فقط؛ وتتطلب بعضها دقة أقل في مخزن الاستنسل.
تميل أحجام الظلال إلى تغطية أجزاء كبيرة من المشهد المرئي، ونتيجة لذلك تستهلك وقتًا ثمينًا لعملية التبخير (وقت التعبئة) على أجهزة الرسومات ثلاثية الأبعاد. وتتفاقم هذه المشكلة بسبب تعقيد الكائنات التي تلقي الظلال، حيث يمكن لكل كائن أن يلقي بحجم ظله الخاص بأي حجم محتمل على الشاشة. راجع التحسين أدناه لمناقشة التقنيات المستخدمة لمكافحة مشكلة وقت التعبئة.
تمريرة العمق
اقترح هايدمان أنه إذا تم عرض الأسطح الأمامية والخلفية للظلال في تمريرات منفصلة، فيمكن حساب عدد الوجوه الأمامية والخلفية أمام الكائن باستخدام مخزن الاستنسل. إذا كان سطح الكائن في الظل، فسيكون هناك المزيد من أسطح الظل المواجهة للأمام بينه وبين العين مقارنة بأسطح الظل المواجهة للخلف. ومع ذلك، إذا كانت أعدادهم متساوية، فلن يكون سطح الكائن في الظل. يعمل إنشاء قناع الاستنسل على النحو التالي:
- تعطيل عمليات الكتابة إلى مخازن العمق واللون.
- استخدم أسلوب التخلص من الوجه الخلفي .
- اضبط عملية الاستنسل لتتزايد عند مرور العمق (عد الظلال الموجودة أمام الكائن فقط).
- عرض أحجام الظلال (بسبب التصفية، يتم عرض وجوهها الأمامية فقط).
- استخدم تقنية إعدام الوجه الأمامي.
- اضبط عملية الاستنسل على التناقص عند مرور العمق.
- عرض أحجام الظلال (يتم عرض وجوهها الخلفية فقط).
بعد إنجاز هذه الخطوة، ستتوافق جميع الأسطح المضاءة مع 0 في مخزن الاستنسل، حيث تكون أعداد الأسطح الأمامية والخلفية لجميع أحجام الظل بين العين وهذا السطح متساوية.
يواجه هذا النهج مشاكل عندما تكون العين نفسها داخل حجم الظل (على سبيل المثال، عندما يتحرك مصدر الضوء خلف جسم). ومن وجهة النظر هذه، ترى العين الوجه الخلفي لحجم الظل هذا قبل أي شيء آخر، وهذا يضيف تحيزًا -1 إلى مخزن الاستنسل بالكامل، مما يؤدي إلى عكس الظلال بشكل فعال. ويمكن علاج ذلك عن طريق إضافة سطح "غطاء" إلى مقدمة حجم الظل المواجه للعين، مثل مستوى القطع الأمامي . وهناك موقف آخر حيث قد تكون العين في ظل حجم يلقيه جسم خلف الكاميرا، والذي يجب أيضًا تغطيته بطريقة ما لمنع حدوث مشكلة مماثلة. في معظم التطبيقات الشائعة، نظرًا لأن التغطية المناسبة لتمرير العمق قد يكون من الصعب إنجازها، فقد يتم ترخيص طريقة فشل العمق (انظر أدناه) لهذه المواقف الخاصة. وبدلاً من ذلك، يمكن للمرء أن يعطي مخزن الاستنسل تحيزًا +1 لكل حجم ظل تكون الكاميرا بداخله، على الرغم من أن القيام بالكشف قد يكون بطيئًا.
توجد مشكلة محتملة أخرى إذا لم يكن مخزن الاستنسل يحتوي على عدد كافٍ من البتات لاستيعاب عدد الظلال المرئية بين العين وسطح الكائن، لأنه يستخدم حساب التشبع . (إذا استخدموا فيض الحساب بدلاً من ذلك، فإن المشكلة ستكون غير ذات أهمية.)
يُعرف اختبار اجتياز العمق أيضًا باسم اختبار اجتياز z ، حيث يُشار إلى مخزن العمق غالبًا باسم مخزن z.
فشل العمق
في عام 2000 تقريبًا، اكتشف العديد من الأشخاص أن طريقة هايدمان يمكن أن تعمل مع جميع مواضع الكاميرا عن طريق عكس العمق. فبدلاً من حساب أسطح الظل أمام سطح الجسم، يمكن حساب الأسطح خلفه بنفس السهولة، بنفس النتيجة النهائية. وهذا يحل مشكلة وجود العين في الظل، حيث لا يتم حساب أحجام الظل بين العين والجسم، ولكنه يقدم شرطًا مفاده أنه يجب وضع حد أقصى للنهاية الخلفية لحجم الظل، وإلا ستنتهي الظلال إلى الاختفاء حيث يشير الحجم إلى الخلف إلى ما لا نهاية.
- تعطيل عمليات الكتابة إلى مخازن العمق واللون.
- استخدم تقنية إعدام الوجه الأمامي.
- اضبط عملية الاستنسل لتتزايد عند فشل العمق (عد الظلال خلف الكائن فقط).
- تقديم أحجام الظل.
- استخدم أسلوب التخلص من الوجه الخلفي.
- قم بضبط عملية الاستنسل على التناقص عند فشل العمق.
- تقديم أحجام الظل.
تتضمن طريقة الفشل العميق نفس الاعتبارات فيما يتعلق بدقة عازل الاستنسل مثل طريقة تمرير العمق. كما أنها تشبه طريقة تمرير العمق، ويشار إليها أحيانًا باسم طريقة الفشل على شكل حرف z .
اكتشف ويليام بيلودو ومايكل سونجي هذه التقنية في أكتوبر 1998، وقدما هذه التقنية في مؤتمر Creativity، وهو مؤتمر للمطورين في Creative Labs، في عام 1999. [2] قدم سيم ديتريش هذه التقنية في مؤتمر GDC في مارس 1999، وفي مؤتمر Creativity في أواخر عام 1999. [3] [4] بعد بضعة أشهر، قدم ويليام بيلودو ومايكل سونجي طلب براءة اختراع أمريكي لهذه التقنية في نفس العام بعنوان "طريقة عرض الظلال باستخدام حجم الظل ومخزن الاستنسل". [5] اكتشف جون كارماك من شركة id Software هذه الخوارزمية بشكل مستقل في عام 2000 أثناء تطوير Doom 3. [ 6]
حصري-أو
يمكن تقريب أي من النوعين المذكورين أعلاه باستخدام تباين حصري أو تباين غير حصري، وهو ما لا يتعامل بشكل صحيح مع أحجام الظل المتقاطعة، ولكنه يوفر تمريرة عرض واحدة (إن لم يكن وقت تعبئة)، ولا يتطلب سوى مخزن مؤقت للاستنسل مكون من 1 بت. الخطوات التالية مخصصة لإصدار تمرير العمق:
- تعطيل عمليات الكتابة إلى مخازن العمق واللون.
- اضبط عملية الاستنسل على XOR عند مرور العمق (اقلبها على أي سطح ظل).
- تقديم أحجام الظل.
تحسين
- تتمثل إحدى طرق تسريع حسابات هندسة حجم الظل في الاستفادة من الأجزاء الموجودة من خط أنابيب العرض لإجراء بعض الحسابات. على سبيل المثال، باستخدام إحداثيات متجانسة ، يمكن ضبط إحداثيات w على الصفر لتمديد نقطة إلى ما لا نهاية. يجب أن يكون هذا مصحوبًا بمخروط عرض به مستوى قص بعيد يمتد إلى ما لا نهاية لاستيعاب تلك النقاط، ويتم ذلك باستخدام مصفوفة إسقاط متخصصة. تقلل هذه التقنية من دقة مخزن العمق قليلاً، لكن الفرق يكون عادةً ضئيلًا. راجع ورقة عام 2002 "Practical and Robust Stenciled Shadow Volumes for Hardware-Accelerated Rendering"، C. Everitt و M. Kilgard ، للحصول على تنفيذ مفصل.
- يمكن تقليل وقت تحويل حجم الظلال إلى صور نقطية باستخدام اختبار مقص داخل الجهاز لتحديد الظلال على مستطيل محدد على الشاشة.
- لقد نفذت شركة NVIDIA إمكانية خاصة بالأجهزة تسمى اختبار حدود العمق والتي تم تصميمها لإزالة أجزاء من أحجام الظلال التي لا تؤثر على المشهد المرئي. (كانت هذه الميزة متاحة منذ طراز GeForce FX 5900). وقد تم تقديم مناقشة لهذه الإمكانية واستخدامها مع أحجام الظلال في مؤتمر مطوري الألعاب في عام 2005. [7]
- نظرًا لأن طريقة الفشل في العمق لا تقدم ميزة على تمرير العمق إلا في الحالة الخاصة حيث تكون العين ضمن حجم الظل، فمن الأفضل التحقق من هذه الحالة واستخدام تمرير العمق حيثما أمكن ذلك. وهذا يتجنب كلًا من التغطية الخلفية غير الضرورية (والتنقيح المرتبط بها) للحالات التي يكون فيها الفشل في العمق غير ضروري، بالإضافة إلى مشكلة التغطية الأمامية المناسبة للحالات الخاصة من تمرير العمق [ بحاجة لمصدر ] .
- في خطوط أنابيب وحدة معالجة الرسوميات الأحدث، يمكن استخدام برامج التظليل الهندسية لإنشاء أحجام الظلال. [8] [9]
- في الأنظمة التي لا تدعم برامج تظليل الهندسة، يمكن أيضًا استخدام برامج تظليل الرؤوس لإنشاء أحجام الظلال عن طريق الضغط بشكل انتقائي على الرؤوس الموجودة بالفعل داخل ذاكرة وحدة معالجة الرسومات. [10]
انظر أيضا
- حافة الظلية
- تعيين الظلال ، خوارزمية تظليل بديلة
- عازلة الاستنسل
- مخزن العمق
- قائمة براءات الاختراع للبرمجيات
مراجع
- ^ كرو، فرانكلين سي: "خوارزميات الظل للرسومات الحاسوبية"، رسومات الحاسوب (وقائع سيجراف '77) ، المجلد 11، العدد 2، 242-248.
- ^ ين، هون (2002-12-03). "نظرية أحجام الظلال المرسومة بالاستنسل". GameDev.net . تم الاسترجاع في 2010-09-12 .
- ^ "Stencil Shadows Patented!? WTF! - GameDev.net". 2004-07-29 . تم الاسترجاع في 2012-03-28 .
- ^ "براءات الاختراع الإبداعية عكس كارماك". تقرير التكنولوجيا. 2004-07-29. مؤرشف من الأصل في 2010-01-31 . تم الاسترجاع في 2010-09-12 .
- ^ US 6384822، Bilodeau، William & Songy، Michael، "طريقة تقديم الظلال باستخدام حجم الظل ومخزن الاستنسل"، نُشر في 2002-05-07، وتم تخصيصه لشركة Creative Technology Ltd.
- ^ Kilgard, Mark; John Carmack. "John Carmack on shadow volumes..." صفحة Shadow Volumes العملية والقوية في NVIDIA Developer Zone . archive.org: NVIDIA. مؤرشف من الأصل في 27 يناير 2009 . تم الاسترجاع في 18 أكتوبر 2012 .
- ^ لينجيل، إيريك. "Advanced Stencil Shadow and Penumbral Wedge Rendering" (PDF) . مؤتمر مطوري الألعاب 2005. 2005. تم الاسترجاع في 18 أكتوبر 2012 .
- ^ "GPU Gems 3: الفصل 11. وحدات تخزين الظل الفعالة والمتينة باستخدام Hierarchical Occlusion Culling and Geometry Shaders | NVIDIA Developer Zone". developer.nvidia.com . مؤرشف من الأصل في 16 مايو 2011 . تم الاسترجاع في 12 يناير 2022 .
- ^ ستيش، مارتن؛ كارستن واشتر؛ ألكسندر كيلر (2007). "الفصل 11 "أحجام الظل الفعالة والمتينة باستخدام إزالة التداخل الهرمي وتظليل الهندسة"". GPU Gems 3 . archive.org: nVidia / Addison-Wesley. مؤرشف من الأصل في 16 مايو 2011. تم الاسترجاع في 18 أكتوبر 2012 .
- ^ برينان، كريس. "إخراج حجم الظل باستخدام Vertex Shader" (PDF) . AMD . تم الاسترجاع في 2018-02-14 .
