Friday, April 14, 2017

Final Stretch 2

 This week for my thesis I upgraded my library of trees to add some diversity. After struggling to get pine needles to work for some time I decided to leave the trees barren for now. I don't think this takes away from the aesthetic of the level and gives me time to focus on finalizing my models and textures.

Here is the exposed grid. Once all of the game assets are correctly positioned on the grid it will be dropped below the surface of the terrain and the assets will be positioned on top of the terrain while still being controlled by the grid's functionality.

The image below shows the terrain populated with trees. (The grid has been temporarily hidden) If I have extra time before or after the thesis deadline I may add more complexity to the treelines, incorporating taller trees with fewer branches near the center of each section with fuller shorter trees at the edges. In addition, I created a windswept tree which can be added to the riverbank to add realism.

This image shows the final scale of the buildings compared to an in-game character.

I also spent some time incorporating some of my blueprint functionality into this level, but don't have screenshots due to the scattered nature of the blueprints across multiple blueprint classes and parent/child objects.

From now to the Wednesday due date I need to create textures for the QTown assets, model 2 more small structures (with UVs and textures), and add a simple water shader.

Friday, April 7, 2017

Final Stretch - 1

The past week was a bit slow with two other project deadlines coming up but I still managed to get just under 10 hours of work in.

There were two main focuses this week, Trees and Camera Control.

After some watching a tutorial and reading some documentation I learned about populating a scene with trees via SpeedTree's world building tools. This is achieved by creating an alpha map to dedicate tree zones and tree-free zones.
Black & white tree layout created in substance painter. The map is actually flipped vertically to match the UVs for Unreal's terrain (which are flipped along the V axis by default for some reason)

Bringing the map into SpeedTree and adjusting some settings gave me this result (using proxy spikes instead of trees)
There is a bit of a challenge getting the tree data into Unreal (due to SpeedTree's confusing licensing requirements) but a little more testing will let me know if this data is usable. Otherwise, I can write a blueprint to populate my scene with trees based on the previously shown alpha map.

Below is the first tree in my scene. This serves mostly as a test to get the workflow down. My first attempt at a pine tree came out poorly due to the small scale of the pine needle card and the large distance that my level needs to view the assets from. The underlying branches look good though and will serve as a good starting place for another attempt. Time permitting I'll be making more trees and increasing their realism through some SpeedTree tutorials and a more photo reference. 

The first tree in Unreal!
Next up is the camera controls. I implemented these to create a "frame" for my scene that limits the player's view to the landscape I've created. Below is the blueprint function I added to the main camera to create the limiter. 

This function plugs into the game's camera control blueprint just before camera position is updated to make sure that it cannot pass beyond the minimum and maximum values that I have set for X and Y in the scene.
The screenshot below shows a minor change to the terrain that I've made so that the game's playspace touches right up against the city, adding to the seamless incorporation of environment.
Blue squares show the character's max movement. Scrolling text on the left refers to the camera's position and was used for debugging the camera limiter function.
Next week will include the addition of more assets to the final scene and my first attempt at a tree population script within Unreal (assuming there isn't a quick way to implement SpeedTree's data)

Friday, March 31, 2017

Week 10

The past week(s) have been pretty productive. Lots of work on building the city including splinemesh roads, using the QTown plugin, and setting up materials.

Landscape layered material

Splinemesh Road Blueprint

Large QTown Test

QTown Test Close-up

Modular Road system
City Layout in Level

Sunday, March 5, 2017

Week 6

This week I worked on creating more assets added one more feature for the usability of my materials. I also set up activation/deactivation blueprints for two other buildings which now have visual and/or audio cues when they are activated. Here's some images of the assets:

Sunday, February 26, 2017

Week 4-5

The past two weeks in thesis have been very productive. I forgot to log hours for the past two weeks but I would guess at 8 hours week 4 and upwords of 15 for week 5.

 I started week 4 modeling a new building for my project. 

My updated plan for modeling is to have simple and efficient meshes that can fill 1x1 or 2x2 tile space in my game. This will keep the game visually simple and remove any confusion about which tile can and can't be used by units. I will finish base versions of all 6 buildings and then continue to add smaller details with any additional time.

After modeling the pub, I began my escapade into unreal materials starting with Unreal's procedural tile material which was released with a stream earlier this month. 

This material offers great control over any cell-based tiling system and I plan to use it and variants of it to cover lots of open texture space on both hero objects and in background environment objects.

After seeing the incredible versatility of procedural textures in Unreal and learning a bit about their creation, I decided that hand-paining most of my textures in substance painter was overkill and that I should instead invest that time in building a few versatile materials to use throughout my entire level. The first material I created combined wood and paint for a worn effect.

My first pass looked pretty good in previews but didn't tile very well across large surfaces. I wanted to see what other ways I could use the effect though so I added a painted metal version as well.

At this point I realized that I was being held back by the quality of the alpha maps that I was using so I began some research into the best way to create/acquire better quality alphas. I settled on Substance Source which provides fully built materials which can be imported directly into unreal and are often free for use. 

The source materials looked pretty good in-engine and I tried adding and adjusting a bump offset to amplify the effect.  I multiplied the RGB values of the normal map together to use as a 1 channel heightmap (which is the only input bump offset will accept)

Next, I searched for materials on substance source which would have useful alpha maps. I ended up taking the roughness map from the concrete materials and adjusting it for my purposes. This doesn't look great for solid paint on wood but works well for more faded colors and for the metals. 

The final step was to take my materials and make them editable with material instances. Below is a quick example of the versatility of the materials instances. There are still many improvements I could make to these materials but I think I'm going to leave them for now and continue on to do other work. I may come back and add LERPed normal maps but that's on the backburner for now. 

  Next week I'll be modeling more buildings from each faction.

Sunday, February 12, 2017

Week 3 - Character & Buildings

This week I spent time working on incorporating my character into the game (with some issues persisting through the week) and continued setting up buildings within the game.

Character - Since I'm not a character animator I've decided to get my character animations from Mixamo. I gathered a small set of character animations for the game for now. I set up an animation state machine to control the animations and a blend space to transition between idle, walking, and running. The issue arose when I tried to substitute my character/skeleton/animations for the defaults. After some research and digging into the plug-in's code, I found out that the default skeleton is built fairly deep into the plug-in's system, and it will take some serious work to fully swap the two. I've decided to put this off for now as there are a few ways to approach it depending on how much time I have available.
Character mid animation 
Buildings - After the character issues, I decided to switch gears and start working on the buildings some more. I started by importing my first building into Unreal and adding it to my building blueprint. I also set up a UI widget which will display all of the actions that a building can perform. The only thing holding that up is that I'm not sure how to call a custom event within a UI widget blueprint. After some research, it seems like an event dispatcher may be useful here but I'm going to leave some of that work for next week.
UI toggle logic

Building with real mesh. Light indicates the building is "on" in the game. This will be swapped out for active animations and an idle state.