Red Orchestra 2: Heroes Of Stalingrad/LevelDesign/OptimizationGuide

From Tripwire Interactive Wiki
Jump to navigation Jump to search

Recommended Reading

If you are new to optimizing in general for Unreal 3 games please have a look through the below web pages so you are up to speed with the grunt work.


Introduction

The purpose of this document is to give information on the guidelines used to optimize the maps inside RO2. These guidelines worked for us. If you are a community level designer and/or artist you may find this document useful. This document will cover the various approaches and the reasoning behind decisions so that the reader may be able to avoid pitfalls when making levels for Red Orchestra 2.

Preliminary Work

There is a small amount of setup work that must be completed.

RODebugPosedPlayer

We have made a tool for level designers and artists that are used to gather statistical data about maps called Posed Players. The purpose of the Posed Player is to have a placeable actor to simulate a player in a scene. It has the capability to be used as a camera during profile stage. All of which I will go over now.

Actor In Tree

RODebugPosedPlayer in Actor Tree

The RODebugPosedPlayer actor is found at Actor -> RODebugPosedPlayer

Properties

Properties of RODebugPosedPlayer

  • Pose: The pose, or stance, the posed player will be in when spawned
  • Weapon: The weapon the posed player will be using when posed
  • Pawn Type: German or Russian
  • Can Possess: Allows the user to possess this posed player using the PossessPosedPlayer console command
  • Description: Small description on what this posed player is - OPTIONAL

Available Poses

Available Poses for RODebugPosedPlayer

The pose will not make a difference in regards to performance and optimization. It was added so if you wanted to stage a scene for screen shots or something along those lines, this allows you to put the posed player into various positions.

Can Possess

Can Possess Changes Color of RODebugPosedPlayer to BLUE

Placing RODebugPosedPlayer Actor in Map

Posed Player Placement Guideline

  • Expected player count is 64 player which would be the worse case scenario in regards to performance
  • Use Can Possess on posed players that have vantage view on a particular high traffic area/areas of performance pits
  • Any particular player SHOULD NOT see 100% of the map nor players
  • Place the actors where players will be
  • Do not unnaturally bunch up the posed players
  • Distribute the posed players evenly across scene
  • More actors near objective spaces, spawn areas, and known fight spaces
  • Position RODebugPosedPlayers ~16 Unreal Units above surface to avoid posed player clipping/failure to spawn

Create a NEW sublevel

Create a new sub level

Naming the Sub Level

Give the new sub level a name

Give the sub level a name. It really doesn't matter what you call it as long as you know what it is.

Setting Streaming Method

Set Streaming Method to Always Loaded

We always use Always Loaded so that every time the persistent is loaded, so is this sublevel. Done this way there is no need to have Kismet handle it.

Options:

  • Kismet- Used when you want to use a Kismet node to stream in the sub level.
  • Distance- Used when you want to use a certain distance.
  • Always Loaded- Used when you want the sub level always loaded when the persistent is loaded.

Epic Games' UDN Page

Making New Sub Level Current

Set the new sub level as CURRENT

Make the new sub level current and we are ready to start placing actors.


Results

This is what we got in Grain Elevator

Doing the Profile

I will document what was done at TWI. Our profiling parameters and data gathering points were specific to our needs for our designs.

Profiling Machine Hardware Specifications

These are the specifications of the test machine used at TWI

  • Intel Quad 2.40GHz
  • 4GB RAM
  • ATI Radeon HD 5800
  • Test Done on High Settings

Console Commands

  • SpawnPosedPlayers
  • PossessPosedPlayer

Polling the Results

  • Location @
  • Frame Time
  • Game Time
  • FPS
  • Draw Time (ms)
  • GPU Time (ms)
  • DrawPrimitive Calls
  • Triangles Drawn
  • Static Mesh Tris
  • Skel Mesh Draw Calls
  • Per Object shadows
  • Preshadows
  • Adjusted FPS

Store Results for Future Profiles