Wednesday, 3 May 2017

Illara (Resurface) - Beta Development

After the end of the alpha stage, things continued on just as before for me. It was apparent at this stage that the help which was suggested to aid with the modelling and texturing duties wasn't going to materialise. This meant I had a lot of work to do and I would need to save time where ever possible. This was the point where I was glad that the VR game would require low poly assets and also glad that our previous decision to include mostly tiling textures using Substance Designer.

We continued as a group the same pattern, Maciej would design, I would model and UV then Alessio would implement into the engine and do the coding. I went through all the designs as they arrived on Trello. For all assets, except characters, enemies and plants we would be using the tiling textures with vertex blending in Unity to give them their variation. This was important because the scale of most things in the scene are very large, so had to treat almost everything like it was terrain in any regular game.

At first, I overlooked the importance of consistent texel density. There are many large models, and for the first few models I made, I didn't UV to the correct scale which meant going back to make sure they all had the same texel density. This was so we could apply a texture to any object and it wouldn't look stretched or pixelated. After unwrapping each UV section of any object I would rescale the UV's well above the 0-1 space so they naturally tile. I would also make sure that the grid squares always matched to the texture density so if two separate objects were adjacent with the same texture, they would appear the same resolution.

After these technical parts were decided, the next part was to model many low poly assets and create a large enough library of tiling textures in Designer to give Alessio enough variation when painting objects with the vertex painter.

First it was buildings and statues. Pretty straight forward. Make sure they don't have many straight lines, add variation and random kinks to the corners, bevel only when necessary to change the silhouette enough. Keeping in mind that this will be a very large level in VR so overall poly-count will need to be low.







Next was all the random additional items to add to buildings and streets to populate them (market stalls, flags, destructible walls, railings etc). I had decided to do all these props separately so they could be copied and placed in engine to customise as they went, hopefully saving time for us all in the long run. These were designed so that any texture could be applied to them and it would look fine.






Most of these smaller objects were easy and didn't take more than one iteration in most cases. The ones that took the most time was the actual terrain. The main city platform, the huge cave model with branching mines, beach cave, bridges all had to keep being constantly re-moved and updated through the development process. For instance I had already created the cave and completely UV'd it and basically had to do all of it again which was a huge amount of time lost. So at that point, all large objects that may need multiple iterations I decided not to UV right until they were definitely not going to change anymore. This had the benefit of not wasting more time, but also was hard to visualise in engine because all the textures were messed up on them. In the end though I made the right decision, because I had to change some of these models countless times. Some were even removed entirely.

The images are hard to see in Maya because of the scale of the level. A much better demonstration can be experienced when playing through the level.






After the smaller objects were done, and while simultaneously making changes to the environments, I spent my time creating (probably too many) textures. My reasoning behind making a lot was because I was a little paranoid that the environment wouldn't have the required variation when left with only a few textures in such a large space. I started with many rock variations as pretty much everything is made of rock! I thought it would be useful to have a few quite different types so every object doesn't look like it's made of the exact same material.

I already had a few textures done from the alpha, which after some texture testing in Unity I thought were a bit too dark and oversaturated. The Substance Designer viewport is nice quality but often is more washed out than in Unity for some reason. I also edited the older ones as well as made a bunch of new ones. When I tested out all the current rocks extensively in my tester Unity project with the substance painter, I discovered that many were very harsh, so I decided to make a soft version of all the biggest offenders. It wasn't very hard, a bit of desaturating, toning down the height maps and making the normal maps less harsh. The good this about these is that they blend very nicely with their originals. Adds a nice bit of variety to the level.







Next was to make the more specific textures for objects. I found some particularly hard when trying to keep a more chunky, simplistic style to not become too realistic. Metal, and rusty metal were prime offenders. Also I found leather quite hard to not make too detailed, and in the end it's probably my weakest one.







The great thing about Designer is that you can have Unity set the resolution of the textures on the fly. I've put a soft limit of 256x256 on them, so that is what they import at. I believe Alessio stuck with that because they look surprisingly good still even at this lower resolution. The good thing is that if he ever has the need to just increase the resolution of the textures, he just has to change a couple of parameters in engine, and they will all update. A very nice compatibility feature of Unity and Substance.

After these were all done, I cleaned up the Substance graphs to cause as little computation as possible in engine, and only had output nodes that were strictly necessary: Albedo (with height map as the alpha of albedo because the vertex painter reads the height in this way for the blending), Normal and Metallic (with Roughness as it's alpha).

My next task was to finalise all the character and enemy models. I had to go back and fix them up and UV them properly so they could be implemented into the engine. Easy enough task, just time consuming.

Then the player 'arms' needed to be implemented properly so I had to fully model them out, as they would be in front of the users vision the whole time when playing, and also would have UI elements attached to them so needed to be implemented sooner rather than later. Because of their prevalence in the scene, and proximity to the camera, these would need to be slightly higher poly-count that most other things in the scene.

I initially had a lot of trouble trying to model these out in Maya. Even with decent model sheets, it was hard to properly visualise the shape, and they were just high enough resolution for it to become a confusing and inaccurate mess. After a few attempts at doing some different methods I ended up going into zBrush to do them. It was really easy in zBrush and wish I had done it sooner. I'm much better at sculpting the more complex shapes in there, I find it easier to visualise. When I got the shapes correct, I simply dyna-meshed the poly count down to an acceptable amount then did a few decimates until the poly count was really low and the geometry was all triangulated and chunky. I then imported them back into Maya to do the UV'ing.






Next was the character who will guide the player in the form of tutorial messages: The Shadeling. Now, this guy doesn't have traditional textures but was going to be particles effects all done by Maciej. He was new to doing particles and I was new to setting out UV's for them so this took a few iterations and back and forth to get the UV's in a shape where the particles and scrolling textures he was using looked normal. This ended up with the model being very basic with essentially just floating planes, but appeared the best way of making it look ok when animated.






At this point, I was pretty swamped with quite a few models and textures to finish up and so I had to source some of the model making to Maciej. He said he could do the plants because they hadn't even been started. So the only modelling I didn't do for the project was the plants. He would model and UV them and I would texture them. Probably should've been the other way round considering he's the artist! But, he had trouble using the painting programs so I said I would do that as I could easily set things up my end, and then the textures may look more in keeping with the rest of the level as well.

While he modelled the plants, I started texturing all the villagers and enemies in Substance Painter this time. Initial tests with only tiling textures on the characters looked pretty bad in engine and needed additional details to not look so flat. So I had to re-arrange the UV's (again), the rock parts of their bodies would be one sheet and one material, the clothes and accessories would be another sheet but various materials. I had to make sure everything was given the correct materials before importing into Painter.

For each character, I imported the model (only low-poly because there is no high-poly for baking) I would then bake the only maps I was able to in Painter. The most important of these were the position map and curvature map. These would help me add interesting dirt masks to gain that additional detail the models were previously lacking. I first gave the models one of the selection of my Designer textures I had previously made. They are fully compatible between programs so this was easy. I added different rocks or material for each part of each model trying to keep to Maciej's original design as much as possible. I then added ground dirt or edge wear type masks to give them a slightly more 'real' feel than everything else in the scene.

I tried to keep these details and minimalist and simple as I could without looking like they were painted on and also without looking too realistic. Because of just how low-poly the models are, they are in no danger of looking overly complex with the level of detail I gave them.

I did that with all the villagers, and also all the enemies too, with a very similar process.









Next, the plants were modelled so I could texture them too. First I had to do a bit of UV cleaning up, getting rid of distortion and maximising the space available, and bit of adding smoothing groups too. Then I did the same process in Substance Painter as with the characters and enemies, but this time keeping the textures all on one sheet. Each character is 2 sheets of 512x512. I kept the plants and trees the same, only the smaller plants were 256x256 instead. I stayed as exact to Maciej's original concepts for these plants as much as I could, I think they turned out quite well, and quite accurate to the originals.





After that was a bunch more fixing random things: resizing platform elements; making variants of railings; decreasing slope intensities; changing bridge dimensions; adjusting the puzzle height on the door; changing and resizing some of the cave and mine layouts etc. The list goes on...

Finally I had to model the menu. In VR, the menu is often a physical space instead of a 2D pop-up and so the menu would be a collection of objects to be interacted with. In our case we have a smaller cave which the player stands in, then plinths and shelves which have objects which can be moved and placed in the necessary areas. Easy enough to build, and using the same texturing technique as all the other geometry.





Only a few more fixes occurred after that for me, little ones here and there. To be clear, I pretty much stayed away from all engine responsibilities in this project. I made the models and textures and made everything as easy as possible for the other two to implement. All level design and arrangement, even vertex painting has to be credited to the other two who primarily worked within Unity. I think we found it developed naturally this way, it is easier to organise and manage when there is only 1 build being shared between two people rather than three. Even though I would have liked to have a bigger input when it came to placing all the objects and the level 'set-dressing' I had too many other things to edit to be able to put in enough time when it was required. I also would have liked to do more of the vertex painting of the level. I mean I did all the preparatory parts like sourcing the vertex blender and creating the textures and didn't get to do the most fun part.

During the project I had a solo 'texture tester' Unity project which I then transformed into a bit of a demo scene to show some images for the portfolio and blog. Because of their low-poly nature, they look much better in engine than being shown off in a render compared to higher-poly models.








In this project I hadn't really learned a whole lot compared to what I wanted. I originally joined the team as a character modeller to specifically enhance my ability to create higher-poly characters. As the project progressed, the poly-count got lower and lower and my duties became further and further from what I originally envisioned. These factors added up to me not gaining much from what I wanted, but I did learn some skills which I didn't think I would be needing, all useful skills when it comes to setting up environments, especially in terms of texturing.

I did learn about texel density, which doesn't apply as harshly when making characters compared to huge tiling environments and terrain. I did it in a bit of a 'home-made' way so I didn't discover a good 'universal' way of using it in a project like I would need to if I was working alongside other environment artists.

I learned a neat trick of the transpose random variation in Maya. Nothing major, but very useful to creating uneven surfaces and randomising the vertices of objects a little to give them that 'wonky' look without having to edit them all individually. I did actually discover that nearer the end so the the majority of the level was done manually unfortunately.

Another small thing I learned was how to UV with particle effect animators in mind. This does apply to character and will be something I bear in mind in the future. For instance this must happen a lot in action RPG's, MOBA's etc. which have a lot of particle effects directly around, and on the the characters clothing.

The most significant thing I learned by far was how to use Substance Designer, as that will be useful whatever I go on to do, especially environments. I had a bit of trouble keeping the textures to a more simple style. Making realistic textures in Designer is much easier than one would think and trying to keep the variation just enough to not be boring, but not enough to suddenly seem like it could be a real surface. The smooth metal I made, and the rusty variant were the perfect demonstrations of this. If you add small striations and a bit of surface noise, put 'metallic' value to full you basically have a real looking metal. They key was to limit the noise and reduce the metallic amount. Even though it is pure metal, reducing it down to 60-70% or so makes it feel just 'off' enough so you can tell it's metal but doesn't look realistic. The rust was by far the hardest and I don't think I managed it. Rust will just look like dirt if it doesn't have that speckled variety, but it was just way too easy to make it realistic looking. I think the one I ended up with still does. I tried reducing the noise and blurring the edges to keep the colours and shape without all the tiny noise detail. I don't think it works that well, and it probably just looks like weird blurry rust.


Most of the others I managed to straddle the line enough to stay within the style and I'm pleased with some of them and the way the environment turned out as a whole. I think it looks quite good considering all the structures and terrain are very low poly for their size and every environmental texture is only 256x256. I think it looks way more detailed than it actually is, which for me personally, was the entire goal of this project. I tried to make a large level that would look quite detailed and not too blurry close-up and still be able to run in VR. There is definitely further testing and optimisation to do as it doesn't run as well as we'd like. I'm fairly sure with further optimisations and refinement this technique could make it a viable one to use on larger VR levels like these.

Some more of the characters and plants in engine:



No comments:

Post a Comment

Note: only a member of this blog may post a comment.