[email protected]
Level Design Portfolio
  • HIGHLIGHTS:
    • Camera
    • Collaborations
  • The Long Dark
  • World Design

Telling stories through captivating gameplay.

Warning, this is a construction zone!

Flip through the tabs above to view Open Worlds and other Level Design works I've been crafting since 2014.

Or click the red button
to review my professional work as a Game Design generalist.

Fast Travel to Game Design

Real-Time Cameras in Unreal Editor 4 - Part 1

12/7/2014

15 Comments

 
Reference: Mark Haigh-Hutchinson. 2009. "Real-Time Cameras: A Guide for Game Designers and Developers." Elsevier.

I have recently begun reading "the textbook" on cameras in gaming, and I am excited to share whatever knowledge I gain from it with you. So, I will be implementing a third-person camera system in Unreal Editor 4 - similar to the one in Journey -  and sharing every step of this process; while attempting to apply my newly learned knowledge in aid of both integrating and communicating these concepts. The main inspiration for this project is a GDC 2014 talk by John Nesky called "50 Camera Mistakes" (see http://gdcvault.com/search.php#&category=free&firstfocus=&keyword=john+nesky&conference_id=).

A starting piece of wisdom from John Nesky, the camera designer for Journey, who says (and I paraphrase)
"A camera is 7 numbers: yaw, pitch, roll, distance from pivot, lateral offset, vertical offset, and field of view."

In this article, I will analyse the existing C++ for the Code Third Person project provided by Epic Games with UE4.

The camera seems to be coded in the "MyCharacter" class. Let's examine the header file to see the variables involved


Variables to keep track of
(this is not working code), referenced by letter index in the following sections
a)
    /** Camera boom positioning the camera behind the character */
    TSubobjectPtr<class USpringArmComponent> CameraBoom;

b)
    /** Follow camera */
    TSubobjectPtr<class UCameraComponent> FollowCamera;

c)
    /** Base turn rate, in deg/sec. Other scaling may affect final turn rate. */
    float BaseTurnRate;

d)
    /** Base look up/down rate, in deg/sec. Other scaling may affect final rate. */
    float BaseLookUpRate;



Now over to the .cpp file to see how these are initialized:

The controller rotation is unhooked
from the character rotation by setting 3 booleans (related to yaw, pitch, and roll) = false.

Picture
Camera Boom

    // Create a camera boom (pulls in towards the player if there is a collision)
    CameraBoom = PCIP.CreateDefaultSubobject<USpringArmComponent>(this, TEXT("CameraBoom"));
    CameraBoom->AttachTo(RootComponent);
    CameraBoom->TargetArmLength = 300.0f; // The camera follows at this distance behind the character    
    CameraBoom->bUseControllerViewRotation = true; // Rotate the arm based on the controller

The camera boom is created first and it follows the player at a set length, rotates based on the controller rotation, and is attacted to the root component of the player. (a) is the pointer used to represent this object.

Picture
Follow Camera
    // Create a follow camera
    FollowCamera = PCIP.CreateDefaultSubobject<UCameraComponent>(this, TEXT("FollowCamera"));
    FollowCamera->AttachTo(CameraBoom, USpringArmComponent::SocketName); // Attach the camera to the end of the boom and let the boom adjust to match the controller orientation
    FollowCamera->bUseControllerViewRotation = false; // Camera does not rotate relative to arm


(b) is the pointer that represents the camera itself, which depends on the boom for placement in real-time.

Picture
Edit >> Project Settings >> Input

    // We have 2 versions of the rotation bindings to handle different kinds of devices differently
    // "turn" handles devices that provide an absolute delta, such as a mouse.
    // "turnrate" is for devices that we choose to treat as a rate of change, such as an analog joystick
    InputComponent->BindAxis("Turn", this, &APawn::AddControllerYawInput);
    InputComponent->BindAxis("TurnRate", this, &AMyProjectCharacter::TurnAtRate);
    InputComponent->BindAxis("LookUp", this, &APawn::AddControllerPitchInput);
    InputComponent->BindAxis("LookUpRate", this, &AMyProjectCharacter::LookUpAtRate);


Input is obviously an important aspect of camera orientation, even with a camera that cannot be controlled independently from the character (as seen in Journey). Mouse and Gamepad provide two different orientation styles which require separate implementations. For this project, I will use a RAT-7 mouse, and a PS4 gamepad with drivers from this source: http://www.gamefront.com/files/listing/pub2/PlayStation-4-Controller-Drivers/


That is all I could find in the files at present. It really does not paint a great picture of the basic implementation for a third person camera. I will consult the forums and tutorials to learn more about this system in UE4 and find where the camera behaviours I want to analyze are hidden.
15 Comments
rinta teippi link
16/5/2016 01:28:45 pm

I desired to thank you for this exceptional read!! I absolutely enjoyed every single small little bit of it.

Reply
academic help writing link
15/6/2016 08:08:49 am

The cameras are changed the level and looks of the world. With the help of different types of the cameras that we are using in our daily life routines, we are getting too much stuff on different ways for the cause of information delivering.

Reply
write an essay for me link
22/7/2016 10:27:59 pm

Its lovely diverting YouTube video, I generally go to go to see YouTube page intended for amusing recordings, since there is significantly more stuff available.Yes I am additionally in search for of Flash instructional exercises, as I might want to take in more on the point of glimmer, so on the off chance that you have please post it here.

Reply
thesis service link
17/10/2016 04:42:37 pm

It's an amazing that nowadays technologies are helping us so much us with the media! Unreal world becomes more real :)

Reply
http://leesvloerlampkopen.nl/ link
23/10/2016 02:50:08 am

Your site is truly cool and this is an incredible rousing article.

Reply
Jasa SEO Murah link
7/1/2017 10:32:28 am

I am so impressed with the way you write this story... It's so simple yet can be easily understood.

Reply
play free online games link
6/2/2017 03:35:47 pm

There are a number of different sites where you can find online games to play either for free or very a very low price. Learn more inside my article.

Reply
rivaroxaban prezzo link
11/3/2017 05:21:43 am

An additional typical error associated with teleconference internet marketers is really failing to remember the actual brands from the individuals who they may be speaking with.

Reply
viagra lahore link
12/3/2017 05:35:44 am

Their own medicines usually are not just unlawful, however many of them are usually unsuccessful as well as can also be harmful.

Reply
flibanserin satın al link
12/3/2017 08:15:09 am

Several American herbalists make reference to this particular botanical herb because Ayurvedic ginseng due to its worldwide recognition regarding growing power, power, and also endurance, as well as for the capability to reduce tension.

Reply
russian women link
13/3/2017 05:57:27 am

From this article you can see over, there are numerous methods for you to follow to deal with your own penile erection issues.

Reply
testosterone booster at walmart link
13/3/2017 10:52:15 am

Intercourse isn't very something which needs to venture out the actual windows simply because you might have old.

Reply
champix sluta snusa link
14/3/2017 03:27:50 am

A large training with regard to Sierra Leoneans is actually Paul's utilization of the term comfort and ease.

Reply
buy o desmethyltramadol link
30/3/2017 04:48:19 am

raising of heavy objects with the filled bladder there can be a throwing of urine in a prostate, the spasm of pelvic muscles leading to increase of pressure in a prostate, anatomic disturbances in an urinogenital path, for example, narrowing of the urinary channel, continuous traumatizing a prostate.

Reply
JKBOSE 10th Result 2017 link
30/3/2017 05:30:28 pm

Reply



Leave a Reply.


    James Dodge

    Level Designer

    View my profile on LinkedIn

    Categories

    All
    CameraAnalysis
    CameraDevelopment
    GlobalGameJam
    Photoshop
    TombRaider


    Archives

    October 2021
    December 2017
    November 2017
    October 2017
    September 2017
    August 2017
    July 2017
    June 2017
    May 2017
    April 2017
    March 2017
    February 2017
    January 2017
    December 2016
    October 2016
    September 2016
    June 2016
    May 2016
    March 2016
    February 2016
    August 2015
    July 2015
    March 2015
    February 2015
    December 2014
    September 2014
    August 2014
    July 2014
    April 2014
    January 2014
    December 2013
    November 2013
    October 2013
    August 2013


    RSS Feed

Site powered by Weebly. Managed by Bluehost