Jump to content
  • Advertisement
Sign in to follow this  
Lazy Foo

DX12 Designing a graphics programming portfolio

This topic is 1212 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

So as a personal side project I want create a bunch of graphics demos to portfolio-ize my graphics knowledge. I wanted some suggestions in terms of what to put in it. I want have three categories of demos:

 

Basic - What you expect any first year prrofessional game graphics programmer to be able to do.

Intermediate - If you were to take all the professional graphics programmers in the industry and sort them by ability, everybody on the good half of the bell curve would be able to do these demos.

Advanced - What you'd expect a senior level graphics programmer be able to do.

 

This is what I have planned for basic demos:

-Mesh Loading

-Gouraud Shading

-Phong Shading

 

-Texture Mapping

-MultiTexturing

-Normal Mapping

-Cube Mapping

-Cell Shading

 

-Shadow Mapping

 

-Image Post Processing

-HDR

-Deferred shading

-Anti Aliasing

 

-Skeletal Animation

 

Is there any other basic demos I should add in?

 

I plan on getting through the basic graphics demos and then do some AI demos as part of another project. I'll probably revist the graphics project when DX12/GLNext roll around and then add some intermediate/advanced demos to the mix. I could also use suggestions for intermediate/advanced demos.

Share this post


Link to post
Share on other sites
Advertisement

If you don't have any of the things on your list already, this could take a while to get to.
 

I wouldn't really count these as really anything. They are basics of the steps needed to learn, but those alone I wouldn't consider as anything on a resume. It shouldn't take you very long to get these things done. They are more complicated if you are writing all of the mesh loading and extracting tangent map data, and splitting vertices etc.

 

-Mesh Loading

-Gouraud Shading

-Phong Shading

 

-Texture Mapping

-MultiTexturing

-Normal Mapping

-Cube Mapping

 

The thing with graphics programming or any game programming on a resume is more about presenting a fully workable system. If you want to do something with graphics, animate a bunch of characters in a busy city and have them with an avoidance system and make some shaders on some cars etc. Seeing something like this as opposed to a wall with tessellation applied or a demo of a single character animated in your code, is a big difference. Plan to build something that has a purpose. Find some free models, like from turbosquid or elsewhere and come up with an idea for a scene. If you have ever seen the nvidia demos when they release new graphics cards, they have small scenes with characters animated and some other background stuff going on.

Share this post


Link to post
Share on other sites

As a portfolio type piece, I wouldn't even bother putting out anything that doesn't include full per pixel lightmapping with a basic tangent space bump map implementation. As adam said above, most of that list is just a waste of time. Post proc, HDR, deferred shading, forward+, PBR - these are things that make for portfolio items. I wouldn't count skeletal either unless you do something above and beyond a simple model playing simple full body animations.

Share this post


Link to post
Share on other sites


The thing with graphics programming or any game programming on a resume is more about presenting a fully workable system. If you want to do something with graphics, animate a bunch of characters in a busy city and have them with an avoidance system and make some shaders on some cars etc. Seeing something like this as opposed to a wall with tessellation applied or a demo of a single character animated in your code, is a big difference. Plan to build something that has a purpose. Find some free models, like from turbosquid or elsewhere and come up with an idea for a scene. If you have ever seen the nvidia demos when they release new graphics cards, they have small scenes with characters animated and some other background stuff going on.

 

I completely agree with this. Implementing the individual items you mentioned in your OP is something you could easily achieve by just following a bunch of tutorials, which is something any relatively skilled programmer can do. If you want a demo which stands out you'll have to show that you actually grasp the concepts you mentioned and that you know how to use or modify them to achieve a certain desired result.

 

At my current position I mostly do rendering, and it never comes down to building just these simple techniques which could be found in tutorials, if that were the case there'd be no need for dedicated rendering engineers at all. Instead it comes down to being able to achieve a certain visual style, system or technique within the constraints set up by the project you're working on (be it performance, style, target audience, etc.). Like any software engineering position it comes down to problem solving and knowing your toolbox inside out so you can solve your particular problem in the best way possible.

 

So yeah, learn the techniques you mentioned and build something with them which achieves a certain goal you've set for yourself. That way you can show your potential future employers that you have the skills necessary to solve problems instead of just being able to reiterate something you memorized from a tutorial.

Share this post


Link to post
Share on other sites

Ok one last thing I forgot to mention:

 

Yes obviously nobody is going to be impressed by a Goraud shading demo in 2015, but this project has a second purpose. Metal, Mantle, DX12, GLnext, etc are The Next Big Thing™ and I wanted to get some practice in with them. A texture mapping demo won't light anybody's world on fire, but it serves as a good unit test.

 

The purpose of the Basic set of demos is more to serve as unit tests for porting the render pipeline to a new API. The Intermediate and Advanced are for future interviews. Also the basic demos could be used as basis for something more advanced IE skeletal animation -> skeletal animation with IK -> skeletal animation with IK/Cloth.

 

So yeah if the list of Basic demos look minimal, they're supposed to be. I just wanted to make a list of the bare minimum things to have so I could come back and expand upon them later.

Share this post


Link to post
Share on other sites

I think its all fine and good to make those demos, however they really shouldnt be highlighted on a portfolio (which is what the thread/replies were about). You shouldnt be showcasing what is expected for the position you are gearing your portfolio toward, you should be going far beyond that if you want to be competitive. As has been mentioned, showing more advanced demos works as showing you know about the basic stuff (which nobody really cares about).

 

If you were applying for a call center job, you wouldnt put "I know how to form words with my mouth" on your resume. So why would you put "I know how to load a 3d mesh from a file" for a rendering position.

 

You want to show the most amount of knowledge in the least amount of time possible, so skip anything that can be easily inferred. (And make sure it looks damn sexy/impressive to get by any non-technical HR).

Share this post


Link to post
Share on other sites


Metal, Mantle, DX12, GLnext, etc are The Next Big Thing™ and I wanted to get some practice in with them. A texture mapping demo won't light anybody's world on fire, but it serves as a good unit test.

 

Alright, fair enough, but just fyi I can tell you that you won't get much experience with the new APIs by doing these small demos though. I have hands-on experience with more than one of those APIs you listed here, and while I can't go into specifics I can tell you that doing these very basic things will barely require you to learn any new concepts at all within these new frameworks.

 

The whole concept of shading or texture mapping are not getting changed or replaced. As a matter of fact, you could probably even use your existing DX11 shaders on a couple of these new platforms without having to make any changes to them at all. These new APIs are mostly about the bigger picture and the optimizations which can be made by reducing driver overhead and state changes and by giving the developer more control over his/her application. The only way to really master those concepts is by having a more fleshed out demo in which you can actually play around with and see the effects of these changes.

Share this post


Link to post
Share on other sites

I agree with others that for an awesome portfolio, you'll really want some kind of game or "real" project that makes uses of some cool rendering techniques. Keeping up on the latest research and techniques from other games is fantastic, and definitely vital for any graphics programmer. But the process of deciding which techniques work best within the specific requirements of a game or project and then implementing it in a way that it's usable for content authoring requires a completely different set of equally-vital skills. When I was learning, just making a simple 3D game was really illuminating for me since I got some experience with thinking about how tech serves the needs of a game, and how to make different systems work together.

Share this post


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

  • Advertisement
  • Advertisement
  • Popular Tags

  • Similar Content

    • By NikiTo
      Recently I read that the APIs are faking some behaviors, giving to the user false impressions.
      I assume Shader Model 6 issues the wave instructions to the hardware for real, not faking them.

      Is Shader Model 6, mature enough? Can I expect the same level of optimization form Model 6 as from Model 5? Should I expect more bugs from 6 than 5?
      Would the extensions of the manufacturer provide better overall code than the Model 6, because, let say, they know their own hardware better?

      What would you prefer to use for your project- Shader Model 6 or GCN Shader Extensions for DirectX?

      Which of them is easier to set up and use in Visual Studio(practically)?
    • By mark_braga
      I am trying to get the DirectX Control Panel to let me do something like changing the break severity but everything is greyed out.
      Is there any way I can make the DirectX Control Panel work?
      Here is a screenshot of the control panel.
       

    • By Keith P Parsons
      I seem to remember seeing a version of directx 11 sdk that was implemented in directx12 on the microsoft website but I can't seem to find it anymore. Does any one else remember ever seeing this project or was it some kind off fever dream I had? It would be a nice tool for slowly porting my massive amount of directx 11 code to 12 overtime.
    • By NikiTo
      In the shader code, I need to determine to which AppendStructuredBuffers the data should append. And the AppendStructuredBuffers are more than 30.
      Is declaring 30+ AppendStructuredBuffers going to overkill the shader? Buffers descriptors should consume SGPRs.

      Some other way to distribute the output over multiple AppendStructuredBuffers?

      Is emulating the push/pop functionality with one single byte address buffer worth it? Wouldn't it be much slower than using AppendStructuredBuffer?
    • By Sobe118
      I am rendering a large number of objects for a simulation. Each object has instance data and the size of the instance data * number of objects is greater than 4GB. 
      CreateCommittedResource is giving me: E_OUTOFMEMORY Ran out of memory. 
      My PC has 128GB (only 8% ish used prior to testing this), I am running the DirectX app as x64. <Creating a CPU sided resource so GPU ram doesn't matter here, but using Titan X cards if that's a question>
      Simplified code test that recreates the issue (inserted the code into Microsofts D3D12HelloWorld): 
      unsigned long long int siz = pow(2, 32) + 1024; D3D12_FEATURE_DATA_D3D12_OPTIONS options; //MaxGPUVirtualAddressBitsPerResource = 40 m_device->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS, &options, sizeof(options)); HRESULT oops = m_device->CreateCommittedResource( &CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_UPLOAD), D3D12_HEAP_FLAG_NONE, &CD3DX12_RESOURCE_DESC::Buffer(siz), D3D12_RESOURCE_STATE_GENERIC_READ, nullptr, IID_PPV_ARGS(&m_vertexBuffer)); if (oops != S_OK) { printf("Uh Oh"); } I tried enabling "above 4G" in the bios, which didn't do anything. I also tested using malloc to allocate a > 4G array, that worked in the app without issue. 
      Are there more options or build setup that needs to be done? (Using Visual Studio 2015)
      *Other approaches to solving this are welcome too. I thought about splitting up the set of items to render into a couple of sets with a size < 4G each but would rather have one set of objects. 
      Thank you.
    • By _void_
      Hey guys!
      I am not sure how to specify array slice for GatherRed function on Texture2DArray in HLSL.
      According to MSDN, "location" is one float value. Is it a 3-component float with 3rd component for array slice?
      Thanks!
    • By lubbe75
      I have a winforms project that uses SharpDX (DirectX 12). The SharpDX library provides a RenderForm (based on a System.Windows.Forms.Form). 
      Now I need to convert the project to WPF instead. What is the best way to do this?
      I have seen someone pointing to a library, SharpDX.WPF at Codeplex, but according to their info it only provides support up to DX11.
      (Sorry if this has been asked before. The search function seems to be down at the moment)
    • By korben_4_leeloo
      Hi.
      I wanted to experiment D3D12 development and decided to run some tutorials: Microsoft DirectX-Graphics-Samples, Braynzar Soft, 3dgep...Whatever sample I run, I've got the same crash.
      All the initialization process is going well, no error, return codes ok, but as soon as the Present method is invoked on the swap chain, I'm encountering a crash with the following call stack:
      https://drive.google.com/open?id=10pdbqYEeRTZA5E6Jm7U5Dobpn-KE9uOg
      The crash is an access violation to a null pointer ( with an offset of 0x80 )
      I'm working on a notebook, a toshiba Qosmio x870 with two gpu's: an integrated Intel HD 4000 and a dedicated NVIDIA GTX 670M ( Fermi based ). The HD 4000 is DX11 only and as far as I understand the GTX 670M is DX12 with a feature level 11_0. 
      I checked that the good adapter was chosen by the sample, and when the D3D12 device is asked in the sample with a 11_0 FL, it is created with no problem. Same for all the required interfaces ( swap chain, command queue...).
      I tried a lot of things to solve the problem or get some info, like forcing the notebook to always use the NVIDIA gpu, disabling the debug layer, asking for a different feature level ( by the way 11_0 is the only one that allows me to create the device, any other FL will fail at device creation )...
      I have the latest NVIDIA drivers ( 391.35 ), the latest Windows 10 sdk ( 10.0.17134.0 ) and I'm working under 
      Visual Studio 2017 Community.
      Thanks to anybody who can help me find the problem...
    • By _void_
      Hi guys!
      In a lot of samples found in the internet, people when initialize D3D12_SHADER_RESOURCE_VIEW_DESC with resource array size 1 would normallay set its dimension as Texture2D. If the array size is greater than 1, then they would use dimension as Texture2DArray, for an example.
      If I declare in the shader SRV as Texture2DArray but create SRV as Texture2D (array has only 1 texture) following the same principle as above, would this be OK? I guess, this should work as long as I am using array index 0 to access my texture?
      Thanks!
    • By _void_
      Hey!
       
      What is the recommended upper count for commands to record in the command list bundle?
      According to MSDN it is supposed to be a small number but do not elaborate on the actual number.
      I am thinking if I should pre-record commands in the command buffer and use ExecuteIndirect or maybe bundles instead.
      The number of commands to record in my case could vary greatly. 
       
      Thanks!
  • Advertisement
  • Popular Now

  • Forum Statistics

    • Total Topics
      631374
    • Total Posts
      2999661
×

Important Information

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

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!