090207 / KZ2 II previous | next Killzone 2 Rendering Observations Had a chance to take a good look at the KZ2 demo, to see the tech first hand. The overall level of polish is fantastic. A few observations below, the rest I'm saving for when I play the actual game... Level of Detail. They are using stippled LOD transitions for world geometry, with a transition threshold set so that geometry never stays in a stippled form. Seems as if they have 4 LOD levels for characters, but just pop between levels. Particles. Judging from the artifacts where particle billboards intersect opaque geometry, I'd guess that they are drawing into a 1/4 size (1/16 area) downsized buffer. Sparks and other details seem to be drawn directly into the full size G-Buffer instead. Textures. Good resolution on the textures, with lots of decals, and detail maps to maintain good resolution. Didn't see any evidence of texture streaming, so if it is there, they are doing an excellent job insuring textures are loaded before they are seen! Motion Blur. The motion blur is subtle with a small maximum blur length. Just enough to give the sense of motion without inducing vomit (I prefer larger blur lengths, and we tried this at work and apparently it can make a few people feel sick). I have a feeling that the blur is done at a 1/2 size downsampled resolution, however the transition is so smooth it is hard to tell. Motion blur looks to not be depth aware, which can be seen as the motion blurred background pulls pixels from the relatively stationary gun. It can be expensive to correct this artifact, might not have been worth it for there engine. When looking through the gun sights and moving around, seems as if there is a fringe in the DOF regions where motion blur is not applied, suggesting that post processing selects between motion blur and DOF, but cannot apply DOF and motion blur at the same time. With a small maximum blur length this is a good optimization to make IMO. Depth of Field. Looks like they transition between two filter kernels with a pop. Normal blur filter is smaller and touches the visible backend of the gun. At some point when player moves to gun sights, the filter kernel pops to a larger radius but what looks to be the same number of samples for the filter (a little banding). I have only seen near DOF thus far, and they have depth transition aware near DOF, as can be seen by the near out-of-focus bleeding into the in-focus background. A few observations about the KZ2 DOF convinced me to improve our DOF at work, and this is exactly why I inspect every graphics engine in detail, there is always something to learn from other people. Film Grain. Applied to help hide any artifacts of limited 8-bit precision with 2x or so dynamic range. Really looks good IMO. Shadows. Cascade shadows for the sun, dynamic shadows for muzzle flashes and what appears to be a few indoor lights. Shadow resolution appears to be rather low in some places (not as bad as Dead Space), however nicely filtered. Decals. Lots of polish here: per material decals for bullet holes, foot prints where you walk, blood stains, and more. iPhone Installing the iPhone SDK on my iMac as I type this. Decided I wanted a distraction from all my long term work, with something simple, fast and fun... | Atom ©2009-2007 Timothy Farrar Latest Blog Entries 090407 . dxt tip 090320 . gdc 2009 090318 . re-attachable code 090311 . atom tri soup 090305 . voxels 090219 . r600 090218 . arm vfp 090212 . iphone atom 090208 . iphone 090207 . kz2 ii 090129 . gt3xx speculation 090121 . killzone 2 090110 . hole filling 090108 . structure synth 090105 . nv gpu prg + tes 081230 . gl3 textures 081224 . larrabee 081223 . 3d ifs art 081219 . gl3 driver 081218 . reprojection 2 081217 . reprojection 081216 . pc gpu stats 081209 . opencl 081115 . r2 081106 . arm vfp11 081102 . gl3 on linux 081030 . p r d a 081020 . temporal binned ring buffer 081014 . octahedron map 081010 . temporal locality 081008 . future hardware 080926 . changed email 080918 . general purpose 080826 . olick paper 080814 . otoy, braid 080813 . opengl 3 II 080811 . opengl 3 080806 . random stuff 080718 . nv perf kit 080709 . antialiasing 080704 . micro polys II 080628 . micro polys 080524 . triangles 080426 . parallel II 080319 . beyond the vacuum 080223 . human head + parallel 080114 . xp install
Index 000000 . index
Graphics 090311 . atom tri soup 090110 . hole filling 081218 . reprojection 2 081217 . reprojection 081209 . opencl 081014 . octahedron map 081010 . temporal locality 080709 . antialiasing 080704 . micro polys II 080628 . micro polys 080524 . triangles 080319 . beyond the vacuum 071130 . GPU only 071121 . deferred 3 071116 . deferred 2 071103 . random shots 071025 . motion cards 071018 . cubemap concepts 071015 . drawing reverse II 070926 . drawing in reverse 070822 . new pipeline progress 070819 . high dynamic range 070817 . video update 070810 . engine lighting 070809 . engine videos 070731 . screen shots 070713 . micro impostors 070711 . infinite LOD 070710 . graphics engine intro
Interaction 071204 . GPU only 2 071018 . cubemap concepts 070816 . CFD videos 070730 . CFD code 070715 . self healing
Networking 070708 . breaking firewalls 070707 . management servers 070706 . 510 players / 128Kbps 070705 . UDP player bandwidth 070704 . network latency 070703 . cost of bandwidth
Sound 070709 . 3D audio / KEMAR
Language 090318 . re-attachable code 081030 . p r d a 070921 . assembler in atom4th 070919 . editor working 070915 . chicken and egg 070912 . font making 070910 . 2 4th | !2 4th
Elsewhere andrew selle adrian crook alex champandard angelo pesce aras pranckevicius brian karis cedrick collomb christer ericson chris hecker craig reynolds dave moore david lenihan ignacio castano jeremy shopf jonas risbrandt ke-sen huang marco salvi mikael christensen mike acton mingw naty hoffman nick porcino oss pete shirley pierre terdiman pixar papers realtime rendering ron fedkiw tom forsyth vincent scheib wolfgang engel All Blog Entries 090407 . dxt tip 090320 . gdc 2009 090318 . re-attachable code 090311 . atom tri soup 090305 . voxels 090219 . r600 090218 . arm vfp 090212 . iphone atom 090208 . iphone 090207 . kz2 ii 090129 . gt3xx speculation 090121 . killzone 2 090110 . hole filling 090108 . structure synth 090105 . nv gpu prg + tes 081230 . gl3 textures 081224 . larrabee 081223 . 3d ifs art 081219 . gl3 driver 081218 . reprojection 2 081217 . reprojection 081216 . pc gpu stats 081209 . opencl 081115 . r2 081106 . arm vfp11 081102 . gl3 on linux 081030 . p r d a 081020 . temporal binned ring buffer 081014 . octahedron map 081010 . temporal locality 081008 . future hardware 080926 . changed email 080918 . general purpose 080826 . olick paper 080814 . otoy, braid 080813 . opengl 3 II 080811 . opengl 3 080806 . random stuff 080718 . nv perf kit 080709 . antialiasing 080704 . micro polys II 080628 . micro polys 080524 . triangles 080426 . parallel II 080319 . beyond the vacuum 080223 . human head + parallel 080114 . xp install 080108 . 2008 071207 . G84 071204 . GPU only 2 071130 . GPU only 071126 . opt+more 071121 . deferred 3 071116 . deferred 2 071115 . critic 2 071112 . critic 071108 . GPU assembly 2 071104 . GPU assembly 071103 . random shots 071031 . cubemap seams 071026 . transform feedback 071025 . motion cards 071024 . GS woes 071019 . cubemap woes 071015 . drawing reverse II 070930 . porting to sm3.0? 070926 . drawing in reverse 070921 . assembler in atom4th 070919 . editor working 070915 . chicken and egg 070912 . font making 070910 . 2 4th | !2 4th 070822 . new pipeline progress 070819 . high dynamic range 070818 . DFES 070817 . video update 070816 . CFD videos 070810 . engine lighting 070809 . engine videos 070731 . screen shots 070730 . CFD code 070715 . self healing 070713 . micro impostors 070712 . fragment raytracer 070711 . infinite LOD 070710 . graphics engine intro 070709 . 3D audio / KEMAR 070708 . breaking firewalls 070707 . management servers 070706 . 510 players / 128Kbps 070705 . UDP player bandwidth 070704 . network latency 070703 . cost of bandwidth 070702 . market research
|