jamir title

About me

         My name is Mert and i live in Istanbul. My passion is to create something new in my spare times as a hobby. I am not a computer engineer and i have a job which has nothing to do with computer programming, i started learning Erlang in 2015, closed myself at home in the weekends and nights, tried to figure out how things work during that time with a very huge effort.
         As i was getting better with the serverside language Erlang, i also learned how to use javascript dynamically in that time. I had a project where you can build and customize a 3D shop, sell stuff and walk around other people's stores online in real time. Then i started learning WebGL, Three.js and Blender from scratch. I loved how Three.js library makes things easier. After working 4 months for my 3D store project, i stopped and suddenly asked myself why wouldn't i build my own online 3D game with the knowledge i learned so far. I started my new project in the same day and realized that my knowledge was nothing for a fast working game engine on a browser. I worked harder and started to build the game, i was getting happier with every update i made. I achieved everything with the help of internet (mostly stackoverflow) and created the game by myself with the libraries created by beautiful people (i stated all the libraries used at the end of this text), tried to list important achievements i made during the development below, order of the achievements is not important, it took 3 years to fully understand all;

❖ Understanding pointerlock controls example in Three.js with velocities and gravity.

❖ Heightmap detection algorithm.

❖ Skeleton rigging and animation system in blender and use animation mixers and weights in Three.js. (Deleting an animation from NLA editor was the most difficult part, now i dont delete any animations, i just export the model with the ones i want)

❖ First person movement (jumping, running, sliding etc...) algorithms.

❖ Manual frustum algorithm, hiding objects which are staying out of the frustum range for reducing drawcalls.

❖ Diffuse, normalmaps, lightmaps and emissivemaps, Three.js material types and baking lightmaps with blender. I learned and applied normalmaps and lightmaps to my objects after 1.5 years and i was really happy with new visuals.

❖ Particle system (points) in Three.js and also SPE Particle Emitter library (i listed and gave links of all the libraries i used in the game in the end of this text)

❖ Cannon.js integration for the wall collisions and use it efficiently for the max performance, serverside (i tried to create my own collision system first and realized how hard it is to make it smooth and decided to moıve on with Cannon.js). Building all the collision boxes for all the map took 3 years to complete.

❖ Instancing and procedural generation of the objects. I started this before InstancedMesh appeared in the new Three version so i learned GLSL only for this from scratch and it was really difficult. Procedural generation code was one of the most time taking and hard implementation because i was responsible to keep the fps rate same while achieving this. Procedural heightmap and collision detection is included in this subject.

❖ Applying glow with shader and with sprites.

❖ Optimized bullet pools for shooting bullets which are working serverside.

I love to help people who started game development with Three.js. I mainly help them through our discord server: https://discord.gg/nUNmKR8HxE

Here is the list of the libraries i used during the development of Jamir with links;

❖ Three.js - https://github.com/mrdoob/three.js/

❖ Cannon.js - https://github.com/schteppe/cannon.js?files=1

❖ Three Mesh BVH - https://github.com/gkjohnson/three-mesh-bvh

❖ Motion Blur Pass - https://github.com/gkjohnson/threejs-sandbox/tree/master/motionBlurPass

❖ SPE Emitter - https://github.com/squarefeet/ShaderParticleEngine

❖ Ocean Shader - https://github.com/jbouny/ocean