This
section will serve as an explanation of some of the other things I’ve been
working on for ether that didn’t really need a whole section made for them, as
well as a look into what I’ll be working on next.
First I
could mention Lens Flares. Lens flares were made through textures in Photoshop.
In order to save memory, 3 different lens flares were comprised in one image.
To do this I simply painted monochromatic lens flares into each one of the
image’s channels (R,G,B) allowing me to have 3 different lens flares in one
image. Lens flares were also used to simulate Bloom due to the glitch UDK
currently has on DX9, where a yellow Bar appears on the right of the screen if
bloom is activated.
The buoys in the sea were made using the same
techniques, only applying a Sine wave for movement in the material.
The next big
thing would be the Skydome. With the same idea in my head of keeping everything
reusable and versatile, I created a skydome that could be used for night time
scenes as well as day time, dawn, dusk, etc. To do this I made a material
network that would allow to change the colour of the sky, clouds (and clouds amount)
and stars. This material also allows to edit the amount of stars in the night
sky as well as their complete deactivation.
As for the
future, for Ether 2 I will be creating a lot of Snow systems, as well as making
the season changes more interactive and better. I will continue to try and
create the most efficient workflows possible so that our small studio doesn’t
have to spend too many resources. Here is a video detailing a few other things and with better explanations:
I hope you
have enjoyed my work so far! Until next time!
Particle
systems in Ether posed pretty much the same problems as everything else so far.
How to make them fit the Ether style? How can we make them quickly? Bellow you
will find some of the particle systems I created for Ether and how the process
was.
One of the
main issues with VFX work is that it can be very time consuming. The other
issue is, when making Ether in a hand painted style, you almost want to stray
away from using technology too much and avoid normal maps or anything too
“techy”. When making particles this was to be the same, however, since we didn’t
have much time to meet our deadlines, We allowed technology to do most of the
work for us. I figured, as long as the textures look like they belong in Ether,
that’ll do!
The first
particle system is the Flies that hover around the port’s lamp posts. This was
simply made by creating a soft edged 16x16 texture of a yellowish dot. After
that, I just applied an orbit module to the particles and adjusted their
velocity and spawn areas. A very simple yet efficient particle system.
The second
particle system is the chimney smoke. To make this I used a flipbook technique,
in which I divided an image in 16 parts (4x4) to create the different steps of
the animation of smoke from its birth to its expansion and eventual disappearance.
This allowed me to make the smoke look hand painted and fit the ether style,
while not having to worry about actual animation for the smoke. When importing,
it’s important to check the “Flipbook” option. After that, I edited the
material and applied it to the particle system, and after a few tweaks I got
the effect I wanted.
For the
wind particle systems, we decided to go with something more painterly, as if an
invisible brush was drawing the strokes of wind within the world. To do this, a
simple, soft edge 16x16 texture was used and a Ribbon Particle system was
created. This allowed us to animate the particle system and move it around the
level as it leaves a trail of paint on the world. The results are surprisingly
nice for such a simple particle system!
The last
particle system I wanted to look at is a prime example of how to create
workflows that are efficient and fast for small teams. In the case level, the
team had the idea of having birds flying around the level. Since creating 3d
models of these and rigging them and then animate them would have taken up too
many resources, I decided to tackle the problem with a particle system. I
applied the same Flipbook principle I used for the chimney smoke and made a
texture with the different stages of wing span of a bird’s flight. This allowed
me to create hand painted textures of the birds, and after that, I was able to
use an orbit module in the particle system to recreate the flying of the birds.
The results were convincing and far cheaper than making a 3D version with
animation.
You can
find a video breakdown of the particle Systems of Ether here:
When
setting out to create the trees for Ether, the team had the idea of being able
to change the seasons on the fly, so for example, one minute it would look like
a summer day, the next it would turn to autumn. From the get go, I had this in
mind and I was able to create a system that allowed for us to do that, by
slightly tweaking the grass shader I made earlier on in the development
process.
Apart from
that, making trees that would hold up to the Ether style in a fast and
efficient manner would prove to be quite hard. Modelling trees in an singular
fashion, creating enough variation and making sure Uv mapping them in the
traditional manner would have taken an extremely long amount of time, and since
we’re a team of 2 artists, I had to figure out a system that would allow me to
create trees in a fast manner, UV map them with ease, and for them to allow for
an almost modular approach in their creation workflow.
The
following explains how I go about making the trees for Ether and how I managed
to create an efficient workflow for a small team.
The first
thing I did was create a spline that would define the shape of the tree. Each
branch would become a separate spline. After this is done, I made a cylinder
and edited it to make it resemble a tree trunk or branch. Once this was done I UV mapped this piece. The
idea behind this method is that we will now duplicate our cylinder and create
an INSTANCE of the original. This will ensure that every time we need to edit
our branches, we can just edit the original and not have to worry about akward
rotations or positions that our branch will take.
Once we
have our instanced cylinder, we apply the “Path deform” modifier and stretch
the cylinder to follow the shape of the branch. After making a few of these
branches, we will have the skeleton of our Tree.Now we can paint the texture for the bark. In
this case, for the Oak, I made the following texture:
Now it’s
time to make the textures for the leaves. One thing I must note is that when
texturing the leaves, I didn’t want to create extreme colour variations. The
reason behind it is that to ensure the transition between summer and Autumn
doesn’t end up having unrealistic coulours like blue leaves!
Once this
is done, we can create a plane that is Vertex painted (in order to work with
the wind expression) and apply our leaves texture. With these planes, we can
now create a clump of leaves that we can place as branches and create the
canopy of our tree.
The final
result in udk is:
And to show the season changes:
Here is also a Forested area created with the trees and foliage:
Here you
can find a video explaining the tree making process:
The next challenge of Ether
was foliage, specifically the Grass. As always, the grass needed to be
optimised to its full potential, and of course, not compromise the ether style
at all.
The original approach I took
was to create 3D blades of grass using planes, and then use those shapes to
paint over in the texture. Since the blades of grass were going to be very
thin, utilising the linework and loose brush style of Ether wasn’t much of an
option, and this was very obvious, especially when looking at the grass from
close up. However, this first approach became a good starting point for the
wind simulation and subsequent foliage approaches… at least now I knew what NOT
to do! (in terms of texture and shape!)
And it is the wind expression
that became very important. To bring life to the environments, we wanted the
grass to move with the wind.
For this, I began using the
same expression as I did with the ocean waves (the mesh would be pushed in
different directions, but it’s the same basic concept)… the problem was that I
needed the base of the grass to stay still and I wanted for us to be able to
change the direction, strength and speed of the wind on the fly, without having
to make major changes to the material. On another note, I needed this material
to work across the board when it comes to foliage, so I began to put a system
in place so that all foliage would work with these rules. It took a long time
to get it to work, but I believe the amount of time it will save down the line
will be priceless to a small studio with only 2 artists like WPG.
To get the wind to work, I
needed to introduce “Wind Direction and Source” into the material. The basic
concept is to convert this information into a vector (to specify the direction
and strength of the wind) so that we could change it on the fly. This is
multiplied by the wave expression and voila! It doesn’t work! ... Sadly, one of
the things I overlooked was the fact that doing the wind in this way would
displace the whole mesh… so even the base of the grass was moving… this
resulted in a very unconvincing, almost comical version of the grass that was
floating and moving around the environment. The good news is that it was easily
fixed! All I had to do was multiply that expression by a vertex colour… in this
case, the red colour. This way, any verts in the mesh that are coloured in red
will move, while black ones will stay still. This meant that I had to go back
and edit all my grass plane meshes and vertex paint them accordingly. Once this
was done, the result was much more convincing!
Now I had the grass working,
however, I couldn’t get past the fact that the grass did not follow the Ether
artistic style, so I had to take a new approach in terms of the type of mesh I used.
The new meshes were thick, had
a much better view from above and allowed me to paint the textures following
the artistic style of Ether…All of the vertex painting rules had to be
followed, but knowing that in advance made the workflow that much faster… I’m
really happy with the results and I think it does justice to Ether’s artistic
direction.
Now, although the grass was
looking good, and I had created a system that could be used across the board in
all foliage, the actual meshes themselves weren’t too reusable… if we wanted to
make an autumn scene, we had to repaint the textures all over again, costing us
a lot of time and a lot of memory!... this needed to be fixed, not only on the
grass level, but across all foliage.
Luckily, it was an easy fix,
and a rather functional one! All I had to do was multiply our diffuse texture
with a Vector Parameter… then we can create an instance of the material, and we
have completely versatile grass colours on the fly.
Here is a video detailing the
grass shader and its reusability, as well as other types of folliage:
Now we have the shader out of
the way… now we can focus on the rest of the foliage…Having discovered that thin shapes don’t go
with “Ether” style, creating the rest of the foliage was an incredibly fun and
enjoyable experience… I still haven’t finished, but a lot of it is in place!
Here are some pictures of some
types of foliage and a video to see them in action:
Here is a video of some gameplay for Ether, where you can see the folliage and water in action :)
In this edition of foliage, I
have chosen not to put any trees in, although a more in depth explanation
of how I am making the trees for Ether is coming very soon!
Although I feel that the grass
shader is getting close to being finished, I still want to introduce some stuff
for decay and burning foliage… I’ll keep you updated on my progress J
Thanks for taking the time to
stop by and read! If you have any questions, please ask!
The first challenge at White
Paper Games came in the form of water. Replicating realistic water is quite a
feat on its own, however, for Ether, we required the water to make sense with
the world and follow the artistic style that we had already established for the
game. This created a number of challenges that needed to be solved:
-How do we
make the water hold up to the visual style of Ether?
-How can we
make water using the minimum amount of resources possible?
-Can we make
the water reusable and applicable to non-ocean instances?
-How can we
animate the water without any physics simulations?
This set of questions had to
be answered and here is the result we have come up with:
The first and foremost concern
I had was to keep the visual style of Ether intact. Therefore, the normal map
that would create the ripples would have to be hand painted.
I used Corel Painter for this
instead of Photoshop. In Corel, you can adjust the amount of paint added to the
brush and make it lit so that it feels thick and painted on canvas; I felt this
was crucial in order to get a good painterly effect on the water. The result
was pretty bad for the first set of tries but I ended up getting an effect that
was quite nice:
Now I just had to mix a couple
of sets of normal and pan them in different directions and a subtle effect was
created!
Now that the ripples were
sorted, I needed to focus on animation… an ocean has waves and this couldn’t be
simulated with physics considering our limitations, so a workaround had to be
found. I started doing a lot of research into how to solve this and began to
create a solution to this problem.
Using the world displacement
node in the material, I could displace certain parts of the mesh based on a
mathematical expression. The fastest way to do this was using a Sine wave. In short,
it creates a wave that varies from black to white, making everything that’s
white push up, and everything that’s black go down. The good thing about this is
that it’s extremely cheap (only 4 instructions in the material). The only downside to this is that it works
based on the amount of verts the mesh has, so it meant our water shader had to
be quite highpoly. In the end, we went with a 2048 triangle mesh, which is
still pretty low poly for a whole Ocean!
Here is a small picture of the wave expression:
The next problem was to make
the oceans depth believable and also make the foam for the water when it hits
other meshes.
For the foam, using a depth
biased alpha with a foam texture worked fine. For the translucency, playing
with a few values did the trick and the results were quite convincing.
Here are a couple of videos, one explaining my approach, another just showing the water in action, inside the game:
This expression is highly
reusable, in fact, it became the base for all foliage and wind based materials
in the game! So I’m very happy I took the time to make sure this material was
spot on and game ready as soon as possible.
Next, I will begin to talk
about the foliage for Ether!
So… the has been a small
change of plans regarding what I’ll actually be doing for my MA. Although I
would love to delve deeper into tessellation and next gen processes, (which I will, at a later date as
part of my MA as well…) I’m going to focus on showing the work I am doing at
white paper games, specifically focusing on how we can use technology to
enhance our workflow speed and efficiency while keeping the artistic value and
style of our project intact. I would also like to explore how important it is
for an indie studio to have these measurements in place in order to achieve a
goal as ambitious as our debut title: “Ether one”.
Over the next few days I will
be updating this blog explaining everything I have done and used in Ether, and
hopefully provide some insight as to how it has affected our workflow (or how
it will down the line).
I did my tessellation video, I'm very happy with the results! Problems still appear though:
Fixing seams seems imperative at this point.
After talking with my tutor Josh... do we need lighting information in the Diffuse now that the engine is handling all of that? Do we need such a detailed normal map?
In any case, here is the video documenting my progress: