Categories
Personal work

Der Die Das Companion

I decided to create my own Der Die Das learn app in which users can learn German noun articles. The app is now released!

Get it here for free:

The project can be found here: https://derdiedascompanion.de/

Can also be found on Facebook: https://www.facebook.com/derdiedascompanion

Backstory

In 2015 I moved to Germany for work and in the beginning I was getting around fine only speaking English. I put off learning German for a very long time since I knew it was going to be hard work learning a new language. I regret not starting learning the language sooner. In the end of 2018 I finally started taking German classes at VHS Offenbach to learn German.

I took classes three days during the week, with each class being three hours long – it was hard work but I think it really paid off. The German language integration system does work, at least it did for me. I finished the classes A1.2, A2.1, A2.2, B1.1, B1.2, B2.1, B.2.2 in two years and wrote telc exams for B1 and B2 which I passed with the grades “Sehr gut”.

At the beginning of studying, I always felt that there was no good way for me to learn the articles for the German nouns. Since the articles are really important to learn, as they are a big part of the foundation of the language, I figured why not gamify the article learning process? I looked around for already available apps, but all of them lacked some or many of the features I thought were important:

  • Color coded articles
  • Sound coded triggers when answering correct
  • Highlighting of rules
  • Translation of words
  • Words used in context with example phrases
  • Explanation of the word
  • Motivational support
  • Sense of reward and achievement
  • Sense of progress
  • Repetition
  • A learning path
  • Themed chapters
  • Ability to share word lists with others

I wanted to create an app that combines many different learning techniques to make sure you learn not only the articles, but also new words and their meanings. The most important part of a learning experience is for me to have fun!

As a challenge, I decided to create my own app not only for a way of learning articles myself, but also for others. I was also seeking for a way of learning new tools and technology. Creating my own app has always drawn my attention but I had never really had a reason or motivation to do it – until now. This was a perfect project for learning how to create my own app!

I decided to use Unity for this project, since I already knew the Engine from a content perspective and I also wanted to learn how to make a full game with it.

I always had an interest in databases and thought this project would be perfect for me to learn them. I decided to use SQLite with Unity and it turned out to be a great match. I extracted data from Wiktionary to populate the database and then I used Microsoft Neural Machine Translation to translate many of the words to different languages.

In the App database there are a total of 72319 words with:

  • Translation to 22 languages
  • IPA (International Phonetic Alphabet)
  • Meaning
  • Example
  • Case: Nominative, Dative, Accusative, Gentitive (Singular & Plural)

I decided on these languages based on the top percent foreigner population of Germany:

  • Catalan – Català
  • Croatian – Hrvatski
  • Czech – čeština
  • Danish – Dansk
  • Dutch – Nederlands
  • English – English
  • Finnish – Suomalainen
  • French – Français
  • Hungarian – Magyar
  • Icelandic – Íslenska
  • Italian – Italiano
  • Latin – Latine
  • Latvian – Latvietis
  • Norwegian – Norsk
  • Polish – Polskie
  • Portuguese – Português
  • Romanian – Română
  • Slovak – Slovák
  • Slovenian – Slovenščina
  • Spanish – Español
  • Swedish – Svenska
  • Turkish – Türk

Please visit the website: https://derdiedascompanion.de/

Get it here for free:

Categories
Personal work Unity

Burning planks in Unity

I built a prefab emitter that spits out planks in Unity using C#.

While I created the effect I built the scene at the same time. I created this scene (maybe a little too complex for real-world workflow) with some control parameters because I like to work on interactive objects.

Providing a simple context like this saves a lot of time for me when iterating on the effect. I think the result turns out better too. Setting up a scene like this also allows me to think about potential implementation features the effect could benefit from.

Plank Projectile

Plank projectile is simple geometry with convex collision. Randomly selecting between six different plank meshes on creation. Plank variations are roughly sized 0.5-1 meter long.

Flame sprites that use plank mesh as geometry emitter. Particles are simulated in localspace to make plank look on fire.

Smoke emission is distance based together with standard emission rate so it still emit smoke when static on land.

Additive Smoke lit up by the flame is using an Additive shader with the same texture as smoke but with shorter lifespan.

Embers are sprites with noise applied to their motion.

Ground impact

When the plank hits the ground it will spawn an impact VFX. The impact VFX is oriented with its impact normal. The impact share a few elements as the plank fire – Smoke, Additive Smoke and Embers.

After plank has come to a stop, it will stop burning after a few seconds. The extinguish sequence is not really animated or designed, it just disables emission of particles. If taking this effect further, I think that the way it fades out is important as well.

Water impact

Directional elements are driven by the impact direction of the projectile, I named this property tilt in this project. With a steep impact-angle the splash should appear less directional while flatter impact-angles should result in a more directional splash. The impact “directionality” is handled in code to tilt only a few select elements of the water impact effect.

Ripples & Foam consist of expanding rings on the water. Secondary ripples appear in splash direction as water splash fall down on water.

Fire is extinguished and result is a small Smoke puff and Embers.

For the water splash, I used two different textures, one is more misty and is suited well for bigger elements while the second texture is used for smaller elements such as droplets.

After a short delay, there is a secondary and smaller splash of water simulating the plank impact creates a small air-pocket which then collapse into the secondary splash. This effect is super obvious when looking at reference videos for objects dropped into water.

Basic water droplets add a little more detail.

What can bring this effect further?

  • Scalable effects based on per-plank variables (attributes or parameters), for example:
    • Size of plank affect fire-amount.
    • Fire-amount variation to give each plank thrown a more unique look.
    • Impact should scale based on size of plank and impact speed.
  • Better water surface shader
    • Transparent, underwater fog & vertex animated.
    • Vertex animated water surface would break my effect currently as I use horizontal billboards for a flat static water surface.
    • Water surface transparency would also break the effect, as water splash particles are currently rendered underwater.
  • Bubbles underwater from the plank when the fire fizzles out.
  • Refraction on the water splash.
  • Heat haze distortion from fire.
  • Improved particle lighting & shading
    • Support time of day.
    • Smoke should react better to dynamic lights.
    • Improved backlighting (when looking through particles towards the sun).
  • Burning wood-shader on plank.
  • Adding wind to particle motion.
  • Ripples from plank when it’s floating.
  • Smaller textures by using less frames in flipbooks.
  • Cull underwater particles.
  • I like the water-splash a little better when I set timescale to 1.3, so I think this element could have benefited from a little extra tweaking to its timing.
  • Screen effect that adds a water splash to camera lens if close enough.
  • Audio!
Categories
Personal work Research Showreel Unreal engine

Unreal Engine 4 Showreel 2017

I try to keep myself updated with Unreal Engine and this video shows a collection of small projects I made during my spare time for fun.

Projects:

Categories
Personal work Unreal engine

Tower Defense

In pursuit of taking my Unreal Engine skills to the next level I wanted to learn more about Blueprint and how to create Object oriented archetypes.

I built this game so all Towers would inherit from the same parent tower class while all enemies inherit from the Enemy base class.

This game uses Data Driven Gameplay to control most design variables of the game. All Tower-, Enemy- and Wave parameters can easily be balanced simply by updating and re-importing an Excel spreadsheet.

I really like the flexibility of this data driven approach. Saves me a lot of time!

Levels

Each wave, or level, is defined with a few parameters. This makes the levels really easy to tweak and extend.

Towers

Tower data is exposed in the spreadsheet where all tower parameters are tweakable.

Gameplay

To make the game more tactical and challenging, it supports five different Armor and Damage types that have different Strengths and Weaknesses according to the spreadsheet defined matrix:

Categories
Personal work Research Unreal engine

Data driven gameplay

I enjoyed playing Destiny 1 back in the day when it featured Lootcave gameplay. I thought it would be a great way to explore data driven gameplay by trying to re-creating the Lootcave phenomenon.

I wanted to learn how to use an external Excel spreadsheet as input to Unreal Engine. I wanted to control as much as possible using this spreadsheet, such as items, balancing and loot tables.

Purpose of this project was to learn how to use:

  • Multiple maps and switching between them.
  • Data driven game design and balancing.
  • Item database.
  • Loot tables.
  • Enemy attributes.

The project was built around the principle of being able to extend, maintain and tweak it with more levels, items and monster types. All these things can be done really quickly from an Excel spreadsheet without the involvement of programmers. A simple re-import of the Excel sheet is enough.

Categories
Personal work Unreal engine

Cannon Blast & Water Impact

Created a fully controllable black powder cannon which can be aimed an shot. The cannonball hits the water and creates a splash.

Made in Unreal Engine in a few days.

Categories
Personal work Research Unreal engine

Motion Vector & 2D Gradient Lookup Shader

Realtime VFX artists can use Motion Vector frame blending together with a 2D lookup texture to achieve higher amount of detail using less resources. These advanced shader techniques offer an efficient way to save texture memory and shader instructions.

A looping texture offer ~infinite particle lifespans and slower texture playblack rate. My example texture is a 32 frames and its playback speed can easily be slowed down to 5% without sacrificing visuals.

Required Textures:

  • Main texture, BC5 two channel greyscale
  • Motion Vectors, uncompressed
  • Linear2D gradient lookup map, RGBA 256×256

Main Texture source is a 32 frame animation created in FumeFX. Motion Vectors came rendered straight out of FumeFX with no optical flow post-process. Sequence made looping using a simple crossfade in After effects.

This shader is created from the inspiration from Klemenz Lozar’s blog post about Motion Vector frame blending.
LINK

Another source of inspiration was Simon Trümpler’s blog post about Fallout 4’s clever use of 2D gradients:
LINK

Categories
Personal work Unreal engine

Multiplayer Snakes

A few colleagues from Jagex and I wanted to get some experience with Unreal Engine so we decided to create a multiplayer snakes game. I was the only person on the team with prior experience with Unreal Engine which meant I got to do training and mentoring as well, which was fun!

From a conceptual stage, this took about three weeks for us to make and I did all the graphics.

Categories
Personal work Unreal engine

Tic Tac Toe

I decided that I wanted to learn Unreal Engine 4 and blueprint scripting. I personally learn best by the learning-by-doing approach which I highly recommend.

Since I wanted to learn something new, I thought it’d be best to start small. I ended up aiming towards a simple implementation of a Tic-Tac-Toe game where I could play against an AI.

The AI is limited as it doesn’t know the concept of forking, or how to defend against a fork-move, but it ends up doing quite well anyway.

Disclaimer: the graphics was not part of the exercise!