Dummies for Programming or Programming for Dummies

psorcerer

Regular
sets up shader constants

Hence there are no shader constants. They are emulated, on CPU.

Therefore the whole process of rendering something has no similarity to any DirectX one.
But people still use shader constants today, on PS4.
As usual: make hardware so simple that even an idiot can program one and only the idiots will program for your hardware.
 
Last edited by a moderator:
It's an important difference. You suggest the non-idiots steer clear of hardware that is easy to program.
 
You suggest the non-idiots steer clear of hardware that is easy to program.

That's off-topic, but yes, I suggest that.
Usually great engineers do like challenges and run towards them and not from them.
But I think I had that discussion previously here and we did not come to an agreement. So probably we can agree to disagree right now. :)
 
Smart people find the easiest way to solve a problem, by and large. That's what makes them smart. The only variation on that would be someone specifically looking for a challenge to exercise their smarts. eg. When trying to get out of a room, whose the smart person - the one who creates an intricate MacGyver contraption to blow a hole through the wall, or the one who uses the door? It comes down to perspective; both are smart in different ways. I'd say its disingenuous to claim the person using the path of least recent is stupid though, no matter what perspective. And there are plenty enough seasoned developers saying they want away from difficult coding because it gets in the way of making games that you can insult a good part of this industry and its heritage by claiming as much.
 
Smart people find the easiest way to solve a problem, by and large.

Okay, you've started it. :)
I think that graphics programmers are literally "looking for a challenge" all their lives. Otherwise they could just ray-trace on CPU and call it a day (or use 8-bit sprites, doesn't "get in the way of making games"). The whole point of modern graphics is to use various very strange contraptions and non-intuitive solutions to squeeze a little more performance from the GPU. And here comes the question: "what's better for performance: smarter hardware or smarter software?" (not talking about raw power, smart = more sophisticated), and in most modern cases smart software wins, just by virtue of giving the programmer much more control.
 
You've reduced the problem too far. If the problem is 'put some graphics on screen' then yes, raytracing is the smartest, easiest option. However, the real problem is 'how to put suitably aesthetically pleasing graphics on screen at sufficient framerate to match the requirements of our gameplay?' With that problem, your raytracing solution fails because it can't achieve acceptable framerates (do minutes/hours per frame even count as framerates? ;)). So for 3D games, the solution is very often rasterisation, and often, to get the desired aesthetic (realism), some complicated cheats are needed. Sometimes that solution comes from a middleware engine, saving developers from having to reinvent the wheel time and time again. Indeed, there are so many smart developers out there that middleware is hugely popular catering to these smart developers need for a way to realise their game with the minimum effort.

The type of smart that gets a graphics engine developer to pack bits into buffer formats and fine tune shaders and come up with clever maths to approximate too-costly rendering techniques is a particular flavour of smart. It's not the only type and people not smart in that way are not necessarily idiots.
 
So for 3D games, the solution is very often rasterisation

If your primary goal is gameplay, you can get away with simplistic graphics just fine. Use sprites, and you'll never go hungry again.

saving developers from having to reinvent the wheel

I think it's a wishful thinking. If middlewre is very low level (see. ICE) then yes, it may save you some time. But usually when people talk middleware they mean UE or Unity. In that case middleware is just a way to burn quite a lot of money with zero result. Game performance is all about data transformation, good performance is not possible without having a lot of insight on what that data would be. Therefore "middleware" that is good for one game probably will perform bad in any other one, unless changed (if you have the source code, if not, you're in an even deeper shit) to suit specific data patterns (usually even different setting has quite a lot of impact, rendering cityscape has totally different set of trade-offs compared to swamp, or jungle). Therefore if you write your "engine" yourself, you get up to speed much faster than first studying the foreign engine code and then changing it to suit your game. And it looks like in 201x most developers did realize that simple thing finally and started using their own code and getting away from middleware.
P.S. I think middlewares were popular in 2007 because everybody was scared of programming PS3, and that's about it.

It's not the only type and people not smart in that way are not necessarily idiots.

It depends how you define "idiot" I think people can be "idiots" in one area and "geniuses" in another. That's perfectly fine. I'm total imbecile in music (particularly music theory) and I admit that. I think it was self-evident that my "idiots" (in the first post) was related to GPU and graphics programming.
 
If your primary goal is gameplay, you can get away with simplistic graphics just fine. Use sprites, and you'll never go hungry again.
But in most games, it's gameplay + aesthetic that's the target. And in AAA games, aesthetic quite probably trumps gameplay for many game. :p

But usually when people talk middleware they mean UE or Unity...
You seem to be talking only about big budget AAA console games. I point to Hearthstone developed by Blizzard (no strangers to creating their own engines) running on Unity.

I think it was self-evident that my "idiots" (in the first post) was related to GPU and graphics programming.
Apparently not, otherwise neither Arwin not myself would have replied. ;) But even then, graphics programmers aren't going to choose difficult just for the sake of being difficult. The developers Sony consulted all wanted easy, standard hardware.
 
You seem to be talking only about big budget AAA console games.

I'm talking about games that need GPU power. Because if they don't, there is no need to use clever tricks.
And clearly you can use Unity (or any other middleware) to help you.

aren't going to choose difficult just for the sake of being difficult

I was not talking about "difficult" I was talking about "smart". Yes, smarter hardware makes things less "difficult" (in some cases, and much more difficult in others) but my point was that smarter software works better than smarter hardware for game development in general. And it's also better from business point of view: you have better control and can fix problems in timely manner.
 
I was not talking about "difficult" I was talking about "smart".
Um, you weren't...

As usual: make hardware so simple that even an idiot can program one and only the idiots will program for your hardware.
The opposite of simple is difficult, or complicated. If you don't want simple hardware that attracts idiots, you want difficult/complicated hardware that keeps the riff-raff at bay.

Yes, smarter hardware makes things less "difficult" (in some cases, and much more difficult in others) but my point was that smarter software works better than smarter hardware for game development in general.
You reckon XBox with its shaders was worse for game development than PS2's extremely simply operating, and extremely difficult to use, brute-force rasteriser? Surely also the Holy Grail of rendering, the software renderer, is all about smart hardware that lets you run any code you want.

I don't think any generalisation is valid. Smart hardware that lets you do something easily is just as valuable to game development as smart software design. And a lot of smart software is basically about working around the limits of the hardware which isn't smart enough to just do what you want it to without a lot of work. ;)
 
The opposite of simple is difficult, or complicated. If you don't want simple hardware that attracts idiots, you want difficult/complicated hardware that keeps the riff-raff at bay.

Thee is no such thing as "simple" in a modern world of massively parallel computations. Hardware that is "simple to work with" usually needs to be "smart" enough to hide the complexity from the programmer.

You reckon XBox with its shaders was worse for game development than PS2

Apples and oranges. Very different hardware, very different time-frame.

working around the limits of the hardware

Hardware has no limits. Hardware is the reality. It's just the reality, there is no other. If you think you can have better hardware: design one and everybody will be happy.
The only choice that engineers should make is: do they live in that reality or they live in an imaginary world of fairies and rainbows (that hardware manufacturer, sometimes, tries to create for them).
If you live in the reality you just "program the hardware" and if you "work around the limitations", I fear, that you're deep, deep in the imaginary world. :)
 
Hardware has no limits. Hardware is the reality. It's just the reality, there is no other. If you think you can have better hardware: design one and everybody will be happy.
The only choice that engineers should make is: do they live in that reality or they live in an imaginary world of fairies and rainbows (that hardware manufacturer, sometimes, tries to create for them).
If you live in the reality you just "program the hardware" and if you "work around the limitations", I fear, that you're deep, deep in the imaginary world. :)

Could God accidentally wish himself out of existence?

I need 2 know.
 
Hardware has no limits. Hardware is the reality. It's just the reality, there is no other. If you think you can have better hardware: design one and everybody will be happy.

If you live in the reality you just "program the hardware" and if you "work around the limitations", I fear, that you're deep, deep in the imaginary world. :)

How does a programmer who decides to use a CELL CPU's SPE for culling to get around a bottleneck in the RSX GPU fit into your world-view?

Not accidentally. God is infallible. Therefore, if God wished himself out of existence it would not be by accident.

:devilish:

Reminds me of one of the very few jokes I seem to be capable of remembering:

A pastor is playing tennis with a nun. They are a good match for each other. At the end of the first set, the father hits just outside the court, and out comes a 'Goddammit I missed!'. He notices that the nun flushes red, and quickly apologises, saying he won't do it again. Right at the beginning of the next set though, he serves and hits the net twice, and out comes a 'god-fucking-damnit I missed again!'. As he puts the nun gets really angry, and the only way the father gets her to play on at all is by begging forgiveness and swearing that God may strike him should he swear again.

And sure enough, he wins the set, and manages to get to a tie-break in the third set. But then he strikes out, and as he loses the game and out comes another 'god-dammit, I missed again!' ... lightning cracks the sky open, and hits the ... nun! And from above a deep booming voice says 'God-dammit, I missed again!'
 
Last edited:
How does a programmer who decides to use a CELL CPU's SPE for culling to get around a bottleneck in the RSX GPU fit into your world-view?

Fits perfectly. Why do you ask? :)
Culling on SPU is perfectly fine, more than that, SPU was clearly designed to handle these tasks.
If you want a case of bad design: compiler on PS3 (or X360 to even larger extent) inserting LHS randomly all over the code.
 
BTW, about Unity + Hearthstone: http://us.battle.net/hearthstone/en/forum/topic/15690348947
Just in case: Telltale Games engine has a much better performance on Android. Dunno why... :)
Except there are many well-performing Unity titles on mobile, plus performance in iOS described in that same forum is reportedly good, hence it's clearly an issue of implementation, not of engine shortcomings. Furthermore, no-one was saying generic OTS middleware is able to match a custom engine, but middleware saves developers from pointless headaches reinventing the wheel. Saving yourself work is not dumb. But then, that wasn't supposedly your argument anyway, so I've no idea why you've raised one badly running Unity game on Android. Makes about as much sense as saying hardware has no limits...
 
Back
Top