In the four assignments this semester, you will be implementing a part of the Nubis cloud rendering system created by Guerrilla Games for Horizon Zero Dawn.

Assignment Goals

The primary goals of this assignment are:

  1. Help you become familiar with the Unreal Engine (UE4), the use of the Unreal editor and visual scripting
  2. Help you become familiar with the GIT version control system.
  3. Bake expensive content to a texture
  4. Introduce the methods of performance measurement and comparison.


assignment 1 sample resultsTo ease you into working with Unreal, this assignment is prettyspecific about what to do. I expect that by the end of the semester, I'd be able to say, "Bake a material using Voronoi and Perlin noise into a texture and compare the performance of the original material with one using the baked texture." In other words, you should expect that subsequent assignments will rely more and more on your ability to figure out how to do what is required.

Numbed items are things you need to do, bullets below them are possibly helpful comments

  1. Get set up with UE4
    • The computers in the GAIM lab (ENG 005) have everything you need, but I recommend working on your own computer if you can.
    • In the lab
      • For the first couple of assignments, you can use everything as installed.
      • When we get to making changes to the Engine, you will need ~45 GB for the UE4 git source with everything built. I'd recommend getting a 60+ GB external drive or flash drive. You should be able to find one online for under $20.
    • On your own computer
      • Most UE4 development is done on Windows, so that tends to be the most stable and tested platform. None the less, I have tested everything for this assignment on Mac as well.
      • You'll need to a copy of UE4 (a precompiled binary download is OK for this assignment and the next).
      • You'll need GIT if you don't already have it. (command line will work, or if you want a GUI, I recommend the SourceTree).
      • You will need the compiler tools for your platform (Visual Studio for Windows, free from imagine.microsoft.com; Xcode for Mac)
  2. There is a link posted on the class piazza site to set up your class repository on github.
    • Sign up for github (if you have not already).
    • Clone that repository to your local computer.
    • All assignments in this class will be submitted by committing to your local clone, then pushing those changes to github.
    • There is copious online help on using git and github.
  3. Once you have a copy of UE4 use it to create a blank C++ Unreal project named "gfg" in your cloned respository.
    • We won't use C++ scripting for this assignment, but will need it next time, and each assignment will be a map/level in this project.
  4. Create a level named "Maps/assn1".
  5. Create an emissive material based on the object texture coordinates and at least one Voronoi noise and one Perlin noise node to make a cloud-like texture designed to seamlessly wrap.
    • It doesn't need to look exactly like mine, in fact, I expect everyone's to look a little different.
    • When tiling is turned on for the noise functions, they will seamlessly repeat at an integer period. Assuming you use different scales for your Voronoi and Perlin noise, you'll still need to be able to set an integer tiling size that will make both repeat at the same time. Scale your texture coordinates so one repeat happens over the textue coordinate range 0-1.
    • The floor object should wrap several times, so if you apply your material to the floor, it should appear seamless.
  6. Create a Render Target texture and add a "Level Blueprint" to draw your noise material into the render target texture at BeginPlay.
    • When you play in editor (aka PIE) or simulate, this should fill in the texture.
    • You may find you need to add a 0-second delay before the draw (which delays it by one frame) if running using "Standalone Game" mode.
  7. Now create a second emissive material that uses texture coordinates to look up in the render target texture. These two materials should look identical.
  8. Place each on a plane and label with Render Text nodes.
  9. Run full-screen and collect timings with a screen-filling view of each of the textures using the ProfileGPU console command or Ctrl-Comma. Collect several measurements of each and report the median time.

For full credit, you must commit multiple times during development. We'll be looking for your development process, so make sure the commit messages are somewhat meaningful. Also, by the due date, you'll also need to do at least one push ("git push") of your changes to your repository on github so we can see your work, then tag add an assn1 tag to that commit on github so we know which commit to grade.

691 students

Figure out how to get the timing for just the materials, exclusive of everything else, and report median times for that as well.


Add an "assn1.txt" to the top directory. Include your name and campus ID at the top of this file. Describe your test computer (at least OS and CPU) and engine version (e.g. 4.17.0, 4.17.1, etc.). Also Include the median reported time for each of your two materials as well as the screen size used for timing (as reported by the r.SetRes console command).