MATTHEW DALE
Game Programmer and Technical Artist:
Proficient in C++, C#, GLSL/HLSL Shaders, Unity.
Have used Perforce and Github
Hi. Feel free to have a look at my latest work below, or click my CV above.
​
I have my artwork on another page above also.
"To live in love towards our actions and to let live in the understanding of the other person's will, is the fundamental maxim of free men"
Rudolf Steiner
VIBE CITY
A team based online multiplayer game, where 2 teams of up to 4 Vibers battle it out across the city districts.
I was the Technical Artist on this project, creating the Interior Mapping Shader, Ocean Shader, Toon shader, visual FX, Spline Tool among other tasks.
​
![](https://static.wixstatic.com/media/d20e05_7172a87a86814a44bb44981179553964f000.jpg/v1/fill/w_980,h_551,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/d20e05_7172a87a86814a44bb44981179553964f000.jpg)
RAYMARCHING
Infinite Generation Using Signed Distance Fields
I have explored Raymarching allowing seamless integration into Unity. The below is running on the GPU as a image-effect shader. There is no geometry only signed distance fields.
See the fantastic work of:
Inigo Quilex
https://iquilezles.org/
Art Of Code
https://www.youtube.com/c/TheArtofCodeIsCool
Also:
https://www.shadertoy.com/
![](https://static.wixstatic.com/media/d20e05_7abd1f2eca2546ba817f1fcb9103641ff000.jpg/v1/fill/w_980,h_531,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/d20e05_7abd1f2eca2546ba817f1fcb9103641ff000.jpg)
VABYSS
VR Horror 3D Pipe Game
I designed and developed the core pipe mechanics for this game. I also wrote the post-processing fragment shaders among other tasks.
![](https://static.wixstatic.com/media/d20e05_4a4972bf0a4d48ca9a74cf59c9113053f000.jpg/v1/fill/w_980,h_531,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/d20e05_4a4972bf0a4d48ca9a74cf59c9113053f000.jpg)
PUBLISHED ANDROID GAME NUMBER SWITCH
Self Developed and published.
I designed, developed and published a small, simple number swapping game for GooglePlay store to be played on android.
​
https://play.google.com/store/apps/details?id=com.SkyShattersWindEntertainment.NumberSwitch
![NumberSwitchStoreFront.PNG](https://static.wixstatic.com/media/d20e05_74f9e4801c904661bb92923395df5ad4~mv2.png/v1/fill/w_980,h_782,al_c,q_90,usm_0.66_1.00_0.01,enc_avif,quality_auto/d20e05_74f9e4801c904661bb92923395df5ad4~mv2.png)
INTERIOR MAPPING SHADER
Work On Vibe City
Building upon the work of Joost and GameDev Guide, I implemented an Interior Mapping shader.
​
(Building model and design by Flynn Williams)
​
https://www.gamedeveloper.com/programming/interior-mapping-rendering-real-rooms-without-geometry
​
Game Dev Guide
![](https://static.wixstatic.com/media/d20e05_362126a49d3b49a184c4a0c91d750c4df000.jpg/v1/fill/w_980,h_510,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/d20e05_362126a49d3b49a184c4a0c91d750c4df000.jpg)
PROBLEM SOLVING IN VABYSS
Work On VAbyss 3d Pipe Game.
DIRECTIONS
I start out by defining a bit field. Each edge of a cube is represented by a bit. This way we can have a unique number to define every piece and its rotation.
​
For example a pipe piece which has up, right and down is: 1+2+4 = 7
Rotated clockwise around the forward axis we get a pipe piece which has right, down, left: 2+4+8 = 14
PIECE
I created a class that the pipe pieces could use.
ROTATIONS
Every piece is essentially a bit field, or a number.
So to rotate this piece we only need to multiply this bitValue by 2.
​
A piece with up, right = 1 + 2 = 3
rotate this piece: 3 * 2 = 6
and we find indeed this piece has
right, down = 2 + 4 = 6
another rotation: 6 * 2 = 12
down, left = 4 + 8 = 12
another rotation: 12 * 2 = 24
left, up = 8 + 1 = 9 ???
Here we need to wrap the value around by subtracting 15 so:
24 - 15 = 9
​
Or as shown below:
if (zAxisBitValue > 0b001111) zAxisBitValue -= 0b001111;
This idea was suggested in a brainstorming session with Dr. Mike Cooper, however the challenge for me now was to extend this to three dimensions as this solution only works on one axis.
​
After much thought I opted to:
1) Mask out the two directions that will stay the same with rotation. These are the directions that run along the axis of rotation
​
2) Collapse the three dimensions into two by 'rotating' them around. (simply unsetting the applicable bits and setting their corresponding two dimensional bits.
Eg. For x-axis (along left-right) bits FORWARD and BACKWARD will now become RIGHT and LEFT
​
3) Perform the two dimensional rotation described above.
​
4) Now undo the 'rotation'. In our example bringing the RIGHT and LEFT around to FORWARD and BACK.
​
5) Finally we only update the bits that are not along the axis of rotation.
​
See below for my implementation with the x and y axis:
IGNITION
Another challenge was the win state. I needed a way to check which pipes were connected to each other and the source and then follow the flow through to the end piece.
​
I decided to use recursion for this. So each pipe piece is placed in a three dimensional array. Each piece holds the indexes of it's valid connections. Each piece also has an active flag.
​
I created a function called 'Ignite' that simply checks if itself is active and if not sets it to true, then loops through all valid connections and calls each connected piece's 'Ignite' function.
​
Then we just call the source piece or piece(s) Ignite function and watch the connections propagate of themselves.
​
To check a win state is as simple as checking the active flag of the end piece(s).
CONNECTIONS
To update the connections of each piece I did some math to check the adjacent cells in the three dimensional array and then compared their bitValues to make sure the adjacent pieces are rotated to face each other.
OTHER SYSTEMS
The other systems I needed were:
​
1) A way to interact with the pieces, to pick up rotate and place them into a game board. For this I utilised Unity's Physics system casting out rays and checking for collisions.
​
2) Game Board system. For this I created a class which utilises Unity's Collision system, if the piece is in collision with a grid of cells, I make the relevant calculations to place it in the game board array at the appropriate index.
​
3) This project was in VR using the Oculus Go. I hooked up everything using Unity, setting up the controls to use the Oculus's controller and headset.
​
4) Vector Field. I also implemented a three dimensional Vector Field in order to move fish around the player.
DESIGNER CONSIDERATIONS
I created a custom editor script in order to allow the designers to use booleans to create the pipe pieces instead of doing the mental arithmetic.
​
I also used Unit's OnDrawGizmos to visualise the pieces and game board, making it easier to create levels.
![](https://static.wixstatic.com/media/d20e05_2eba9438e52b4a89b275ced57a15b014f000.jpg/v1/fill/w_980,h_531,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/d20e05_2eba9438e52b4a89b275ced57a15b014f000.jpg)