Several years ago, if I had to choose a video game company where I would loved to work as a software developer, it would have been Blizzard Entertainment.
Now, it would definitely be Riot Games.
As player, spectator and developper, I'm so impressed by their work, the evolution of their game since the release in 2009, how they listen their community [1], try new things and, most of the time, admit their mistakes (e.g. removing the ranked solo queue in 2016) and rollback [2] or improve their changes when it's needed.
Their game is the most played game ever. ~100 millions active players every month [3].
Their game is also the most watched game ever. ~40 millions unique viewers for the finals of the last World Cup in September [4]. Hundreds of thousands of viewers on Twitch every day (without even counting the Asian region). They have revolutionized the "e-sport" in Occident. I don't play anymore (for now) but I'm still watching most of the professional games because they created an accessible, passionate and entertaining game to watch (for those interested, the new season just started in Korea, China and Europe, and tomorrow in North America [5]).
How they listen to their community? It took literally years for a sandbox mode and replays to be implemented, both of which the community carried on about for ages. For a game that wants to grow in professional competitive circles, those features are pretty damn fundamental and it blows my mind that they took this long to exist.
I'd also argue that they're not too keen to try new things, given that even the devs themselves intentionally pigeonhole champions into a strict set of roles [1], something that has resulted in a relatively stale meta (another frequent complaint about the game from some circles). In their defence, this sort of locked-down style of meta evidently works for a large number of players, so I understand why they don't rock the boat on that regard.
Riot try hard to be the new Blizzard but it won't work, they have just one game which is very popular but it's nothing compare to Starcraft / Warcraft universe in term of quality. I really don't like MOBA ( HoTS included ) it's the type of game that killed RTS / MMO.
I don't think there is even a comparison between Riot/LoL vs. Valve/Dota2 when it comes to esports prize pools (Dota2 3x's LoL?)... Blizz is throwing a lot of money around too but it feels desperate.
Perhaps the deficit demonstrates Riot's skill in maintaining their community?
Early on riot was horrible at community management. They fired Bobaganoosh, eliminated all RP aspects of League by cutting out descriptions, stories, and the JoJ! A lot of people started to flee, and when Riot realized it, they promoted Nikita from intern to the posterchild female that gamer guys oogled. Around that time, before I quit playing I angrily sent an email how Riot was killing their community and needed to do some sort of "Summoner Highlight" segment to promote their fans that care. Nikasaur picked up on that idea or already had it and started showcasing summoners, which was cool.
I'm glad they've moved on and up from that. Jax dodge best dodge.
This Moba and TowerDefence genres that started as maps and mods of RTS games (Age of Empire 1/2 and WarCraft3).
I personally find this grinding gameplay style boring. Like Farmville or playing at a casino or lottery. Pointless and boring repetitive. I prefer real games.
Sadly, triple-A RTS games are no more, no new release for 10 years (beside SC2, which I dislike). Halo Wars 1 and C&C4 marked the end, and the low point of RTS by causualisation to fit the consoles. Whereas modern games like Watch Dogs 2 on consoles have a more complex control schema and RTS elements with it's drone and hacking.
One day I want a new AoE and C&C with modern graphics as PC first triple-A game.
With the wide adoption of WebGL, it's a good time to get involved in graphics. Furthermore, GPUs are taking over esp. with the advent of machine learning (nvidia stock grew ~3x, amd ~5x last year). The stuff nvidia has been recently doing is kinda crazy. I wouldn't be surprised if in 15 years, instead of AWS, we are using geforce cloud or smth, just because nvidia will have an easier time building a cloud offering than amazon will have building a gpu.
These are some good resources to get started with graphics/games
# WebGL Programming Guide: Interactive 3D Graphics Programming with WebGL
Historically, C++ has definitely been THE language for doing graphics but if you are starting these these, you would have to have really compelling reasons to start with C++ and not JavaScript and WebGL. And that's coming from someone who actually likes C++ and used to write it professionally.
This is more of college textbook if you'd prefer that but the WebGL one is more accessible and less dry.
# Physically Based Rendering & Real-Time Rendering
These discuss some state of the art techniques in computer graphics. I'm not going to claim to have really read them but from what I've seen they are very solid.
Pardon me asking, Is there a way to save comments for later? This is gold, and thank you for the resources. I have been very interested in graphics since I took Computer Graphics in College (It felt like an applied linear algebra course, but I loved it. It was subsequently the only course I felt like I was challenged beyond my abilities -- I had to take the course twice to get the credit, but I loved that class)
Also just kind of asking for curiosity, do you think a language like go or rust will become popular for developing game engines? I realize game programmers are anti-GC but what if GC technology advances that the performance drop is negligible I wonder.
That first shader is sampling from three textures, so the image is not entirely generated by an algorithm - see iChannel0, iChannel1 and iChannel2 at the bottom of the page. (With iChannel3 being the music.)
The shaders on ShaderToy aren't quite the same as straight OpenGL fragment shaders - there is quite a bit of boilerplate code built into the site that allows ShaderToy shaders to have access to stuff like mouse coordinates and audio signal info. (Expand the 'Shader inputs' area above the code block - none of those are available in OpenGL.)
But OpenGL also has its own library[1] of functions: `texture2D`, `smoothstep`, `mix` and all the built-in vector math - and you can see all of these in action in the shader you linked. The ShaderToy boilerplate - in partnership with these libraries - is the reason the code is so concise.
> you would have to have really compelling reasons to start with C++ and not JavaScript and WebGL. And that's coming from someone who actually likes C++ and used to write it professionally.
As someone working in game programming a long time and now also spending more time in machine learning, I must disagree. I suppose I can see your implied point about getting started quickly or something like that, but there's really few compelling reasons to do graphics programming in JavaScript professionally. As a hobby or for a web-based project like a tutorial site, sure, JavaScript and WebGL make perfect sense. For most professional uses though, I can't agree.
Writing a decent performing and well-architected graphics engine is much more than just using an API like OpenGL, WebGL, or any of the successors or predecessors. Further, writing a graphics engine is not about creating an efficient island, but rather a piece of a larger eco-system. Consider that quite often some of the biggest hinderances to graphics performance are creating the data to actually be rendered (ex: via the game update), sending the data to the GPU efficiently, and still getting all kinds of other program logic to run before you even have a frame or want to display a frame. It would be a long post to go into all the details, so forgive me for oversimplifying. Among many things vital to graphics programming that C and C++ provide that JavaScript doesn't or either fails to do well:
- Control of memory allocations and memory shape/characteristics
- Maximizing cache lines (due to architecture, memory footprint, etc.)
- Fast, efficient, correct math (or possibility thereof)
- Compilation tweaking/assembler output tweaking
- Efficient IO
- Fast compression/decompression algorithms
- Integration with existing toolchains for graphics including middleware, apps, and shader languages
JavaScript has made great strides in some of these areas and certainly things like web asm help. Nevertheless, most JavaScript runtimes people are using are wholly unsuitable for professional graphics programming. This is akin to people who used to say that you can write a professional game in BASIC or later, Visual Basic. Yes, it's true you can, but should you do it or start there? Probably not if your goal is to learn professional graphics programming. Have people taken such routes and become awesome programmers? Sure, but there are just as many people who never learn, grow, and develop nasty habits that are harder to unlearn than learning the difficult stuff.
If your goal is having fun and learning a few things before moving on to C++, dabble in some JS graphics programming, but since you called our professional programming as no longer being compelling to start, I have to point out that this is both wrong and bad advice to someone new. If you are struggling with the concepts, you will struggle in any language. If you personally need instant gratification and a self-esteem boost, from this point of view JS might not be bad for learning, but it won't teach you a lot of vital things and will encourage some horrific practices. The presence of GC and the lack of a proper parallel and concurrent programming model poison the experience quite a bit.
Ironically, other languages that are more friendly to parallelism and concurrency tend to be better than C, C++, and JS. A lot of the realities of graphics programming are simply caused by historical reasons, market dominance of things like x86 and companies such as nVidia, and existing knowledge, code, and toolchains. Functional languages for instance in many ways have the potential to be better suited to take advantage of the direction we're headed in with regard to numbers of cores, Moore's Law (or diminishing of), GPU design, memory architecture, and so on, but this is just hypothetical mostly. Given JavaScript is hardly known for its ability to deal with concurrency and parallelism in most contexts (no, nodejs doesn't count), again I have to find the above dubious considering you mention the future WRT nVidia.
Of course in the end, you can use things like transpiling, engines that may or might compile to JS as a runtime target, and so on and getting a running product that might be decent in the eye of the beholder. Personally, I've dabbled in JS enough to write a high-performance Voxel engine many years ago when I thought about making a game in JS as well as a skeleton of a 3D adventure game engine for a contract. I was productive enough but ran up against walls that weren't worth working around or just made things feel so kneecapped that I wondered why I was even using JS at all in its current state. The old adage holds that in the end, you can write anything in any language, but there is indeed value of selecting the best tool for the job. Even just making something run and at a reduced frame rate typically is something fundamentally different than being THE language for graphics programming.
In truth, when I first saw JS in the 90s, I thought there was no way it would reasonably do anything in 3D. Things are getting better, but I think you are dramatically underselling what people use and exists today in a professional environment. Your comment about 400 lines of code being that impressive and small seems to also hint you haven't dabbled that much in the area professionally. While your links are just fine and the above shader toy link is indeed impressive in the context of now, personally I was much more blown away when I dabbled in the demo scene and saw what people were doing with an Atari ST, Amiga, and PCs with no GPUs and on systems with less power than today's fitness trackers.
Anyway, I can't think of many compelling reasons to start in JS when IMO, it's better to learn to do things the proper way even if they can be a bit rough and punishing. JS will surely be more productive at the beginning, but also skip teaching you vital things you need to know as well as some of the fundamental primitives of graphics programming. This is the real world and no one in a professional environment cares if you are awesome in JS but don't understand the tools and best practices people actually use industry-wide. Moreover, you won't get far if you can't be productive from your first day because you tried to take the easy way out. If anything, just comparing the amount of resources for JS vs. C/C++, especially from professional vendors like nVidia, Microsoft, AMD, and so on makes me think at best, JS as a starting language for graphics programming only holds for web programmers. If anything this seems to makes things an extra layer of difficult.
Another one that blows my mind, for a completely different reason, is https://www.shadertoy.com/view/MddGzf . That's a simple breakout clone that stores all game data in a separate render buffer. I love that the author managed to implement a game loop in a system that was never designed to support it.
I'm always impressed by how well hugely popular games like League and CSGO run on bottom-tier machines. Maybe it really isn't all that impressive and its just the number of poorly optimized bloatfests out there that skews my perception
It's actually key to obtaining a supermassive audience. People will roll their eyes at me for this, but one of the major reasons that FarmVille was able to reach 80M monthly actives was due to aggressive performance optimization at the bottom end and progressively turning off graphics features based on frame rate.
It's interesting to me how a few of the effects are still baked into the textures, which means they still can't let the user rotate their camera. Most people feel there is an advantage to playing on the bottom side due to camera perspectives, and allowing users to rotate their cameras could nullify this disadvantage.
Along the lines of this, can anyone recommend a blog post, or an article that demonstrates the mathematics that goes into game design? I want to show my 8 year old who wants to build games one day why math is important. Maybe something that shows how matrices are used to show placement, or vectors to drive movement?
[+] [-] ggregoire|9 years ago|reply
Now, it would definitely be Riot Games.
As player, spectator and developper, I'm so impressed by their work, the evolution of their game since the release in 2009, how they listen their community [1], try new things and, most of the time, admit their mistakes (e.g. removing the ranked solo queue in 2016) and rollback [2] or improve their changes when it's needed.
Their game is the most played game ever. ~100 millions active players every month [3].
Their game is also the most watched game ever. ~40 millions unique viewers for the finals of the last World Cup in September [4]. Hundreds of thousands of viewers on Twitch every day (without even counting the Asian region). They have revolutionized the "e-sport" in Occident. I don't play anymore (for now) but I'm still watching most of the professional games because they created an accessible, passionate and entertaining game to watch (for those interested, the new season just started in Korea, China and Europe, and tomorrow in North America [5]).
Really inspiring. Congratz Riot Games.
[1] https://www.reddit.com/r/leagueoflegends
[2] http://na.leagueoflegends.com/en/news/game-updates/competiti...
[3] http://www.riftherald.com/2016/9/13/12865314/monthly-lol-pla...
[4] http://www.espn.com/esports/story/_/id/18221739/2016-league-...
[5] http://www.lolesports.com/en_US
[+] [-] jtmarmon|9 years ago|reply
Just for off the cuff figures, the LoL subreddit has 942k subs, and overwatch has 743k subs. Overwatch is very promising
[+] [-] oblio|9 years ago|reply
And regarding Riot, their marketing is (was?) really shady.
[+] [-] NamTaf|9 years ago|reply
I'd also argue that they're not too keen to try new things, given that even the devs themselves intentionally pigeonhole champions into a strict set of roles [1], something that has resulted in a relatively stale meta (another frequent complaint about the game from some circles). In their defence, this sort of locked-down style of meta evidently works for a large number of players, so I understand why they don't rock the boat on that regard.
[1]: http://na.leagueoflegends.com/en/news/game-updates/gameplay/...
[+] [-] Thaxll|9 years ago|reply
[+] [-] Accacin|9 years ago|reply
[+] [-] foepys|9 years ago|reply
[+] [-] j_s|9 years ago|reply
Perhaps the deficit demonstrates Riot's skill in maintaining their community?
[+] [-] unknown|9 years ago|reply
[deleted]
[+] [-] cjslep|9 years ago|reply
Early on riot was horrible at community management. They fired Bobaganoosh, eliminated all RP aspects of League by cutting out descriptions, stories, and the JoJ! A lot of people started to flee, and when Riot realized it, they promoted Nikita from intern to the posterchild female that gamer guys oogled. Around that time, before I quit playing I angrily sent an email how Riot was killing their community and needed to do some sort of "Summoner Highlight" segment to promote their fans that care. Nikasaur picked up on that idea or already had it and started showcasing summoners, which was cool.
I'm glad they've moved on and up from that. Jax dodge best dodge.
[+] [-] frik|9 years ago|reply
I personally find this grinding gameplay style boring. Like Farmville or playing at a casino or lottery. Pointless and boring repetitive. I prefer real games.
Sadly, triple-A RTS games are no more, no new release for 10 years (beside SC2, which I dislike). Halo Wars 1 and C&C4 marked the end, and the low point of RTS by causualisation to fit the consoles. Whereas modern games like Watch Dogs 2 on consoles have a more complex control schema and RTS elements with it's drone and hacking.
One day I want a new AoE and C&C with modern graphics as PC first triple-A game.
[+] [-] adamnemecek|9 years ago|reply
https://www.shadertoy.com/view/4dfGzS (or basically anything on that site)
How is that 400 lines of code.
Or this one which even generates the sound on the GPU
https://www.shadertoy.com/view/4ts3z2
With the wide adoption of WebGL, it's a good time to get involved in graphics. Furthermore, GPUs are taking over esp. with the advent of machine learning (nvidia stock grew ~3x, amd ~5x last year). The stuff nvidia has been recently doing is kinda crazy. I wouldn't be surprised if in 15 years, instead of AWS, we are using geforce cloud or smth, just because nvidia will have an easier time building a cloud offering than amazon will have building a gpu.
These are some good resources to get started with graphics/games
# WebGL Programming Guide: Interactive 3D Graphics Programming with WebGL
https://www.amazon.com/WebGL-Programming-Guide-Interactive-G...
Historically, C++ has definitely been THE language for doing graphics but if you are starting these these, you would have to have really compelling reasons to start with C++ and not JavaScript and WebGL. And that's coming from someone who actually likes C++ and used to write it professionally.
# Book of Shaders
https://thebookofshaders.com/
# Game Programming Patterns
http://gameprogrammingpatterns.com/contents.html
https://www.amazon.com/Game-Programming-Patterns-Robert-Nyst...
HN's own @munificent wrote a book discussing the most important design patterns in game design. Good book applicable beyond games.
# Game engine architecture
https://www.amazon.com/Engine-Architecture-Second-Jason-Greg...
# Computer graphics: Principles and Practice
https://www.amazon.com/Computer-Graphics-Principles-Practice...
This is more of college textbook if you'd prefer that but the WebGL one is more accessible and less dry.
# Physically Based Rendering & Real-Time Rendering
These discuss some state of the art techniques in computer graphics. I'm not going to claim to have really read them but from what I've seen they are very solid.
https://www.amazon.com/Computer-Graphics-Principles-Practice...
https://www.amazon.com/Physically-Based-Rendering-Third-Impl...
[+] [-] treehau5|9 years ago|reply
Also just kind of asking for curiosity, do you think a language like go or rust will become popular for developing game engines? I realize game programmers are anti-GC but what if GC technology advances that the performance drop is negligible I wonder.
[+] [-] kickscondor|9 years ago|reply
The shaders on ShaderToy aren't quite the same as straight OpenGL fragment shaders - there is quite a bit of boilerplate code built into the site that allows ShaderToy shaders to have access to stuff like mouse coordinates and audio signal info. (Expand the 'Shader inputs' area above the code block - none of those are available in OpenGL.)
But OpenGL also has its own library[1] of functions: `texture2D`, `smoothstep`, `mix` and all the built-in vector math - and you can see all of these in action in the shader you linked. The ShaderToy boilerplate - in partnership with these libraries - is the reason the code is so concise.
[1] http://www.shaderific.com/glsl-functions/
[+] [-] fla|9 years ago|reply
This is almost Pixar level graphics running realtime in your browser.
[+] [-] optionalparens|9 years ago|reply
As someone working in game programming a long time and now also spending more time in machine learning, I must disagree. I suppose I can see your implied point about getting started quickly or something like that, but there's really few compelling reasons to do graphics programming in JavaScript professionally. As a hobby or for a web-based project like a tutorial site, sure, JavaScript and WebGL make perfect sense. For most professional uses though, I can't agree.
Writing a decent performing and well-architected graphics engine is much more than just using an API like OpenGL, WebGL, or any of the successors or predecessors. Further, writing a graphics engine is not about creating an efficient island, but rather a piece of a larger eco-system. Consider that quite often some of the biggest hinderances to graphics performance are creating the data to actually be rendered (ex: via the game update), sending the data to the GPU efficiently, and still getting all kinds of other program logic to run before you even have a frame or want to display a frame. It would be a long post to go into all the details, so forgive me for oversimplifying. Among many things vital to graphics programming that C and C++ provide that JavaScript doesn't or either fails to do well:
- Control of memory allocations and memory shape/characteristics
- Maximizing cache lines (due to architecture, memory footprint, etc.)
- Multi-threading, concurrency, parallel processing
- Data pipelining
- Predictable execution
- Fast, efficient, correct math (or possibility thereof)
- Compilation tweaking/assembler output tweaking
- Efficient IO
- Fast compression/decompression algorithms
- Integration with existing toolchains for graphics including middleware, apps, and shader languages
JavaScript has made great strides in some of these areas and certainly things like web asm help. Nevertheless, most JavaScript runtimes people are using are wholly unsuitable for professional graphics programming. This is akin to people who used to say that you can write a professional game in BASIC or later, Visual Basic. Yes, it's true you can, but should you do it or start there? Probably not if your goal is to learn professional graphics programming. Have people taken such routes and become awesome programmers? Sure, but there are just as many people who never learn, grow, and develop nasty habits that are harder to unlearn than learning the difficult stuff.
If your goal is having fun and learning a few things before moving on to C++, dabble in some JS graphics programming, but since you called our professional programming as no longer being compelling to start, I have to point out that this is both wrong and bad advice to someone new. If you are struggling with the concepts, you will struggle in any language. If you personally need instant gratification and a self-esteem boost, from this point of view JS might not be bad for learning, but it won't teach you a lot of vital things and will encourage some horrific practices. The presence of GC and the lack of a proper parallel and concurrent programming model poison the experience quite a bit.
Ironically, other languages that are more friendly to parallelism and concurrency tend to be better than C, C++, and JS. A lot of the realities of graphics programming are simply caused by historical reasons, market dominance of things like x86 and companies such as nVidia, and existing knowledge, code, and toolchains. Functional languages for instance in many ways have the potential to be better suited to take advantage of the direction we're headed in with regard to numbers of cores, Moore's Law (or diminishing of), GPU design, memory architecture, and so on, but this is just hypothetical mostly. Given JavaScript is hardly known for its ability to deal with concurrency and parallelism in most contexts (no, nodejs doesn't count), again I have to find the above dubious considering you mention the future WRT nVidia.
Of course in the end, you can use things like transpiling, engines that may or might compile to JS as a runtime target, and so on and getting a running product that might be decent in the eye of the beholder. Personally, I've dabbled in JS enough to write a high-performance Voxel engine many years ago when I thought about making a game in JS as well as a skeleton of a 3D adventure game engine for a contract. I was productive enough but ran up against walls that weren't worth working around or just made things feel so kneecapped that I wondered why I was even using JS at all in its current state. The old adage holds that in the end, you can write anything in any language, but there is indeed value of selecting the best tool for the job. Even just making something run and at a reduced frame rate typically is something fundamentally different than being THE language for graphics programming.
In truth, when I first saw JS in the 90s, I thought there was no way it would reasonably do anything in 3D. Things are getting better, but I think you are dramatically underselling what people use and exists today in a professional environment. Your comment about 400 lines of code being that impressive and small seems to also hint you haven't dabbled that much in the area professionally. While your links are just fine and the above shader toy link is indeed impressive in the context of now, personally I was much more blown away when I dabbled in the demo scene and saw what people were doing with an Atari ST, Amiga, and PCs with no GPUs and on systems with less power than today's fitness trackers.
Anyway, I can't think of many compelling reasons to start in JS when IMO, it's better to learn to do things the proper way even if they can be a bit rough and punishing. JS will surely be more productive at the beginning, but also skip teaching you vital things you need to know as well as some of the fundamental primitives of graphics programming. This is the real world and no one in a professional environment cares if you are awesome in JS but don't understand the tools and best practices people actually use industry-wide. Moreover, you won't get far if you can't be productive from your first day because you tried to take the easy way out. If anything, just comparing the amount of resources for JS vs. C/C++, especially from professional vendors like nVidia, Microsoft, AMD, and so on makes me think at best, JS as a starting language for graphics programming only holds for web programmers. If anything this seems to makes things an extra layer of difficult.
[+] [-] elcapitan|9 years ago|reply
This is also available on the authors website: http://gameprogrammingpatterns.com/contents.html
[+] [-] Asooka|9 years ago|reply
[+] [-] greggman|9 years ago|reply
http://webglfundamentals.org
[+] [-] cr0sh|9 years ago|reply
NVidia's already there with the hardware:
http://www.nvidia.com/object/nvidia-grid.html
[+] [-] ddingus|9 years ago|reply
Your JS plus WebGL comments are compelling.
Thanks for a golden comment.
[+] [-] andrewmcwatters|9 years ago|reply
[+] [-] che_shirecat|9 years ago|reply
[+] [-] teej|9 years ago|reply
[+] [-] noio|9 years ago|reply
As with all optimization it is hard: as you try to squeeze more out of the machine your code gets less and less elegant.
[+] [-] seanalltogether|9 years ago|reply
[+] [-] Asooka|9 years ago|reply
[+] [-] ryandrake|9 years ago|reply
[+] [-] OnACoffeeBreak|9 years ago|reply
[+] [-] sputknick|9 years ago|reply
[+] [-] teej|9 years ago|reply
[+] [-] corysama|9 years ago|reply
[+] [-] adamnemecek|9 years ago|reply
[+] [-] mastax|9 years ago|reply
http://www.adriancourreges.com/blog/2016/09/09/doom-2016-gra...
[+] [-] unknown|9 years ago|reply
[deleted]