{"id":19684,"date":"2018-05-07T17:46:00","date_gmt":"2018-05-07T17:46:00","guid":{"rendered":"http:\/\/www.gamasutra.com\/view\/news\/317614"},"modified":"2018-05-07T17:46:00","modified_gmt":"2018-05-07T17:46:00","slug":"blog-environment-composition-iteration-in-steel-hunters","status":"publish","type":"post","link":"https:\/\/sickgaming.net\/blog\/2018\/05\/07\/blog-environment-composition-iteration-in-steel-hunters\/","title":{"rendered":"Blog: Environment composition iteration in Steel Hunters"},"content":{"rendered":"<p id=\"56d6\" name=\"56d6\"><em>This article was\u00a0<a href=\"https:\/\/blog.joy-machine.com\/environment-composition-iteration-in-steel-hunters-965162b19c6\"><strong>originally posted<\/strong><\/a>\u00a0on the\u00a0<strong><a href=\"https:\/\/blog.joy-machine.com\/\">Joy Machine\u00a0blog<\/a>;<\/strong> maybe check it out too! &lt;3<\/em><\/p>\n<p name=\"7c36\">I tend to do a major iteration on the overall scene composition in\u00a0<strong><a href=\"http:\/\/steel-hunters.com\"><em>Steel<\/em><\/a><\/strong> <em><strong><a href=\"http:\/\/steel-hunters.com\">Hunters<\/a><\/strong>\u00a0<\/em>every month or two and since the public trailer is now approaching, I decided to just did one six-seven hour block fo sitting at my computer until I was happy with the results. It should be obvious that this iteration started like most: \u201cjust a few quick tweaks.\u201d<\/p>\n<h4 id=\"7cd4\" name=\"7cd4\">The Problems<\/h4>\n<ul>\n<li id=\"50dc\" name=\"50dc\">I wanted heavier atmospheric haze\/fog. The reasoning for which is two-fold:<\/li>\n<li id=\"77a4\" name=\"77a4\">The general feel of this area is a barren \u201cpost-apocalyptic\u201d wasteland. And I don\u2019t mean that in the traditional post-apocalyptic\u00a0<em>Mad Max<\/em>\u00a0sort of way; the world of\u00a0<em>Steel Hunters<\/em>\u00a0wasn\u2019t ever decimated by nuclear war but, rather, the slow depletion of natural resources (unrelated) and the onset of, basically, the worst possible nightmare version of climate change that could be imagined (and is almost certainly scientifically\u2026 non-scientific). In short: every environment has a unique feel\/setting and the goal of each of these sandboxes is to fully embrace a worst-case scenario of what that environment in the game\u2019s world.<\/li>\n<li id=\"0888\" name=\"0888\">More practically, it\u2019s way easier to handle the blend for the unbelievably intense sand storms (literally, they can not be believed because it\u2019s not also, likely, scientifically non-scientific) that can crop up mid-mission\u200a\u2014\u200arequiring players to adjust their approach entirely.<\/li>\n<li id=\"644a\" name=\"644a\">Along that same line of thinking, there is entirely too much blue sky if you catch a glimpse of the sky through the clouds\u200a\u2014\u200aand just adding more cloud-cover would obscure the actual sun vector all the time (instead of 75\u201385% now).<\/li>\n<li id=\"3a9d\" name=\"3a9d\">To adjust this, I have to modify the rayleigh calculation coefficients just enough to reduce the blue of the end result without blowing out the scene\u2019s lighting and composition in the other direction (trump-orange).<\/li>\n<li id=\"406d\" name=\"406d\">There is a lovely issue with the volumetrics rendering light blue light shafts if you happen to end up in an along the edge of an occluded area (this is unrelated to the sky color, as I discovered).<\/li>\n<li id=\"e325\" name=\"e325\">This gets worse if the directional light is completely obscured, at which point the resulting composition ends up with a light blue screen area where the light would normally be (not super obvious\/ugly, but it annoyed me. A lot).<\/li>\n<li id=\"e1b5\" name=\"e1b5\">I don\u2019t tend to update time-of-day during gameplay, but I still ran into an issue with the volumetrics and sky\/cloud\/light settings getting out of sync at night (meaning the moon ended up with red\/brown-ish volumetrics despite a component white light color)\u200a\u2014\u200aand time of day can make for a nice demo sometimes (and I may eventually have a very, very subtle progression of time in a mission at some point).<\/li>\n<li id=\"a666\" name=\"a666\">The eye adaptation has issues maintaining a consistent exposure level as you go through the map.<\/li>\n<\/ul>\n<h4 id=\"b8e3\" name=\"b8e3\">The Nevada Scene Composition (Before)<\/h4>\n<p><img decoding=\"async\" data-image-id=\"1*MVz_A17WtK2rwe3brZsKZw.png\" src=\"http:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2018\/05\/blog-environment-composition-iteration-in-steel-hunters.png\"\/><\/p>\n<h4 id=\"4ac5\" name=\"4ac5\">The Iteration Process<\/h4>\n<p id=\"6fe2\" name=\"6fe2\">I\u2019ve done iterations on all of these various systems\/components in the past, but generally I\u2019ve focused on one or two aspects of the composition at a time. I wanted this iteration to focus on the entire gamut of influencing factors.<\/p>\n<p id=\"7b9c\" name=\"7b9c\">Ideally, I\u2019d tackle each problem in that list one at a time. And, for the most part, that\u2019s what I did. The issue is how all of these various systems exist in relation to each other. Which brings me to:<\/p>\n<h4 id=\"9157\" name=\"9157\">The World Simulation<\/h4>\n<p id=\"4fc1\" name=\"4fc1\">The entire world state is managed by my \u201cworld simulation\u201d\u200a\u2014\u200aanything that related to or occurs within the environment is in some way or another related to this system. In the case of lighting, volumetrics, atmospherics, and\u00a0<em>relevant<\/em>post-processing data, the relation to the world simulation is direct: the simulation manages each of these explicitly.<\/p>\n<ul>\n<li id=\"e9e5\" name=\"e9e5\">The Plus Side of This: I don\u2019t have to jump back and forth between all sorts of entities to tweak properties.<\/li>\n<li id=\"06c7\" name=\"06c7\">The Down Side of This: The world simulation\u00a0<em>is<\/em>\u00a0a simulation in every sense of the word. Simply changing one value can have a ripple effect that affects any number of other data that influences the final scene composition.<\/li>\n<li id=\"fbe6\" name=\"fbe6\">I make this sound bad, but it\u2019s actually a\u00a0<em>great<\/em>\u00a0thing. This design and implementation ensures internal environment consistency and, for lack of a better word, \u201csynergy\u201d between what could be setup as disparate entities. This will also be helpful for ensuring future environments are bound to the same rules.<\/li>\n<\/ul>\n<h4 id=\"4e77\" name=\"4e77\">The Iteration Process\u00a0(Remix)<\/h4>\n<p id=\"e688\" name=\"e688\">The process, basically, goes like this: start a problem (almost in the order described above, except the sky simulation and resulting coloring was the first problem I took on), work towards an acceptable result, and move on to the next problem.<\/p>\n<p id=\"16c8\" name=\"16c8\">By the time I started on the second problem, that process was pretty much gone. Changing the sky simulation data resulted in some dramatic composition changes that affected the overall scene exposure, the lighting intensity\/colors, and the look and intensity of the haze. Really, the only thing that wasn\u2019t affected by this was my volumetrics solution (based heavily on NVIDIA\u2019s\u00a0<a data-href=\"https:\/\/developer.nvidia.com\/VolumetricLighting\" href=\"https:\/\/developer.nvidia.com\/VolumetricLighting\" rel=\"noopener\" target=\"_blank\">Volumetric Lighting research\/implementation advice<\/a>) as I was previously manually managing the volumetric light color\/intensity.<\/p>\n<p id=\"a134\" name=\"a134\">So, obviously, I updated the world simulation\u2019s code to ensure that the volumetric light color\/intensity to also be managed by the world simulation in respect to its various light entities (a directional light and sky light).\u00a0<strong>THERE<\/strong>. Now a single change affects ALL THE THINGS. I sure showed\u00a0<em>that<\/em>\u00a0what\u2019s what. Admittedly: this also addressed the problem I was having with the volumetrics being out of sync with a dynamic time-of-day (especially at night), so that\u2019s neat at least.<\/p>\n<blockquote id=\"3838\" name=\"3838\" readability=\"8\">\n<p>Note: Unfortunately, I didn\u2019t properly create screenshots of each specific step along the way, but I do have a few iterations that I used to compare each tweak round. So those will appear shortly.<\/p>\n<\/blockquote>\n<h4 id=\"e953\" name=\"e953\">First Pass<\/h4>\n<p id=\"6364\" name=\"6364\">With the exception of the odd issue with the \u201csun\u201d showing as a large blue halo when obscured (and the volumetrics coloring when in an obscured location relative to the sun), I ended up with this first-pass result:<\/p>\n<p><img decoding=\"async\" data-image-id=\"1*Xaond4KNAaQ3x62LI6NhdQ.png\" src=\"http:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2018\/05\/blog-environment-composition-iteration-in-steel-hunters-1.png\"\/><\/p>\n<p id=\"ae00\" name=\"ae00\">This is definitely a step in the right direction compared to the starting point. And I remember this first iteration being worse than it actually is (in retrospect), but looking at it now, I remember my issues with it:<\/p>\n<ul>\n<li id=\"3736\" name=\"3736\">The lighting and shading is fairly flat and trends far closer to orangey-orange than I want (even the mech shading was fairly flat).<\/li>\n<li id=\"210f\" name=\"210f\">The \u201csun\u201d (which I use in quotations constantly because it\u2019s just a directional light that is treated as an atmospheric body) is somewhat non-existent. There is a somewhat brighter spot in its place, but it\u2019s far more understated than I want.<\/li>\n<li id=\"d859\" name=\"d859\">The haze is over-saturated and really drowns out the shading of distant buildings more than I\u2019d like.<\/li>\n<li id=\"740d\" name=\"740d\">Finally, though it\u2019s not obvious here, but if any view other than the composition I\u2019m using throughout this post, the eye adaptation was\u2026 Not happy. The histogram for the composition shot is fairly even, but anywhere else the overall exposure trends lower (which, since the composition I\u2019m showing is potentially in the brightest areas in the environment).<\/li>\n<\/ul>\n<h4 id=\"a4ce\" name=\"a4ce\">Second Pass<\/h4>\n<p id=\"9891\" name=\"9891\">I really should have written this post yesterday after doing all this work because, looking at this pass\u2019s screen shot looks, basically, like \u201c\u2026 why did I just make everything worse?\u201d<\/p>\n<p id=\"0805\" name=\"0805\">This pass\u2019s goal:<\/p>\n<ul>\n<li id=\"ec97\" name=\"ec97\">Start addressing the auto exposure so if I turned around I wasn\u2019t blinded by the adjusted exposure for darker areas.<\/li>\n<li id=\"c1c8\" name=\"c1c8\">This entailed lighting color\/intensity (and volumetrics color\/intenstiy which has its own modifiers based on the light color\/intensity it gets from the directional light) adjustments. This succeeded in evening out the overall composition exposure throughout the environment, but it also made the lighting even more flat (and the composition somewhat darker).<\/li>\n<li id=\"d248\" name=\"d248\">An attempt to change the haze distribution so it wouldn\u2019t affect ground-level areas\u00a0<em>as<\/em>\u00a0intensely as it did in the first pass (also attempted, and failed, to fix the coloring).<\/li>\n<\/ul>\n<p><img decoding=\"async\" data-image-id=\"1*qtz7kcj6MJShK7NfTfP7yA.png\" src=\"http:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2018\/05\/blog-environment-composition-iteration-in-steel-hunters-2.png\"\/><\/p>\n<h4 id=\"7ffa\" name=\"7ffa\">Third Pass<\/h4>\n<p id=\"4d81\" name=\"4d81\">I call this pass \u201clighting, volumetrics, and composition exposure adjustments that made everything worse\u201d.<\/p>\n<p id=\"01bd\" name=\"01bd\">Which is mostly true; I can\u2019t remember the specifics of what I did in this pass, but I was focused primarily on getting the lighting in the final composition to be more complex (not flat).<\/p>\n<p id=\"3af7\" name=\"3af7\">AND I SUCCEEDED. If you ignore the fact that the entire scene is now grim-dark and the mech details are basically completely lost.<\/p>\n<p><img decoding=\"async\" data-image-id=\"1*EJmZKMk1ZrMKjiOeu3uB8w.png\" src=\"http:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2018\/05\/blog-environment-composition-iteration-in-steel-hunters-3.png\"\/><\/p>\n<h4 id=\"baeb\" name=\"baeb\">Fourth Pass<\/h4>\n<p id=\"46bf\" name=\"46bf\">I focused primarily on light intensity values, the brightness of the\u00a0<a data-href=\"https:\/\/simul.co\/truesky\/\" href=\"https:\/\/simul.co\/truesky\/\" rel=\"noopener\" target=\"_blank\">trueSKY<\/a>brightness levels (which were pushing the composition\u2019s exposure histogram far outside the range of the rest of the scene), and getting the haze to cooperate.<\/p>\n<p><img decoding=\"async\" data-image-id=\"1*t4vlGwiWaGTlSr2x1FdugA.png\" src=\"http:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2018\/05\/blog-environment-composition-iteration-in-steel-hunters-4.png\"\/><\/p>\n<p id=\"fecf\" name=\"fecf\">Problems now:<\/p>\n<ul>\n<li id=\"7714\" name=\"7714\">The composition\u2019s contrast was way too heavy\u200a\u2014\u200aeven for me (and that\u2019s saying something. I knew this wasn\u2019t an issue with the post-processing stack, so I blamed the auto exposure. And turning off auto-exposure confirmed that\u2026 To some extent.<\/li>\n<li id=\"dbb0\" name=\"dbb0\">The lighting intensity adjustments worked for most of the scene, but the smaller-scale details of the mech (which, by the way, is why I like this composition; it has foliage, large-scale meshes, and detailed smaller-scale meshes) weren\u2019t benefitting from any changes to the intensity. Meaning that while most of the scene benefitted, shadowed areas were still suffering a bit.<\/li>\n<li id=\"bd41\" name=\"bd41\">The haze was getting even more exaggerated from adjustments to the auto exposure. Which is neat.<\/li>\n<li id=\"c492\" name=\"c492\">The \u201csun\u201d still had an underwhelming compositional presence (and you can see the out-of-place blue halo here more clearly than in other images, despite not being occluded).<\/li>\n<\/ul>\n<h4 id=\"63bb\" name=\"63bb\">Fifth Pass<\/h4>\n<p id=\"c9e6\" name=\"c9e6\">I did another round of light intensity modifications in conjunction with the trueSKY light wavelengths and yet-again-more haze tweaks. AND THIS TIME: THEY WORKED.<\/p>\n<p id=\"e9de\" name=\"e9de\">Oh, and I changed the entire volumetrics simulation settings from being\u00a0<a data-href=\"https:\/\/en.wikipedia.org\/wiki\/Mie_scattering\" href=\"https:\/\/en.wikipedia.org\/wiki\/Mie_scattering\" rel=\"noopener\" target=\"_blank\">Mie-based scattering<\/a>\u00a0to using a\u00a0<a data-href=\"https:\/\/www.astro.umd.edu\/~jph\/HG_note.pdf\" href=\"https:\/\/www.astro.umd.edu\/~jph\/HG_note.pdf\" rel=\"noopener\" target=\"_blank\">Henyey-Greenstein phase function for scattering<\/a>. This iteration, in particular, took the most time to really get right-ish because it so dramatically impacted the entire composition<\/p>\n<blockquote id=\"d093\" name=\"d093\" readability=\"6\">\n<p>Note: I\u2019ll show some debug shots of what the volumetrics themselves look like in the final composition later.<\/p>\n<\/blockquote>\n<p><img decoding=\"async\" data-image-id=\"1*M-eqxk-Q5Xy0Q_PzndMeMg.png\" src=\"http:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2018\/05\/blog-environment-composition-iteration-in-steel-hunters-5.png\"\/><\/p>\n<p id=\"4643\" name=\"4643\">The overall composition still hasn\u2019t quite hit the overall exposure level I\u2019d like and the \u201csun\u201d\u00a0<em>still<\/em>\u00a0had no strong presence in the composition. And so I decided: unacceptable. The \u201csun\u201d must bend to my will.<\/p>\n<h4 id=\"531e\" name=\"531e\">The End\u00a0Result<\/h4>\n<p id=\"62d5\" name=\"62d5\">After more volumetrics, eye adaptation, color grading, and light intensity passes, I ended up at a result that I\u2019m pretty happy with. It\u2019s still leaning a bit too close to orangey-orangyness-orannnnge, but at the moment I\u2019m not\u00a0<em>entirely<\/em>\u00a0convinced that\u2019s a bit thing for this environment (especially since, once I started adding VFX to the scene, that will have a pretty dramatic effect on color variation).<\/p>\n<p id=\"68c6\" name=\"68c6\">AND THE SUN BENT TO MY WILL.<\/p>\n<p><img decoding=\"async\" data-focus-x=\"62\" data-focus-y=\"49\" data-image-id=\"1*_Dzx3jQjqNY9sl-S1tKPVw.png\" data-is-featured=\"true\" src=\"http:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2018\/05\/blog-environment-composition-iteration-in-steel-hunters-6.png\"\/><\/p>\n<p id=\"e114\" name=\"e114\">And since I promised some debug screen shots, here is the resulting composition exposure:<\/p>\n<p><img decoding=\"async\" data-image-id=\"1*luWMibOLFNCXjVctHNmbrQ.png\" src=\"http:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2018\/05\/blog-environment-composition-iteration-in-steel-hunters-7.png\"\/><\/p>\n<p id=\"74fa\" name=\"74fa\">And a debug visualization of what the volumetrics look like on their own (you can probably tell where I went to give the \u201csun\u201d a bit of help in the prominence department):<\/p>\n<p><img decoding=\"async\" data-image-id=\"1*9PsESDaF8PFLNpD5ZBxpOA.png\" src=\"http:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2018\/05\/blog-environment-composition-iteration-in-steel-hunters-8.png\"\/><\/p>\n<h4 id=\"3ccd\" name=\"3ccd\">Conclusion<\/h4>\n<p id=\"4c5f\" name=\"4c5f\">I really enjoy doing iterations like this. And this was fun enough to help me maintain sanity in the twelve hours of camera system work that followed.<\/p>\n<p id=\"da0d\" name=\"da0d\"><strong>Fun Fact<\/strong>: The\u00a0<em>Steel Hunters<\/em>\u00a0\u201cannounce\u201d trailer release date is not too far away.<\/p>\n<h4 id=\"e8e0\" name=\"e8e0\">Addendum<\/h4>\n<p id=\"79e0\" name=\"79e0\">By reader demand, here\u2019s a quick-and-dirty slideshow GIF of the progress (it loops so the beginning\/end are, uh, hopefully recognizable):<\/p>\n<p>\u00a0<img decoding=\"async\" src=\"http:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2018\/05\/blog-environment-composition-iteration-in-steel-hunters.gif\"\/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This article was\u00a0originally posted\u00a0on the\u00a0Joy Machine\u00a0blog; maybe check it out too! &lt;3 I tend to do a major iteration on the overall scene composition in\u00a0Steel Hunters\u00a0every month or two and since the public trailer is now approaching, I decided to just did one six-seven hour block fo sitting at my computer until I was happy [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":19685,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20],"tags":[],"class_list":["post-19684","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"_links":{"self":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts\/19684","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/comments?post=19684"}],"version-history":[{"count":0,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts\/19684\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/media\/19685"}],"wp:attachment":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/media?parent=19684"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/categories?post=19684"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/tags?post=19684"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}