jamir title

About me

Hello, I'm Mert, someone who is passionate about creating new things during my free time. I'm not a computer engineer and my professional job has no connection with computer programming.
My coding journey began in 2015 when I started learning Erlang. This meant many long nights and weekends holed up at home, painstakingly figuring out the intricacies of the language. As I improved my proficiency in Erlang, I simultaneously learned how to use JavaScript dynamically.

I worked on a project where users could create and customize their own 3D shops, sell products, and virtually explore others' stores in real time. This project led me to delve into WebGL, Three.js and Blender - all of which I learned from scratch. I fell in love with how the Three.js library simplified complex tasks.
After investing four months into my 3D store project, I had an epiphany. Why not build my own online 3D game with the knowledge I'd amassed so far? Thus, I embarked on a new project that same day, quickly realizing that developing a quick and efficient browser game engine would require much more knowledge and skill.

Undeterred, I put in more effort and began to see the game take shape with each update I made. My happiness grew in tandem with the game's progress. I owe much of my accomplishments to the internet (primarily StackOverflow) and to the amazing open-source libraries developed by some truly remarkable individuals. If something like ChatGPT had existed in 2017, it would have been an awesome resource, but I must also admit that its absence pushed me to dive deeper and gain a thorough understanding of every aspect of game development.

Here are some notable milestones I achieved during the development. Please note that they're not ranked in any particular order. It took me three years to fully grasp all of these concepts and implement them into the game:

❖ 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 don't 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

❖ Cannon.js integration for the wall collisions and use it efficiently for the max performance, serverside. 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 discord server: https://discord.com/invite/JJdCTAvras



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

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

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