شیوه محاسبه Batching در یونیتی

ارتباط بین GPU و CPU

در پست قبلی گفتیم که draw call دستوری برای رسم Mesh است که توسط CPU فراخوانی و توسط GPU دریافت می شود.


درسته GPU به صورت موازی کار می کنه اما چه ارتباطی بین CPU و GPU وجود داره؟ آیا CPU باید منتظر بمونه تا GPU کار هاشو تموم کنه تا بتونه دستورات جدید رو دریافت کنه؟

خوشبختانه نه! به خاطر اینکه که چنین ارتباطی bottlenecks ایجاد می کنه (مثلاً وقتی CPU نمی تونه دستورات کافی رو سریع تحویل بده) و کار موازی را غیرممکن می کنه.


راه حل لیستیه که توش دستورات توسط CPU اضافه و توسط GPU خوانده بشه - اینطوری مستقل از یکدیگرند! به این لیست Command Buffer میگن.



نکته: draw call ربطی به تعداد vertex نداره!


نکته: draw call ربطی به اندازه تکسچر نداره!


فرمول محاسبه Batch


به ازای هر متریال 1 Batch داریم


پس حواستون باشه که موقع Export گرفتن مدل از نرم افزار مدلسازی متریال هاش کم باشه

چون تو مثال پایین 6 تا متریال داره در نتیجه 6 تا Batch حساب میشه!


تعداد Batch به تعداد تکه های Mesh هم ربط داره!

پس تا می تونید مدلی Export بگیرید که تعداد تکه های کمی داشته باشه!


توضیح SetPass Call

این Pass مربوط به Shader ، Texture و Blending هست



10 تا آبجکت با متریال های یکسان ، 10 تا Batch داره و یک Set Pass call
10 تا آبجکت با متریال های یکسان ، 10 تا Batch داره و یک Set Pass call



10 تا آبجکت با متریال های مختلف 10 تا Batch داره و 10 تا SetPass Call
10 تا آبجکت با متریال های مختلف 10 تا Batch داره و 10 تا SetPass Call



اینا با هم مساوی نیستند
اینا با هم مساوی نیستند



پس حتی اگر 10 تا آبجکت متفاوت داشته باشیم و متریالشون یکی باشه فقط یک SetPass Calls داریم
پس حتی اگر 10 تا آبجکت متفاوت داشته باشیم و متریالشون یکی باشه فقط یک SetPass Calls داریم


منبع:Batch! Let's take a look at Batching! - Unite Seoul 2016