🎉 Celebrating 25 Years of GameDev.net! 🎉

Not many can claim 25 years on the Internet! Join us in celebrating this milestone. Learn more about our history, and thank you for being a part of our community!

I'd like to rant about my gamedev experience. (5 years+)

Started by
40 comments, last by Simitus 4 years, 2 months ago

Juliean said:
Then you should stop worrying what other people think of you.

I try it, but tell to a smoker to quit smoking…
It is hard to swim in water and ignore the water. If you completely detach from society and the common goals, some psychiatrist will put you on strong medication. Because we swim in water, pretending we are birds is hard.

Juliean said:
Then how do companies manage to produce (code) projects with a scale that you can only dream about?

Putting a comment in a project in Github pissed up my teammates so much, they kicked me out of the project and i was kicked out of school too. In another school a teacher told me “You can not have this hairstyle and expect for us to allow you to study in our Great Awesome Country”. So they kicked me out too. (This was my incompatible hairstyle - https://www.youtube.com/watch?v=a5uQMwRMHcs ) If Einstein lived today, he would be not able to graduate. A matter of looks…

If you made things like family, studies, career work for you, please, consider yourself a very lucky person! None of my buddies managed to marry. A dozen of persons live on soft alcoholic drinks, and will never reproduce, because they missed their chances. Please, consider yourself happy, if you got a family and did not divorce before you sent your kids to high school.

Juliean said:
Weren't you rabmling about doing everything in assembly and how great that is in other threats? Going from that, and your descriptions here, maybe you should try something else (higher level language ie.), because I can tell you for a fact that this is not how ones coding routine must look like. It doesn't for me, it doesn't for my colleagues.

https://www.gamedev.net/forums/topic/706243-end-of-the-world/5423472/?page=10

“I abandoned it because of lower productivity compared to HLL. I use JS to develop my ideas. Then i pass it to C++ + HLSL. In the end I could replace C++ with ASM, but better directly HDL.”

I've lost years with ASM, but not anymore. ASM is still great. don't get me wrong, but i don't need it now. My shaders take 60 seconds to compute. And everything in the system waits for that data to be ready. Optimizing the CPU-side in this situation makes no sense for me.

Advertisement

You should look at ‘lost years’ in a different way. The time spent to learn something is not lost.

NikiTo said:
I try it, but tell to a smoker to quit smoking… It is hard to swim in water and ignore the water. If you completely detach from society and the common goals, some psychiatrist will put you on strong medication. Because we swim in water, pretending we are birds is hard.

I'm not talking about completely detaching from society. I do go out sometimes, even though my freetime largely revolves around gaming and programming. Its just that I learned not to feel required to pretending to be social, or feel too awkward that I'm not that much of a peoples person. That was my “enlightenment”, being able to interact socially with people, but not feeling forced to it.

NikiTo said:
Putting a comment in a project in Github pissed up my teammates so much, they kicked me out of the project and i was kicked out of school too. In another school a teacher told me “You can not have this hairstyle and expect for us to allow you to study in our Great Awesome Country”. So they kicked me out too. (This was my incompatible hairstyle - https://www.youtube.com/watch?v=a5uQMwRMHcs ) If Einstein lived today, he would be not able to graduate. A matter of looks… If you made things like family, studies, career work for you, please, consider yourself a very lucky person! None of my buddies managed to marry. A dozen of persons live on soft alcoholic drinks, and will never reproduce, because they missed their chances. Please, consider yourself happy, if you got a family and did not divorce before you sent your kids to high school.

Where do you live, and what kind of school would kick someone out because of that? I'm really thinking there is another side to the story, or you live in a really bad environment. Or I live in a privileged one in austria, but something like that doesn't really happen.

Oh, and I don't have a family eigther. Probably will never marry, definately will not reproduce (don't want kids). But again, thats my point - I don't care. Not anymore at least. I learned to appreciate the things I have, not cry after the things I havn't.
Ok, at least I got my carreer settled, so that I can support myself and even have some spare money left. (and work at least in the field I enjoy, being able to use my programming skills to a certain extent.) But thats all I need. I don't need to earn tons of cash, or work at my absoluete dream job. I prefer having a bit more time on my own, for my projects and my games. And I'm feeling damn good about it.
Given all that, some might view me as a failure. Again. Screw em. I'm fine living the way I do, and thats all the matters.

NikiTo said:
“I abandoned it because of lower productivity compared to HLL. I use JS to develop my ideas. Then i pass it to C++ + HLSL. In the end I could replace C++ with ASM, but better directly HDL.” I've lost years with ASM, but not anymore. ASM is still great. don't get me wrong, but i don't need it now. My shaders take 60 seconds to compute. And everything in the system waits for that data to be ready. Optimizing the CPU-side in this situation makes no sense for me.

60 seconds for a shader is kind of rough. But otherwise, what I was hinting at was more the fact that you should try to optimize your productivity before even considering optimizing performance. lf I compare it to my current situation, in 7 years of developing my engine I got to a certain point where I now can be really productive. If I spend 2x the time in trying to optimize things instead of getting robust, productive codebase, it would take another 7 years to get to where I am now. Productivy > Performance all the time. Performance is “fast enough” at a certain point. So if you are still having troubles in C++, why not give C# a shot? It has a few downsides compared to modern c++, but it also has lots of neat features that could make you a whole faster.

JoeJ said:
You should look at ‘lost years’ in a different way. The time spent to learn something is not lost.

Also, pretty much this.

@Juliean I lack reproductive instinct. I don't feel the desire to leave to this world another clone of me. I don't consider myself pretty enough as to activate my narcissism and want to give to this world another one of "beautiful-me". Some father with some bad visual feature looks at his newborn child and sees the same bad visual feature and is glad that his child looks like him. But he doesn't think that his child could have a tough time in school with that nose. I don't understand that narcissism without foundation in most of people. I want my child to look 10/10, not 6/10 like me.

I lack that reproducing need, but i do want to feel loved. My only chance is a robot or VR. I am working on it now.

You should be considering yourself very lucky for living in Austria.

I felt for the last few months that copying-pasting around in the API sucks. I have to update the very same thing at many places inside the API of DX12. So few days ago i just automatized it a bit. Now i just give it the path to the shader and the code does the repetitive writing for me. Barriers were pissing me off. So now the code takes care of that too. It adds a R/W state to the resources and scans every shader for .Load and .Store to that resource. So it takes care of the barriers too. It helped me with the anxiety of having to update the very same thing in three places in the code. And less anxiety is faster coding.

60 seconds is fine. Shaders are immensely optimized. It is 60 seconds on the integrated GPU on a 500$ laptop. So it is fine. On a top tier Desktop GPU it would rocket up.

I liked C# a lot. But switched to C++, because of DX.
In order to speed up things i read new info vaguely. This has its pros and cons. I first read a text, reading chunks of 4 lines of text at once to get a superficial idea of “is this what i need?” and if yes, i reread it again carefully. So sometimes i could read something wrong or skip over a good source of info. But i have not the nerves to read 1mln pages of info about coding only to master C++. And yes, i use C++ at a very basic level. I could copy what i write in C++ to C# and it would work mostly. Only basic syntax, nothing fancy. I don't want to become a wizard of no language. Not anymore.

NikiTo said:
I felt for the last few months that copying-pasting around in the API sucks. I have to update the very same thing at many places inside the API of DX12. So few days ago i just automatized it a bit. Now i just give it the path to the shader and the code does the repetitive writing for me. Barriers were pissing me off. So now the code takes care of that too. It adds a R/W state to the resources and scans every shader for .Load and .Store to that resource. So it takes care of the barriers too. It helped me with the anxiety of having to update the very same thing in three places in the code. And less anxiety is faster coding.

Any specific reason you are even using DX12 and not DX11? I wanted to get into DX12 but have it put aside for now since its too complicated for the gains.
I personally also use a high-level abstraction layer so over the API as well as the shaders, so I optimally only have to implement every bit of API-code once.

NikiTo said:
60 seconds is fine. Shaders are immensely optimized. It is 60 seconds on the integrated GPU on a 500$ laptop. So it is fine. On a top tier Desktop GPU it would rocket up.

Wait, are we talking load time? That should not depend on the GPU, as compilation is done on CPU side. You should consider caching the resulting compiled shader on disk, this brings the required load time basically to zero once the shader has been loaded once. 1 minute per startup is really much, just think how much time you lose in one day if you start a few times.

NikiTo said:
In order to speed up things i read new info vaguely. This has its pros and cons. I first read a text, reading chunks of 4 lines of text at once to get a superficial idea of “is this what i need?” and if yes, i reread it again carefully. So sometimes i could read something wrong or skip over a good source of info. But i have not the nerves to read 1mln pages of info about coding only to master C++. And yes, i use C++ at a very basic level. I could copy what i write in C++ to C# and it would work mostly. Only basic syntax, nothing fancy. I don't want to become a wizard of no language. Not anymore.

Well, thats kind of a shame. Its not about mastering C++, but I would go near that language if not for the constant improvements made in the latest standards. The 1 minute spent reading can repay itself very quickly. Teach a man how to fish, and what not.
I would say its your choice, but then you shouldn't complain about not having enough time or getting things done quick enough, if you do not take time to optimize your workflows.

@Juliean 60 seconds execution times.

I really don't need a good understanding of C++. Lots of the extras of modern language were built with large teams working together in mind.

In the end, it should compile to the very similar code.
And as a standalone coder i don't need most of the extras.

I chosen DX12, because it was the latest tech at the moment and keep with it now. I didn't want to be an AS3 programmer sinking on board of the ship of Flash.

NikiTo said:
@Juliean 60 seconds execution times.

Now I'm confused. Are you writing a raytracer or something.

NikiTo said:
I really don't need a good understanding of C++. Lots of the extras of modern language were built with large teams working together in mind.

No? Where did you get that idea. I can tell you that almost all of the modern features are extremely valuable no matter if you are a single programmer or a team.

NikiTo said:
In the end, it should compile to the very similar code. And as a standalone coder i don't need most of the extras.

You seem to have an unnatural fixation on performance and generated code. The new features aren't there to produce faster code, but to boost productivity. They allow you to write less to code to achieve the same thing, reduce sources of errors (what you seem to be complaining about a lot). To bring it down to your example “if you are 16 years old, an 80 year project is not possible.”. If you took the time to learn and embrace all the new features, this would easily bring down the time of such a project to 40, maybe 20 years. I'm assuming you are using an pre-c++11 featureset, which is really bad.

NikiTo said:
I chosen DX12, because it was the latest tech at the moment and keep with it now. I didn't want to be an AS3 programmer sinking on board of the ship of Flash.

DX12 is not meant as an replacement for DX11 though. Its purpose is to give programmers more possibilities without the driver getting into the way, thereby reducing CPU load (which isn't an issue for you as you said yourself). If not for that, you continue using DX11 until there is a functional replacement that isn't as hardware-near.

Well, sorry if that sounds rude, but your only problem seem to be making bad decisions in how to work and what tech to use. Do you really only care about generated code and performance, and not how efficiently you are programming? Work smart, not hard.

What if i am used to declare functions inside functions, but C++ is a donkey at this?
If there is something i can not do without some fancy C++ feature, i would spend a whole day of googling in order to learn that new cryptic feature. So far i haven't feel the need to learn anything new in C++.

What language you use at home? German or English?

Why don't you just say to your buddies: “am'ngri”?
Why do you tell them “Ich bin am Verhungern”?

Why are you using the bezirksschornsteinfegermeister german language at home?
Isn't it because you are used to it?

I'm fine with my standalone C++ grammar skills.

If you use global variables, in a team, you are a death body. The program does the same, but you are kicked out of the company. A standalone person can do it. No problem.

After being kicked out of the freedom-of-hairstyles-intolerable school, i entered another one. And while in the first school coding it all in one single line of code was considered cool, in the second school, using ternary conditional operators was completely banned. If you put more than one condition in the loop declaration you are penalized.

if ((newPosition += step) < 200) — penalized by death sentence.
[i++] — punished with testicular electrocution.

I really want to stay away from -

“I kicked you in the teeth because you named your method "getSomething". This is C++, not Java! And if you start a variable name with a capital letter again i will shoot you in the d**k”.

I really try to stay away from all this bad show. I just code my stuff. Minding my own business. Let me out of radical wars.

For the time i figure out if some new fancy extra in C++ can help me or not, i can do the same with basic syntax.

Most of the time i can't feel an extreme urgent need for the latest syntax candies. And it is a fact i can fake it all with basic syntax. If i can not, it is only because C++ is inherently bad at the things i try to code.

I understand why you protect your own reality. I protect my own reality too. It is about opinions.

There are many realities out there -

Assumption: You have wrong prejudges against C++ because you have been on terrible schools.

NikiTo said:
What if i am used to declare functions inside functions, but C++ is a donkey at this?

You can do his, and you do not even need to look up any new language features:

void Function()
{
	struct Tools
	{
		static int Add (int a, int b) {return a+b;}
		static int Sub (int a, int b) {return a-b;}
	};
	
	int a = 1, b = 2;
	int c = Tools::Add(a,b);
}

(this is legal since C++11 IIRC)

Ofc. using lambdas is much better. Less code and much more options.

It's one of the things that boosts productivity a lot, similar to templates. It allows to implement logic independent from data, so you can reuse the same logic often without copy pasting introducing bugs.

… copying an example using lambdas from my code:

// lambda - which does something

			auto Combine = [this, cell, &amp;weightSum] (const SceneCell *parentCell, const int parentChildVI, const int vI, const float w)
			{
				//RenderPoint (cell->mesh.GetVertexPos(vI), w, w>=1, w<=0);
				//RenderPoint (parentCell->childMesh.GetVertexPos(parentChildVI), w, w>=1, w<=0);
				vec cross = parentCell->childVectorCrossfield[parentChildVI];
				cell->vectorCrossfield[vI] += cross * w; // todo: need to convert to complex form? (normals might differ at the boundary)
				weightSum[vI] += w;
			};


// reusable function which does complicated iteration i do NOT want to write multiple times

// it iterates stuff and executes the lambda in inner loop, similar to how a ugly callback would work

			IterateParentLinearCombination (cellCoords, cellLevel, Combine);

Here is the complicated iteration stuff, just to show how much work i have saved:

		template <typename Functor>
		void IterateParentLinearCombination (const int cellCoords[3], const int cellLevel, Functor &amp;functor)
		{
			int cellIndex = GetCellIndex(cellCoords, cellLevel);
			SceneCell *cell = GetCell(cellIndex, cellLevel);
			if (!cell) return;

			float scale = 0.5f / lods[cellLevel].cellScale;

			int originParentCC[3];
			GetParentCellCoords(originParentCC, cellCoords);
			int cI[3];
			for (cI[2] = -1+(cellCoords[2]&amp;1); cI[2] <= 1-!(cellCoords[2]&amp;1); cI[2]++)
			for (cI[1] = -1+(cellCoords[1]&amp;1); cI[1] <= 1-!(cellCoords[1]&amp;1); cI[1]++)
			for (cI[0] = -1+(cellCoords[0]&amp;1); cI[0] <= 1-!(cellCoords[0]&amp;1); cI[0]++)
			{
				int parentCC[3] = {
					originParentCC[0] + cI[0],
					originParentCC[1] + cI[1],
					originParentCC[2] + cI[2]};

				const SceneCell *parentCell = GetCell(parentCC, cellLevel+1);
				if (!parentCell) continue;

				int parentCI = GetCellIndex(parentCC, cellLevel+1);

				vec center = GetCellCenter(parentCC, cellLevel+1);

				const VolumeMeshing::MeshResult &amp;childrenSurface = parentCell->childSurface;
				const HEMesh &amp;childrenMesh = parentCell->childMesh;


				for (int i=0; i<childrenSurface.merged_vertex_UserData.size(); i++)
				{
					int vertexCellIndex; int vertexIndex;

					int begin = childrenSurface.merged_vertex_duplicateList[i];
					int end = childrenSurface.merged_vertex_duplicateList[i+1];
					if (begin!=end) // duplicated boundary vertex
					{
						for (int j=begin; j<end; j++)
						{
							UnpackVertexLink (vertexCellIndex, vertexIndex, childrenSurface.merged_vertex_userData_Duplicates[j]);
							if (vertexCellIndex != cellIndex) continue;

							vec diff = childrenSurface.merged_vertex_pos[i] - center;
							float w = fabs(diff[0]);
							w = max(w, fabs(diff[1]));
							w = max(w, fabs(diff[2]));
							w *= scale;
							w = 1.0f - max(0.0f, min(1.0f, w));
							
functor(parentCell, i, vertexIndex, w);

							break;
						}
					}
					else // unique interior vertex
					{
						UnpackVertexLink (vertexCellIndex, vertexIndex, childrenSurface.merged_vertex_UserData[i]);
						if (vertexCellIndex != cellIndex) continue;

						vec diff = childrenSurface.merged_vertex_pos[i] - center;
						float w = fabs(diff[0]);
						w = max(w, fabs(diff[1]));
						w = max(w, fabs(diff[2]));
						w *= scale;
						w = 1.0f - max(0.0f, min(1.0f, w));
						
functor(parentCell, i, vertexIndex, w);

					}
				}
			}
		}

You see that's a lot of ugly crap. But i need this iteration pattern many times. It's about transferring data from low detail geometry to high detail geometry.
I can use this code for crossfields, wavefields, colors or normals, a scalar roughness map or whatever else - just need to write the small lambda for each usecase.

I don't see what Linus could eventually dislike on this. Productivity boosted, no need to write bloated callbacks, source of error reduced. It's nice stuff.

EDIT: accidently deleted the functor call when deleting comments, added this.

This topic is closed to new replies.

Advertisement