As an indie developer making a 3D game engine I would like to share with you my experiences.
Developing a game engine is like dancing tango with the devil, and guess what? he will be the one leading.
I have to say that it has been the most satisfying project I have undertaken. I enjoy working on my game engine. I work on it before heading to work (5am-7:30am), during my lunch, after work (7pm-12am). During the weekends (9am-7pm).
I have learned a lot about:
- OpenGL
- Shading language (GLSL)
- C++
- Python
- OOP principles
- Data structures/algorithms
- Blender (3D software modeling tool)
- Linear algebra
- Collision detection algorithms
Although developing a game engine can be a great learning experience. I have to warn you, there will be several moments when you will want to give up. There will be thousands of instances when you will feel lost and not know how to fix a bug. And Google will not be there to help you. You will have to figure it out all on your own.
There will be many instances when you read an algorithm and would not know how to implement it in code. There will be instances when nothing in your implementation works. You will spend months implementing something just to realize that you were doing it all wrong. There will be moments when you will have to throw all your game engine to the garbage and start all over again.
I have experience all this and since I'm not done with my game engine I know I will experience it again. Developing a game engine is not for the one who wants to relax during the weekend. It is not for the one who wants to relax after work. It is not for the one who does not like to read. It is not for the one who wants to see instant gratification. It takes a lot of work and it will take a lot of your time.
What I'm trying to tell you is this:
If your goal is to LEARN then by all means do so. I promise you, you will learn so much that you will be glad you did.
But, if you are hoping to make money right away, do not develop a game engine. Instead use a commercial engine and develop your game on it.