Some useful online math utility:
  • Graph Toy - iq's simple on-line graph visualizer
Here are the collection of links/slides from GDC 2014, GTC 2014 and Build 2014. I will update this page as I go:

Game Developer Conference (GDC) 2014:
  • Infamous: Second Son Engine Post Mortem - really interesting talk, recurring theme for next-gen rendering, i.e. physically based shading, screen-space reflection (SSR), compute shader.

    Notes on their rendering:
    • Physically based HDR shading on 1080p with SMAA T2x! This produces really nice and sharp image!
    • Tiled Deferred+ Renderer - build light list per-tile that can be used for both deferred and forward rendering (forward: pre-integrated skin, anisotropic cloth/hair, glass, shadows(?))
    • Lighting:
    • Shadows: 
      • Used Normal Offset Shadows to combat shadow acne
      • Filtering: PCF with varying kernel size, mostly 8x8, hair uses additional screen space marching (can they just use screen space marching?)
      • Resolved to screen?? - I don't quite get it
  • The Infamous: Second Son Particle System Architecture - 
  • The Visual Effects of Infamous: Second Son
  • Adding High-End Graphical Effects to GT Racing 2 on Android x86 (Adrian Voinea, Steven Hughes) - talks about how they add Bloom, DoF, LightShaft and Heat Haze. Pretty standard stuff, if you have been working on console.

GPU Technology Conference (GTC) 2014:
  • Direct3D 12 API Preview (video, slides) - talks about console level efficiency (CPU efficiency and parallelism). DX12 tries to achieve this by giving more control over GPU memory resources (pipeline state object, resource binding, descriptor heaps and tables, bundles). DX12 is going bindless!
Shadows is an important visual cue for rendering and has been incorporated into recent games via shadow mapping technique. Most shadow mapping technique only concerns about opaque object shadows and there is not a lot of about translucent object shadows.

Translucent Shadows in Starcraft II Review
In Starcraft II - Effects & Techniques, Dominic Fillion mentions how they render translucent shadows in Starcraft II. Here's how the rendering works:

* Requires second shadow map and color buffer. Let's name them as translucent shadow map and translucent shadow buffer.

Shadow Maps Rendering
* Opaque Shadow Map: render opaque objects to opaque shadow map
* Translucent Shadow Map: render translucent objects to translucent shadow map (z-write on, z-test on with less equal, no alpha test, records depth of closest transparency)
* Translucent Shadow Buffer: Clear to white, sort translucent objects front-to-back, use Opaque Shadow Map as z-buffer, no z-write off, z-test on with less equal, records color information for transparencies in front of opaque objects

Scene Rendering
* Test both opaque shadow map and translucent shadow map
* if (translucent shadow map test fail) module by color of transparent shadow color bufer
* Modulate by result of opaque shadow map test (binary test)

Things to note:

  • The technique completely separates opaque shadows and translucent shadows (that's why they have 2 shadow maps)
  • This technique handle self-shadowing correctly for both opaque objects and translucent objects
  • Translucent shadow buffer might not be necessary if we don't need colored shadows
  • If we are just doing hard shadows or 1 sample per shadow map, the opaque shadows and translucent shadows can be combined simply by modulation, i.e
  • vis = opaqueShadowVis * translucentShadowVis
  • In general case, if we want soft-shadows, we basically need to sum the visibility and divide by number of samples, i.e.
  • vis = 0
    for (i=0; i != num_samples; i++)
        vis += opaqueShadowVis[i] * translucentShadowVis[i];
    vis /= num_samples;
  • Remember, here we are talking about binary tests! so opaqueShadowVis and translucentShadowVis are point sampled.