Company of Heroes 2 Rendering Tech: the Cold Facts of Recreating
Total Page:16
File Type:pdf, Size:1020Kb
Company of Heroes 2 Rendering Tech: The cold facts of recreating the hardest winter conditions of World War 2 Daniel Barrero PhD Senior Graphics Programmer Relic Entertainment / SEGA Korea Game Conference – KGC 2013 – September 25 2013 Introduction Presentation Index • Implementing winter tech, what was tried, what worked, what didn't: – Rendering realistic and stylized snow and ice • Procedurally generated snow • Automatic snow edge fading • Ice cracking – Generating terrain snow tracks and procedural snow – Solution for fast volumetric outdoor ambient occlusion – Blizzard FX optimization • Seamlessly upgrading the COH1 rendering engine from forward to deferred COH2 Winter Tech Requirements • Procedural Snow on world objects • Fully dynamic terrain snow and persistent snow foot prints and tracks • Blizzards • Fully dynamic Ice, can break and refreeze based on player interaction • Improved lighting: • Ambient occlusion is key for snowy enviroments. • Possibility to add many dynamic lights to the world Rendering Snow on World Objects • Mostly visual representation of snow accumulation on objects, a.k.a snow caps: Rendering Snow on World Objects • Possible solutions: – Snow prepainted on the texture by artists: ✔Just an art change no change to the shaders or engine ✗Every model has to have a new set of textures with snow painted on ( lots of work for the artists) • Can't change the amount of snow dynamically in a realistic way Procedural Snow on World Objects Observation: Snow accumulates on surfaces that tend towards horizontal It means we can just filter faces whose normals are closer than a given to the up world vector and apply snow to them! ✔Simple shader change to check up for vertical normals ✔Can use normal map information to get accurate snow ✔Can control the snow amount by checking how far the pixel normal is from the vertical direction ✔Blending object material with snow material based on normal up component is fast and looks good. Procedural Snow on World Objects Observation: • Snow accumulates on surfaces that tend towards horizontal • It means we can just filter faces whose normals are closer than a given to the up world vector and apply snow to them! Snow covered faces Faces without snow False positive for snow covered faces Procedural Snow on World Objects Observation: Snow accumulates on surfaces that tend towards horizontal It means we can just filter faces whose normals are closer than a given to the up world vector and apply snow to them! More Observations: • Only the topmost surfaces should get snow • Snow accumulating on top of objects changes the visible shape of the mesh. • Snow is thinner and tends to melt towards the edges of surfaces first. Getting rid of snow inside objects Problem: Only the topmost surfaces should get snow Solution: Generate a “snow shadow” map (a.k.a. Top down map) Top Down Map Top Down Camera 1. Set a camera above the world it looking down View 2. Render a depth map of closest surfaces with it 3. In the normal render check that world height against the current pixel world height if is less then don't Snow Surface Selection Put snow on it Generating snow caps geometry Problem: Snow accumulating on top of objects changes the visible shape of the mesh. Possible solution: Extrude the geometry of the horizontal faces upward. Extruded Geometry Original top faces Extrude Direction Generating snow caps: edge fading Problem: Snow is thinner and tends to melt towards the edges of surfaces first Possible solution: If we are extruding the mesh to generate geometry, then to make snow caps thinner just push the corners of the surface back in the opposite direction of the edge surface normal. Extruded Geometry Original non biased Extrude extruded geometry Direction Original top faces Average Edge Normal Push direction Generating snow caps Problems with geometry extrusion: ✗ Need to know the edges of surfaces on a mesh and the normal on the edge. E.g. edges between wall and ceilings ✔Can be solved by offline tool easily by processing the mesh and looking for big changes in normal direction. Surface 1 Surface 2 Surface 3 Surface Edge Edge Normal Triangle Normal Generating snow caps Problems with geometry extrusion: ✗ Need to know the edges of surfaces on a mesh and the normal on the edge and pass it to the shaders. E.g. edges between wall and ceilings ✔Can be solved by offline tool easily by processing the mesh and looking for big changes in normal direction. ✗ Need to generate geometry in the GPU ✗ Performance issues on Dx10 hardware ✗How to pass the information to the shaders •There are lots of special cases Snow caps optimization: virtual extrusion Observation: From the standard game camera view just “painting” over the snow and modifying the perpixel normals it looks almost the same as with snow caps since we can't see the extruded geometry close by. Problem: Still need to fade snow towards the edge of surfaces. • Need to pass edge information to the shaders Solution: Do a “virtual extrusion”in the shaders: Vertex Shader: 1. Compute the vertex extruded point 2. Project point into the triangle surface 3. Compute distance to original vertex 4. Pass value into pixel shader Pixel Shader: 4. Use interpolated “extruded” Value as snow depth and fade Snow out. Snow caps optimization: virtual extrusion Observation: From the standard game camera view just “painting” over the snow and modifying the per pixel normal it looks almost the same as with snow caps since we can't see the extruded geometry close by. Problem: Still need to fade snow towards the edge of surfaces. • Need to pass edge information to the shaders Solution: Do a “virtual extrusion” in the shaders Improving Snow edge fading Problem: Virtual extrusion produces some odd artifacts on many corner cases due to different mesh topologies. Snow edge fading on damaged buildings Problem: In COH it is possible to damage and destroy parts of a builings in many ways. • Buildings are composed of panels • Panels get damaged by punching “holes” in the texture and revealing underlying substance • Shape of the hole is based on damaged neighbors • Geometry is added on the edges of the damaged hole Improving Snow edge fading Problem: Virtual extrusion produces some odd artifacts on many corner cases due to different mesh topologies and use cases Solution: Take advantage of the “snow shadow” map using image processing to improve snow edge fading, by finding the min/max Actual used top down map Use the two channels to Top Down Map Determine edge fading. (world height) Add noise to break the edge Apply min height Filter (erode) Red Channel Apply top height Filter (dilate) Green Final snow Channel Improving Snow edge fading Problem: Virtual extrusion produces some odd artifacts on many corner cases due to different mesh topologies and use cases Solution: Take advantage of the “snow shadow” map using image processing to improve snow edge fading, by finding the min/max Sample of noise to break the edge Improving Snow edge fading Problem: Virtual extrusion produces some odd artifacts on many corner cases due to different mesh topologies and use cases Solution: Take advantage of the “snow shadow” map using image processing to improve snow edge fading, by finding the min/max Pros: ✔Reuses “snow shadow” which is required anyway ✔ Solves the damaged buildings problem ✔ Mesh geometry doesn't matter Cons: ✗ Needs a high resolution texture to look good ✗ Snow map costly to generate every frame After all that: final look Terrain Snow • Artist driven – Extra terrain layer – Affects terrain height Terrain Snow • Artist driven – Extra terrain layer – Affects terrain height – Snow edges procedurally distorted to reproduce snow behavior Terrain Snow • Artist driven – Extra terrain layer – Affects terrain height – Snow edges procedurally distorted to reproduce snow behavior – Use GPU tessellation in D3D11 Terrain Snow affecting Objects Problem: consistency between terrain snow and object snow Solution: Allow objects to “suck in” the terrain snow material. ✔ It allows the snow to look consistent between terrain and objects ✔ Side effect that artists can tune edge fading more on objects placed on a map by painting the snow under it ✔ Side effect that damaging terrain removes snow also removes parts of snow from objects improving the melting snow caused by damage effect. Terrain Snow affecting Objects Problem: consistency between terrain snow and object snow Solution: Allow objects to “suck in” the terrain snow material. Undamaged Terrain Snow Damaged Terrain Snow Terrain Snow Tracks Extra pass: – Render objects that moved into a texture with a top down camera view and clipped at max snow height using an additive shader Top Down Camera Track Map View Clip Plane Terrain Snow Tracks ● Extra pass: – Render objects that moved into a texture with a top down camera view and clipped at max snow height using an additive shader – Just visual, uses bump mapping in D3D10 HW and GPU tessellation on D3D11 Terrain Snow Tracks Extra pass: – Render objects that moved into a texture with a top down camera view and clipped at max snow height using an additive shader – Pros: ✔Easy way to get precise snow tracks and foot prints – Cons: ✗Requires a high texel density per terrain area to get accurate foot prints. ✗Since it persists over multiple frames it is not very SLI/Crossfire friendly. ✗Requires high frame rate to get smooth continuous vehicle tracks. Muck map - Material based on snow track depth to make the tracks stand out more and reveal mud Ice Requirements: - Fully dynamic - Can break