Gpu presentation


Published on

Graphics Programming with Unity 3D

  • Be the first to comment

  • Be the first to like this

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Gpu presentation

  1. 1. Graphics Programming with Unity3D Jonathan Moore [email_address]
  2. 2. The GPU <ul><li>Highly Parallelized </li></ul><ul><li>Performs Vector, Matrix, and Texture lookup operations at fast speeds </li></ul><ul><li>But comes with limitations </li></ul><ul><ul><li>not as flexible as the CPU </li></ul></ul><ul><ul><li>rigid levels of communication </li></ul></ul><ul><li>Limited forms of data output </li></ul><ul><ul><li>but this is changing with newer Graphics APIs </li></ul></ul><ul><ul><li>DirectCompute, OpenCL, and CUDA allow more general usage of the GPU </li></ul></ul>
  3. 3. Two main access points in Unity <ul><li>Shading </li></ul><ul><ul><li>The conversion of 3D models into 2D-space (your screen) with the graphics pipeline </li></ul></ul><ul><ul><li>Lighting, Bump Mapping, Toon Shading, etc </li></ul></ul><ul><li>Post-Processing </li></ul><ul><ul><li>performing shader operations on the image that is about to be drawn to the screen to achieve certain effects </li></ul></ul><ul><ul><li>Motion Blur, Depth of Field, SSAO, etc </li></ul></ul>
  4. 4. The Pipeline
  5. 5. A 3D Model <ul><li>Most important parts: </li></ul><ul><ul><li>A collection of points (vertices) </li></ul></ul><ul><ul><li>The triangles that are drawn on those points </li></ul></ul><ul><li>Additional information: </li></ul><ul><ul><li>Uv coordinates for Texture look-ups </li></ul></ul><ul><ul><ul><li>2 sets (can be swapped with Unity's importer) </li></ul></ul></ul><ul><ul><li>Normals </li></ul></ul><ul><ul><ul><li>Important for lighting </li></ul></ul></ul><ul><ul><li>Tangents </li></ul></ul><ul><ul><ul><li>used for bump mapping </li></ul></ul></ul>
  6. 6. The Vertex Shader <ul><li>Responsible for transforming vertex coordinates </li></ul><ul><li>Passes information to pixel shader </li></ul><ul><ul><li>normals, uvs, vertex lighting, custom information </li></ul></ul><ul><ul><li>information is interpolated between the 3 vertices of a triangle </li></ul></ul><ul><li>The vertex shader can often help obtain less accurate effects at a lower cost </li></ul><ul><ul><li>vertex lighting vs. pixel lighting </li></ul></ul>
  7. 7. The Pixel Shader <ul><li>Responsible for outputting a color for each triangle fragment </li></ul><ul><li>Largely color-focused (usually returns a half4) </li></ul><ul><ul><li>Texture Look-ups, adding bump map shading, compositing </li></ul></ul><ul><ul><li>note that the GPU utilizes a half data type </li></ul></ul><ul><li>Runs ~10x as many times as vertex shader </li></ul><ul><ul><li>that number may increase with newer shader pipelines </li></ul></ul>
  8. 8. Sample Code!
  9. 9. Types of Lighting <ul><li>Flat </li></ul><ul><ul><li>Normal is uniform for each triangle </li></ul></ul><ul><li>Vertex / Gouraud </li></ul><ul><ul><li>Lighting is calculated in vertex shader for each normal and then interpolated </li></ul></ul><ul><li>Pixel / Phong </li></ul><ul><ul><li>Lighting is computed per fragment by having the normals interpolated </li></ul></ul><ul><ul><li>most expensive </li></ul></ul>
  10. 10. Types of Lighting
  11. 11. Shaderlab <ul><li>Not shader code??? </li></ul><ul><ul><li>Not that complicated, but can tend to abstract things too much </li></ul></ul><ul><ul><li>CG code is injected into it when more control is needed </li></ul></ul><ul><li>Fairly well described in the Unity documentation </li></ul><ul><li>Also serves as wrapper for your shaders, so don't ignore it! </li></ul><ul><ul><li>Especially Colormask RGB, Cull Off, etc </li></ul></ul>
  12. 12. Multi-pass Rendering <ul><li>The other reason why you should care about Shaderlab </li></ul><ul><li>Essentially allows you to draw the model multiple times and combine the results together </li></ul><ul><li>Fairly well described in the Unity documentation </li></ul><ul><li>Unity uses this to combine lighting equations </li></ul><ul><li>Can be used for your own devices </li></ul><ul><ul><li>Transparency + Glow </li></ul></ul>
  13. 13. More Sample Code!
  14. 14. Image Effects <ul><li>Some effects can happen by changing the screen in 2D space before it gets displayed </li></ul><ul><li>Part script, part shader </li></ul><ul><ul><li>Unity has a script in Pro Standard Assets that the script can inherit from </li></ul></ul><ul><li>OnRenderImage and Graphics.Blit are the key </li></ul><ul><li>Graphics.Blit will apply the material to the image, in this case that material will have a shader set up to do the image effect </li></ul>
  15. 15. Image Effect Sample Code!
  16. 16. Image Effect “Hacks” <ul><li>Use them to do calculations outside of OnRenderImage </li></ul><ul><ul><li>I've used them to do texture combination and interpolation </li></ul></ul><ul><ul><ul><li>Remember that GPU is stupid fast </li></ul></ul></ul><ul><li>Create a buffer by rendering to a texture and then using that with a screen space effect </li></ul><ul><ul><li>Distortion particle effect </li></ul></ul><ul><ul><li>Render with replacement is a powerful Unity feature (see camera docs) </li></ul></ul>
  17. 17. More Image Effect Sample Code!
  18. 18. The Future: Unity 3.0 <ul><li>Deferred Rendering </li></ul><ul><ul><li>Huge improvement over Multi-pass </li></ul></ul><ul><ul><li>More dynamic lights per scene </li></ul></ul><ul><ul><li>Access to G-Buffer </li></ul></ul><ul><li>Shaderlab </li></ul><ul><ul><li>Supposedly being revamped to make it easier to use (according to Aras) </li></ul></ul><ul><li>Occlusion Culling </li></ul><ul><ul><li>Helps prevent hidden objects from wasting processing </li></ul></ul>
  19. 19. The Future: DX11+ OpenGL 4.0 <ul><li>Tessellation is apparently the future </li></ul><ul><ul><li>Adding geometry to meshes in real time to give them more details and better lighting </li></ul></ul><ul><ul><li>Allows for models much closer to the quality of animated movies </li></ul></ul><ul><li>New Shader Pipeline </li></ul><ul><ul><li>The future grows the number of programmable shaders from 3 to 5 </li></ul></ul><ul><ul><li>Vertex Shader -> Tesselation Shader -> Hull Shader -> Geometry Shader -> Pixel Shader </li></ul></ul>
  20. 20. Additional Resources <ul><li>NVIDIA developer zone </li></ul><ul><ul><li>The CG Tutorial </li></ul></ul><ul><ul><li>GPU Gems (legendary for a reason) </li></ul></ul><ul><li>Real Time Rendering (Akenine-Moller) </li></ul><ul><li>ShaderX books (similar to GPU Gems) </li></ul><ul><li>SIGGRAPH White Papers </li></ul><ul><li>Unite Presentations </li></ul><ul><ul><li>Several on shader tips and tricks </li></ul></ul>
  21. 21. Thats all folks! [email_address]