Jump to content
  • Advertisement
Sign in to follow this  
nbertoa

How to improve computer graphis problem solving skills?

This topic is 641 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi, community.
 
I have been working as a C++ developer for 7 years. I constantly learn about C++ and computer graphics. I read books and papers from SIGGRAPH, GDC, etc about new techniques to implement, new ways to solve common or new problems in the computer graphics field.
 
I have a blog where I try to explain what I learned, how I learned and what resources I used to learn it. Also, I have a little DirectX12 framework to apply the new techniques I learn.
 
I know about the different sorting algorithms we learned in the University (insertion, selection, bubble, merge, quick, and all that stuff), and all the big O complexity of data structures like queues, stacks, red-black trees, hash tables, etc.
 
I know about how important hardware knowledge is when you want to write software and when you want to define the data based on your problem, based on the memory hierarchy, performance issues, etc.
 

As you can see, I am trying to orient my career to the computer graphics field, that is why I try to mix theory and implementation.

 
Recently, I felt curiosity to come back to solve problems like the problems you can find in HackerRank and that kind of websites. They are based in algorithms about String, Dynamic Programming, Big Numbers, Search, Sort, Graph, Greedy, etc.
.
Of course, practicing this kind of problems will no hurt me, but I was asking myself if that could improve computer graphics problem solving skills significantly or not.
 
So the question is, do you think it's worth solving that kind of problems and learning deeply about that kind of algorithms and data structures used to solve them? There are books like Algorithm Design Manual of Skiena and websites like HackerRank to practice.
 
Do you think this will contribute to "computer graphics problem solving" skills?
 
Do you know a better way to improve computer graphics skills?
 
Thanks for your time to read this!

 

Share this post


Link to post
Share on other sites
Advertisement

Computer Graphics is pretty wide... any particular subsection you have a particular interest in?  For example in game development animation compression comes under the umbrella of graphics programming and knowledge of compression techniques might be of help for such an endeavor.  I don't have access to hacker rank so I can't comment directly but I would say it could help.  For example you'd need a knowledge of trees to properly implement the technique described in this paper: http://www.frostbite.com/2017/02/tiled-light-trees/

 

As far as a better way I'd say implementing techniques based on papers would be a great experience.  Also proper use of a search engine to do graphics research, and researching "every nook and cranny" of graphics programming would provide you with a good starting point.  Also problem solving exercises might be of help, for example coming up with a terrain lod solution that is GPU friendly all on your own.  You could also try to branch out to offline (movie cgi) graphics, it a bit of a different world.

Share this post


Link to post
Share on other sites

Problem solving skills come from experience and practice, not knowledge. The way to get better at it is to do more of it. Go out and build a graphics demo with a bunch of standard graphics techniques. You'll run into plenty of problems along the way and that's where the improvement comes in. Try loading a sizable scene from somewhere, culling the whole thing (potentially with occlusion queries as well as frustum tests and hierarchical culling), implementing shadows (cascaded shadow maps with multi-tap filtering), shading it with physically plausible BRDFs, and implementing an end to end HDR gamma correct pipeline with post processing and color grading. You'll be plenty capable in problem solving by the time you're done.

Currently, I mix theory and implementation. I have a little 3D rendering framework with DirectX 12, where I implemented things like, Texture Mapping, Normal Mapping, Displacement Mapping, Physically Based Rendering based on metalness and smoothness, screen space ambient occlusion, tone mapping, environment mapping. My plan is to continue with screen space local reflections. I agree with you that "doing" is better than only reading. Thanks for suggesting new things to add to the framework.

But I was thinking to also "read algorithm theory" (to gain knowledge) and resolving programming problems in HackerRank related with this theory (practice). I see that in your opinion, I should invest that time in the rendering framework too.

Share this post


Link to post
Share on other sites

Computer Graphics is pretty wide... any particular subsection you have a particular interest in?  For example in game development animation compression comes under the umbrella of graphics programming and knowledge of compression techniques might be of help for such an endeavor.  I don't have access to hacker rank so I can't comment directly but I would say it could help.  For example you'd need a knowledge of trees to properly implement the technique described in this paper: http://www.frostbite.com/2017/02/tiled-light-trees/
 
As far as a better way I'd say implementing techniques based on papers would be a great experience.  Also proper use of a search engine to do graphics research, and researching "every nook and cranny" of graphics programming would provide you with a good starting point.  Also problem solving exercises might be of help, for example coming up with a terrain lod solution that is GPU friendly all on your own.  You could also try to branch out to offline (movie cgi) graphics, it a bit of a different world.


Thanks for the answer. Typically, I read papers and try to implement that. I did that for PBR, Tone Mapping, SSAO, FXAA, and environment mapping. I was thinking about something to complement that, but maybe, as you mentioned, the answer to that is:

- More papers
- Think and solve common problems with my own solution
- Complement with a different topic about graphics (planet rendering, complex particle system)
- Offline rendering.

Share this post


Link to post
Share on other sites

Not exactly your question, but pretty much in context I hope. This is a very nice book on general problem solving. It seems to be a classic here in the US while not so popular in Europe. Very cheap so you might want to give it a look:

https://www.amazon.com/How-Solve-Mathematical-Princeton-Science/dp/069116407X/ref=sr_1_1?ie=UTF8&qid=1489273247&sr=8-1&keywords=how+to+solve+it

Share this post


Link to post
Share on other sites
do you think it's worth solving that kind of problems and learning deeply about that kind of algorithms and data structures used to solve them?

 

I'm pretty much with Promit on these questions.   I second his "No".

 

 

Do you think this will contribute to "computer graphics problem solving" skills?

Agian, I second the "No" vote.

 

 

Do you know a better way to improve computer graphics skills?

Take the first thing you don't know how to do in graphics coding, and learn how to do it. Individual study - do your homework. then write some code to test it.  doesn't have to be fancy, just enough so you can see it works and prove to yourself that you can do it now.  Then stuff that code sample into your "bag of tricks". then move on to the next thing you don't know how to do.   Pretty soon, you'll have a nice little collection of code in you bag of tricks. And pretty soon, you'll be at the point where when a graphics problem comes along, you''ll go "Wait! i have something for that in my bag of tricks!".

Being a programmer is all about increasing the number of tricks in your bag. 

Note that "tricks" are algos, "patterns", types of data structures, special effect techniques, and other high level language/api agnostic type stuff that can be applied most anywhere within the limitations of the language(s), APIs, and platform(s) in question.

Edited by Norman Barrows

Share this post


Link to post
Share on other sites

Do you know a better way to improve computer graphics skills?

Take the first thing you don't know how to do in graphics coding, and learn how to do it. Individual study - do your homework. then write some code to test it.  doesn't have to be fancy, just enough so you can see it works and prove to yourself that you can do it now.  Then stuff that code sample into your "bag of tricks". then move on to the next thing you don't know how to do.   Pretty soon, you'll have a nice little collection of code in you bag of tricks. And pretty soon, you'll be at the point where when a graphics problem comes along, you''ll go "Wait! i have something for that in my bag of tricks!".

Being a programmer is all about increasing the number of tricks in your bag. 

Note that "tricks" are algos, "patterns", types of data structures, special effect techniques, and other high level language/api agnostic type stuff that can be applied most anywhere within the limitations of the language(s), APIs, and platform(s) in question.

 

 

I liked the analogy of the bag of tricks. Almost everything I have done was to learn a new technique (for example SSAO) reading papers, book chapters, etc, and then I implement the technique, and when it works I write a new post in the blog explaining what I did, how I did, and what I used to learn that. It looks like I only need to continue in this way, with more difficult and complicated techniques each time. Thanks for the answer !

Share this post


Link to post
Share on other sites

I didn't necessarily more papers, but more like survey material.  Things that give you an idea of how certain problem spaces are approached.  For example recently I came across this presentation on animation compression and on one page there was a survey of common ways the problem were tackled before.  I think that alone can help you make your thinking more flexible.  You don't necessarily need full details and implementation but a basic understanding of the techniques can be of help too.

 

edit - not page section.

Edited by Infinisearch

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • 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!