Differentiable Rendering
يحسب التصيير القابل للاشتقاق كيف تتغير كل بكسل مُصيّرة بتغير شكل المشهد ومواده والكاميرا، ما يتيح مواءمة المشاهد ثلاثية الأبعاد مع الصور.
التصيير القابل للاشتقاق هو عملية التصيير، أي تحويل وصف هندسة مشهد ثلاثي الأبعاد ومواده وإضاءته وكاميرته إلى صورة، بطريقة تتيح حساب مشتقة كل بكسل في المخرجات بالنسبة إلى معلمات المشهد. ويمكن بعد ذلك تقليل دالة خسارة تقارن صورة مصيّرة بصورة فوتوغرافية باستخدام الانحدار المتدرج، مع تمرير الانتشار العكسي عبر المصيّر إلى المشهد ثلاثي الأبعاد. وهذا ما يجعله محرّك التصيير العكسي، وهي مهمة الرؤية الحاسوبية التي تستعيد مشهدًا من صوره، وطرق التصيير العصبي مثل حقول الإشعاع العصبي (NeRF) وتنقيط غاوسي، التي تدرّب نماذج المشاهد عبر تصييرها.
لماذا يحتاج التصيير إلى معالجة خاصة#
لا يكون مُصيّر الراستر القياسي قابلًا للاشتقاق في المواضع المهمة. فتغطية بكسل بمثلث هي دالة درجية لمواضع الرؤوس، لذا لا يؤدي تحريك رأس قليلًا إلى تغيير أي بكسل حتى تتجاوز حافةٌ مركزَ بكسل، ويكون التدرّج بالنسبة إلى الهندسة صفرًا في كل المواضع تقريبًا؛ كما يضيف الحجب مزيدًا من حالات عدم الاستمرارية حيث يحجب سطحٌ سطحًا آخر. وتعالج المصيّرات القابلة للاشتقاق هذه الحواف بطرق مختلفة:
- تدرجات تقريبية: يُبقي OpenDR (2014) وNeural 3D Mesh Renderer (2018) على مُصيّر راستر قياسي في التمرير الأمامي، ويقرّبان التدرجات في التمرير الخلفي.
- التصيير الناعم بالراستر: يستبدل SoftRas (2019) التغطية الحادة لكل بكسل باحتمال يتناقص بسلاسة كلما ابتعد عن حافة المثلث، ويمزج الأوجه المتداخلة، بحيث ينقل كل بكسل قرب الحافة تدرّجًا إلى الهندسة.
- التصيير القابل للاشتقاق القائم على الفيزياء: تأخذ متتبعات الأشعة مثل redner (2018) وMitsuba 3 (2022) عينات من حواف الصور الظلية أو تعيد معلمة تكامل التصيير، فتوفّر تدرجات للظلال والانعكاسات والإضاءة غير المباشرة.
- تصيير الحجم والتنقيط: يكون تركيب ألفا للكثافات على امتداد كل شعاع في NeRF، وكذلك الغاوسيات ثلاثية الأبعاد المصيّرة بالراستر في التنقيط الغاوسي، دوالًا ناعمة لمعاملاتها بطبيعتها.
يوضح مصيّر راستر ناعم لقرص واحد الفكرة في PyTorch: فالتغطية هي دالة sigmoid للمسافة الموقّعة إلى حافة القرص، ولذلك تصل التدرجات إلى مركزه ونصف قطره من كل بكسل قريب من الحد.
import torch
# Pixel coordinates of a 64x64 image
ys, xs = torch.meshgrid(torch.arange(64.0), torch.arange(64.0), indexing="ij")
def render(center, radius):
"""Soft-rasterize a disk: pixel coverage is a sigmoid of the signed distance to its edge."""
distance = torch.sqrt((xs - center[0]) ** 2 + (ys - center[1]) ** 2 + 1e-6)
return torch.sigmoid(radius - distance)
# Target image: a disk at (40, 24) with radius 12
target = render(torch.tensor([40.0, 24.0]), torch.tensor(12.0))
# Recover the scene from a wrong guess by backpropagating the pixel loss
center = torch.tensor([20.0, 40.0], requires_grad=True)
radius = torch.tensor(6.0, requires_grad=True)
optimizer = torch.optim.Adam([center, radius], lr=0.5)
for _ in range(300):
loss = ((render(center, radius) - target) ** 2).mean()
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f"center {center.detach().round(decimals=1).tolist()}, radius {radius.item():.1f}")يطبع center [40.0, 24.0], radius 12.0: بدءًا من مسافة تقارب 26 بكسل ونصف القطر نصف قيمته، يستعيد محسّن Adam القرص اعتمادًا على فروق البكسلات وحدها. أما مع التغطية الحادة، (distance < radius).float()، فلن تمرر الخسارة أي تدرّج إلى أي من المعلمتين.
تطبيقات عملية#
تقارن خسائر الصور الظلية، مثل تلك الواردة في الشيفرة، قناع جسم مصيّرًا بقناع مرصود، وبالنسبة إلى الصور الفوتوغرافية التي لا تتضمن تعليقات توضيحية، يوفّر نموذج تقسيم المثيلات مثل YOLO26 (yolo26n-seg.pt) قناعًا لكل جسم في الصورة.
- إعادة البناء ثلاثي الأبعاد: يلائم NeRF (2020) والتنقيط الغاوسي ثلاثي الأبعاد (2023) مشهدًا لعشرات الصور ذات مواضع كاميرا معروفة، ثم يصيّر التنقيط الغاوسي مشاهد جديدة في الزمن الحقيقي، بمعدل 30 إطارًا في الثانية أو أكثر بدقة 1080p.
- ملاءمة جسم الإنسان: تلائم طرق نمذجة الجسم شبكةً معلمية مثل SMPL لصورة ما، عبر مطابقة صورتها الظلية المصيّرة ومفاصلها المسقطة بقناع الشخص ونقاطه المفتاحية.
- توليد نص إلى ثلاثي الأبعاد: يحسّن DreamFusion (2022) نموذج NeRF بحيث تحرز صوره المصيّرة من وجهات نظر عشوائية درجات جيدة باستخدام نموذج انتشار لتحويل النص إلى صورة، وينشئ أجسامًا ثلاثية الأبعاد من دون أي بيانات تدريب ثلاثية الأبعاد.










