چی یاد بگیری تا برنامهنویس گرافیک بشی
خلاصهٔ کاملتر
نویسنده میگه چون مرتب ازش میپرسن برای اینکه بهعنوان برنامهنویس گرافیک استخدامشدنی باشی چی باید بلد باشی، تصمیم گرفته یه صفحه درست کنه که بهجای تایپِ دوباره لینکش کنه. اول یه حاشیه دربارهٔ ML میره: به نظر اون هایپِ فعلیِ ML قراره چند سال دیگه فروکش کنه، ولی خودِ ML بهعنوان یه ابزارِ برازش و بهینهسازی جاش تو جعبهابزار علوم کامپیوتر هست و یادگیریش ارزش داره.
به گفتهٔ نویسنده رندرینگ مدرن انگار دو تا شغله تو یه شغل: سمت CPU یعنی یادگیری APIهای «صریح» مدرن مثل DirectX12، Vulkan یا Metal و برنامهنویسیِ موتور برای لود کردن assetها؛ و سمت GPU یعنی ریاضیِ نورپردازی و شیدینگ، تکنیکهایی مثل سایه و ambient occlusion و افکتهای پسپردازش، بهعلاوهٔ درکِ اینکه چی رو GPU سریعه و چی کنده. اون میگه یاد گرفتنِ هر دو با هم خیلی سخته؛ اگه میخوای رو GPU تمرکز کنی، برای سمت CPU از یه چیز سادهتر مثل OpenGL، WebGL، DirectX11 یا یه موتور آماده استفاده کن.
بخشی از سمت GPU نوشتنِ یه path tracerه — همون روشی که فیلمها باهاش رندر میکنن و رندرینگ بلادرنگ سعی میکنه تقریبش بزنه؛ نویسنده کتابِ رایگانِ «Ray Tracing in One Weekend» رو نقطهٔ شروع خوبی میدونه. بخش دیگه یادگیریِ PBR (رندرینگ مبتنی بر فیزیک)ه که یه روشِ «اصولی» برای نورپردازیه: اگه به قواعدش پایبند بمونی، assetهات تو همهٔ شرایط نوری خوب به نظر میرسن. قبل از PBR باید برای هر شرایط نوری نسخهٔ جدا میساختن که کلی وقت میبرد. برای عمیقتر شدن هم مستندات Filament و کتاب PBRT رو پیشنهاد میده.
به گفتهٔ نویسنده بهتره در نهایت یه کدِ قابلارائه به کارفرما داشته باشی: یه چیزی شبیه موتور که asset لود میکنه و بهصورت بلادرنگ با نورپردازیِ PBR و چند افکت (سایه، عمق میدان، تونمپینگ و…) رندر میکنه و با DX12 یا Vulkan و C++ نوشته شده؛ و یه path tracer که یه تصویر فوتورئال تولید میکنه. امتیازِ ویژه اینه که path tracer یه مُدِ جدا از همون رندررت باشه و باهاش درستیِ رندرِ بلادرنگت رو تأیید کنی و بتونی توضیح بدی کجاها با هم فرق دارن و چرا.
دربارهٔ ریاضی، نویسنده میگه اگه این پروژهها رو انجام بدی خودت به ریاضیِ لازم برمیخوری: در حد جبر خطی (ضرب ماتریس، ضرب داخلی و خارجی)، مثلثاتِ پایه و کمی حساب — ولی نکتهٔ جالب اینه که مقدارِ ریاضیای که میتونی استفاده کنی عملاً بینهایته. از نظر الگوریتمی هم بلد بودنِ ساختارهای پایه (لیست پیوندی، هشتیبل، مرتبسازی و جستوجو) کافیه و اغلب سادهترین الگوریتم سریعترینه. زبون اصلیِ این حوزه C++ه؛ Rust سهم کوچیکی داره و WebGPU داره جدیتر میشه ولی هنوز شغل و محتوای زیادی براش نیست. برای شیدر هم HLSL از همه رایجتره.
نکات کلیدی:
- رندرینگ مدرن دو بخشه: سمت CPU (Vulkan/DX12/Metal) و سمت GPU (ریاضی نور و تکنیکهای رندر)
- یادگیری هر دو با هم سخته؛ برای تمرکز روی یکی، اون یکی رو ساده نگه دار
- ساختنِ یه path tracer و یه رندررِ PBR بهترین نمونهکار برای کارفرماست
- ریاضیِ لازم کمه (جبر خطی، مثلثات، کمی حساب) ولی سقفش بینهایته
- C++ زبون اصلیِ سمت CPU و HLSL رایجترین زبونِ شیدره