كيف يعمل ألفا compositing

صورة

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

في مقالتي أريد أن أوضح أن الشفافية في الصور الرقمية هي في الواقع أكثر إثارة للاهتمام مما يبدو - في ما نعتبره أمرا مفروغا منه ، هناك عمق غير مرئي وجمال.

غموض


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


تعمل هذه النظارات على النحو التالي: فهي تفوت الكثير من اللون الأحمر ، وكمية لائقة من اللون الأزرق والأخضر القليل جدًا. يمكن كتابة رياضيات هذه النقاط في مجموعة من ثلاث معادلات. يشير الحرف R إلى نتيجة العملية ، ويوضح الحرف D النقطة التي ننظر إليها. تشير مؤشرات RGB إلى مكونات حمراء وخضراء وزرقاء:

R R = D R × 1.0
R G = D G × 0.7
R B = D B × 0.9

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

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


هذه النظارات تسمح فقط 30 ٪ من الضوء يمر بها. يمكن وصف سلوكهم بالمعادلات التالية:

R R = D R × 0.3
R G = D G × 0.3
R B = D B × 0.3

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

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

تغطية


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


تنقيط شكل متجه إلى صورة نقطية

تتمثل الطريقة الأكثر بدائية في التنقيط في التحقق من موقع عينة البكسل - داخل أو خارج شكل المتجه. في الأمثلة أدناه ، يمكنك سحب المثلث ، في عرض مكبّر ، ستكون الحركات أكثر دقة. يشير المخطط التفصيلي الأزرق إلى هندسة المتجهات الأصلية. كما ترون ، يبدو السلم عند حواف المثلث قبيحًا ويومض كثيرًا عند تحريك الشكل الهندسي:


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

يمكنك أخذ عينات هندسية متجهة عدة مرات لكل بكسل للحصول على تدرج كبير للخطوات وتقرر إغلاق بعض وحدات البكسل جزئيًا فقط. يتمثل أحد الحلول الممكنة في استخدام أربع نقاط عينات لتمثيل خمسة مستويات تغطية: 0 و 14 و 24 و 34 و 1:


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

صورة

تقسم قطعة الخط مربعًا إلى شبه منحرف ومستطيل

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


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

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


تغطية جزئية تستخدم بنشاط في تقديم النص

بوجود عتامة الكائن وتغطيته بالبكسلات الفردية ، يمكنك دمجها في قيمة واحدة.

ألفا


يُسمى منتج عتامة كائن وتغطيته بالبكسل alpha :

= ×

يحتوي الكائن ذي العتامة 60٪ ، والذي يغطي 30٪ من مساحة البكسل ، على قيمة ألفا تبلغ 18٪ في هذا البكسل. بطبيعة الحال ، عندما يكون الكائن شفافًا أو لا يغطي البيكسل تمامًا ، تكون قيمة ألفا في هذا البيكسل هي 0. بعد الضرب ، تختفي الاختلافات بين العتامة والطلاء ، وهذا يبرر بمعنى ما أن مفهومي "ألفا" و "العتامة" يتم استخدامهما كمرادفات.

غالبًا ما يتم تمثيل ألفا كقناة رابعة لصورة نقطية. وتستكمل القيم المعتادة للأحمر والأخضر والأزرق بقيمة ألفا ، والتي تشكل أربعة قيم RGBA.

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


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


من الواضح ، كلما زاد عدد وحدات البت ، كلما كان استخدام alpha 8 أفضل ، وغالبًا ما يستخدم عمق 8 بت لمطابقة دقة مكونات الألوان ، ولهذا السبب تشغل العديد من مخازن RGBA 32 بت لكل بكسل. تجدر الإشارة أيضًا إلى أنه على عكس المكونات اللونية التي يتم تشفيرها غالبًا باستخدام التحويل غير الخطي ، يتم تخزين ألفا خطيًا - القيمة المشفرة 0.5 تقابل قيمة ألفا 0.5.

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


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

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


نمط الشطرنج يظهر قطع شفافة.

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


عرض قيم RGB و A على أسطح مختلفة

كلما كان لون الرمادي أكثر إشراقًا ، زادت قيمة ألفا ، أي أن اللون الأسود النقي يتوافق مع 0٪ ألفا ، والأبيض النقي إلى 100٪ ألفا. تشير المربعات الصغيرة إلى أن مكونات RGB و A في الصورة تنقسم إلى قسمين.

المكون ألفا نفسه ليس مفيدًا بشكل خاص ، لكنه يصبح مهمًا للغاية عندما نتحدث عن التركيب.

التركيب البسيط


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


عناصر التركيب لزر إلغاء

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

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

عندما تكون قيمة مصدر ألفا 100٪ ، يكون المصدر معتم ويجب أن يغطي الوجهة بالكامل. إذا كانت قيمة alpha هي 0٪ ، فسيكون المصدر شفافًا تمامًا ولا يؤثر على الوجهة بأي طريقة. تسمح قيمة ألفا البالغة 25٪ للكائن بإصدار 25٪ من الضوء ويمر 75٪ من الضوء من الخلفية ، وهكذا:


تكوين مصدر أرجواني بقيم ألفا مختلفة إلى الوجهة الصفراء

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


ما يحدث هنا يمكن وصفه بالمعادلات الموضحة أدناه. كما كان من قبل ، يشير المؤشر إلى المكون ، أي أن S A هي قيمة alpha في المصدر ، و D G هي القيمة الخضراء في الوجهة:

R R = S R × S A + D R × (1 − S A )

R G = S G × S A + D G × (1 − S A )

R B = S B × S A + D B × (1 − S A )

معادلات المكونات الحمراء والخضراء والزرقاء لها نفس المظهر ، لذلك يمكنك ببساطة استخدام فهرس RGB ودمجها في سطر واحد:

R RGB = S RGB × S A + D RGB × (1 − S A )

علاوة على ذلك ، نظرًا لأن الوجهة مبهمة وتحجب بالفعل كل ضوء الخلفية ، فإننا نعلم أن قيمة ألفا للنتيجة هي دائمًا 1:

R A = 1

التركيب على خلفية معتمة بسيط ، لكنه محدود للغاية في القدرات. في كثير من الحالات ، مطلوب حل أكثر موثوقية.

مخازن مؤقتة


تُظهر الصورة أدناه عملية مؤلفة من خطوتين لتكوين ثلاث طبقات مختلفة ، تحمل علامات A و B و C. والرمز ⇨ سيعني "متراكب بالتركيب على":


نتيجة التركيب على مرحلتين من ثلاث طبقات

أولاً ، نقوم بتراكب B مع C عن طريق التأليف ، ثم تراكب A معهم للحصول على الصورة النهائية. في المثال التالي ، سنفعل الأشياء بطريقة مختلفة قليلاً. أولاً ، سنقوم بتوصيل الطبقتين العلويتين عن طريق التركيب ، ثم نغطي النتيجة على الوجهة الأخيرة:


نتيجة التركيب على مرحلتين لثلاث طبقات بترتيب مختلف

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

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


التركيب الجزئي للزر في الحافظة

نحن بحاجة إلى فهم كيفية استبدال تركيبة الصور الشفافة A و B مع صورة واحدة (A⇨B) لها نفس اللون والعتامة. لنبدأ بحساب قيمة ألفا في المخزن المؤقت النهائي.

الجمع بين القيم ألفا


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

افترض أن كمية معينة من الضوء تمر عبر الكائن الأول ، ثم من خلال الكائن الثاني. إذا كانت شفافية الكائن الأول 80٪ ، فسوف يمر 80٪ من ضوء الحادث. وبالمثل ، فإن كائنًا ثانيًا بنسبة 60٪ من الشفافية سيتيح 60٪ من الضوء يمر فيه ، مما يعطينا 60٪ × 80٪ = 48٪ من الضوء الأصلي. يمكنك تجربة الشفافية في المقال الأصلي ؛ لا تنس أن المتزلجون يتحكمون في الشفافية وليس عتامة الأشياء في مسار الضوء:


بطبيعة الحال ، عندما يكون الكائن الأول أو الثاني معتمًا ، لا يمر أي ضوء من خلاله ، وحتى الآخر شفاف تمامًا.

إذا كان الكائن D له شفافية D T ، وكان للكائن S شفافية S T ، فإن الشفافية العامة النهائية R T لهذين الكائنين تساوي منتجهم:

R T = D T × S T

ومع ذلك ، فإن الشفافية ليست سوى وحدة مطروحًا منها ألفا ، لذا فإن الاستبدال يعطينا ما يلي:

1 - R A = (1 - D A ) × (1 - S A )

يمكن توسيع هذا التعبير إلى:

1 - R A = 1 - D A - S A + D A × S A

وتبسيطها مثل هذا:

R A = D A + S A - D A × S A

يمكن تقليله إلى واحد من نوعين متشابهين:

R A = S A + D A × (1 - S A )

R A = D A + S A × (1 - D A )

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

مزيج اللون


لم يكن حساب ألفا أمرًا صعبًا ، لذلك دعونا نحاول فهم حسابات مكونات RGB. تحتوي الصورة المصدر على اللون S RGB ، لكن عتامة S S يفرض فقط منتج هاتين القيمتين في الاعتبار في النتيجة النهائية:

S RGB × S A

تحتوي الصورة الوجهة على لون D RGB ، فإن العتامة تجعلها تنبعث منها ضوء D RGB × D A ، ومع ذلك ، يتم حظر جزء من الضوء بسبب عتامة الصورة S ، لذلك كل تأثير الوجهة يساوي:

D RGB × D A × (1 - S A )

المساهمة الكلية للضوء من S و D تساوي مجموعها:

S RGB × S A + D RGB × D A × (1 - S A )

وبالمثل ، فإن مساهمة الطبقات المدمجة تساوي ألوانها في العتامة:

R RGB × R A

نريد أن تتطابق هاتان القيمتان:

R RGB × R A = S RGB × S A + D RGB × D A × (1 - S A )

ما يعطينا المعادلات النهائية:

R A = S A + D A × (1 - S A )

R RGB = (S RGB × S A + D RGB × D A × (1 - S A )) / R A

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

دعنا نعود إلى الشكل النهائي تقريبا من R RGB لثانية واحدة:

R RGB × R A = S RGB × S A + D RGB × D A × (1 - S A )

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

ألفا قبل المضاعفة


تذكر أننا تحدثنا عن العتامة - إذا كان الكائن غير شفاف جزئيًا ، فإن مساهمته في النتيجة ستكون أيضًا جزئية. ينفّذ مفهوم "ألفا" ("ما قبل الضرب بواسطة ألفا") هذه الفكرة. قيم مكونات RGB ، كما يوحي الاسم ، يتم ضربها مسبقًا بمكون alpha. لنبدأ مع اللون دون الضرب الأولي:

(1.00 ، 0.80 ، 0.30 ، 0.40)

الضرب الأولي بواسطة alpha يعطينا ما يلي:

(0.40 ، 0.32 ، 0.12 ، 0.40)

دعونا نلقي نظرة على عدة بكسل في وقت واحد. يوضح الشكل أدناه كيفية تخزين معلومات الألوان دون ضرب ألفا أولاً:


معلومات RGB و A في الصورة دون الضرب المسبق

لاحظ أن المساحات التي يكون فيها alpha تساوي 0 يمكن أن تحتوي على قيم RGB عشوائية ، كما يمكن رؤيتها من مواطن الخلل الخضراء والزرقاء في الصورة. في حالة الضرب الأولي بواسطة alpha ، تخزن معلومات اللون أيضًا قيم عتامة البكسل:


معلومات RGB و A في صورة مضروبة مسبقًا

أحيانًا ما تسمى ألفا قبل المضاعقة ألفا المرتبطة بها ، وألفا غير أولية تُسمى أحيانًا ألفا مستقيمة أو غير مرتبطة.

عندما يكون المكون ألفا من اللون يساوي 0 ، فإن الضرب الأولي يعيد ضبط جميع المكونات الأخرى ، بغض النظر عن قيمها:

(0.0 ، 0.0 ، 0.0 ، 0.0)

في حالة alpha preptiplied ، هناك لون واحد شفاف تمامًا ، وهذا ساحر.

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

تصفية


تُعد Gaussian blur طريقة شائعة لإنشاء خلفية مثيرة للتركيز غير مركزة أو لتقليل التردد العالي لجزء الخلفية من محتويات بعض عناصر واجهة المستخدم. كما سنرى ، فإن الضرب المسبق لـ alpha ضروري لإنشاء الضبابية الصحيحة.

يتم إنشاء الصورة التي سنقوم بتحليلها عن طريق ملء الخلفية باللون الأزرق الغامق 1٪ ، حيث يتم رسم دائرة حمراء غير شفافة. أولاً ، دعنا ننظر إلى مثال دون الضرب الأولي. لقد فصلت قنوات RGB عن قناة ألفا لفهم ما يجري. يشير السهم إلى عملية التمويه:


طمس المحتوى دون الضرب المسبق

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

عندما يتم ضرب الألوان مسبقًا بواسطة alpha ، تكون النتيجة صحيحة:




- 1% , .


, destination — , « ». , , , - , . , , , destination:


destination

, destination, — « » (nearest-neighbor interpolation), .

destination. . ( ), , . source destination, :


, . , :


, , , «» . , [ ], — .

, premultiplied alpha , :


.

, , , . , - , .


. :

R RGB ×R A = S RGB ×S A + D RGB ×D A ×(1 − S A )

premultiplied alpha, , . :

R RGB = S RGB + D RGB ×(1 − S A )

:

R A = S A + D A × (1 − S A )

, , - , , :

R = S + D × (1 − S A )

, premultiplied alpha . , . :

R = S + D × (1 − S A )

source-over, sover normal, , , . , -, .


source-over, , . . :

R = (((A⇨B)⇨C)⇨D)⇨E

R = (A⇨B)⇨(C⇨(D⇨E))

R = A⇨(B⇨(C⇨(D⇨E)))

, . , , , .

source-over, . .

-


1984 “Compositing Digital Images” . premultiplied alpha source-over, -, , . , .

Over


, . destination «», source «». , . - . . - source-over, :


R = S + D × (1 − S A )

R = S × (1 − D A ) + D

destination-over, , «» source-over — destination source , destination source. , destination-over , , .

Out


source-out destination-out source destination:


R = S × (1 − D A )

R = D × (1 − S A )

Destination-out, - destination.

In


source-in destination-in :


R = S × D A

R = D × S A

.

Atop


source-atop destination-atop , destination:


R = S × D A + D × (1 − S A )

R = S × (1 − D A ) + D × S A

Xor


( xor ) source, destination, :


R = S × (1 − D A ) + D × (1 − S A )

Source, Destination, Clear


. Source , copy , source. , destination source destination . clear :


R = S

R = D

R = 0

. clear , , . , source , , source.

-


, , . , . . , , , :


, , , - , .


-, , . Source F S destination, F D :

R = S×F S + D×F D

F S 0, 1, D A 1 − D A , F D 0, 1, S A 1 − S A . source destination , , , . :

01D A1 - D A
0واضحمصدرمصدر فيمصدر المغادرة
1غايةالمقصد أكثر
S Aالمقصد في والمقصد-فوق
1 - S Aجهة المغادرةالمصدر علىمصدر قمةXOR

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

الإضاءة المضافة


في مقالتهم ، قدم Porter and Duff عاملًا آخر تساوي فيه كل من F S و F D 1. وهي معروفة بالأسماء plus، lighterو plus-lighter:

R = S + D

تضيف هذه العملية أساسًا إضاءة المصدر إلى الوجهة:


, plus

, (cyan). — , , .

, . .

, premultiplied alpha source-over . :

R = S + D × (1 − S A )

source , RGB- plus :


, source-over

, — . , , , - , , . , , plus .

. « » , -.


, :




50%, , :




, . , , , :




, .


. , , . , :




, , :




-, , . , , , , . , . . , :


,

, , . in/out, , .

8- - 256 , 2 16 . , , .

, . , , .


, , , . , ; :


,

. :


,

, . , , . , 50% sRGB , 50%, :




sRGB source destination , . :




, . , , . 50% 73.5% sRGB.

, premultiplied alpha. , .. . , .

Premultiplied Alpha


, , premultiplied alpha « » . — , . 8- 150, 20%.

round(150 × 0.2) = 30

151, :

round(151 × 0.2) = 30

, . , 148, 149, 150, 151 152 30, :


20% 8-

, , . 256 4 ( 4,3 ) 8- RGBA 25.2%; , 2 32- .

, , . , , , . .

, . , , . , , 8- — النقطة العائمة .

قراءة إضافية


- Pixar . “Alpha and the History of Digital Compositing” “alpha”, , .

“Interpreting Alpha” . , .

premultiplied alpha “GPUs prefer premultiplication” . , , 3D-, .


-, , -, , .

, , RGB-, . 2D-.

, , , , .

Source: https://habr.com/ru/post/ar468067/


All Articles