يتحدث مايكل أبراش ، المخضرم في برمجة الرسومات ثلاثية الأبعاد ، باستخدام مثال تطوير الزلزال الأول ، عن الحاجة إلى التفكير الإبداعي في البرمجة.منذ عدة سنوات ، عملت لدى شركة محول الفيديو Seven Seven التي انتهت صلاحيتها الآن. هناك ساعدت في تطوير استنساخ VGA. حاول زميلي توم ويلسون ، الذي عمل لعدة أشهر على مدار الساعة لتطوير شريحة Video Seven VGA ، جعل VGA في أسرع وقت ممكن ، وكان متأكدًا من تحسين أدائها إلى الحد الأقصى تقريبًا. ومع ذلك ، عندما قدم توم بالفعل اللمسات الأخيرة لتصميم الرقاقة ، سمعنا شائعات بأن منافسينا بارادايس قد حققوا أداءً أفضل في استنساخه للتطوير بإضافة "FIFO" إليه.
كانت هذه هي نهاية الشائعات - لم نكن نعرف ما هو FIFO ، ولا كم ساعد ، لا شيء آخر. ومع ذلك ، تحول توم ، الذي عادة ما يكون شخصًا ودودًا ومريحًا ، إلى متعصب نشط مهووس به الكثير من الكافيين في دمه. بناءً على أجزاء المعلومات هذه ، حاول اكتشاف ما استطاع الفردوس فعله. في النهاية ، توصل إلى استنتاج مفاده أن الفردوس ربما أدخل مخزنًا مؤقتًا للكتابة FIFO بين ناقل النظام و VGA ، بحيث عندما يتم تسجيل وحدة المعالجة المركزية على ذاكرة الفيديو ، ستذهب البيانات التي يتم كتابتها فورًا إلى FIFO ، مما يسمح لوحدة المعالجة المركزية (CPU) بمواصلة المعالجة بدلاً من الوقوف في وضع الخمول في كل مرة عندما كان يكتب إلى ذاكرة العرض.
لم يكن لدى Tom عناصر منطقية ، ولا وقت كاف لتنفيذ FIFO كامل ، لكنه تمكن من تنفيذ FIFO في عمق تشغيل واحد ، مما سمح للمعالج بتجاوز شريحة VGA في عملية الكتابة الواحدة. لم يكن توم متأكدًا من أن هذا سيعطي نتائج جيدة ، ولكن هذا هو الشيء الوحيد الذي يمكنه فعله ، لذلك قام بتنفيذ هذا النظام ونقل الرقاقة إلى الإنتاج.
اتضح أن FIFO لعملية واحدة تعمل بشكل رائع بشكل لا يصدق: في ذلك الوقت كانت Video Seven VGA-chips الأسرع في السوق. لقد أصبحوا دليلًا على عبقرية توم ودليلًا على قدرة الخالق تحت ضغط الظروف. ومع ذلك ، فإن الشيء العظيم في هذه القصة هو أن تصميم Paradise FIFO لا علاقة له بتصميم Tom ،
ولم ينجح على الإطلاق . قام Paradise بإدخال مخزن مؤقت
للقراءة FIFO بين ذاكرة العرض ومرحلة إخراج فيديو VGA chip ، مما جعل من الممكن قراءة إخراج الفيديو مقدمًا بحيث أنه عندما تحتاج وحدة المعالجة المركزية للوصول إلى ذاكرة العرض ، يمكن أخذ وحدات البكسل من FIFO ، وتم تنفيذ أمر وحدة المعالجة المركزية على الفور. هذا بالفعل تحسين الأداء ، ولكن ليس بقدر المخزن المؤقت للكتابة في FIFO توم.
ويمكن اعتبار هذه الحالة حكاية جيدة عن طبيعة العملية الإبداعية التي يمكن للشخص تحقيقها. لم تحتوي قصاصات الأخبار حول شريحة الجنة تقريبًا على أي معلومات واقعية ، لكنهم أجبروا توم على تجاوز الحدود التي وضعها دون وعي ، وتطوير التصميم الأولي للرقاقة. أعتقد أن هذا هو العنصر الأكثر أهمية في أي تصميم مبدع ، سواء كان ذلك في مجال الأجهزة أو البرامج أو أي مجال إبداعي آخر ، وكان هو من وُلد في توم توم أخبار عن الفردوس: القدرة على اكتشاف الحدود التي بنيت عليها في عملية العمل على المشروع ، والتغلب عليها الحدود.
المشكلة ، بالطبع ، هي كيفية التغلب على الحدود ، التي لا تعرف وجودها. لا توجد صيغة للنجاح ، ولكن هناك مبدأان يمكن أن يخدما هذا الغرض بشكل جيد: أولاً ، تبسيط ، وثانيا ، تجربة شيء جديد باستمرار.
عادة ، عندما تشعر أن الشفرة تزداد تعقيدًا ، تبدأ في إجراء تغييرات بسيطة على الهيكل المجمد ، وهناك احتمال كبير أن تتمكن من زيادة الإنتاجية وتقليل مقدار الشفرة من خلال اختراع التصميم مرة أخرى. إن الهيكل الجيد حقًا يجب أن يجلب لحظة من الرضا العميق عندما يقع كل شيء في مكانه الصحيح ، وتفاجأ بمدى الحاجة إلى مقدار الشفرة ومدى عمل جميع الحالات الحدودية.
في عملية مراجعة الهيكل ، من المهم دراسة أي أفكار تتبادر إلى الذهن ، بغض النظر عن مدى جنونها. بدا الكثير من الأفكار العظيمة التي سمعتها في البداية هراء لأنها لم تنسجم مع صورتي الحالية للعالم. غالبًا ما تكون هذه الأفكار مجنونة حقًا ، ولكن تمامًا كما حفزت أخبار شريحة الجنة خيال توم ، فإن الاستكشاف العدواني للأفكار الوهمية التي يمكن أن تفتح إمكانيات جديدة لك.
توضيح جيد: تطور محرك رسومات Quake 3D.
مهمة الرسومات ثلاثية الأبعاد الأكثر تعقيدًا في العالم
قضيت الأشهر السبعة الماضية أعمل في Quake ، وريث DOOM من برنامج id ، وأفترض أنه بعد ثلاثة أشهر أخرى ، بحلول وقت قراءة هذا المقال ، سيتم إصدار Quake كبرنامج تجريبي.
فيما يتعلق بالرسومات ، سيكون Quake بالنسبة لـ DOOM كما كانت DOOM بالنسبة إلى سلفها Wolfenstein 3D. يضيف Quake 3D التعسفي الحقيقي (يمكن للاعب أن ينظر لأعلى ولأسفل ، ويميل إلى الجانب وحتى يسقط في جانب واحد) ، والإضاءة والظلال التفصيلية ، وحوش وشخصيات ثلاثية الأبعاد بدلاً من Sprites DOOM. سرعان ما سأتحدث عن كل هذا بمزيد من التفصيل ، لكن هذا الشهر أريد أن أتحدث عن المشكلة ، والتي أسميها في كتابي الأصعب في الرسومات ثلاثية الأبعاد: تحديد الأسطح المرئية (رسم السطح المقابل لكل بكسل) ، وحول مهمة قريبة جدًا منها - حول القطع (بأسرع ما يمكن تجاهل المضلعات غير المرئية كوسيلة لتسريع تحديد الأسطح المرئية). من أجل الإيجاز ، سأستخدم الاختصار VSD للدلالة على تعريف تحديد السطح المرئي والإعدام.
لماذا أعتبر VSD أصعب مهمة للرسومات ثلاثية الأبعاد؟ على الرغم من أن مهام التنقيط ، على سبيل المثال ، تعيين النسيج ، مدهشة ومهمة بنفس القدر ، فهي محدودة للغاية في نطاقها ، وبعد ظهور مسرعات ثلاثية الأبعاد ، سيتم نقل حلولها إلى الأجهزة ؛ بالإضافة إلى ذلك ، يعتمد حجمها فقط على دقة الشاشة ، أي أنها متواضعة جدًا.
في المقابل ، تعد VSD مهمة غير محدودة ويتم استخدام العشرات من الأساليب لحلها. لكن الأهم من ذلك ، أن أداء VSD في حل ساذج يعتمد على تعقيد المشهد ، والذي عادة ما يزداد كدالة تربيعية أو مكعب ، وبالتالي يصبح بسرعة العامل المحدد في خلق عوالم واقعية. أعتقد أنه في السنوات القليلة المقبلة ، ستصبح VSD مشكلة سائدة بشكل متزايد في الرسومات ثلاثية الأبعاد في الوقت الحقيقي لأجهزة الكمبيوتر ، لأن تفاصيل العوالم ثلاثية الأبعاد ستزداد باستمرار. في الوقت الحالي ، يمكن أن يحتوي مستوى الزلزال ذي الحجم الصلب على حوالي 10000 مضلع ، أي ما يقرب من ثلاثة أضعاف مستوى DOOM القابل للمقارنة في الحجم.
هيكل مستوى الزلزال
قبل الخوض في VSD ، اسمحوا لي أن أذكر أن كل مستوى من مستويات الزلزال يتم تخزينه باعتباره شجرة BSP ضخمة ثلاثية الأبعاد. تقسم شجرة BSP هذه ، مثلها مثل أي BSP ، المساحة ، في هذه الحالة ، على طول طائرات المضلعات. ومع ذلك ، بخلاف شجرة BSP التي أوضحتها سابقًا ، فإن شجرة Quake BSP لا تخزن المضلعات في العقد الشجرية كجزء من الطائرات المقسمة ، ولكن في الأوراق الفارغة (غير المملوءة) ، كما هو موضح في الشكل 1 في العرض العلوي.
الشكل 1. في الزلزال ، يتم تخزين المضلعات في أوراق فارغة. المساحات المظلمة عبارة عن أوراق مليئة (الكميات المملوءة ، مثل الأجزاء الداخلية للجدران)يمكن الحصول على ترتيب التقديم الصحيح عن طريق تقديم الأوراق في ترتيب BSP "من الأمام إلى الخلف" أو "للخلف إلى الأمام". بالإضافة إلى ذلك ، نظرًا لأن أوراق BSP دائمًا ما تكون محدبة ، والمضلعات هي حدود أوراق BSP التي تبدو في الداخل ، فإن المضلعات في أي ورقة لا يمكن أن تتداخل أبدًا ويمكن رسمها بأي ترتيب. (هذا هو خاصية عامة من متعدد الوجوه محدبة.)
قص وتحديد الأسطح المرئية
من الناحية المثالية ، يجب أن تعمل عملية VSD على النحو التالي: أولاً ، يجب عليك التخلص من جميع المضلعات الموجودة خارج هرم الرؤية ، وكذلك قطع جميع الأجزاء غير المرئية من المضلعات المرئية جزئيًا. ستحتاج بعد ذلك إلى رسم وحدات البكسل الخاصة بكل مضلع مرئية بالفعل من وجهة النظر الحالية ، كما هو موضح في الشكل 2 في العرض العلوي ، دون إضاعة الوقت في إعادة رسم البكسل بشكل متكرر ؛ لاحظ كم عدد المضلعات في الشكل 2 تحتاج إلى رسم. وأخيرًا ، في عالم مثالي ، يجب أن يكون التحقق من رؤية أجزاء من المضلعات غير مكلف ، ويجب أن يكون وقت المعالجة هو نفسه بالنسبة لجميع وجهات النظر الممكنة ، وبالتالي فإن اللعبة تعمل بسلاسة.
الشكل 2. تُظهر بنية VSD المثالية فقط الأجزاء المرئية من المضلعات المرئية.في عملية إنجاز هذه المهمة ، من السهل تحديد أي من المضلعات يكون خارج نطاق هرم الرؤية تمامًا أو مقطوع جزئيًا ، ومن الممكن تمامًا معرفة أي وحدات البكسل لرسم بالضبط. للأسف ، العالم بعيد عن المثالية ، وكل هذه الفحوصات مكلفة ، لذا فإن الحيلة تتمثل في تسريع أو تخطي الشيكات المختلفة ، وكل ذلك ينتج عنه النتيجة اللازمة.
كما أوضحت بالتفصيل في المقالات السابقة ، مع BSP ، يمكنك بسهولة وبتكلفة منخفضة التنقل في جميع أنحاء العالم بترتيب من الأمام إلى الخلف أو إلى الأمام. إن أبسط حلول VSD هو ببساطة عبور الشجرة إلى الأمام ، واقتطاع كل مضلع هرم من الرؤية ورسمه إذا كان وجهه موجهاً إلى الكاميرا ولا ينقطع تمامًا (خوارزمية الفنان). لكن هل هذا حل مناسب؟
بالنسبة للعوالم البسيطة نسبيًا ، فهي قابلة للتطبيق تمامًا. ومع ذلك ، فإنه لا مقياس جيد. تتمثل إحدى المشكلات في أنه عند إضافة مضلعات جديدة إلى العالم لقطع المضلعات غير المرئية ، يلزم إجراء المزيد من التحولات والتحققات ؛ بعد حد معين ، سيبدأ هذا في إبطاء الأداء بشكل ملحوظ.
لحسن الحظ ، هذه المشكلة بالذات لديها حل جيد. كما ذكر أعلاه ، تصف كل ورقة في شجرة BSP مسافة فرعية محدبة ، وتحد العقد المتصلة بالخلفية من المساحة. الأمر الأقل وضوحًا هو أن كل عقدة في شجرة BSP تصف أيضًا مسافة فرعية - فضاء فرعي يتكون من جميع العناصر الفرعية للعقدة ، كما هو موضح في الشكل 3. يمكنك أن تأخذها بهذه الطريقة: تقسم كل عقدة إلى جزأين المساحة الفرعية التي أنشأتها العقد الموجودة أعلاه في شجرة ، والعناصر التابعة للعقدة تأطير مزيد من هذه المساحة الفرعية في جميع الأوراق القادمة من العقدة.
الشكل 3: العقدة E تصف مسافة فرعية مظلمة تحتوي على الأوراق 5 و 6 و 7 والعقدة F.نظرًا لأن المساحة الفرعية للعقدة محددة ومحدبة ، يمكننا التحقق مما إذا كانت خارج هرم الرؤية تمامًا. إذا كان الأمر كذلك ، فسيتم بالتأكيد قطع
جميع أطفال العقدة تمامًا ويمكن التخلص منها دون معالجة إضافية. نظرًا لأن الجزء الرئيسي من العالم يقع عادةً خارج هرم الرؤية ، يمكن قطع العديد من المضلعات في العالم تقريبًا بدون تكلفة من خلال أجزاء ضخمة من المساحات الفرعية للعقد. يعد إجراء فحص مثالي لمساحات القطع الفرعية أمرًا مكلفًا للغاية ، لذلك ، عادةً ما يتم استخدام كل من العقيدات المتوازية المقطوعة أو المجالات المقيدة لإجراء عمليات فحص القطع.
وهذا يعني أن لقطة على طول هرم الرؤية ليست مشكلة ، ويمكنك استخدام BSP للرجوع للخلف. إذن ما المشكلة؟
إعادة رسم
إن المشكلة التي واجهها المؤلف الرئيسي لتقنيات DOOM و Quake التي واجهها John Carmack عند تطوير Quake هي أنه في عالم معقد ، يوجد في العديد من المشاهد في هرم الرؤية عدد كبير من المضلعات. معظم هذه المضلعات متداخلة جزئيًا أو كليًا بواسطة مضلعات أخرى ، لكن خوارزمية الفنان الموضحة أعلاه تتطلب رسم كل بكسل لكل مضلع في هرم الرؤية. ومع ذلك ، يتم تقديمها في الغالب فقط لإعادة رسمها من قبل الآخرين. عند مستوى الزلزال البالغ 10000 مضلع ، من السهل الحصول على أسوأ حالات إعادة الرسم عند رسم البيكسل 10 مرات أو أكثر ؛ أي أنه في بعض الإطارات ، يتم رسم كل بكسل في المتوسط 10 مرات أو أكثر. لا يوجد جهاز تنقيط سريع بما يكفي للتعويض عن ترتيب الحجم المطلوب لعرض مشهد ؛ والأسوأ من ذلك ، أن خوارزمية الفنان تخلق اختلافات هائلة في الأداء بين أفضل الحالات وأسوأها ، مما يؤدي إلى تغيير كبير في معدل الإطارات عند تحريك العارض.
لذلك ، واجه جون مشكلة تقليل كمية إعادة الرسم إلى مستويات مقبولة. من الناحية المثالية ، يجب رسم كل بكسل مرة واحدة فقط ، ولكن ليس أكثر من مرتين أو ثلاث مرات في أسوأ الحالات. بالنسبة للقطعة عبر هرم الرؤية ، كان من المثالي أن يتم قطع جميع المضلعات غير المرئية في الهرم دون تكلفة إضافية تقريبًا. سيكون الإضافة أيضًا أنه سيكون من الممكن رسم الأجزاء المرئية فقط من المضلعات المرئية جزئيًا ، ولكن في نفس الوقت يجب الحفاظ على التوازن: يجب أن تستغرق العملية أقل من إعادة الرسم.
عندما تعرفت على الهوية في بداية شهر مارس ، كان لدى جون بالفعل نموذج أولي للمحرك وخطة تفصيلية ، لذلك افترضت أن عملنا سيكون ببساطة إكمال هذا المحرك وتحسينه. ومع ذلك ، إذا كنت أعرف قصة id ، يمكنني معرفة ما هو ما. قام John ليس فقط بإنشاء DOOM ، ولكن أيضًا بمحركات Wolf 3D وعدة ألعاب أخرى سابقة ، وخلال عملية التطوير ، قام بعمل عدة إصدارات مختلفة من كل محرك (بمجرد إنشاء أربعة محركات في أربعة أسابيع) ، أي أنه كتب خلال أربع سنوات حوالي 20 محركًا. . لن تنتهي رغبة جون التي لا تعرف الكلل في المزيد والمزيد من التقنيات الجديدة وعالية الجودة لمحرك الزلزال إلا بعد إطلاق اللعبة.
بعد وصولي بثلاثة أشهر ، بقي عنصر واحد فقط من بنية VSD الأصلية في المحرك ، ورغبة جون في "تجربة أشياء جديدة" ذهبت إلى أبعد الحدود حتى أنني لم أر مثل هذا الشيء من قبل.
شجرة حفنة
في مشروع الزلزال الأصلي لجون ، تم التقديم من الأمام إلى الخلف باستخدام شجرة BSP ثانية تتعقب أجزاء مرسومة بالفعل وما زالت فارغة من الشاشة والتي يجب ملؤها بالمضلعات المتبقية. منطقيا ، يمكن اعتبار شجرة BSP هذه منطقة ثنائية الأبعاد تصف الأجزاء المملوءة والفارغة من الشاشة ، كما هو مبين في الشكل 4 ، لكنها في الحقيقة شجرة ثلاثية الأبعاد ، تُعرف باسم "شجرة الشعاع". شجرة الشعاع هي مجموعة من القطاعات ثلاثية الأبعاد (عناقيد) تحدها طائرات متوقعة من نقطة مركزية (في حالتنا ، وجهة نظر) ، كما هو مبين في الشكل 5.
الشكل 4. تقسم شجرة شعاع الزلزال الشاشة إلى منطقة ثنائية الأبعادالشكل 5. تتكون شجرة شعاع الزلزال من قطاعات ثلاثية الأبعاد ، أو أشعة ، يتم إسقاطها من وجهة النظر إلى حواف المضلعات.في مشروع جون ، تتكون شجرة الحزم في البداية من حزم واحد يصف هرم الرؤية ؛ يعتبر كل شيء خارج هذه الحزمة ممتلئًا (أي ، ليست هناك حاجة لرسم أي شيء هناك) ، وكل شيء داخل الحزمة يعتبر فارغًا. عند الوصول إلى مضلع جديد بالالتفاف حول شجرة BSP في العالم من الأمام إلى الخلف ، تم تحويل هذا المضلع إلى شعاع من خلال رسم الطائرات من حوافها من خلال وجهة النظر ، واعتُبرت جميع أجزاء الشعاع التي تعبر الحزم الفارغة في شجرة الشعاع مرسومة وإضافتها إلى شجرة الشعاع المملوءة. استمر هذا الأمر ، إما إلى أن تنتهي المضلعات ، أو حتى أصبحت شجرة الحزم ممتلئة تمامًا. بعد اكتمال شجرة الشعاع ، تم رسم الأجزاء المرئية من المضلعات المحتجزة في شجرة الشعاع.
كانت ميزة العمل مع شجرة الحزمة ثلاثية الأبعاد بدلاً من المنطقة ثنائية الأبعاد هي تحديد الجانب من مستوى الحزمة التي يوجد بها رأس المضلع ، وهو ما يكفي للتحقق من علامة المنتج المتجه للأشعة إلى قمة الرأس والعادي إلى المستوى ، لأن جميع طائرات الحزمة تمر عبر البداية الإحداثيات (وجهة نظر). بالإضافة إلى ذلك ، نظرًا لأن مستوي الحزمة موصوفًا تمامًا بواسطة حرف واحد عادي ، لإنشاء حزمة من حافة المضلع ، فإن المنتج القياسي للحافة والشعاع من هذه الحافة إلى وجهة النظر يكفي فقط. أخيرًا ، بالنسبة لقطعة المجموعة من خلال هرم الرؤية الموصوف أعلاه ، يمكن للمرء استخدام المجالات المحيطية لعقد BSP.
في البداية ، بدا أن خاصية شجرة الحزمة (تنتهي عندما تصبح شجرة الحزمة ممتلئة) جذابة لأنها تبدو وكأنها ستحد من الأداء في أسوأ الحالات. لسوء الحظ ، كانت المشاهد لا تزال ممكنة حيث يمكنك رؤية كل شيء حتى السماء أو الجدار الخلفي للعالم ، لذلك في أسوأ الحالات ، كان لا يزال عليك التحقق من جميع المضلعات في هرم الرؤية فيما يتعلق بشجرة الباقة. يمكن أن تحدث مشكلات مماثلة أيضًا في الشقوق الصغيرة نظرًا لقيود الدقة العددية. يتم إنفاق الكثير من الوقت على القطع عبر شجرة الشعاع ، وفي المشاهد ذات مدى الرؤية العالية ، على سبيل المثال ، عند النظر إليها من أعلى المستوى ، خفضت التكلفة الإجمالية لمعالجة الحزم من معدل إطارات الزلزال إلى سرعات السلاحف. وهذا هو ، في النهاية اتضح أن الحل بأشجار الباقة يعاني من نفس الأمراض تقريبًا خوارزمية الفنان: الحالة الأسوأ هي أسوأ بكثير من الحالة المتوسطة ، ولا تتسع بشكل جيد مع زيادة تعقيد المستوى.
محرك ثلاثي الأبعاد جديد كل يوم
بعد أن بدأت شجرة الشعاع العمل ، عمل جون بلا كلل لتسريع المحرك ثلاثي الأبعاد ، محاولًا تحسين هيكله باستمرار ، بدلاً من إجراء تغييرات على التنفيذ. , , : « , ...», , . , , , . , . , . . , , , FIFO- Paradise .
raycast : , 8x8, ; , , BSP-, , . , , , , ; , , . , , . : , .
: . . ( ), .
: z-, , , . , , , , . : , 256 0-8 ; x86 8 .
: يتم تنقيط المضلعات إلى فواصل زمنية ، يتم إضافتها إلى قائمة الفواصل العامة ويتم قطعها من هذه القائمة بحيث يبقى الفاصل الأقرب في كل بكسل فقط. هناك حاجة لفرز صغير من خلال الانتقال من الأمام إلى الخلف ، لأنه إذا كانت هناك التقاطعات ، فإن الفاصل الزمني بالفعل في القائمة هو أقرب. هذا يلغي الحاجة إلى إعادة رسم ، ولكن على حساب حساب الفواصل الزمنية ؛ بالإضافة إلى ذلك ، لا يزال يتعين تحويل كل مضلع إلى فواصل زمنية.بوابات : , , . , , , . , .
, — , , BSP- , BSP- . , DOOM (2D), BSP- DOOM 2D- . 3D , . BSP , , . , , BSP.
, , , - . BSP, , , . 3:30 , , , , , , , .
: (potentially visible set, PVS) . PVS 1 . . BSP , . , , , , . , BSP , , PVS 20 .
20 ( PVS), (PVS , , , 50%, 150%). , PVS ; , VSD, . , — , , , .
قال جون إن الحساب المبدئي لـ PVS كان تطوراً منطقياً للنُهج التي كان يدرسها ، ولم تكن هناك لحظة من "eureka". ومع ذلك ، كان هذا اكتشافًا لتصميم جديد تمامًا وأفضل نوعيًا ، والذي ، جنبًا إلى جنب مع أداة التنقيط ذات حواف الفرز التي تزيل إعادة الرسم بالكامل ، قريب جدًا من المتطلبات "المثالية" التي اخترناها من البداية.تبسيط وتجربة شيء جديد
ماذا يعني هذا؟
بالضبط ما قلته في البداية: تبسيط وتجربة شيء جديد. تعد PVSs المحولة مسبقًا أبسط من أي مخططات أخرى قمنا بمراجعتها مسبقًا (على الرغم من أن PVSs precomputing مهمة مثيرة للاهتمام سنناقشها في وقت آخر). في جوهرها ، تعد PVSs المحسوبة مسبقًا مجرد نسخة محدودة من خوارزمية الفنان أثناء تنفيذ البرنامج. هل هذا يعني أن هذا النهج ليس عميقًا بشكل خاص؟لا على الإطلاق.
تبدو جميع الهياكل الممتازة حقًا بسيطة وحتى واضحة ، ولكن فقط بعد اختراعها. لكن عملية الاختراع نفسها تتطلب مثابرة ورغبة لا تصدق في تجربة العديد من الأفكار المختلفة حتى تجد الفكرة الصحيحة ، كما حدث في هذه الحالة., , . : — , . , , «» . , « »; . VSD, , . , « » , ( , ) PVS .
— , , . , , . , 3D- , ; , , .
.
,
, . , Dr. Dobb's Journal , — . , Tiny C , D-Flat , -
DDJ . ( , .) — ,
DDJ .
بفضل هذه الفلسفة ، سمحت لي id Software أن أخبر في هذا المقال كيف يعمل Quake حتى قبل صدوره. وهذا هو السبب وراء قيام id بنشر شفرة مصدر Wolfenstein 3D كاملة على ftp.idsoftware.com/idstuff/source [تقريبا. ترجمة: الآن يتم وضع رموز المصدر على جيثب ] ؛ لا يمكنك إعادة ترجمة الشفرة وبيعها ، ولكن يمكنك معرفة كيفية عمل لعبة ناجحة على نطاق واسع ؛ فحص ملف wolfsrc.txt من الدليل أعلاه للحصول على تفاصيل حول كيفية استخدام التعليمات البرمجية.: , . , , , , , . ; — , . , !
المراجع
Foley, James D.,
et al. ,
Computer Graphics: Principles and Practice , Addison Wesley, 1990, ISBN 0-201-12110-7 (, BSP-, VSD).
Teller, Seth,
Visibility Computations in Densely Occluded Polyhedral Environments (),
http://theory.lcs.mit.edu/~seth/ .
Teller, Seth,
Visibility Preprocessing for Interactive Walkthroughs , SIGGRAPH 91 proceedings, pp. 61-69.