كيفية استخدام تظليل Cel في Unreal Engine 4

يعد تطوير ألعاب واقعية المظهر في الإصدار الرابع من أنريل إينجن (Unreal Engine 4) أمر سهل بسبب العرض القائم على أساس مادي.

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

وتتمثل إحدى طرق الحصول على مظهر منمق في استخدام تظليل السليلوز (cel shading) المعروف أيضاً باسم تظليل تون (toon shading).

وتحاكي هذه التقنية التظليل المستخدم عادةً في الرسوم المتحركة والأنيمي، ويمكنك رؤية أمثلة على ذلك في ألعاب مثل (Jet Set Radio) و(The Legend of Zelda: The Wind Waker) و(Gravity Rush).

وستتعلم في هذا البرنامج التعليمي كيفية:

  1. إنشاء واستخدام مادة عملية النشر.
  2. إنشاء تظليل السليلوز (cel shader).
  3. عزل سل التظليل لشبكات معينة.
  4. التحكم في نطاقات الألوان باستخدام جداول البحث.

ملاحظة: يفترض هذا البرنامج التعليمي أنك تعرف بالفعل أساسيات استخدام (Unreal Engine)، إذا كنت جديداً في (Unreal Engine)، فيجب أن تنتقل أولاً إلى سلسلة البرامج التعليمية (Unreal Engine for Beginners) المكونة من 10 أجزاء.

البداية

قم بتنزيل مشروع البداية وفك ضغطه، ثم انتقل إلى مجلد المشروع (project folder) وافتح (CelShader.uproject)، وسترى المشهد التالي:

مشروع البداية

هذه هي الشخصية التي سوف تقوم بتظليلها، وقبل أن تبدأ، يجب أن تعرف ما هو تظليل السليلوز (cel shading).

ما هو تظليل السليلوز (cel shading)؟

تظليل السليلوز (Cel shading) هو عندما تقدم شيئاً ما باستخدام نطاقات متعددة من الألوان بدلاً من التدرج اللوني المستمر.

تظليل السليلوز

يوجد أدناه مثال على تظليل السليلوز (Cel shading) في (The Legend of Zelda: Breath of the Wild)، لاحظ أن الشخصية فقط لها تظليل السليلوز (Cel shading) بينما الخلفية لا.

تظليل السليلوز

في هذه الصورة، هناك ثلاثة نطاقات، واحد للظلال، وواحد للدرجات اللونية النصفية والآخر للإبرازات.

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

تظليل السليلوز

وعلى الرغم من أن الخطوط العريضة ليست تظليل سليلوزي (cel shading)، إلا أنه من الشائع دمجها معاً، ويساعد هذا الصورة على الظهور كما لو كانت مرسومة أو مظللة بالحبر، وسترى هذا كثيراً في الألعاب التي تشبه الرسوم المتحركة مثل (Guilty Gear Xrd) و(Dragon Ball FighterZ).

تظليل السليلوز

في القسم التالي، ستتعرف على كيفية تنفيذ تظليل السليلوز (Cel shading).

طريقة تظليل السليلوز (Cel shading)

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

وتعني القيمة -1 أن السطح والضوء يواجهان اتجاهين متعاكسين، و0 يعني أنها متعامدة مع بعضها البعض، و1 يعني أنهم يواجهون نفس الاتجاه.

طريقة تظليل السليلوز

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

طريقة تظليل السليلوز ثنائي البعد

والقيد في هذه الطريقة هو أن الأضواء الأخرى لا يمكن أن تؤثر على الكائنات المظللة، وأيضاً، لا يمكن للأشياء أن تلقي بظلالها على الكائنات المظللة بالسليلوز (Cel shading).

طريقة تظليل السليلوز

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

طريقة تظليل السليلوز 3

الآن بعد أن عرفت ما هو تظليل السليلوز (Cel shading) وكيف يعمل، فقد حان الوقت لإنشاء واحد.

إنشاء تظليل السليلوز (Creating the Cel Shader)

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

ولإنشاء تأثير عملية النشر الخاصة بك، تحتاج إلى استخدام مادة عملية ما بعد العملية، انتقل إلى مجلد المواد (Materials folder) وأنشئ مادة (Material) جديدة، وأعد تسميتها إلى (PP_CelShader) ثم افتحها.

لتحويل مادة إلى مادة معالجة لاحقة، تحتاج إلى تغيير مجالها، انتقل إلى لوحة التفاصيل (Details panel) وقم بتغيير مجال المادة (Material Domain) إلى عملية لاحقة (Post Process).

إنشاء تظليل السليلوز

تتمثل الخطوة الأولى في إنشاء تظليل السليلوز (cel shader) في حساب مدى إضاءة كل بكسل، وسوف نسمي هذا المخزن المؤقت للإضاءة.

حساب عازل الإضاءة (Calculating the Lighting Buffer)

عندما يعرض (Unreal) صورة على الشاشة، فإنه يخزن التمريرات في المخازن المؤقتة، ولحساب المخزن المؤقت للإضاءة، ستحتاج إلى الوصول إلى اثنين من هذه المخازن المؤقتة:

  1. إدخال العملية اللاحقة (Post Process Input): بمجرد قيام (Unreal) بتنفيذ الإضاءة والمعالجة اللاحقة، سيتم تخزين الصورة في هذا المخزن المؤقت، وهذا ما سيعرضه (Unreal) للاعب إذا لم تقم بإجراء مزيد من المعالجة اللاحقة.
  2. لون منتشر (Diffuse Color): هذا هو المشهد بدون أي إضاءة ومعالجة لاحقة، وسيحتوي على ألوان منتشرة لكل شيء على الشاشة.

حساب عازل الإضاءة

للوصول إلى هذه المخازن المؤقتة، تحتاج إلى استخدام عقدة (SceneTexture)، قم بإنشاء واحدة وباختيارها، وانتقل إلى لوحة التفاصيل (Details panel)، وللوصول إلى المخزن المؤقت لإدخال عملية ما بعد العملية (Post Process Input buffer)، قم بتغيير معرف نسيج المشهد (Scene Texture Id) إلى (PostProcessInput0).

حساب عازل الإضاءة

وللوصول إلى (Diffuse Color)، قم بإنشاء عقدة (SceneTexture) أخرى، وقم بتغيير معرف نسيج المشهد الخاص بها (Scene Texture Id) إلى (DiffuseColor).

حساب عازل الإضاءة

يجب أن يحتوي المخزن المؤقت للإضاءة على قيم تدرج الرمادي فقط (التي تصف مدى إضاءة شيء ما)، وهذا يعني أنك لا تحتاج إلى معلومات اللون من كلا المخازن المؤقتة، ولتجاهل اللون، قم بتوصيل إخراج اللون (Color output) لكل من عقدتي (SceneTexture) بـ (Desaturation)، وسيؤدي ذلك إلى إزالة تشبع كلا المخازن المؤقتة.

حساب عازل الإضاءة

ولحساب المخزن المؤقت للإضاءة (lighting buffer)، ما عليك سوى قسمة (SceneTexture: PostProcessInput0) على (SceneTexture: DiffuseColor).

حساب عازل الإضاءة

بعد ذلك، استخدم (Clamp) بحيث تبقى القيم ضمن النطاق من 0 إلى 1، وهذا يجعل من السهل تنفيذ العتبة لأنك تعرف قيمك المحتملة.

حساب عازل الإضاءة

فيما يلي تصور لمخزن الإضاءة:

حساب عازل الإضاءة

وكما ترى، فإن المناطق المضاءة أقرب إلى الأبيض والمناطق غير المضاءة أقرب إلى الأسود.

بعد ذلك، ستستخدم المخزن المؤقت للإضاءة (lighting buffer) لإنشاء عتبة (threshold).

إنشاء عتبة (Creating a Threshold)

بالنسبة إلى تظليل السليلوز (cel shader) هذا، فإن أي بكسل بقيمة أكبر من 0.5 سيستخدم لون الانتشار العادي، وحدات البكسل ذات القيمة الأقل من 0.5 ستستخدم اللون المنتشر بنصف سطوع.

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

إنشاء عتبة

بعد ذلك، قم بتوصيل (Clamp) بإدخال (A)، وبعد ذلك، أنشئ ثابتاً بقيمة 0.5 وقم بتوصيله بمدخل (B).

إنشاء عتبة

ملاحظة: يمكنك تغيير قيمة الإدخال (B) لتغيير الحد الأدنى.

وللحصول على الألوان، قم بإنشاء (SceneTexture) وقم بتعيين (Scene Texture Id) على (Diffuse Color)، وبعد ذلك، اضرب اللون في 0.5 للحصول على الانتشار بنصف سطوع.

إنشاء عتبة

أخيراً، قم بتوصيل كل شيء على هذا النحو:

إنشاء عتبة

ملخص:

  1. سيؤدي عدم التشبع إلى تحويل مدخلات ما بعد المعالجة واللون المنتشر إلى صور ذات تدرج رمادي.
  2. ستقسم القسمة مدخلات ما بعد العملية على لون منتشر، وهذا سوف يعطيك عازل الإضاءة.
  3. سيحتفظ Clamp بالقيم ضمن النطاق من 0 إلى 1.
  4. سيخرج If اللون العادي المنتشر إذا كانت قيمة الإضاءة أكبر من 0.5، وإذا كان أقل من 0.5، فسيخرج اللون المنتشر بنصف سطوع.

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

استخدام مواد المعالجة اللاحقة (Using Post Process Materials)

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

انقر فوق تطبيق (Apply) ثم ارجع إلى المحرر الرئيسي (main editor)، ولإنشاء وحدة تخزين (Post Process)، انتقل إلى لوحة (Modes) وحدد فئة (Volumes)، وبعد ذلك، اسحب حجم عملية النشر (Post Process Volume) إلى منفذ العرض (Viewport) لإنشاء واحد.

استخدام مواد المعالجة اللاحقة

أنت الآن بحاجة إلى إخبار (Post Process Volume) باستخدام (cel shader)، مع تحديد (Post Process Volume)، انتقل إلى لوحة التفاصيل (Details panel)، وبعد ذلك، حدد موقع (Rendering Features \ Post Process Materials) وانقر فوق أيقونة (+)، وسيؤدي هذا إلى إضافة إدخال جديد إلى المصفوفة.

استخدام مواد المعالجة اللاحقة

بعد ذلك، انقر فوق القائمة المنسدلة اختر وحدد مرجع الأصول (Asset Reference).

استخدام مواد المعالجة اللاحقة

سيسمح لك ذلك باختيار مادة، انقر فوق القائمة المنسدلة (None) وحدد (PP_CelShader).

استخدام مواد المعالجة اللاحقة

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

وللقيام بذلك، قم بالتمرير لأسفل إلى (Post Process Volume Settings) (إعدادات حجم عملية النشر) وقم بتمكين Infinite Extent (Unbound).

استخدام مواد المعالجة اللاحقة

الآن بعد أن تم تطبيق (cel shader) على الصورة بأكملها، سترى هذا:

استخدام مواد المعالجة اللاحقة

“انتظر، هذا لا يبدو مثل الظل الذي أظهرته سابقاً”

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

تطبيق تظليل السليلوز قبل رسم الخرائط اللونية (Applying Cel Shading Before Tonemapping)

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

يوجد أدناه صورتان للمخزن المؤقت لإدخال عملية لاحقة، واحد قبل تعيين اللون والآخر بعد تعيين اللون:

تطبيق تظليل السليلوز قبل رسم الخرائط اللونية

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

(Tonemapping) جيد في معظم الحالات، ومع ذلك، نظراً لأنك تستخدم المخزن المؤقت بعد إدخال العملية في عملية حسابية، فأنت بحاجة إلى قيمه الأصلية.

افتح (PP_CelShader) وتأكد من عدم تحديد أي شيء، وبعد ذلك، انتقل إلى لوحة التفاصيل (Details panel) وحدد موقع قسم مادة ما بعد العملية (Post Process Material)، وقم بضبط الموقع القابل للمزج (Blendable Location) على ما قبل التخطيط النغمي (Before Tonemapping).

تطبيق تظليل السليلوز قبل رسم الخرائط اللونية

انقر فوق تطبيق (Apply) ثم ارجع إلى المحرر الرئيسي، تبدو الألوان أفضل بكثير الآن.

تطبيق تظليل السليلوز قبل رسم الخرائط اللونية

في القسم التالي، ستتعلم كيفية تطبيق تظليل السليلوز (cel shading) فقط على كائنات معينة.

عزل تظليل السليلوز (Isolating the Cel Shader)

لعزل تأثيرات ما بعد العملية، تحتاج إلى استخدام ميزة تسمى عمق مخصص (Custom Depth)، مثل إدخال ما بعد العملية (Post Process Input) واللون المنتشر (Diffuse Color)، يعد هذا مخزناً مؤقتاً يمكنك استخدامه في مواد المعالجة اللاحقة.

قبل أن تتعرف على المقصود بالعمق المخصص (Custom Depth)، يجب أن تعرف ما هو المخزن المؤقت لعمق المشهد، ويخزن (Scene Depth) مدى بعد كل بكسل عن مستوى الكاميرا، وهنا تصور لعمق المشهد:

عزل تظليل السليلوز

يخزن (Custom Depth) نفس المعلومات ولكن للشبكات التي تحددها فقط، وفيما يلي تصوُّر لها مع عرض الفايكنج على عمق مخصص:

عزل تظليل السليلوز

من خلال مقارنة (Scene Depth) مع (Custom Depth)، يمكنك عزل التأثيرات، وإذا كان (Scene Depth) أقل من (Custom Depth)، فاستخدم الصورة العادية، وإذا كان (Scene Depth) أكبر من (Custom Depth)، فاستخدم المنطقة المظللة سليلوزياً (cel shaded image).

تتمثل الخطوة الأولى في تحويل الفايكنج إلى عمق مخصص (Custom Depth).

استخدام العمق المخصص (Using Custom Depth)

اذهب إلى (World Outliner) واختر (SK_Viking)، وبعد ذلك، انتقل إلى لوحة التفاصيل (Details panel) وحدد موقع قسم التقديم (Rendering)، وبعد ذلك، قم بتمكين (Render Custom Depth Pass).

استخدام العمق المخصص

بعد ذلك، تحتاج إلى إجراء مقارنة العمق، افتح (PP_CelShader) وقم بإنشاء الإعداد التالي:

استخدام العمق المخصص

ملاحظة: عُقد القناع (R) هي أقنعة مكونة، وتسمح لك هذه بتحويل البيانات متعددة القنوات إلى أحجام، وسبب احتياجك لإخفاء (Scene Depth) و(Custom Depth) هو أن عقدة (If) لا تقبل إلا الحجم القياسي للمدخلات (A) و(B).

بعد ذلك، قم بتوصيل خرج شبكة تظليل السليلوز (cel shading) بـ (A> B)، وأخيراً قم بتوصيل إخراج إذا كنت قد تحولت للتو إلى (Emissive Color).

استخدام العمق المخصص

الآن، فقط الشبكات التي تم عرضها إلى (Custom Depth) سيكون لها تظليل سليلوز (cel shading).

انقر فوق تطبيق (Apply) ثم ارجع إلى المحرر الرئيسي، وسترى أن الفايكنج فقط لديه تظليل السليلوز (cel shading) الآن.

استخدام العمق المخصص

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

ما هو جدول البحث (Lookup Table)؟

عندما كنت صغيراً، تعلمت ما هو الضرب، ومع ذلك، قد لا يتمكن عقل شاب من إجراء هذه الحسابات، وبدلاً من الحساب، ربما تكون قد استخدمت جدول الضرب “للبحث” عن الإجابات.

جدول البحث

هذا هو أساساً ما يعنيه (LUT)، إنها مجموعة من القيم (عادة ما تكون محسوبة مسبقاً) والتي يمكنك الوصول إليها باستخدام المدخلات، في حالة جدول الضرب، المدخلات هي المضاعف والمضرب.

في سياق تظليل السليلوز (cel shader) هذا، فإن (LUT) عبارة عن نسيج به نوع من التدرج اللوني، وفيما يلي أربعة أمثلة لما يمكن أن يبدو عليه جدول البحث المتقدم:

جدول البحث

حالياً، الطريقة التي تحسب بها لون الظل هي بضرب لون الانتشار في 0.5، وبدلاً من الضرب في 0.5 ثابت، ستستخدم قيمة من (LUT)، ومن خلال القيام بذلك، يمكنك التحكم في عدد النطاقات وانتقالاتها، ويمكنك الحصول على فكرة عن كيفية ظهور التظليل من خلال مظهر (LUT).

قبل استخدام جدول البحث (LUT)، تحتاج إلى تغيير بعض إعدادات النسيج الخاصة به.

تغيير إعدادات جدول البحث (Changing LUT Settings)

انتقل إلى مجلد (Textures) وافتح (T_Lut_01)، وهذا ما يبدو عليه جدول البحث:

تغيير إعدادات جدول البحث

الإعداد الأول الذي تحتاج إلى تغييره هو (sRGB)، حيث أنه عند التجسيد، سيقوم (Unreal) بتحويل أي مواد مع تمكين (sRGB) إلى لون خطي، وفي الأساس، هذا يجعل من السهل على (Unreal) إجراء حسابات التقديم.

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

وعلى هذا النحو، يجب أن يفترض (Unreal) أن قيمها صحيحة بالفعل، ومن خلال تعطيل (sRGB)، لن يقوم (Unreal) بإجراء التحويل إلى اللون الخطي.

وللقيام بذلك، قم بإلغاء تحديد خانة اختيار (sRGB)، ويمكنك العثور على هذا الإعداد ضمن قسم (Texture).

تغيير إعدادات جدول البحث

الإعداد التالي الذي تحتاج إلى تغييره هو كيفية تجانب الملمس، ونظراً لأنك لا تعرض هذا النسيج، فليست هناك حاجة إلى تجانبه.

إلا أن إن ترك التجانب ممكّناً سيؤدي إلى حدوث مشكلات عند أخذ عينات من الحواف، على سبيل المثال، إذا كنت ستختبر بكسل من الحافة اليسرى، فسيحاول المزج مع الحافة اليمنى بسبب التجانب.

لتعطيل التجانب، قم بتغيير طريقة تجانب المحور (X) إلى (Clamp)، وافعل الشيء نفسه بالنسبة لطريقة تجانب المحور (Y).

تغيير إعدادات جدول البحث

هذا كل ما يتعلق بالإعدادات، أنت الآن بحاجة إلى استخدام جدول البحث في مادة المعالجة اللاحقة.

استخدام جدول البحث (Using LUTs)

أغلق (T_Lut_01) وافتح (PP_CelShader)، أولاً، احذف العقد المميزة (highlighted):

استخدام جدول البحث

بعد ذلك، قم بإنشاء نموذج نسيج (Texture Sample) وقم بتغيير تركيبته إلى (T_Lut_01)، وسينشئ جدول البحث هذا ثلاثة نطاقات مع انتقال ناعم.

استخدام جدول البحث

إذا كنت تتذكر، فإن جداول البحث (LUTs) تأخذ المدخلات لتحديد القيمة المراد إخراجها، وفي هذه الحالة، ستستخدم المخزن المؤقت للإضاءة (lighting buffer) كمدخل.

للقيام بذلك، قم بتوصيل المشبك (Clamp) بالأشعة فوق البنفسجية (UVs) لعينة النسيج (Texture Sample).

استخدام جدول البحث

يعمل هذا نظراً لأن إحداثيات مخزن الإضاءة والنسيج تقع في النطاق من 0 إلى 1، وعلى سبيل المثال، إذا كانت قيمة البكسل من المخزن المؤقت للإضاءة 0.5، فسيخرج LUT قيمة البكسل من منتصف النسيج.

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

استخدام جدول البحث

سبب الإلحاق هو تحويل إخراج نموذج النسيج إلى متجه رباعي القنوات، وتحتاج إلى القيام بذلك لأنه لا يمكنك ضرب متجه ثلاثي القنوات في متجه رباعي القنوات (SceneTexture).

أخيراً، قم بتوصيل كل شيء على هذا النحو:

استخدام جدول البحث

الآن، بدلاً من ضرب اللون المنتشر (diffuse color) بثابت (constant)، فإنك تضرب في قيمة من جدول البحث.

ويتحكم هذا في عدد النطاقات الموجودة وانتقالاتها (اعتماداً على جدول البحث)، ويحدد المخزن المؤقت للإضاءة (lighting buffer) القيمة التي سينتجها جدول البحث (LUT).

انقر فوق تطبيق (Apply) ثم أغلق (PP_CelShader)، وسيحتوي التظليل الآن على ثلاثة نطاقات مع انتقال أكثر ليونة بين المرابط.

استخدام جدول البحث

فيما يلي مقارنة لما ستبدو عليه جداول البحث البديلة، ويتم أيضاً تضمين جداول البحث المحلية هذه في المشروع.

استخدام جدول البحث

 

المصدر
هنا

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني.