تجاوز الحالة الهرمية

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

لإنجاز حالة الاستخدام هذه بأقل تكلفة عامة ممكنة، استخدم HierarchicalStateOverrideComponentملف . ينفذ هذا المكون تحديثات الحالة الهرمية على الفروع العشوائية من الرسم البياني للمشهد. وهذا يعني أنه يمكن تعريف الحالة على أي مستوى في الرسم البياني للمشهد وأنها تتدفق إلى أسفل التسلسل الهرمي حتى يتم تجاوزها بواسطة حالة جديدة ، أو تطبيقها على كائن ورقة.

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

  • يتم تعيين المكون الأول إلى عقدة الجذر للطراز ويقوم بتشغيل العرض الشفاف للسيارة بأكملها.
  • يتم تعيين المكون الثاني إلى العقدة الجذرية للمحرك ويتجاوز الحالة مرة أخرى عن طريق إيقاف تشغيل وضع الرؤية بشكل صريح.

الميزات

المجموعة الثابتة من الحالات التي يمكن تجاوزها هي:

  • Hiddenالشبكات المعنية في الرسم البياني للمشهد مخفية أو معروضة.:

  • Tint colorيمكن أن يكون الكائن المعروض ملونا بلون الصبغة الفردي ووزن الصبغة.: تظهر الصورة أدناه تلوينا لحافة العجلة.

    Tint color used to turn an object green

  • See-throughيتم تقديم الهندسة بشكل شبه شفاف ، على سبيل المثال للكشف عن الأجزاء الداخلية لكائن.: تظهر الصورة التالية السيارة بأكملها يتم تقديمها في وضع الرؤية ، باستثناء فرجار الفرامل الأحمر:

    See-through mode used to make selected objects transparent

    هام

    يعمل تأثير التصفح فقط عند استخدام وضع TileBasedCompositionrendering.

  • Shellيتم تقديم الهندسة كغلاف شفاف وغير مشبع.: يسمح هذا الوضع بتلاشي الأجزاء غير المهمة من المشهد مع الاحتفاظ بإحساس بالشكل وتحديد المواقع النسبي. لتغيير مظهر عرض shell، استخدم حالة ShellRenderingSettings . انظر الصورة التالية لطراز السيارة الذي يتم تقديمه بالكامل ، باستثناء الينابيع الزرقاء:

    Shell mode used to fade out specific objects

    هام

    يعمل تأثير shell فقط عند استخدام وضع TileBasedCompositionrendering.

  • Selectedيتم تقديم الهندسة مع مخطط تفصيلي للتحديد.:

    Outline option used to highlight a selected part

  • DisableCollisionالهندسة معفاة من الاستعلامات المكانية.: Hidden لا يؤثر العلم على علم حالة التصادم ، لذلك غالبا ما يتم تعيين هذين العلمين معا.

  • UseCutPlaneFilterMaskاستخدم قناع بت مرشح فردي للتحكم في تحديد مستوى القطع.: تحدد هذه العلامة ما إذا كان يجب استخدام قناع المرشح الفردي أو توريثه من أصله. يتم تعيين قناع بت المرشح نفسه عبر CutPlaneFilterMask الخاصية. للحصول على معلومات مفصلة حول كيفية عمل التصفية، راجع فقرة مستويات القطع الانتقائية. انظر المثال التالي حيث يتم قطع الإطار والحافة فقط بينما تظل بقية المشهد غير متأثرة. Selective cut planes

تلميح

كبديل لإيقاف تشغيل الاستعلامات المرئية والمكانية لرسم بياني فرعي كامل، enabled يمكن تبديل حالة كائن اللعبة. إذا تم تعطيل التدرج الهرمي ، فهذا له الأفضلية على أي HierarchicalStateOverrideComponent.

تجاوزات هرمية

HierarchicalStateOverrideComponent يمكن إرفاقه على مستويات متعددة من التسلسل الهرمي للكائنات. نظرا لأنه لا يمكن أن يكون هناك سوى مكون واحد من كل نوع على كيان ما ، فإن كل HierarchicalStateOverrideComponent منها يدير الحالات للصبغة المخفية والشفافة والمختارة والملونة والتصادم.

لذلك يمكن تعيين كل حالة إلى واحدة من:

  • ForceOn - يتم تمكين الحالة لجميع الشبكات على هذه العقدة وتحتها
  • ForceOff - يتم تعطيل الحالة لجميع الشبكات الموجودة على هذه العقدة وتحتها
  • InheritFromParent - الدولة لا تتأثر بمكون التجاوز هذا

يمكنك تغيير الحالات مباشرة أو من خلال الدالة SetState :

HierarchicalStateOverrideComponent component = ...;

// set one state directly
component.HiddenState = HierarchicalEnableState.ForceOn;

// set a state with the SetState function
component.SetState(HierarchicalStates.SeeThrough, HierarchicalEnableState.InheritFromParent);

// set multiple states at once with the SetState function
component.SetState(HierarchicalStates.Hidden | HierarchicalStates.DisableCollision, HierarchicalEnableState.ForceOff);
ApiHandle<HierarchicalStateOverrideComponent> component = ...;

// set one state directly
component->SetHiddenState(HierarchicalEnableState::ForceOn);

// or: set a state with the SetState function
component->SetState(HierarchicalStates::SeeThrough, HierarchicalEnableState::InheritFromParent);

// set multiple states at once with the SetState function
component->SetState(
    (HierarchicalStates)((int32_t)HierarchicalStates::Hidden | (int32_t)HierarchicalStates::DisableCollision), HierarchicalEnableState::ForceOff);

لون الصبغة

التجاوز tint color خاص قليلا من حيث وجود حالة تشغيل / إيقاف / وراثة وخاصية لون اللون. يحدد جزء ألفا من لون الصبغة وزن تأثير التلوين: إذا تم ضبطه على 0.0 ، فلن يكون لون الصبغة مرئيا وإذا تم ضبطه على 1.0 تقديم الكائن بلون صبغة نقي. بالنسبة للقيم الفاصلة، سيتم خلط اللون النهائي مع لون الصبغة. يمكن تغيير لون الصبغة على أساس كل إطار لتحقيق رسوم متحركة ملونة.

اعتبارات الأداء

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

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

⁧⁩مستندات API⁧⁩.

الخطوات التالية