Jump to content
  • Advertisement


  • Content Count

  • Joined

  • Last visited

Community Reputation

244 Neutral

About Thal

  • Rank

Personal Information


  • Twitter

Recent Profile Visitors

2768 profile views
  1. Thal


    It looks very complex. Show a video from gameplay.
  2. I tried it. You have a long way to go. Music is annoying. It's hard to read when somebody sings. I tried to enter combat, but couldn't move my ship. I set sails but nothing happened. It didn't move. You need to work more on making your game more accessible. I lost patience quickly because I couldn't move my ship.
  3. Thal

    My first finished game "Cube defender"

    For a first game it's nice. It looks feature rich and playable. Your problem is that you are clearly not an artist. This greatly limits the appeal of your game because it's full of "programmer art".
  4. Recently GameDev.net servers failed and they are still not fully up. For ex. many user albums don't work, including mine. Is this being worked on?
  5. I released an article series for beginners about basics of game development: https://www.gamedev.net/blogs/blog/3040-make-video-games-like-a-pro/. It contains many tips, insights and dozens of solid book recommendations.
  6. Thal


    Hi, I'm Paul Miller and today we conclude this series. Game development is a very challenging occupation. If you want to be a specialist in a big company, you don't need to know that much. You just have to be really good at you job. However, if you want to be an independent developer, then you have to be very well rounded and know a lot about many things. In this final article I will give you some advice about what to do next. After reading this series you have learned fundamentals of game development. You know about the community. You know better how to learn effectively. You know basics of managing yourself, your projects and your business. You know what is marketing process. You know basics of how game industry works. You understand that Unity is a good choice for small game makers. You know fundamentals of game architecture, programming and design. You know the importance of game content, testing and support. You learned something about computer science and computer graphics. We also touched upon artificial intelligence, multiplayer and simulations. What's next? The next step for you should be completing a small project on your own. Think about something which you can complete in at most a year. At first write full documentation for it. It should be a simple, abstract 2D game. If you want to practice only programming and content development, you can make a clone of a small hit game which is popular on Steam or on Google Play. If you want to make something more unique, the best course of action is modifying a hit made by somebody more experienced. Don't design your own game from scratch because you will make many mistakes which can be avoided by copying what works. You first game shouldn't be in 3D because it makes programming and asset development at least ten times harder. Your main goal should be to complete your project 100%. By releasing a polished, small game to the market you will learn more than by tinkering with something huge. You will also start building your portfolio of projects which present your skills should you later look for a job in the industry. Modern gaming is very different than when I was kid in the 90's. Games today changed and for me there is nothing to play. I lost my passion for games. I don't play almost at all and I'm not excited about any game currently available. One of the changes of modern games is that they became much more sophisticated graphically. At first this may be seen as a boon. However, it has its problems. More realistic games leave less for imagination. In the past crude graphics only suggested something and all the holes were filled by my mind. Today everything is "in your face" and there is very little room for imagining what could have been. Modern games often lack creativity and unique visual style. They are designed as cash cow services which milk your from money at every turn. Maybe I'm just an old, jaded gamer, but I'm not excited by what is currently on the market. Games should be made with a burning passion. All the best ones were made by people out of love of gaming, not just for money. Don't forget that when you make yours. If possible, make a game you love to play yourself. This caring will shine through your work and make your product much better and more memorable. I hope you enjoyed this article series. You now know all the basics needed to make great games. If you enjoyed my work: like it, comment it, share it and consider supporting me on Patreon. That's all for today. Thank you for your time. My Facebook: https://www.facebook.com/PaulMielcarzMy Twitter: https://twitter.com/PaulMielcarzMy LinkedIn: https://www.linkedin.com/in/paulmielcarzMy Patreon: https://www.patreon.com/PaulMielcarz
  7. Thal


    Hi, I'm Paul Miller and today's topic are simulations. Mimicking reality has a long history in gaming. Simulations are very powerful for enhancing gameplay in meaningful ways, but they come with some problems as well. It this article we will explore the use of simulations in game development. Since the dawn of games people were dreaming about more realistic virtual experiences. Many early games like Tennis for Two and Spacewar! were simply crude simulations. In the 80's and 90's the first realistic games were developed and they flourished. There was especially many flight simulators. Today many triple-A companies develop highly realistic games. Modern hardware is so powerful that it's feasible to create game worlds which look almost like the real thing. There is also an ongoing quest to create more believable looking and behaving virtual humans. Realistic simulations have their place in gaming for decades, but they aren't the solution to all problems and they may even create some new problems which are absent when realism is removed. One of the most successful game studios which focused on developing simulations is Maxis. It was founded in 1987 by the famous designer Will Wright with Jeff Braun. Their first product was SimCity: a city simulation. Initially publishers weren't interested in this game because it didn't have clear win-lose conditions. The game turned out to be a great hit and now is widely regarded as a classic. Later Maxis developed many other simulation games: SimAnt, SimFarm, SimEarth, SimLife, SimTower, SimIsle and SimHealth. None of them were as commercially successful as SimCity. In the 2000 Maxis made their greatest hit: The Sims. It was a game which roughly recreated family life. Again, at first publishers dismissed this idea because they though it's not attractive to the most profitable hardcore market. Again, they were wrong and The Sims proceeded to sell 16 million copies becoming one of the best-selling games of all times. Today Will Wright is a household name and one of the towering figures of game design. Modern games often simulate physics. It's important to understand that in games only a very small subset of the real science of physics is simulated. In our industry physics means mostly Newtonian dynamics. There are no products which attempt to implement Einstein's relativistic theory which is a generalization of Newton's insights to high speeds and high energies. Game physics is still rather crude approximation which barely works even for typical combat games. Even projects with large budgets have problems simulating in a stable way objects which move very fast or have high mass. In gaming physics practically equals animation. The result is that modern graphics hardware directly supports it like Nvidia's PhysX toolkit. It's clear that games have a long way to go in order to properly present physical phenomena. Most products are full of hacks and shortcuts. They present only an illusion of the real world which has almost nothing to do with the way it works according to a professional physicist. Another active field or development is simulating realistic humans. There is a strong demand for this, since many games require believable characters in order to tell their stories. Modern graphics allows depicting humans in a almost convicting way, but there are still problems even with just presenting them. There is an issue known as "uncanny valley". It's an effect which makes almost realistic computer or robotic human models looks very unpleasant. There is a sensations of weirdness and revulsion towards humanoids which are very close to real, but not quite. There is no known solution to this problem, except piling on the efforts to get it even more real. The problem of uncanny valley is even present in high budget movies, where fully CGI humans look somewhat strange and alien, especially their facial expressions. This problem is compounded by great difficulties in simulating humanoid AI. Nobody knows how to make a virtual character behave in a acceptable way to an adult. This problems may have no solution and games will have to adapt and go in other directions instead of striving for ultimate realism. Going for the real thing in games creates many problems which can be completely avoided when your work is not realistic. There is a reason why most classic games are more likely to be stylish and unique. When you look at work of famous companies like Blizzard and Nintendo you will notice that all of their most popular games are not realistic at all. Neither Blizzard nor Nintendo ever made a game which could be classified as a simulation. This is not an accident. Realism is in many ways limiting to designers. Players come with various expectation about the real world and they want them reflected in a game. It's very easy to break the suspension of disbelief in a realistic game. People notice small differences from their every day life and consider them flaws. Realistic games must also avoid many gameplay mechanics which don't fit simulating reality. There are also many benefits of making realistic games. First of all, they are conductive to creating cinematic stories full of believable human characters. Realism is highly measurable from development standpoint. It's possible to very accurately check if a given scene or person is simulated accurately. This makes realism very attractive to managers. They can more easily control their staff and ensure quality. Realistic game worlds are also simpler to promote because people can more easily relate to something which looks familiar to them. Another benefit of realism is its mainstream popularity. While stylish, unique games might have a strong niche appear, reality is universally popular among less sophisticated gamers who don't want originality, but rather more of the stuff they already know well. Recently there has been a lot of talk of virtual reality. This topic returns like a boomerang every few years. A lot of people think that VR is the future of gaming. I don't subscribe to this view. There are many problems with VR headsets. They are expensive and it's likely to stay like that. They have many usability problems. For ex. they may cause nausea when used for a longer time. There are problems when using them with glasses. They isolate people from their environment. They are not suitable for many different kinds of games. They also require special type of input devices. Basically, they are highly attractive only to the people who want highly immersive first person experiences and that's a very limiting requirement for developers. Just consider how many great games were made to date which can't be converted in any way to virtual reality. I think that VR will forever remain a small niche, never archiving big popularity. There aren't many books directly about simulations in games on the market. I suggest studying physics as it's one of the most fruitful types of simulation in games. "A Mind for Numbers" by Oakley will teach how to learn science in a more effective way. "How to Solve It" by Polya is a classic for improving the ability to solve mathematical problems. "Fundamentals of Physics" by Halliday & Resnick is a thick, academic textbook which is an excellent introduction to serious physics. "What Is Relativity" by Bennet will expand your horizons of the relativistic physics which goes way beyond modern games. I hope you enjoyed this brief overview of simulations. They have a huge potential to improve depth of gameplay in your game. Next part concludes this series. If you enjoyed this article: like it, comment it, share it and consider supporting me on Patreon. That's all for today. Thank you for your time. My Facebook: https://www.facebook.com/PaulMielcarzMy Twitter: https://twitter.com/PaulMielcarzMy LinkedIn: https://www.linkedin.com/in/paulmielcarzMy Patreon: https://www.patreon.com/PaulMielcarz
  8. Thal


    Hi, I'm Paul Miller and today's topic is multiplayer. Playing games solo can be a great experience. Many people prefer it that way. However, cooperating or competing with others can be a source of unique thrills which can't be obtained in single player. Multiplayer games are one of most intense entertainment experiences out there. It this article we will explore the world of networked game development. Tennis for two from 1958 is one of the first computer games ever. It was a two player game. It can be considered an early example of multiplayer. Spacewar! from 1962 was also a two player game. Pong from 1972 supported both single player and two player modes. As you can see, multiplayer experiences were implemented in many old games. Early examples were made for two players because of the inherent simplicity in symmetrical designs where there are two opponents fighting each other. Most arcade machines of the 80's and 90's supported two people playing at the same time. Gauntlet from 1985 introduced to the arcades co-operative 4-player gaming. Early examples of multiplayer games were not networked. There was technology to support it. Internet was still in its infancy in the 80's. In the 90's home computers became more popular and their 16-bit power allowed making more advanced software. In the 90's most modern multiplayer genres were created. Games like first person shooters, real time strategies and massively multiplayer role-playing games took off in that defining decade. There were some earlier examples of true multiplayer in the form of MUDs, or multi-user dungeons. One of the earliest was "MUD1" created in 1978 by Roy Trubshaw and Richard Bartle at the University of Essex on a DEC PDP-10. These kind of games were text-based role-playing adventures which were precursors to modern 3D MMORPGs like World of Warcraft. There are many benefits of making a multiplayer game instead of going single player. One reason is reducing piracy. If your game requires constant access to the main server then very few people will use a pirated copy because it has no utility offline. Another benefit of going always online is that you can gather lots of data about your players and how they use your game. This can be very valuable for marketing purposes because it allows you to update your product without guessing what your clients prefer. Internet play allows constant contact with your audience which means that you can quickly adapt to their tastes. This agility of online games allows a much more analytical approach to game design which is very valuable to more business-minded developers. Building multiplayer games has its fare share of challenges. First of all, online games require special design which is very different from single player design. Not everybody wants to make such games. If you love experiences based on deep stories and interesting characters then it may not be attractive to you. Multiplayer games have to be coded differently than solo games. They require special architecture to handle many players. This creates a technical challenge to beginners. Remember, you can't add online play as an afterthought late in development. Another issue is that your game will have to be made as a service and maintained for many years, including paid servers. Finally, there are problems with maintaining your player community. Some people are going to cheat, hack or troll others which isn't easy to handle. In order to make online games it's very important to learn about modern networking models. Today multiplayer practically equals playing over the internet. This global network can be conceptually modeled as a four layer stack. The main four layers are: link layer, internet layer, transport layer and application layer. There is an even more elaborate OSI model of networking which has seven layers. The four layer model is sufficient in most cases. Link layer is your physical layer. It encompasses things like your Ethernet cable, DSL modem and associated protocols. Internet layer is dominated by the internet protocol, but there are others. Transport layer contains protocols like TCP and UDP. Most games are built using these. At the top we have application layer and protocols like DNS, FTP and HTTP. Understanding this stack is required for building any decent online software. When developing your game you have to choose one of two main networking architectures: peer to peer or client-sever. Both have pluses and minuses. Client-server gives you more control over everything, but is more costly to make. You have to purchase servers and maintain them as long as your game is on the market. Client-server is a well understood architecture and is used by most games today. Another option is P2P. It has some big advantages. It's vastly cheaper to maintain and scales much better with larger games. That's because with P2P when you have 100 million players online you don't need a massive server grid to support them. They use their own computers to host games and save profile data. One of the main problems with pure P2P is maintaining control of the host swarm. Another problem is maintaining security. In pure P2P it's very hard to prevent cheating and hacking. Ultimately it seems that the best solution is some kind of hybrid of the two. Among problems with programming online games one stands out as the most prominent. It's coping with latency. Internet wasn't built for real-time communication. It was initially a military network which was supposed to survive a nuclear attack. Nobody cared to much about its delays. This problem is still with us today. If you are making an online action game you will have to spend a lot of time working on solving latency problems. If you don't do it, your game will feel sluggish and unresponsive to your players. Note that latency can't be completely removed. The goal is to hide it through various tricks in order create an illusion of latency-free play. Commonly used techniques are client prediction and time manipulation. Online games have a different nature than single player games. When you make a solo experience you generally just want to maximize sales. You count how many boxes of your product have flown from the shelves. With multiplayer games it's something else. You need to think about your game as an ongoing service. Initially your goal isn't making sales, but building a strong community. When you have developed a fan base you can milk it in various ways, for ex. using cash shops or with some kind of virtual economy. It's a completely different way of making money than traditional box sales. Multiplayer programming is not as popular as graphics programming and there are far fever books available. "Networking and Online Games" by Armitage is an excellent introduction to the field. "Multiplayer Game Programming" by Glazer & Madhav is a great volume for network coders. "Computer Networks" by Tanenbaum & Wetherall is a thick, academic textbook which will teach you fundamentals of connecting computers. "Database Systems" by Coronel & Morris is a textbook about databases which are very commonly used among online games. I hope you enjoyed this brief overview of multiplayer. The future belongs to online games, so learn how to make them with skill. Next topic are simulations. If you enjoyed this article: like it, comment it, share it and consider supporting me on Patreon. That's all for today. Thank you for your time. My Facebook: https://www.facebook.com/PaulMielcarzMy Twitter: https://twitter.com/PaulMielcarzMy LinkedIn: https://www.linkedin.com/in/paulmielcarzMy Patreon: https://www.patreon.com/PaulMielcarz
  9. Hi, I'm Paul Miller and today's topic is artificial intelligence. AI is a fascinating subject. It has an aura of mystery about it. Many people still believe that human mind can be simulated using a computer. This suggests that AI could some day be possibly smarter than men. I don't believe that, but learning how to code intelligent games is very important to make them fun. In this article we will explore the field of artificial intelligence. AI research is as old as computing. Alan Turing, one of the fathers of the Information Age, created a test in 1950 called by his name. Machines who want to pass it must mimic human conversations using plain text terminals. Today nobody takes this seriously, as AI research has largely expanded to other problems than just simulating people. Well made artificial intelligence can have an enormous utility in various fields. Early after World War II researches were very optimistic. Many though that we will be able to create thinking machines before the turn of the twentieth century. It didn't happen and there are good reasons to believe that it will never happen. Academic AI is not like game AI. One of the main differences is that researches are looking to solve specific problems which appear to require intelligence. While developing games we want to typically achieve fun which doesn't always means that we want the computer to play perfectly. Human players when they start the game are very weak and make many errors. We don't want to pitch them against perfect opponents. Creating a robot soldier who never misses a shot and behaves intelligently on a battlefield is a worthy goal for any military, but such opponent in a game might be to hard to beat and cause frustration among gamers. Video game AI has somewhat different goals than academic AI. In gaming we are looking for intelligence which is primarily fun to interact with, instead of a ruthlessly efficient one. Programming AI is very different than programming other parts of a game. For ex. rendering is highly structured and practically all games use similar algorithms and techniques. AI is special because intelligent behaviors must be tailored for specific gameplay design goals. This means that artificial intelligence programmers must also think like game designers. Changes in AI coding can have a big impact on gameplay. This makes it harder to contain AI implementation as separate programming discipline. Another issue is that good AI may behave in unpredictable ways. This may be perceived as a benefit because it makes a game more interesting and full of surprises. It can also become a problem where your own AI is smarter at the game than you and it finds imbalances in your design, breaking the game for the players. Chess playing programs are considered one of the successes of AI development. Chess computers has made the news in 1997 after IBM's Deep Blue beat Garry Kasparov who was then the reigning world chess champion. At the time it was a sensation and even Kasparov was dismayed and surprised that he lost. Today times have changed. For many years now the best chess software can consistently beat world champions while running on consumer hardware, like a laptop. Vladimir Kramnik, also a world champion, played a show match vs. Deep Fritz in 2006 and lost convincingly without winning a single game. Although chess software appears smart it's in fact only doing clever searches through the game tree and picks best moves based on evaluating position score. It's possible to summarize its whole operation in one sentence. Chess proved to be a rather easy problem to solve on a computer. Modern chess software plays nothing like a human. Its strength is based almost completely on its speed of searching. Many games share certain AI problems. For ex. in most game worlds agents must find their way from point A to point B. This is called pathfinding and modern games have this nailed. The standard solution is using so called "A*" ("A star") algorithm which was originally designed as a general graph traversal method. Pathfinding works in somewhat similar way to chess programs. In both cases intelligent solutions are found using extensive search of all possibilities with scoring of best candidate moves. There is nothing particularly smart about these algorithms. They don't contain any deep insights about how the human mind works. Both chess programs and pathfinding are simply examples of solid computer science. They aren't very interesting to serious AI researchers. One of the classic methods of solving AI problems in games is by using state machines. In order to use such a machine you must divide desired behavior into a finite number of discreet states. You also must specify rules of transitioning between those states. Early games with simple mechanics relied on such systems. For ex. in a platform game you may have a monster which has the following states: attack, patrol, escape, taunt. You implement behavior for all states and specify what must happen to switch to a new state. One problem with this method is that it doesn't scale well with the number of different states. When you have just four it works fine. When you have dozens of them then density of connections between states can be very high and such systems become a tangled spaghetti code which is very hard to modify and maintain. Modern games often use a technique called behavior trees. This method of modeling artificial intelligence is somewhere similar to hierarchical state machines. You create a description of a behavior using nodes. In a state machine each node is a state, while in a behavior tree each node is a task. BTs are in many ways much more sophisticated than state machines. Using them it's possible to implement much more complicated behaviors. Another advantage is that they are hierarchical which allows creating modular systems, making behavior trees more suitable for team work and solid software engineering practices. One more technique which very popular among AI professionals are artificial neural networks. Initially they were intended to simulate how animal brain works. In practice it turned out that they are very different from a real brain and their purpose narrowed significantly. An ANN is based on a collection of connected units or nodes called artificial neurons which loosely model the neurons in a biological brain. Each connection, like the synapses in a biological brain, can transmit a signal from one artificial neuron to another. An artificial neuron that receives a signal can process it and then signal additional artificial neurons connected to it. One of the most interesting features of neural networks is that they have to be taught in order to operate correctly. This makes them somewhat similar to a living organism which needs also to learn in order to exhibit intelligent behaviors. There is a good selection of books about AI on the market. I recommend starting with "Artificial Intelligence for Dummies" as it seems to be an easy to read introductory book. "Artificial Intelligence for Games" by Millington contains a collection of commonly used techniques in game development. "Programming Game AI by Example" by Buckland is another good one for game coders. Finally, "Artificial Intelligence - A Modern Approach" by Russell & Norvig is a thick, academic textbook which should teach you the fundamentals. I hope you enjoyed this brief overview of artificial intelligence. It's one of those fields where deep innovations are still possible. Next topic is multiplayer. If you enjoyed this article: like it, comment it, share it and consider supporting me on Patreon. That's all for today. Thank you for your time. My Facebook: https://www.facebook.com/PaulMielcarzMy Twitter: https://twitter.com/PaulMielcarzMy LinkedIn: https://www.linkedin.com/in/paulmielcarzMy Patreon: https://www.patreon.com/PaulMielcarz
  10. Thal

    Computer Graphics

    Hi, I'm Paul Miller and today's topic is computer graphics. When you make your first game you will notice that you spend huge amount of time working on your visuals. Delivering great looking graphics is the main challenge in game programming. It's so important that whole companies were built around making things look better. In this article we will explore fundamentals of this field. Computer graphics history started in the 50's with the first digital machines. Initially drawing anything was a challenge. Hardware was extremely limited and first displays were very primitive. One of the first games ever to feature any visuals was Tennis for Two. It was developed by William Higinbotham from Brookhaven National Laboratory using an analog computer and it displayed its output on an oscilloscope. This game was somewhat similar to Pong, but it felt more like real tennis. The phrase "computer graphics" itself was coined in 1960 by William Fetter, a graphic designer for Boeing. The 70's saw a lot of progress, especially in the University of Utah. One of the enduring symbols of that era is the famous teapot model created by Martin Newell. In the 90's first accelerated 3D graphics card were developed for the home market. Although professional graphics workstations were available earlier from Silicon Graphics and others, it's the invention of a modern Graphics Processing Unit or GPU for home computers which transformed the landscape for gaming. The first commercially successful accelerator was 3dfx Voodoo 1 card. It paved the way for all the modern cards we have today. 3dfx pioneered hardware rasterization for the home market and changed the world. Later 3dfx made several business blunders and went bankrupt. Nvidia, today's powerhouse, acquired their assets and hired their best engineers. Rendering in modern games is highly standardized. The era of wild innovation is over. In the past people like John Carmack could invent whole new rendering systems, unlike anything before. Today it doesn't happen. The closest match would be Minecraft with its voxels, but even that game is largely based on classic rasterized rendering principles. Modern graphics hardware is optimized for drawing very fast lots of triangles with custom shaders. This unification of graphics technology has some big advantages. You aren't expected to reinvent the wheel every few years. If you learn solid theoretical principles you can apply them directly to your games, without a need for some kind of crude optimization hacks. Modern game renderers draw inspiration from the latest graphics research with ease. Two main methods of creating CGI today are rasterization and ray tracing. Rasterization is a process which takes vector data and converts it to pixel data. For ex. it takes three point description of a triangle with its color and it can draw on screen a group of colored pixels which look like a triangle. All modern computer games use this technique. In the past some games used other methods to draw 3D graphics. For ex. Wolfenstein, Doom and Duke Nukem 3D were based on variants of ray casting. There wasn't a single triangle drawn in those games. Ray tracing is used for offline rendering as seen on TV or in cinemas. It works by tracing virtual rays from the camera. Early ray casting engine were in many ways more similar to ray tracing than to modern methods. Ray tracing is a technique which allows for higher image fidelity but it's too computationally expensive for interactive software. Recent advances in graphics hardware promise bringing true ray tracing to home computers as an auxiliary method of rendering for those phenomena which can't be accurately reproduced with rasterization. Computer graphics is a large field with a well developed body of knowledge. However to find your way around all that wealth of information you need to be familiar with just a few key concepts. In the reminder of this article I will mention some fundamental ideas which you should research further to gain practical understanding. The four main elements of any 3D image are: models, lights, cameras and the screens. Models are typically composed of triangles which make meshes. Lights are objects placed in a scene in order to control shading of models. This process of shading is accomplished using little GPU programs called shaders. Cameras are used to control transformations of 3D objects and their operations are implemented using matrices. Finally, the screen is where it all ends, but even at this stage you can apply various image-based effects in order to stylize your output. In order to render any 3D image on screen there must be some kind of transformation system in place. The problem is that when you have a vector model in a file your computer has countless ways to present it on screen. Transformations are geometric operations implemented using matrices which convert 3D data from object space to screen space. There are three commonly used transformations in a stack: object space to world space, world space to camera space and camera space to screen space. This transformations are combined into a single matrix which is applied to all triangle vertices per frame. Note that this process doesn't show anything on screen. It's just a mathematical conceptualization of operations in 3D space. In order to see something on your monitor the output of transformations must be rasterized or ray traced. Modern video games commonly use a concept of a scene graph. This graph is data structure which holds description of the main elements of the 3D area which should be rendered. It's a hierarchical structure based on a tree. Each scene graph has a root, various branches and ultimately leaves. These leaves might be for ex. meshes or other primitives supported by the renderer. Scene graphs are very important in games because many optimization techniques depend on them. When you think about a complex 3D environment in a game always remember that it can be completely reduced into a single hierarchy of objects which are then treated in a rather uniform way. It may look very complex, but inherently it's handled by just one big data structure which handles most spatial relationships between objects. While thinking about rendering solutions for your game it's useful to have a working model of the whole graphics processing pipeline. Going into details of this could easily fill a book and such books are already written. Now, I would like to share with you a very coarse, but solid, high level view of the stages in frame processing. The four main stages in order are: scene extraction, frustrum culling, visibility estimation, occlusion culling. Scene extraction means that your game must define very broadly what should be drawn as a fragment of your whole game world. Frustrum culling removes from processing all elements which are certain to be outside of the current camera view. Visibility estimation is often called PVS stage, or Potentially Visible Set. This stage further eliminates hidden objects. Finally, we have occlusion culling which again, removes hidden objects which are occluded by something else looking from the camera position. There are great many books about computer graphics, but only a few true classics. "Computer Graphics - Principles and Practice" is a classic CGI bible for all people who want to learn the basics. "Real-Time Rendering" by Akenine-Moller is another classic which is more suitable for computer game programming. "Graphics Shaders - Theory and Practice" by Bailey & Cunningham is an excellent introduction to shader development. "The Image Processing Handbook" by Russ & Neal is a solid choice for learning pixel manipulation techniques. I hope you enjoyed this brief overview of computer graphics. Game development is centered around creation of visuals and it will never change much. Next topic is artificial intelligence. If you enjoyed this article: like it, comment it, share it and consider supporting me on Patreon. That's all for today. Thank you for your time. My Facebook: https://www.facebook.com/PaulMielcarzMy Twitter: https://twitter.com/PaulMielcarzMy LinkedIn: https://www.linkedin.com/in/paulmielcarzMy Patreon: https://www.patreon.com/PaulMielcarz
  11. Thal

    Computer Science

    Hi, I'm Paul Miller and today's topic is computer science. Video games are software which is executed on a digital machine. Ultimately every game must be reduced to hard computer science in order to make it real. You should know computers really well if you want to be a skilled game developer, especially a programmer. In this article we will explore fundamentals of what computer science is. Modern game industry is a serious business. Garage days are largely over and making games requires some serious engineering and know-how. Triple-A games are massive computer science projects. Although those products are made so that we can have fun, creating them is no laughing matter. Completing a serious computer science engineering project calls for appropriate training. Among game developers it's engineers who need the most formal education. Artists and designers don't need a college degree to get really good and professional, but becoming an excellent systems engineer without a degree is very challenging, but still possible. John Carmack is one of the greatest game programmers of all times and he is a college dropout. Computer science is a large and diverse field of knowledge. There are many big branches which alone can be studied for many years. Major sub-disciplines in CS are: computer hardware, algorithmics, operating systems, networking, programming languages, software engineering, database systems, computer graphics, artificial intelligence and theory of computation. As you can see a lot of stuff goes into understanding computers. That's why this field has fascinated me for so long. You can spend a lifetime studying computer science and game development without mastering it fully. Making games is a much broader problem than just computer side of things, so if you want to be a well rounded independent developer prepare yourself for some serious learning. If you want to get good at computer science you shouldn't neglect studying mathematics. Historically the whole field of computing evolved from mathematical research. Alan Turing, the father of the digital age, was after all a mathematician. It's possible to be a great computer programmer without having a large math knowledge, but the more math you know as a coder, the better for you. Making a modern 3D game requires solid understanding of vectors, matrices and linear transformations. Physics simulations call for knowing calculus pretty well. Computational geometry is the backbone of collision detection. Ultimately the world of computers is built on top of the world of mathematics and there is no way to deny that. Theory of computation is the most fundamental aspect of computer science, beyond raw mathematics. People like Alan Turing and Alonzo Church studied what can be calculated using a machine. From their work the famous Turing machine concept emerged. Every modern digital computer is a device which is in principle compatible with a Turing machine. Computation researchers are looking at the frontiers of algorithmics. They are analyzing what can and what can't be efficiently done on a computer. Not every problem can be solved by a machine. There are many problems which lay beyond capabilities of any computer or a robot. Computers as machines have certain possibilities and also certain limitations. Theory of computation explores those and gives us some interesting insights. Computer hardware is the backbone of any video game. It's a good idea to learn about it. Studying basics of electronics will broaden your horizons and may allow to troubleshoot defects in your own machines. Beyond raw electronics there is computer organization and design which is a separate discipline. There is a lot to be learned about how computers work. You should study also specific architectures, especially the PCs which are dominant across the globe. It's also a good idea to learn a bit about computer history. When you read about problems of programmers who worked with early digital machines you start to appreciate more all the progress we've experienced since then. Algorithmics is called by some experts "the spirit of computing". Learning to understand and to design algorithms is at the heart of computer science. If you want to build games and you want to pick one skill from computer science to master, it should be the art of algorithm design. Ultimately all gameplay in a every single video game ever can be reduced to algorithms. When you know how to design them well you are able to create a much more elegant, subtle, deep and precise gameplay systems which separate average games from the great ones. Learning algorithmics is essential for programmers, but many great designers are also skilled at it. Will Wright from Maxis and Peter Molyneux from Bullfrog are two famous examples. Thanks to their coding skills both are known for designing games with interesting and unique gameplay systems. There are countless types of programs on a typical computer, but one type stands out as special. It's the operating system. Every modern computer has such a system and the theory behind them is very elaborate. It's a very good idea to study this theory in order broaden and deepen your computer education. You are probably using an operating system every day, but how much do you know about their inner mechanics? There are good college texbooks about them. Computer games are built on top of engines which are made as a layer above an operating system. If you are interested in engine development, understanding deeply operating systems if crucial. Another field which is of paramount importance in practical computing are databases. Every modern online video game uses one. When you work on multiplayer aspect of your game you will very quickly find yourself working with a database solution. Also implementing business logic of modern game services requires solid understanding of database systems. You certainly don't have to be a database professional in order to make games, but reading at least one college textbook about them will teach you the basics in order find your way around. Computer science books could fill an entire library. "Computer Science" by Brookshear & Brylow is an excellent, broad general purpose introduction. For beginner programmers I recommend studying the theory of computation. "Algorithmics: The Spirit of Computing" by Harel & Feldman is a great primer about the most fundamental issues. "Computer Organization and Design" by Patterson & Hennessy is a primer about the hardware side of things. "3D Math Primer for Graphics and Game Development" by Dunn & Parberry is a gentle introduction to game math. I hope you enjoyed this brief overview of computer science. It's a discipline you must study deeply in order to become a competent game developer. Next topic is computer graphics. If you enjoyed this article: like it, comment it, share it and consider supporting me on Patreon. That's all for today. Thank you for your time. My Facebook: https://www.facebook.com/PaulMielcarzMy Twitter: https://twitter.com/PaulMielcarzMy LinkedIn: https://www.linkedin.com/in/paulmielcarzMy Patreon: https://www.patreon.com/PaulMielcarz
  12. Thal

    Game Support

    Hi, I'm Paul Miller and today's topic is game support. When you are just starting out you will probably be very focused on finishing a decent game. This is however not the whole story of game development. Games must be also supported in various ways after release. In this article we will explore fundamentals of what this means in practice. There is some overlap between game testing and support. When you test your product you are looking for flaws. When you are in support mode you are still searching for things to fix and change based on your player's feedback. Games which achieve high levels of popularity typically require much more support efforts. That's because larger player base can more easily find smaller flaws and will surely have more diverse needs. This results in a larger number and greater scope of changes to your game after release. Popularity is the main measure of success in this business, but it comes with some additional costs as well. Game support is part of customer service in your company. Customer service is a very important part of any business. It's so influential that whole world-class brands were built around it, like Nordstrom department store chain, which is famous for its "customer heroics". Support means interacting with people all the time in various ways. Customers will form opinions about your whole operation based on a single interaction with a service person. Great treatment of customers leads to higher satisfaction levels and ultimately may lead to higher loyalty. Loyalty equals easier subsequent sales and higher tolerance for premium pricing. In order to fully employ modern support techniques you need to make your game online only. Games which don't have constant access to internet are much more limited in this regard. In addition of achieving better contact with your players, going full online will also reduce piracy. Apart from a network connection you also need some kind of platform for delivering patches, updates and communicating with your player base. For a small indie studio the best option is using something like Valve's Steam or Google Play. Rolling your own solution is challenging and requires major effort. Customer service is a major topic and whole books were written about it. There people around the world who specialize in it as their main career. Here I would like to simplify this topic in order to organize your thinking. There are four main elements of game support which should be addressed by any indie studio. These are: metrics, patches, updates and tickets. You can't ignore any of these if you want to have a first class operation. There is much more to customer support than what is mentioned here, but it's a good start for developers who are new to this. When your game is out you should constantly gather player feedback. There are many ways to do it. You can for ex. collect data by analyzing social media buzz about your game. You can scan forums, Reddit posts or YouTube comments. There is however a better method to gather data first hand. This method is collecting metrics directly from your game client. Metrics are various measurements gathered by monitoring player activity. Typically you will analyze them using statistical methods. They can be a goldmine of marketing data which can be used to make smart decisions about changes to your game in the future. Every game contains flaws and bugs upon release. Nobody can do it perfect at the outset. The mark of all great game studios is that they are always chasing that elusive perfection. Studios like Blizzard Entertainment release patches to their games even after a decade since initial launch. This shows extreme dedication to quality and high levels of perfectionism. Excellent brands are always like that. It's said that they "sweat the little things". You should also release patches to your game as long as some people are playing it. Don't abandon your game unless it's completely dead. Game updates are different than patches. Patches are all about fixing bugs and improving balance. Updates typically add new content or mechanics. If you want to improve what is already there, you issue a patch. When you want to add some new functionality you deploy an update. In the long run updates are as important as patches. That's especially true for games which use "free to play" business model. When your goal is to keep players coming back possibly for years you must produce new content updates regularly. Generally speaking updates are very important for games which are designed as long-term services. Serious companies have automated support systems which are based on customer tickets. Tickets are typically messages from people who complain about some kind of problem or who are seeking help. In a first class business customer support person should respond to a ticket within 24 hours and sometimes instantly. Note that when you game becomes very popular the number of such tickets may become quite large. This may require hiring quite a bit of people to handle then. One way to solve this problem is using you biggest fans as an unpaid customer support resource through forums and other social media features. One of the most famous companies which takes game support seriously is Blizzard Entertainment. They are famous for making games which last on the market for decades. Blizzard takes the time to make a game which achieves greatness. They are not satisfied with making products which a just good. They are always striving for greatness. In their customer support efforts they are also one of the best. It's shocking for how long they release patches to their most popular games. For Diablo 2 which was launched in the year 2000 they released a patch in 2016. That's whole 16 years of active support. Starcraft was released in 1998 and they published a patch for it in 2018. That's a shocking 20 years of support. Imagine their dedication to quality. Extremely few companies are like that and also very few computer games are played for two decades. There aren't any books about game support but there are many about customer service. "Customer Service for Dummies" is a good primer for beginners in this field. "Customer Service - A Practical Approach" by Harris is another good general purpose manual. If you want to do the supporting yourself, it's a good idea to learn more about writing well and about social skills. "The Elements of Style" by Strunk Jr. is a classic primer for ambitious writers. "People Skills" by Bolton is great book about handling social interactions with grace, including stressful or conflicting situations. I hope you enjoyed this brief overview of game support. You must offer an excellent customer service to your players in order to make them loyal to your products and company. Next topic is computer science. If you enjoyed this article: like it, comment it, share it and consider supporting me on Patreon. That's all for today. Thank you for your time. My Facebook: https://www.facebook.com/PaulMielcarzMy Twitter: https://twitter.com/PaulMielcarzMy LinkedIn: https://www.linkedin.com/in/paulmielcarzMy Patreon: https://www.patreon.com/PaulMielcarz
  13. Thal

    Game Testing

    Hi, I'm Paul Miller and today's topic is game testing. When you just starting making games, testing is typically not on your mind. There are so many problems to be solved before you have anything half-decent to test. When you grow in experience you will find good solutions to most of those development issues and testing for correctness and quality will become more and more important. In this article we will explore fundamentals of game testing. In software development testing is an important and complex process. There are many books dedicated to teach you to do it well. There are lots of different types of tests used in practice. There are even whole agile methodologies built around them, like Test-Driven Development. It makes writing automatic tests almost more important than creating the code for testing in the first place. In games ensuring quality is especially involving since we have to check also if our games are fun to play which is a rather elusive concept. Video games are generally harder to test properly than regular software. At the other hand, game failures are less important than in many other, more critical fields. Modern software houses take testing very seriously. Each major company has its own Quality Assurance team. These people test software and look for various flaws full-time. In a larger firm it may be a sizable group. Testing of normal software is often highly formalized and organized which has to be done a bit differently with video games. The problem with computer entertainment is that judging quality of a product is only partially objective. You can always count crashes of your game, but you can't count how much fun people have. The result of this is that fully testing games for quality is to certain extent an art rather than science. There are many different types of tests in use among software developers. When you first learn about it, it may be even a bit overwhelming. At the core games are programs, so you can use most industry testing methodologies directly or with some modifications. It's useful to organize your thinking about testing and realize which game areas are most important to verify. I think those four areas are: reliability, interface, gameplay and performance. If you thoroughly validate these four elements, your game will not suffer from any major problems. Of course it's easier said than done, but you have do it in order to deliver quality to your customers. There are two main approaches to software testing: white-box and black-box. White box method assumes that testers have understanding of how the program works internally. White-box tests are often designed by programmers who implement the code to be tested. These methods are highly technical in nature. One popular type of white-box tests is code coverage analysis. The second approach is black-box testing. Here it's assumed that quality assurance people don't know how the program is built. They only judge how it appears to work. This type of testing doesn't require programmers and regular users can do it with little training. One type of popular black-box tests is verifying functionality through running use cases which are designed according to program specifications. Unit testing is the most fundamental type of program verification. It's a variant of white-box testing. Unit tests are little automated procedures which check code for correctness at the most basic level. In structured programming individual functions are tested. In object-oriented programming individual classes are verified. It's possible to design a more elaborate unit testing system. It may for ex. include metrics analysis, peer code reviews, code coverage analysis and other software testing practices. Two another variants of popular software tests are integration testing and system testing. Integration testing is a module or component level method. The idea is to verify that interfaces of different parts of a program are compatible and that they are functioning as specified. These parts are modules in structured programming or components in object-oriented programming. They are integrated together and tested if they work correctly as a whole. System testing is similar, but in this case the complete software package is tested against specifications for ex. by running predefined use cases. Integration and system testing are variants of white-box testing. Even most gamers are familiar with alpha and beta testing. Alpha tests are somewhat similar to system tests, but focused more on customer wants rather than raw specifications. Larger software houses have internal teams of full-time testers who run those alpha tests. These people typically write some kind of reports where they describe flaws they've found. Sometimes it may be less formal where testers are treated like customers and asked for their subjective opinions. Beta tests can be considered a form of external user acceptance testing. They are public and the number of testers is far greater than in any other phase of a project. Both alpha and beta tests are variants of black-box testing. Aside from classic software testing video games must be also playtested. Playtesting is black-box method which involves real players checking the game holistically. Playtesting is very important part of development. It's especially crucial for highly innovative games which have unique gameplay. Game developers, who spend enormous amount of time on their game, can lose objectivity and fall in love with their own creation, like with their own baby. External players have typically a much more sober view of the game and they can rather easily find various flaws which are hidden from core developers. One of the classic examples is validating game difficulty. Developers play recent builds all the time and as a result they may tune difficulty far to high for the general audience without even noticing it. External playtesters can catch this problem very quickly. Getting into testing is one the easiest jobs to get in the game industry. If you have no marketable skills at all, but you love playing games, you may have what it takes to became a decent tester. Spending all day long hunting for bugs and flaws is not the most glamorous jobs there is. As a quality assurence employee you will not simply get paid for playing games full-time. Testing a game is very different from a normal playthrough. In many companies the best and most valuable testers have some career options. There are some cases where a humble tester became a lead designer for some later project. Think about it. You can get an easy, entry level job in games and later even become a designer. There aren't any good books precisely about game testing, but there are many about general software testing. I recommend "Quality Code" by Vance to learn fundamentals of software verification. "Debugging" by Agans will teach you solid, universal principles of removing bugs from software and hardware. "Clean Code" by Martin is an excellent work about how to write code which is of high quality at the outset. "Game Design Workshop" by Fullerton is a good volume about playcentric game design. I hope you enjoyed this brief overview of game testing. Constant verification of software is necessary to achieve high quality and strong sales. Next topic is game support. If you enjoyed this article: like it, comment it, share it and consider supporting me on Patreon. That's all for today. Thank you for your time. My Facebook: https://www.facebook.com/PaulMielcarzMy Twitter: https://twitter.com/PaulMielcarzMy LinkedIn: https://www.linkedin.com/in/paulmielcarzMy Patreon: https://www.patreon.com/PaulMielcarz
  14. Thal

    Game Content

    Hi, I'm Paul Miller and today's topic is game content. Computer games are a special type of software. While making most other programs developers spend nearly 100% of their time writing good code. In games huge amount of effort is required to create levels or worlds and fill with them with interesting stuff. This is one way in which makes video games are very different from most other types of computer software. In this article we will explore fundamentals of game content production. Game content is simply everything which goes into the final product, except code. There are many types of content: textures, icons, models, animations, effects, sounds, music, speech, cut-scenes, levels and even mods. While a single person can be a good game programmer who can make most game systems, it's practically impossible to be able to make all content on your own. While writing software it's often possible to hide your incompetence in various ways. This is not the case with assets like art, since here everything is in your face and must be of high quality. For ex. if you are not a composer, your programmer music will hurt the ears of the more sophisticated players. In game development asset production is organized into so called content pipeline. It's a management process designed to optimize creation of all new data which has to be integrated with code. In big game houses this process can get rather complex and quite expensive to run. Some teams use tools like Perforce to manage massive number of game files. The enterprise license for Perforce still costs hundreds of dollars per seat per year which may sound a bit scary to a beginner in his bedroom. Today there are many free tools to ease your pain in this department, so don't fret. Anyway, small games made by tiny teams don't require any sophisticated asset pipelines, so it's not a beginner problem. In the past development of games was dominated by solving technical challenges. Since computers were very limited it was the job of a programmer to squeeze as much juice from their machine as possible. Today hardware power is extremely large and the job of a coder is much less focused on clever optimizations. Modern games use massive amount of data comparing to their code size. A big triple-A game can take 50 or more GB of space on your drive. The amount of assets in larger games today is shocking. We are talking about millions of files in some cases. Compare that to Atari 2600 days where a full game could fit in a space occupied today by a single icon PNG. Not only modern game assets are numerous, they are also very complex. In the past characters in 2D games were simply drawn by a pixel artist, bitmap by bitmap. It required a lot of skill and patience, but it wasn't very complicated. Modern characters and game worlds are extremely sophisticated in comparison. Back in the 90's if you wanted a soldier to have an eye, you plotted a single pixel on his face and you were done in many cases. Today artists model eyeballs, eyelids, eyelashes and animate everything patiently. The amount of work to make a character in a modern game is several orders of magnitude larger. The same is true for other asset types, including animations. Graphics creation is the main bottleneck. All those complex assets which have to be made require lots of manpower. As a result modern development houses hire much more artists than programmers. In the distant past you needed one coder and one artist to make a hit game. Today you often need at least ten programmers and thirty artists. Largest studios hire whole armies of content developers. For ex. The Witcher 3 was touched by around 1500 creators. I'm sure that most of them were asset makers who worked on making that game look like a believable fantasy world. Just ponder that number. It's a massive group of people. It's so large that you can't even realistically make a single photo which shows your whole team smiling. In the future it's likely that elite teams will get even larger. Creating content for a modern game is a big challenge for independent developers. That's because they are often working in small teams and can't afford hiring lots of artists. It is why you see so many simple 2D games on Steam. Simplifying graphics allows greatly reducing required asset complexity allowing making a game on a tight budget and on a short schedule. If you want to make games on your own you must learn programming and basics of graphics creation. You should also have a good eye for well made art. There are many ways to bring in more assets into your game without spending a fortune. If you are rich, the best method to create assets for your game is by hiring enough people. This is the best way in many cases, especially when your game is highly unique and requires lots of complex, custom work. For many solo developers this option isn't available because of prohibitive costs. Another option is designing your game around very cheap or free content available online. If you have some art skills your can save yourself a lot of effort and money by modifying assets created by more skilled craftsmen. For many smaller indie games this solution may work well. If you design your game to be abstract and 2D you can make all assets needed on your own, even if you are mostly just a programmer. Even a tiny game can make significant money, so don't dismiss this idea at the outset. If you use Unity engine you can exploit its Asset Store. It's a shop for developers which contains a huge wealth of high quality 2D and 3D art, music, tools, scripts and other goodies available of-the-shelf. Using this store with Unity is an excellent choice for a solo developer or for a tiny studio. Another use of that place is finding talent for your projects. For ex. if you need a programmer or an artist for your indie team, you might be able to find somebody highly qualified to work for you on the Asset Store. You don't have to give them a full-time job. It can be just an assignment, where you pay only for the work done, instead of per hour. There is one other option to bring in more stuff into your game: procedural content creation. Some people believe that this is some kind of "holy grail" of game development which will solve all problems. I don't share to that viewpoint. It's possible to generate procedurally a lot of things in games, but this technique has limits. It's a good idea to think about procedural generation as an aid for your asset developers instead of as a replacement for them. This means that to exploit it fully you need even more programmers to create great procedural tools for your artists and you need even more skilled artists. For all your efforts you will be able to build much larger game worlds filled with more interesting stuff to do by your players. Procedural generation is hard to do well and it will be fully exploited only by the largest game studios. There are countless books about creating various types of game content. Far to many to list here, as there are many completely separated disciplines among asset makers. If you are mostly a programmer, you can do a lot to learn more about making art or levels. There are several good websites with totally free assets which can also be used for commercial purposes. There are sites with free photos, sounds, music and some other stuff. If you can learn to modify content made by others you get quite far just by using free materials. I hope you enjoyed this brief overview of game content. Learn how to deliver a lot of it in order to make your games feel rich. Next topic is game testing. If you enjoyed this article: like it, comment it, share it and consider supporting me on Patreon. That's all for today. Thank you for your time. My Facebook: https://www.facebook.com/PaulMielcarzMy Twitter: https://twitter.com/PaulMielcarzMy LinkedIn: https://www.linkedin.com/in/paulmielcarzMy Patreon: https://www.patreon.com/PaulMielcarz
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!