[unity][wip] Sci-fi interior , modularity and workflow practice

polycounter lvl 6
Offline / Send Message
nizu polycounter lvl 6
Edit: updating 1st pic here with latest screenshot:


--Original post below : --
Personal project,  work in progress : all major parts are in,  but looking for C&C on what to improve and to polish mostly texturing and lighting.

The main idea was to have some fun with sci-fi designs, and practice modularity : the corridor part was made as if it was chunks for a bigger modular env. set,   and the ever present question is .. how much  can recycle parts and uv chunks , not consuming more uv space ?  So things like the corridor bend or the double doors were cobbled together  trying to see at which point it's too much recycling and what's really important to make 'unique texture' in a mid-large env.
And also keeping copies and duplicates organized, being able to repack and rebake late in the project without too much pain.

Modeled in Blender and textured in Substance Painter, rendered in Unity5.  The point of modularity is also tied to procedural texturing / hipoly-lowpoly workflow: it  tends to make you think 1 piece of model = 1 chunk of uv, but of course that's not always necessary at all .. i still remember an awesome scifi env around this forum made with 1x 512 texture , Gosh !  :p
So i wanted to spend some time on that aspect, i didn't do anything crazy, it's still  4x 2k²  uv sheets for the whole env, but it confirmed recycling can go a long way and can be mixed with all the goodness of baking from a mesh and the specific dirts and AO you get that way.
Also not much stencils or complex material blends here,  thinking of tiles and recycling was enough for now.

The design refs are mixed and partly based on concept art from Frictional's Soma,  then as usual with personal projects i divide between following a good ref. concept and composition (best for quality of result imho) and freely practicing what you need to learn most (important too..)



There's some ugly aliasing and bad lightmap packing in these shots, visible in fullsize that i'm still looking into..



Substance baking meshes screenshots :








Also, while making this i was working on polishing my own 'python on post-its' export tools :D  .. those started as a few macros to rename object pairs for hipoly-lowpoly  and quickly going from Blender to Substance, then expanded with some macros for export to Unity (joining objects preserving custom normals, repacking uvs for use as lightmaps .. and few more boring but useful speed ups)
The code has been freely available on github (https://github.com/nizu/NZ-Tools)  for a while , but beware ! it's not really usable : not without a tutorial/doc and anyway likely too tied to my own workflow, so probably not worth it right now,  unless you just want to read the python as 'spare parts' .. but i'm happy to discuss the topic , and i'm working to make it a bit more useful for others (so stay tuned and ask if you want to know more)




        
 




Replies

  • Filipe
    Offline / Send Message
    Filipe vertex
    Nice job. I think it's looking great.
  • nizu
    Offline / Send Message
    nizu polycounter lvl 6
    Thanks :smile: 

    Some updates on panels .  I wanted to make floor and ceiling tiles that were not just squares, but slightly more complex modular bricks.
    This is the kind of stuff that really should use decals, specially for damage, just 2 damage variations take already plenty space (vs different panel designs) , aside from that, i'm happy  with how they don't get boring and repetitive too fast when used in the env, and the dyntopo sculpt in Blender is surprisingly fast and reliable on hardsurf meshes (i mean you just start sculpting on a mesh-modelled hipoly and  don't get too many technical issues or unusable polycounts) Also i didn't get  many issues projecting sculpted damage on the lopoly bases.



  • stilobique
    Offline / Send Message
    stilobique polycounter lvl 5
    Great, it's rendering with Unity ? Adding a particle dust can be great !
  • nizu
    Offline / Send Message
    nizu polycounter lvl 6
    Yes it's unity , and i was just thinking of that ! it's in 5.6 (agh, it all changed again! but mixed lights seem a very useful type) so i want to play some more with baked/realtime light combinations.
    I'm loving the combined post process behaviour (but not sure if AA wasn't better with cinematic effects betas ??)  and i tried Adam demo's volumetric on the big fan light, but got lots of banding, not easy to setup well  (and no support for sun lamp,  so with no dusty effects in the corridor, looks strange)
    I was thinking some smoke from vents as flipbook things (i'm not much of an fx guy, but basics are good to have for envs..)  and it's good that you mentioned particle dust..  i guess it can be a post fx or actual particle emitters in some cases, i'll look into it.   

  • nizu
    Offline / Send Message
    nizu polycounter lvl 6
    Oh ! i just noticed your signature link @stilobique ; ! Blender to Substance export tools ? me too !

    As i mentioned, mine is also on github  https://github.com/nizu/NZ-Tools ,
    and i just posted on my blog a few more details : https://nizuvault.wordpress.com/
    It's all a draft at this point ,  before trying it maybe wait next week, but it's already ok if you just want to read the python or you can read a description of the ops in my version (of basically the same tools you're working on)

    That's very cool, i came here looking for just this kind of stuff, sorry mine  doesn't have decent docs yet,  but it started as a project for personal/internal use and i'm slowly making it more accessible .. but as i hoped, it's the kind of tool that each/different artists can write themselves and maybe exchange pieces, without trying to make an uber-workflow thing good for everyone (like batch bakers in Blender.. i tried 3 and none would fit my workflow)  

    Stay tuned if you'd like i'll have updates in next days making it a bit easier to look at, and i'll check your addon !


  • stilobique
    Offline / Send Message
    stilobique polycounter lvl 5
    nizu said:
    Oh ! i just noticed your signature link @stilobique ; ! Blender to Substance export tools ? me too !

    As i mentioned, mine is also on github  https://github.com/nizu/NZ-Tools ,
    and i just posted on my blog a few more details : https://nizuvault.wordpress.com/
    It's all a draft at this point ,  before trying it maybe wait next week, but it's already ok if you just want to read the python or you can read a description of the ops in my version (of basically the same tools you're working on)

    That's very cool, i came here looking for just this kind of stuff, sorry mine  doesn't have decent docs yet,  but it started as a project for personal/internal use and i'm slowly making it more accessible .. but as i hoped, it's the kind of tool that each/different artists can write themselves and maybe exchange pieces, without trying to make an uber-workflow thing good for everyone (like batch bakers in Blender.. i tried 3 and none would fit my workflow)  

    Stay tuned if you'd like i'll have updates in next days making it a bit easier to look at, and i'll check your addon !

    Hehe, yes all artist use a personal workflow ; my bridge is for a personal used, and need to be improve. I need to write a renamer high/low poly ; but i'm generated any high poly with zbrush. And it's hard to find a time to work on it.
    Me too, my wiki/doc are not really explain my tool.

    I think try your addon this week-end, found an another way to work with Painter/Blender can be a good idea to improve my addon !

    Once again, really great job ! I'm stay here to see your next render :) .
  • macoll
    Offline / Send Message
    macoll polycounter lvl 7
    Yep that looks great ! Will follow your work ;)

    I think the floor looks too busy, this is the only thing that bothers me. I think for keeping the overall design readable, you should simplify the floor. (the rule is: 30% of the space should contains 70% of the meshes....+ or - )

  • nizu
    Offline / Send Message
    nizu polycounter lvl 6
    @stilobique : Great, i will do a few commits before weekend so it's a bit clearer, and since you know the topic already, it'd be very useful to have some impression (even just what i need to explain better about usage, or why you wouldn't use my workflow , i.e. my script assumes you do lowpoly 1st and start hipoly from a copy of that.. i think that's faster, but for max. freedom and quality others might prefer to work the other way around)

    @macoll : Thanks !  very good point, i only cared about repetitive, i'll do another pass , some larger, simpler modules , and break down the frames of those panels to be modular.

    Meanwhile, i  should run a ton of bakes (one thing that on real projects comes later and in too much of a hurry :) )
    Leaving aside the realtime/ baked thing for a sec (this is all baked or mixed light)

    I had some serious headhaches with unity 5.0-5.1 until they refined the uv preservation (ignore normals, don't simplify)
    And since 5.3 i'm generally happy with what i get in realtime gi, by giving unity a model with Uv1 being a auto repack of  my texture uvs.
    In this scene i enabled charts simplification and got no issues.

    But the static bakes.. i'm still thinking :  Unity atlases by object, but doesn't repack your uvs.  So it's fine if you have many small objects, or 1 big mesh  corresponding to a whole lightmap sheet. But if you're in between, like exporting 1 mesh per room, you end up with horrible packing efficiency.
    I never let Unity fully generate lightmap uvs, because of too many errors and absurd thin islands in the past, but i'm not sure that would make a difference (still an atlas of squares packed by object)

    Also still figuring what the uv- preserving or simplyifing affects , realtime but baked too ? that big island with tiny uv chunks wasn't there until i disabled ignore normals .. i think it has improved  'sharpness' of lightmap (by breaking it on hard edges) but that packing looks made of pieces waay too small.
    Lots of variables, but a few more tests will be interesting..


    Edit : Ugh , i got it, preserve normals doesn't affect static bakes, not the issue here.

     it's my packing macro ..  I just learnt something important about Blender scripting then .. if you don't explicitly write all parameters for an operation , it will use whatever crazy value the user has set previously for that operator , probably in a very different use case.. must be careful ! so in the last few exports it used a large padding i had set for a manual export of the pipes, of course i didn't meant that to be used by the script, and it even remained as new default in new sessions.

    Edit 2: 
    Exported as single object , and since it's more than 65k it got split (120k total, the vault ceiling should use simpler panels, i should save a 30k there)
    Lightmap uvs got split too (that's true for sub-objects too then), so again bad packing,  plenty of ways to work around that, but  i want as little human intervention as possible :)

    Also interesting how different is the sun set as mixed baking instead of realtime GI,


    Edit3 :
    Much better, using 1k lightmap sheets .. 3 objects fill each their own (nevermind the 4th) , i'd prefer a larger 2k sheet, so it's only 1 image but that has all the limits above on how you can group and export objects.
    I wanted to have this clear, though of course, in a large game you'd probably build levels from much smaller assets in kits, but for visualization projects or anyway if you assemble a level in the 3d app it matters, not sure also how much performance really changes (4*1k vs 1*4k lightmaps ..more drawcalls )


  • Menchen
    Offline / Send Message
    Menchen triangle
    I never catched on these kind of modular interiors; no matter how hard I tried, nothing fits properly... Im actually pretty jealous at you right now  :D
  • nizu
    Offline / Send Message
    nizu polycounter lvl 6
    Don't be,  nothing fits here too !  :D
    I mean, i find it overwhelming too ..trying and make modular sets that are anything more than boxes , and fit.
    That's why i wanted to have a try, as personal project , make the best modules i could, then see it all break, do cheap fixes and learn for the next time.. Seemed the only option :D.
    Like : the corridor wall chunks have 2 width and 2 height  variations .. when making the vaulted room  and the corners .. i realized there would be still a ton of work to make a proper modular set : like T or X junctions, all connector variants and  snap them on a grid ..  it'd take multiples of the time i spent on this.  But just adapting them quickly to 1 room isn't too bad, and i learned stuff.

    The cheapness of the way i fixed it , isn't so much that i made 'custom meshes' reusing the uvs but with a shape fitting a special case (like a wall turn)  that's good, but i'd need to organize those special copies too,   if i had to make another room, only a fraction would be copying  the base modules , the rest is a mess of  unsorted 'special ones', not on a grid.
    Also 'special' in the sense of a different shape of the mesh , so now i can't repack the uvs if i need to add a piece, and update all automatically, but at least to some degree that has to happen .. make some modules, and at some point  'lock' the uvs  and make the rest of 'derivates'.


    Meanwhile i got a lightmap packing that should be good . 1x 2k sheet, with good fill ratio.
    Again, probably not the most common case to have these big chunks of the level assembled in the 3d app rather than in editor,  if the lightmap sheet is made of dozens of small objects it'll pack fine anyway.
    but when it is few large chunks , this way isn't too bad : i've split in 4 objects of roughly the same surface area and tweaked bake res. and scales so they fill the sheet. In a full size level it could be rooms , and It could be a 3x3 grid or 8 similar sized objects  fitting 2  lightmaps .. anyway good idea to try to avoid i.e. having an object with a surface of 3x and 2 objects of 1x surface .. that's what gives terrible packing.  






  • nizu
    Offline / Send Message
    nizu polycounter lvl 6

    New floor, less busy,  made a larger, 4x floor frame.
    It's recycling textures from small frame,  but i had to break the instance to modify the frame mesh, typical issue .. making each side of this frame a separate object initially would have been a pain to manage, but if i later do this (make special modules) , i break the 'link' ..

    The smart thing i guess is not to bother, start with reasonably big chunks/modules, then keep track of new derivate parts, and if necessary to repack uvs , do it  'preserving stacked/ overlapping uvs' (Blender can't but iPackThat can) .. anyway, it's a pain to keep track of many variants,  but better than trying to work with super small chunks.
    The  'filler' tiles are made modifying slightly this substance : https://share.allegorithmic.com/libraries/2399  .. Credits to all the authors of  stuff on substance share,  i always end having to modify (in sbs, not just parameters)  to get what needed , but it's so much easy than starting from scratch or finding the right image texture.






  • ABinhoF
    Offline / Send Message
    ABinhoF polycounter lvl 5
    This is looking great man! Looking forward to seeing where it goes :)
  • nizu
    Offline / Send Message
    nizu polycounter lvl 6
    @ABinhoF :  Thanks !

    Added new ceiling, Because in sci-fi designs,  padded cloth is the new chrome.  :p
    Also this is less polies .. those frames at half size (vs floor and corridor ) were a bit too heavy.

    I wanted to test making this sort of stuff using Blender cloth sim, it  worked fine and quick, these panels are doable with simple gravity force, not sure how it'd be for  i.e. a robot limb envelope (inflating it..)  but always good to be able to do stuff (like sculpted damage)  in the main modelling app even if it's surely not Marvelous for i.e. characters clothes.

    Also placed more of the large , less busy floor panels, not sure if the corridor ceiling looks unbalanced and too busy now, of if i should put some details like tarps and cables on the floor (might be more interesting but not busier?)   

    But mostly .. i'd like to do another pass on the base wall modules textures .. if i can make it a little less painterly and more photo-real than my usual.. and try some atmosphere and dust effects.
     



  • nizu
    Offline / Send Message
    nizu polycounter lvl 6
    Finally some time to resume (possibly expand) this personal project.
    Since last post, i managed to add only a few bits : an exterior background terrain, and volumetrics.

    The mountains are made using procedurals and displace in Blender, and a script called 'Eroder' .. erosion simulation is really important for terrains not looking too 'cg'.  I found that free script few months ago, and it really makes it easier (less or no sculpting and tweaking of the base procedurals), i've seen there's also a paid erosion script, but haven't tried it. The free 'Eroder' is terribly picky with the input mesh : it has to be an exact grid  only displaced on vertical axis .. any imprecision and it won't run.
    (so great tool , but not for heavy use, i might need the paid Blender addon or World Machine anyway)

    The other thing added is Volume Fog 3 .. i love volumetrics, does wonder for balancing contrast and the clutter-emptiness ratio.
    The downside is the crazy performance hit (..studying the profiler though, seems SSR is still much heavier) ..but anyway, i'm not too worried about going crazy with postfx on a personal project, but i want to be sure i'm using reasonable textures and polycount (and on that.. i think i could have used a bit more polys and tried to recycle texture more, for perfect results..)
      
    volumetrics is also very tricky to setup .. i'm learning the controls of VF3 , but still requires checking several view angles at every change to be sure it's working visually and technically.  







  • nizu
    Offline / Send Message
    nizu polycounter lvl 6
    Update: opened the big door to add a small cave.
    The idea is having a bit everything .. test and showcase different types of art assets in the same scene :  so i thought of some rocks, and next would be some kind of architecture ruins inside the cave and an alien plant growing out of those.
    There's a risk something can easily look out of place .. i'll have to get good refs and be careful with design.






    As for workflow practice : i wanted to practice a rock/terrain material.
    The model is a single piece, sculpted in Blender , detailed with some procedural displacement,  lowpoly obtained with 'quadric edge collapse' in meshlab.
    The fact it's a single piece mesh wouldn't make sense for a real game production (vs. something more modular, like a kit of boulders etc..) but it was a quick way to set up and focus on the rest:

    I've  made a base material in S. Painter,  including a mask to blend 3 detail overlays with base color, roughness and normal ... again overkill for real world game art and performance..but good practice.
    The ground below is my 1st attempt at something that complex in S.Designer, made from scratch.  It wasn't too complicate or time consuming, now that i'm familiar with the app, to make the mud and rock scatters from base shape nodes and filters . 
    For the rock walls i'm still using a great material from Substance Share : https://share.allegorithmic.com/libraries/1002 .. really top notch stuff, i must dig into those nodes.

    The shader for this was made in Shader forge, it lerps the base (2k) with the details (2k each tiled 4-6 times) using a rgb mask ..nice to play with, keeps a bit of the edge highlights and unique shapes from the base but also the high pixel density of detail maps.

    The standard shader detail option in unity is great, something similar and much cheaper .. but i like to have glossiness variation from details too .. From this test, i'd say a reasonable option for caves can also be a shader with 2-3 tileables blended by a mask or vertex colors, sacrificing the base map wouldn't be too bad here, to improve performance. ( i ended up showing the base only at 25% opacity anyway).

    Also always good to test and practice a lot baked/realtime light and all the caveats , like :  shadows (realtime or baked) can show very easily how lowpoly the mesh is for something like this , and without  realtime lamps i was having a hard time  getting enough speculars and show detail through normal maps ... The current lighting tools in Unity can achieve amazing quality, but of course, compared to a raytraced render, there's more caveats  and situations to avoid or work around.






Sign In or Register to comment.