به نام خدا

advertisement
‫به نام یزدان پاک‬
‫‪ 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‬‬
‫پایان‬
Download