مرحبًا بك في لغة التظليل المفتوحة!
لغة التظليل المفتوحة (OSL) هي لغة صغيرة ولكنها غنية للتظليل القابل للبرمجة في العارضين المتقدمين والتطبيقات الأخرى، وهي مثالية لوصف المواد والأضواء والإزاحة وتوليد الأنماط.
تم تطوير OSL في الأصل بواسطة شركة Sony Pictures Imageworks لاستخدامه في جهاز العرض الداخلي الخاص بها والمستخدم للرسوم المتحركة للأفلام الطويلة والمؤثرات المرئية، وتم إصداره كمصدر مفتوح بحيث يمكن استخدامه بواسطة المؤثرات المرئية واستوديوهات الرسوم المتحركة الأخرى وبائعي برامج العرض. وهي الآن لغة التظليل القياسية الفعلية للمؤثرات البصرية والميزات المتحركة، المستخدمة في جميع أنحاء الصناعة في العديد من العارضين التجاريين والاستوديوهات الخاصة. ولهذا السبب، حصل العمل على OSL على جائزة الأوسكار للإنجاز الفني في عام 2017.
OSL قوي ومثبت من حيث الإنتاج، وقد تم استخدامه في أفلام متنوعة مثل "The Amazing Spider-Man"، و"Hotel Transylvania"، و"Edge of Tomorrow"، و"Ant Man"، و"Finding Dory"، وغيرها الكثير. يتوفر دعم OSL في معظم برامج العرض الرائدة المستخدمة في أعمال المؤثرات البصرية والرسوم المتحركة المتطورة. للحصول على القائمة الكاملة للأفلام والمنتجات، راجع الفيلموغرافيا.
يتم توزيع كود OSL بموجب ترخيص "New/3-clause BSD"، والوثائق بموجب ترخيص Creative Commons Attribution 4.0 International License. باختصار، لك الحرية في استخدام OSL في تطبيقاتك الخاصة، سواء كانت مجانية أو تجارية، مفتوحة أو مملوكة، بالإضافة إلى تعديل كود OSL ووثائقه حسب رغبتك، بشرط أن تحتفظ بإشعارات حقوق الطبع والنشر الأصلية كما هو موضح في الترخيص.
يحتوي OSL على بناء جملة مشابه لـ C، بالإضافة إلى لغات التظليل الأخرى. ومع ذلك، فهو مصمم خصيصًا لخوارزميات العرض المتقدمة ويحتوي على ميزات مثل إغلاق الإشعاع وBSDF وتتبع الشعاع المؤجل كمفاهيم من الدرجة الأولى.
تتميز لغة OSL بالعديد من الخصائص الفريدة التي لا توجد في لغات التظليل الأخرى (وبالتأكيد ليست كلها معًا). فيما يلي بعض الأشياء التي ستجدها مختلفة في OSL مقارنة باللغات الأخرى:
تقوم تظليلات السطح والحجم بحساب عمليات إغلاق الإشراق، وليس الألوان النهائية.
تقوم تظليلات السطح والحجم الخاصة بـ OSL بحساب وصف رمزي واضح، يسمى "الإغلاق"، للطريقة التي ينثر بها السطح أو الحجم الضوء، في وحدات الإشعاع. يمكن تقييم عمليات إغلاق الإشراق هذه في اتجاهات معينة، أو أخذ عينات منها للعثور على اتجاهات مهمة، أو حفظها للتقييم وإعادة التقييم لاحقًا. يعد هذا الأسلوب الجديد مثاليًا للعارض الفعلي الذي يدعم تتبع الشعاع والإضاءة العالمية.
في المقابل، عادةً ما تحسب لغات التظليل الأخرى لون السطح فقط كما هو مرئي من اتجاه معين. هذه التظليلات القديمة عبارة عن "مربعات سوداء" لا يستطيع العارض فعل الكثير بها ولكن ينفذها للعثور على هذه المعلومة (على سبيل المثال، لا توجد طريقة فعالة لاكتشاف الاتجاهات المهمة لأخذ عينات منها). علاوة على ذلك، غالبًا ما تكون الوحدات المادية للأضواء والأسطح غير محددة، مما يجعل من الصعب جدًا التأكد من أن التظليل يتصرف بطريقة صحيحة ماديًا.
لا تلتف تظليلات السطح والحجم فوق الأضواء ولا تطلق الأشعة.
لا توجد "حلقات ضوئية" أو أشعة إضاءة متتبعة بشكل واضح في تظليل سطح OSL. بدلاً من ذلك، تقوم تظليل السطح بحساب إغلاق الإشراق الذي يصف كيفية تشتيت السطح للضوء، ويقوم جزء من العارض يسمى "المتكامل" بتقييم عمليات الإغلاق لمجموعة معينة من مصادر الضوء ويحدد الاتجاهات التي يجب تتبع الأشعة فيها. التأثيرات التي تتطلب عادةً تتبعًا صريحًا للأشعة، مثل الانعكاس والانكسار، هي ببساطة جزء من إغلاق الإشعاع وتبدو مثل أي BSDF آخر.
تشمل مزايا هذا النهج إمكانية تجميع التكامل وأخذ العينات أو إعادة ترتيبها لزيادة تماسك الشعاع؛ يمكن تخصيص "ميزانية الأشعة" لأخذ عينات من قوة BSDF على النحو الأمثل؛ يمكن استخدام عمليات الإغلاق لتتبع الأشعة ثنائي الاتجاه أو النقل الخفيف في متروبوليس؛ ويمكن إعادة تقييم عمليات الإغلاق بسرعة باستخدام إضاءة جديدة دون الحاجة إلى إعادة تشغيل التظليل.
تظليل السطح والضوء هما نفس الشيء.
لا يحتوي OSL على نوع منفصل من التظليل لمصادر الضوء. الأضواء هي ببساطة أسطح انبعاثية، وجميع الأضواء عبارة عن أضواء منطقة.
الشفافية هي مجرد نوع آخر من الإضاءة.
لا تحتاج إلى تعيين متغيرات الشفافية/التعتيم بشكل صريح في التظليل. الشفافية هي مجرد طريقة أخرى لتفاعل الضوء مع السطح، ويتم تضمينها في إغلاق الإشعاع الرئيسي المحسوب بواسطة تظليل السطح.
يمكن تحديد مخرجات العارض (AOV) باستخدام "تعبيرات مسار الضوء".
في بعض الأحيان يكون من المرغوب فيه إخراج صور تحتوي على مكونات إضاءة فردية مثل الأضواء المرآوية، والمنتشرة، والانعكاسية، والأضواء الفردية، وما إلى ذلك. وفي لغات أخرى، يتم تحقيق ذلك عادةً عن طريق إضافة عدد كبير من "متغيرات الإخراج" إلى التظليل الذي يجمع هذه الكميات الفردية.
لا يلزم أن تكون تظليلات OSL مزدحمة بأي تعليمات برمجية أو متغيرات إخراج لإنجاز ذلك. بدلاً من ذلك، هناك تدوين يعتمد على التعبير العادي لوصف مسارات الضوء التي يجب أن تساهم في أي مخرجات. يتم كل ذلك من جانب العارض (على الرغم من دعمه من خلال تطبيق OSL). إذا كنت ترغب في الحصول على مخرجات جديدة، ليست هناك حاجة لتعديل التظليل على الإطلاق؛ ما عليك سوى إخبار العارض بتعبير مسار الضوء الجديد.
يتم تنظيم التظليل في شبكات.
تظليلات OSL ليست متجانسة، ولكن يمكن تنظيمها في شبكات من التظليل (تسمى أحيانًا مجموعة تظليل، أو رسم بياني، أو DAG)، مع توصيل المخرجات المسماة لبعض العقد بمدخلات مسماة للعقد الأخرى داخل الشبكة. يمكن إجراء هذه الاتصالات ديناميكيًا في وقت العرض، ولا تؤثر على تجميع عقد التظليل الفردية. علاوة على ذلك، يتم تقييم العقد الفردية بتكاسل، فقط عندما يتم "سحب" مخرجاتها من العقد اللاحقة التي تعتمد عليها (قد يظل مؤلفو التظليل غير مدركين لهذه التفاصيل، ويكتبون التظليل كما لو تم تقييم كل شيء بشكل طبيعي).
مشتقات عشوائية بدون شبكات أو نقاط تظليل إضافية.
في OSL، يمكنك أخذ مشتقات أي كمية محسوبة في التظليل، واستخدام كميات عشوائية كإحداثيات نسيج وتوقع التصفية الصحيحة. وهذا لا يتطلب أن يتم ترتيب النقاط المظللة في شبكة مستطيلة، أو أن يكون لها أي اتصال معين، أو أن تكون أي "نقاط إضافية" مظللة. وذلك لأن المشتقات لا يتم حسابها بالفروق المحدودة مع النقاط المجاورة، بل عن طريق "التمايز التلقائي"، أي حساب التفاضلات الجزئية للمتغيرات التي تؤدي إلى المشتقات، دون أي تدخل يتطلبه كاتب التظليل.
يتم تحسين OSL بقوة في وقت العرض
يستخدم OSL إطار عمل برنامج التحويل البرمجي LLVM لترجمة شبكات التظليل إلى رمز الجهاز بسرعة (في الوقت المناسب، أو "JIT")، وفي هذه العملية يعمل بشكل كبير على تحسين التظليل والشبكات مع المعرفة الكاملة لمعلمات التظليل وقيم وقت التشغيل الأخرى التي لا يمكن كانت معروفة عندما تم تجميع التظليل من كود المصدر. ونتيجة لذلك، نرى أن شبكات تظليل OSL الخاصة بنا تنفذ أسرع بنسبة 25% من التظليل المكافئ المصنوع يدويًا في لغة C! (هذه هي الطريقة التي عملت بها أدوات التظليل القديمة في العارض الخاص بنا.)
يتكون توزيع OSL مفتوح المصدر من المكونات التالية:
oslc، وهو مترجم مستقل يقوم بترجمة كود مصدر OSL إلى كود وسيط يشبه التجميع (في شكل ملفات .oso).
liboslc، وهي مكتبة تنفذ فئة OSLCompiler، والتي تحتوي على أحشاء مترجم تظليل، في حالة احتياج أي شخص إلى تضمينه في تطبيقات أخرى ولا يرغب في أن يكون المترجم ملفًا قابلاً للتنفيذ منفصلاً.
liboslquery، مكتبة تطبق فئة OSLQuery، والتي تسمح للتطبيقات بالاستعلام عن معلومات حول التظليل المترجم، بما في ذلك قائمة كاملة بمعلماتها وأنواعها وأي بيانات وصفية مرتبطة بها.
oslinfo، وهو برنامج سطر أوامر يستخدم liboslquery لطباعة جميع المعلومات ذات الصلة حول التظليل ومعلماته إلى وحدة التحكم.
liboslexec، مكتبة تطبق فئة ShadingSystem، والتي تسمح بتنفيذ التظليل المترجم داخل التطبيق. حاليًا، يستخدم LLVM لـ JIT لتجميع كود البايت كود للتظليل لتعليمات x86.
testshade، وهو برنامج يتيح لك تنفيذ تظليل (أو شبكة تظليل متصلة) على مجموعة مستطيلة من النقاط، وحفظ أي من مخرجاتها كصور. يسمح هذا بالتحقق من التظليل (ونظام التظليل) دون الحاجة إلى دمجه في عارض يعمل بكامل طاقته، وهو الأساس لمعظم عمليات التحقق الخاصة بنا. إلى جانب testrender، يعد testshade مثالًا جيدًا لكيفية استدعاء مكتبات OSL.
testrender، وهو عارض صغير لتتبع الشعاع يستخدم OSL للتظليل. الميزات ضئيلة للغاية (يُسمح فقط بالمجالات في هذا الوقت) ولم يكن هناك اهتمام بالأداء، ولكنه يوضح كيف يمكن دمج مكتبات OSL في عارض عامل، وما هي الواجهات التي يحتاج العارض إلى توفيرها، وكيف يمكن لـ BSDFs/ ينبغي تقييم عمليات إغلاق الإشعاع ودمجها (بما في ذلك أخذ العينات ذات الأهمية المتعددة).
عدد قليل من تظليل العينة.
التوثيق - يتكون في هذه المرحلة من مواصفات لغة OSL (مفيدة لكتاب التظليل)، ولكن في المستقبل سيكون هناك وثائق مفصلة حول كيفية دمج مكتبات OSL في العارضين.
تحتوي هذه القائمة فقط على الأفلام أو المنتجات التي تم ذكر استخدام OSL لها أو يمكن استنتاجها من مصادر عامة، أو التي قيل لنا أنه من المناسب إدراجها هنا. إذا كان مشروع يستخدم OSL مفقودًا وهذا ليس سرًا، فما عليك سوى إرسال بريد إلكتروني إلى قائد مشروع OSL أو إرسال PR مع التعديلات على هذا الملف.
(بالترتيب التقريبي لإضافة دعم OSL)
(هنا نفكر في أن مصطلح "العمل المهم" يعني فيلمًا روائيًا تم إصداره بطريقة مسرحية أو على منصة بث رئيسية، أو مسلسلات تلفزيونية/بث مباشر تتميز بشكل كبير بمؤثرات بصرية أو رسوم متحركة، أو أفلام قصيرة فازت أو تم ترشيحها لجوائز كبرى.)
الرجاء قراءة ملف INSTALL.md للحصول على إرشادات مفصلة حول كيفية إنشاء OSL وتثبيته.
يمكن العثور على مواصفات لغة OSL على src/doc/osl-languagespec.pdf (في التوزيع المصدر) أو في ملف share/doc/OSL/osl-languagespec.pdf الخاص بالتوزيع الثنائي المثبت.
وثائق OSL التجريبية على ReadTheDocs ستكون هذه هي الوثائق المستقبلية. من المحتمل أن يكون كاملاً مثل ملف PDF، ولكنه يحتاج إلى بعض التدقيق اللغوي، لذلك لا يزال ملف PDF يعتبر المصدر الرسمي في الوقت الحالي. ولكن في وقت قريب، سيتم إهمال مواصفات PDF القديمة لصالح هذه الوثائق عبر الإنترنت.
هناك أيضا نسخة PDF.
بالنسبة لأولئك المهتمين بتعلم برمجة التظليل في OSL، هناك دورة OSL Shaders for RenderMan لمنتدى Siggraph 2022 للمعلمين، والتي تستخدم RenderMan في الأمثلة والمواد التكميلية، ولكنها تتعلق في المقام الأول بكتابة التظليل في OSL.
من الأفضل طرح الأسئلة البسيطة "كيف يمكنني..." أو "أواجه مشكلة" أو "هل هذا خطأ" في قائمة بريد مطوري osl-dev. هذا هو المكان الذي سيراه معظم الأشخاص ومن المحتمل أن يتمكنوا من الإجابة على سؤالك بسرعة (أكثر من "مشكلة" GH).
يجب الإبلاغ عن الأخطاء ومشكلات البناء ونقاط الضعف المكتشفة التي تكون متأكدًا نسبيًا من أنها مشكلة مشروعة في التعليمات البرمجية، والتي يمكنك تقديم تعليمات واضحة حول كيفية إعادة إنتاجها، كمشكلات.
إذا كنت تعتقد أنك عثرت على ثغرة أمنية محتملة في OSL، فيرجى الإبلاغ عنها بشكل سري عن طريق إرسال بريد إلكتروني إلى مسؤولي المشروع على العنوان التالي:[email protected].
إذا كانت هناك أي مشكلة أخرى تتطلب السرية التي تحول دون طرح سؤال أو مشكلة عامة، فيمكنك الاتصال بمسؤول المشروع بشكل خاص على [email protected].
ترحب OSL بمساهمات التعليمات البرمجية، وقد قام بذلك ما يقرب من 50 شخصًا على مر السنين. نحن نأخذ مساهمات التعليمات البرمجية عبر آلية طلب السحب (PR) المعتادة على GitHub. يرجى الاطلاع على المساهمة للحصول على تعليمات مفصلة.
صفحة OSL جيثب
اقرأ أو اشترك في قائمة بريد تطوير OSL
أحدث ملف PDF لمواصفات لغة OSL
الصفحة الرئيسية لـOSL
تم توثيق قيادة المشروع الحالية في ملف الحوكمة.
ساهم العديد من الأشخاص في الميزات وإصلاحات الأخطاء والتغييرات الأخرى في OSL على مر السنين: ستيف أجلاند، شين أمبلر، مارتين بيرجر، فارتشاد بيدجوليراد، نيكولاس بيشوب، كيرتس بلاك، راسموس بونيدال، سولومون بولس، ستيفان بروينز، ستيفان بوتنر، ماتيوس جي. تشاجداس، كلارك تشين، مهدي شينون، أليخاندرو كونتي، داميان كورتوا، ديتر دي بيتس، توماس دينجيس، دانييل دريسر، مادس دروشلر، بيتر إليرينجتون، لوك إمروز، لويس فينج، مارك فينال، هنري فوس، ستيفن فريدمان، سيويو فوجيتا، تيم. جرانت، لاري جريتز، نيكولاس جويارد، إيوان هار، ديريك هاس، سفين هندريك هاس، جون هادون، نيكلاس هاريسون، دانييل هيكنبرج، كريس هيلموث، أدريان هيروبيل، دان هوراك، تياجو إيزي، مات جونسون، رونان كيريل، كريس كولا، إلفيك. ليانج، ماكس لياني، آدم مارتينيز، جون ميرتيك، باستيان مونتاني، ستينا مونتيرو، باتريك مورس، أليكسيس أوبليت، إريك أوشن، ميكو أوتاما، جينو بارك، أليكسي باولو، ميتش براتر، جاي رينولدز، ديكلان راسل، بينوا رويز، باتريك شيبي، أليكس شورر، جوناثان سكرجس، سيرجي شاريبين، مارك سيسون، سانديب شوكلا، كليف شتاين، ستيفان شتاينباخ، لويا تشيمبالانجا، إستيبان توفاجلياري، بريشت فان لوميل، تيبولت فيرجني، ألكسندر فون كنورنج، إيدان ويلش، أليكس ويلز، رومان زولاك. (مدرجة أبجديًا؛ إذا أهملنا أي شخص، فهذا غير مقصود، فيرجى إخبارنا بذلك.)
لا يمكننا أن نعرب عن الامتنان الكافي للمديرين في Sony Pictures Imageworks الذين سمحوا لهذا المشروع بالمضي قدمًا، ودعموه بكل إخلاص، وسمحوا لنا بالإفراج عن المصدر، وخاصة روب بريدو، وبريان كيني، وباربرا فورد، ورينيه ليمبرجر، وإريك شتراوس، ومايك. فورد.
شكرًا جزيلًا أيضًا لفريق تظليل الكراك في SPI، وفريق lookdev TDs وCG الشجعان المستعدين لاستخدام OSL في عروضهم. لقد كانوا بمثابة خنازير غينيا، والإلهام، والاختبار، ومصدرًا رائعًا للتعليقات. وبالطبع، العديد من المهندسين والمتخصصين الفنيين والفنانين في أماكن أخرى الذين قاموا بدمج OSL في منتجاتهم وخطوط أنابيبهم، وخاصة المجازفين الأوائل في Chaos Group وDouble Negative وPixar وDNA وIsotropix وAnimal Logic. شكرًا لك، ونأمل أن نكون قد استجبنا لاحتياجاتك.
لم يتم تطوير OSL بمعزل عن غيرها. نحن مدينون للأفراد والاستوديوهات الذين قرأوا بصبر المسودات المبكرة لمواصفات اللغة وقدموا لنا تعليقات مفيدة للغاية وأفكارًا إضافية، بالإضافة إلى المساهمات والتعليقات المستمرة للمطورين والمستخدمين الحاليين في استوديوهات المؤثرات البصرية والرسوم المتحركة الأخرى.
يعتمد تنفيذ OSL على عدة حزم أخرى مفتوحة المصدر، جميعها بتراخيص متوافقة:
تتضمن وثائق OSL أجزاء من Markdeep (c) 2015-2016، وMorgan McGuire، وhighlight.js (c) 2006، وIvan Sagalaev، وكلاهما موزع بموجب تراخيص BSD.