به نام یزدان پاک Pipelineگرافیک در بازی ایمان پوالدین مقدمه و معرفی • موضوع و سبک بازی • فن آوری های مورد استفاده • اهداف پروژه •وبالگ توسعه بازی: http://www.tochalco.com/blog تاریخچه موتور • تکرار اول :ارتفاء موتور موجود • تکرار دوم :تبدیل به DirectX10/11 • تکرار سومDeferred Rendering : • دمو تصمیمات استراتژیک • نوشتن موتور از پایه • Deferred Rendering • DirectX 10/11 API نوشتن موتور؟ مزایا • طبق تحقیقات انجام شده اکثر (حدودا )%75بازیهای AAAدنیا با موتور داخلی تولید شده اند (اطالعات و مستندات این تحقیق در وبالگ پروژه موجود است) • عدم وابستگی ،توسعه آسانتر ،انعطاف پذیری معایب • زمان و هزینه باال • ریسک بسیار باال • عدم وجود تخصص و تجربه کافی ”نوشتن موتور ،اختراع دوباره چرخ نیست“ Deferred Rendering? مزایا قابلیت رندر تعداد زیادی نور دینامیک ً کاهش ترکیب شیدرها مخصوصا در نور پردازی Soft ،Motion Blur ،Depth of Field, SSAO( Post Process وجود اطالعات الزم برای پیاده سازی افکت های Gbuffer ) به علت وجودParticles دارا بودن سرعتی خطی به نسبت تعداد نورها • • • • • O = Number of Objects L = Number of Lights Forward: (O*L) Draws, example: 1000 objects + 20 lights = 20000 draw calls Deferred: (O + L) Draws, example: 1000 objects + 20 lights = 1020 draw calls با اعمال شیدرها فقط روی پیکسلهایی که دیده میشوندpixel processing صرفه جویی در زمان : استفاده می کنندdeferred اکثر موتورهای مطرح از نور پردازی CryEngine2, Rockstar RAGE (GTA4, Red dead redemption), X-Ray engine (Stalker), Metro2033, Dead Space engine, KillZone2, 3, … and the list is growing. • • • • • • ?Deferred Rendering معایب • • • • نیاز به Fill-rateباال به علت وجود چندین GBufferبزرگ ،به خصوص روی کارت های ضعیف عدم توانایی در رندر اشیاء شفاف ()Transparency مشکالت در Anti Aliasing عدم انعطاف پذیری در تنوع متریال با در نظر گرفتن مزایا و معایب ذکر شده ،در بلند مدت با پیشرفت سخت افزارهای گرافیکی و انطباق و سازگاری بهتر APIها (مانند )DirectX 10+آینده این روش روشن تر است و معایب آن قابل حل خواهند بود. DirectX 10+? مزایا Multi-Threaded Rendering )Feature Level( روی سخت افزارهای قدیمی ترfallback قابلیت • • New texture compression formats Hardware Tessellation New helpful shader instructions (SampleCmpLevel, Load, Gather, Bitwise, …) New Render target formats, UINT (Raw) Geometry Shaders (Cubemap rendering) Compute Shaders (PostProcessing, GPU computing) Cleaner and Faster API Texture Arrays • • • • • • • • ?DirectX 10+ معایب • • • عدم پشتیبانی در سیستم عامل های پایین تر از Windows Vista عدم پشتیبانی در سخت افزارهای قدیمی تر مشکل تر (حرفه ای تر) شدن برنامه نویس ی (این مورد می تواند مزیت نیز باشد) ?DirectX 10+ آینده • آمار از سایت http://store.steampowered.com/hwsurvey/ : Steam با توجه موارد ذکر شده ،در زمان اتمام پروژه سخت افزارها و سیستم عامل مورد نیاز متداول خواهند بود و سرمایه گذاری روی این APIنوعی آینده نگری است. گرافیک بازی های مدرن • تکنولوژی های متداول بازی های مدرن – Big, Dynamic, Interactive worlds – Per-Pixel lighting, Diffuse, Normal, Specular, Ambient, Illumination, Reflection, Displacement Maps – HDR Tonemapping, Bloom – Motion Blur – Depth of Field – Skeletal, Morph animation – Shadows – Effects: Decals, Particles, Water, … Shaders • • • • • دوران Fixed Pipelineمدتهاست گذشته است D3D10+فقط از شیدرها پشتیبانی می کند اکثر افکت های نامبرده شده فقط توسط شیدر قابل پیاده سازی می باشند آرتیست باید با شیدرها و ابزارهای مربوطه آشنایی داشته باشند ( ShaderFX, )Mental Mill, FXComposer, RenderMonkey Pipelineها و موتورهای گرافیکی باید تولید ،انتقال و نمایش شیدرها را به نحو مناسب پشتیبانی کنند نکات مهم در طراحی Pipeline • • • • • • • • سرعت انتقال محتوا از نرم افزارهای تولید محتوای سه بعدی (… )3dsmax, maya,به موتور بازی کوتاه و ساده بودن چرخه تکرار بین موتور و نرم افزار سه بعدی هر فردی با ابزارهای مختص خودش راحتتر است و ترجیحا مراحل باید در همان نرم افزارهای مورد استفاده انجام شود کاهش احتمال خطای انسانی با حذف مراحل میانی در فرآیند انتقال محتوا و همچنین خودکار سازی آنها (اجتناب از انجام مراحل دستی) آنچه هنرمند در ابزار طراحی خود می بیند با آنچه در موتور گرافیک ترسیم می شود یکسان باشد ()WYSIWYG قابلیت اعمال فرآیندهای بهینه سازی به صورت خودکار در هر قسمت از Pipelineفراهم باشد انعطاف پذیر باشد و تغییرات مورد نظر در Pipelineبه سادگی قابل اجرا باشد سیستم متریال یکپارچه برای انتقال متریال اجسام از نرم افزار سه بعدی به موتور گرافیک راهکار موتور توچال • سه نوع شیدر ()Forward:3dsmax ،Forward ،Deferred • • • • • • • ShaderAuthor tool Shader Repository 3dsmax Exporterبرای فرمت سه بعدی خاص موتور بازی پشتیبانی از ، COLLADAفرمت مبادله محتوا مدل همانطور که در نرم افزارهای سه بعدی دیده می شود ،در موتور نمایش داده شود WYSIWYG پیاده سازی سیستم متریال یکپارچه برای 3dsmaxو موتور گرافیک ()FX material قابلیت پردازش ،بهینه سازی محتوا و فایلهای مربوطه (تکسچرهاو )...هنگام Exportبه صورت خودکار راهکار موتور توچال راهکار موتور توچال راهکار موتور توچال راهکار موتور توچال Exporting Solutions • روش ها و فرمت های متداول (FBXو Colladaو)...x mesh مشکالت – – – – – Game /GPU Friendlyنبودن این فرمتها وجود اطالعات اضافه بسیار زیاد نیاز به پردازش قابل توجه هنگام لود یا توسط برنامه واسط کند بودن خواندن آنها مشکالت اساس ی در خواندن متریال های مبتنی بر شیدر و پشتیبانی ناقص از آنها • اکثر موتورهای مطرح فرمت خاص خود را دارند ً • برای ایجاد یک Piplelineمناسب وجود Exporterسودمند و گاها ضروری است Tochal Exporter • • • • • • • • تفاوت نحوه ذخیره سازی اطالعات صحنه در maxو موتور ()GPU Friendliness فرمت خاص طراحی شده قابل ذخیره و بارگذاری به صورت متنی xmlو باینری قابلیت تبدیل تکسچرها به فرمت ddsبا فشرده سازی های مختلف قابلیت انتخاب اطالعات مختلف ورتکس های ( POSITION, NORMAL, …)TEXCOORD, قابلیت ذخیره سازی Skinو Boneو Hierarchy ذخیره کلیه شیدرها و پارامترهای مورد استفاده قابلیت تبدیل متریال های عادی به سیستم شیدر موتور توچال تشخیص و اعالم خطاهای مهم (تکسچرهای بزرگ ،مشکالت ،Mesh, Skinعدم وجود تکسچر و)... Tochal Exporter • Artists work with common image formats like TGA, PNG, JPG, … • Texture Compression: – – – – – Diffuse (No alpha): BC1 (DXT1), 6:1 RGB Diffuse (With Alpha): BC2 (DXT3) / BC3(DXT5), 4:1 (RGBA) Normal : BC5 (ATI2N) (D3D10 hw only), 4:1 (RG) Specular: BC4 (ATI1N) (D3D10 hw only), 4:1 (R) Ambient: BC4 (ATI1N) (D3D10 hw only), 4:1 (R) Deferred Rendering - GBuffer Depth Material (Not viewable) Normals Color Deferred Rendering – Gbuffer 2 • Depth : Depth Buffer - D32 (FLOAT) – Read depth value from depth buffer (zbuffer) – Reconstruct position (view space) from depth • Normals : R16_G16 => X,Y (FLOAT) – Read Normal(x,y) – Normal.z = sqrt(1.0f – x*x – y*y) • Color: R8_G8_B8 (Albedo), A8 (Specular Intensity) • Materials: Encoded UINT32 Deferred Rendering – Materials • Material : UINT32 – – – – Bits (16…31) : Material Id Bits(9…15) : Ambient Multiplier Bits(0…8) : Reserved ! We have bitwise operations in D3D10 AmbientColor SpecularColor SpecularFallout Illumination … Mesh Materials[] (Draw phase) Gbuffer (Material) Material Id • Get Material Id • Read back from Materials[] • Maximum 4096 mtls (16bit) • Read from tbuffer (Fast!) (Lighting Phase) Deferred Rendering - Transparency • Impossible with deferred rendering • Render alpha blended objects with conventional forward rendering. • Transparency rendering is a hack afterall! – – – – Sort from back to front DepthEnable = TRUE DepthWriteEnable = FALSE Draw() • Exciting !!! Fast Order independent transparency (true transparency) possible with D3D11 + CS – http://developer.amd.com/gpu_assets/OIT%20and%20Indirect%20Illumination%20usin g%20DX11%20Linked%20Lists_forweb.ppsx – In near future: Icy caves, translucent creatures, glass houses, …. Deferred Rendering - AA • MSAA + Deferred Rendering not possible with D3d9, used edge detecting/bluring post process effects, which is lame and slow ! • Possible with D3d10 but still tricky • Better and faster with D3d10.1 – – – – Draw Gbuffer to multiple MSAA render targets Use geometry shader edge detection or centeroid sampling Mark edges In lighting phase, for each marked edge, calculate 2x/4x/8x samples. For none marked edge, calculate for 1 sample. We are still working on it ! Deferred Rendering - Lighting • Tile based deferred lighting – Andrew Lauritzen - http://visual-computing.intelresearch.net/art/publications/deferred_rendering/lauritzen_deferred _shading_siggraph_2010.pptx • • • • Divide screen in tiles Cull screen space lights with each tile Do deferred lighting Repeat for next tile Deferred Rendering - Performance • • • • • • • • • Scene ~ 350k triangles – PSSM Shadows Intel Core2 E5300 (low-end) ATI – 4850 (mid-range) 200 Lights - 1024x768 – 133fps 100 Lights – 1024x768 – 200fps 1000 Lights – 1024x768 – 31 fps 1 Light (sun) – 1024x768 – 302 fps Still room for more optimization Isn’t it NICE ?! – Throw dynamic lights everywhere. Explosions, gun fire, car head lights, city lights, etc. Shadows - PSSM • PSSM is just Cascaded shadow maps with efficient frustum spliting scheme – Split view frustum in N parts with PSSM splitting scheme – Adjust imaginary sun position on the bounding sphere of the world – Detect shadow caster/receiver objects in each split from light’s point of view – Draw shadow maps for each split (total N shadow maps) – When rendering objects, read back from proper shadow map within position range Shadows – PSSM 2 PSSM Frustum splitting scheme Reference: Fan Zhang, Haniqiu Sun, Oskari Nyman, GPU Gems 3 – Chapter 10 Fan Zhang PSSM Page : http://appsrv.cse.cuhk.edu.hk/~fzhang/pssm_project/ Shadows – PSSM 3 • PROS – Best looking shadows on big outdoor environments – Preseves shadow quality within the whole view range – Used in many big games : Red dead redemption, Assassin’s Creed, KillZone2, Battlefield2, … • CONS – Very GPU/CPU intensive (usually 3-4 big shadow map renders, and 3-4 shadow map read backs with branching, culling, etc.) Shadows – PSSM – Speed Problem • Here comes D3D10 ! • Used methods presented in GPU Gems 3 • Using D3D10 specific stuff – – – – Texture Arrays, SampleCmpLevelZero() Geometry shaders D3D10 Instancing Branching (also applicable to D3d9 sm3.0 hw) • With the help of D3D10 : Generating 4 CSM shadow maps from … 80 Objects ~ 400 Draw calls 4 Render target changes D3D9 80 Objects ~ 100 Draw calls 1 Render target change ~ 3x speed increase D3D10/10.1 Shadows – PSSM Shadows – PSSM – What else ? • Anti-Jittering: we currently do additional simple 4-tap PCF sampling (not good enough). mixing with variance shadow maps (or even MSAA shadow maps) would be nicer. • What else needs to be done ? A lot ! – – – – Stabilize jitters Better fitting of split frustums to shadow maps Peter-Panning, Shadow acne More optimization (especially on CPU side) 4-Tap PCF Peter-Panning In Development • HDR: – 64bit Float format – Histogram generation. (Median method used in HL2) – Tonemapping – Bloom • Particles : – Deferred particles (smaller buffer, less fill-rate intensive) – Soft particles In Development • Skinning/Animation: – Hardware accelerated (no actual bone limit in D3D10) – Havok Animation • Terrain: Terrain • وقت نشد این قسمت را کامل کنیم • الگوریتم رندر و LODمشابه Geo-MipMap • با الهام از روش استفاده شده در موتور )BFBC, BFBC2( FrostBite • برای تولید متریال زمین از روشهای پیشرفته Shader Splattingو ویرایشگر Node Basedمانند Terragen2و World Machineو... اما به صورت Real-timeاستفاده شده است دمو • برنامه نویس: سپهر تقدیسیان علی سیداف • گرافیست: مهام بری بهزاد حسین زاده سوال؟ اطالعات پروژه • وبالگ توسعه بازی: http://www.tochalco.com/blog • فرصت های شغلی موجود برای نیروهای برنامه نویس ،گرافیست...، (تماس از طریق ایمیل) jobs@tochalco.com پایان