Category Archives: Semester 2 Thesis

Semester 2 – Week 16

EAE  DAY

11188162_10152689430486114_3939465949142931904_n

In this week had completed the final alpha built and we showcased it on the EAE Day. The level looks like this .

950

There we several people from the industry and all our faculty on the EAE Day . Several people got to play test our game and we received feedback from them which included our peers and industry people.

Several of them were very impressed by the level design we are going for which was quite pleasing to hear as I did the level design work. Mark was particularly impressed by the level design and also gave some useful tips as to how I could improve it. He also gave us tips on how to iterate in the future by keeping our ideas simple and polishing what we have done so far instead of going all over the place and continuously changing the game. Overall the feedback was good and there were some areas where will be improving and putting more in.

 

Semester 2 – Week 15

Level Designer and Lighting

Now it was crunch time for me and the artists as we had to make an impressive level for the alpha build. So the artists constructed a basic level model in Maya and I was in charge of the entire Level Design and the Lighting System.

These are the pictures of the basic level models made by the artists.
Screenshot 2015-04-22 18.53.25

Screenshot 2015-04-22 18.53.43

 

After this level model was given to me I started the level design process of the levels. I added all the assets created by the artists and also added some more assets from the asset store which were low poly models. Then I created an efficient lighting system which were baked onto the scene to create stunning nighttime visuals. I was very happy with the results of my level design and a lot of people were quote outside my team were quite impressed by the level design. The following pictures show the visuals after my Level Designing :

Screenshot 2015-04-22 18.41.33

2

7

Screenshot 2015-04-22 18.42.06

Screenshot 2015-04-22 18.43.00

5

I completely transformed the alpha into a professional looking game. However there were some scaling issues due to which this level could not be included in the Alpha Build as the scale used by the artists was incorrect in accordance with the AI script and the physics was not updating accurately. It was kind of unfortunate as a lot of effort was put into this level, however I put crunch time effort to improve the current alpha build model and the results were good ! 🙂

These are the before and after pictures of the alpha build after my Level Designing and Lighting System.

Before
1000

After

900

950

I was very happy with the results and received several compliments and advice from peers on my Level Design and Lighting on the EAE Day.

Semester 2 – Week 13

After working on the black and white shader effect, I started working on the Detect room where random NPC’s make random sound and you need to spot a particular NPC who is calling for you. The main programming here was the wandering script using C#. I created a script where the NPC will walk and change their angle in a certain interval of time. The walking speed and direction change rate can be adjusted using the inspector. This creates the random NPC movement. I also did the entire level design for this scene.
The way the direction change takes place is by manipulating the Euler Angles.

npc2

The NPC Wander Script is as follows:

using UnityEngine;
using System.Collections;

/// <summary>
/// Creates wandering behaviour for a CharacterController.
/// </summary>
[RequireComponent(typeof(CharacterController))]
public class Wander : MonoBehaviour
{
public float speed = 5;
public float directionChangeInterval = 1;
public float maxHeadingChange = 30;

CharacterController controller;
float heading;
Vector3 targetRotation;

void Awake ()
{
controller = GetComponent<CharacterController>();

// Set random initial rotation
heading = Random.Range(0, 360);
transform.eulerAngles = new Vector3(0, heading, 0);

StartCoroutine(NewHeading());
}

void Update ()
{
transform.eulerAngles = Vector3.Slerp(transform.eulerAngles, targetRotation, Time.deltaTime * directionChangeInterval);
var forward = transform.TransformDirection(Vector3.forward);
controller.SimpleMove(forward * speed);
}

/// Repeatedly calculates a new direction to move towards.

IEnumerator NewHeading ()
{
while (true) {
NewHeadingRoutine();
yield return new WaitForSeconds(directionChangeInterval);
}
}

/// <summary>
/// Calculates a new direction to move towards.

 

Semester 2 – Week 12

I was given the task of graphics programming and write a shader program to render the screen black and white only highlighting the red color . This was one of my first shader programs and I had to do quite some research on it since it is going to be taught to us in the next semester. So I made a post processing shader for the camera.
The difference can be seen in the Original and After Shader picture as follows :
Original
hm1
After Shader

b_w_1024

After completion of the detection and direction of sound mechanic, I was assigned to add NPC’s in one of the iterations which make random noises. Out of the random noises the NPC’s there is a person calling out to you and you need to find and follow that person.

The basic mechanic was already done but I had to polish it by adding real people and controlling their animations through the code and Unity 5 animator. I was also supposed to make a realistic level looking level for it. So after finishing the black and white graphics of my earlier scene I began my next iteration.

Semester 2 – Week 11

So based on the task assigned to me I created this scene in Unity which shows the mechanic of depth and direction of sound and it mimics binaural audio using Logarithmic Rolloff.hm1The scene presents three balls in front of you which are the only pickable objects in the room.

hm2As you point the cursor on the ball the GUI highlight pick up and you can pick the ball up.

hm3When you pick the ball it looks like the above picture . The ball has a bounce custom material which allows it to mimic a real life ball.
hm4You can then throw the ball and the place where it bounces it produces a 3d sound which is quite accurate in terms of depth and direction.

The following is the javascript code that uses the GUI element and allows certain objects to be pickable and others to not be pickable and throwable.

#pragma strict

var refusethrow = false;

function Start(){
}
function Update(){
}

function OnTriggerEnter (other : Collider) {
if (other.gameObject.tag != “player” && other.gameObject.tag != “pickto”){

refusethrow = true;

}
}

function OnTriggerExit (other : Collider) {

if (other.gameObject.tag != “player” && other.gameObject.tag != “pickto”){

refusethrow = false;

}
}
——————————————————————————–

This other part of the code which is picktoscript basically does the interaction between the mouse to throw the object and uses the OnGui() function using javascript.

———————————————————————————-

 

#pragma strict
var objectPos : Vector3;

var objectRot : Quaternion;

var pickObj : GameObject;

var canpick = true;

var picking = false;

var guipick = false;

var pickref : GameObject;

function Start () {

pickref = GameObject.FindWithTag (“pickup”);

pickObj = pickref;

}

function Update () {

var raycheck: Ray = Camera.main.ScreenPointToRay(Input.mousePosition);

var hitcheck: RaycastHit;

if (Physics.Raycast(raycheck, hitcheck,10) && hitcheck.collider.gameObject.tag == “pickup”){

guipick = true;

}

if (Physics.Raycast(raycheck, hitcheck) && hitcheck.collider.gameObject.tag != “pickup”){

guipick = false;

}

objectPos = transform.position;

objectRot = transform.rotation;

if(Input.GetMouseButtonDown(0) && canpick){

picking = true;

var ray: Ray =
Camera.main.ScreenPointToRay(Input.mousePosition);

var hit: RaycastHit;

if (Physics.Raycast(ray, hit, 10) && hit.collider.gameObject.tag == “pickup”){

pickObj = hit.collider.gameObject;

hit.rigidbody.useGravity = false;

hit.rigidbody.isKinematic = true;

hit.collider.isTrigger = true;

hit.transform.parent = gameObject.transform;

hit.transform.position = objectPos;

hit.transform.rotation = objectRot;

}

}

if(Input.GetMouseButtonUp(0) && picking){

picking = false;

canpick = false;

}

if(Input.GetMouseButtonDown(0) && !canpick && pickObj.GetComponent(pickedupobj).refusethrow != true){

canpick = true;

pickObj.GetComponent.<Rigidbody>().useGravity = true;

pickObj.GetComponent.<Rigidbody>().isKinematic = false;

pickObj.transform.parent = null;

pickObj.GetComponent.<Collider>().isTrigger = false;

pickObj.GetComponent.<Rigidbody>().AddForce (transform.forward * -1000);

pickObj = pickref;

}

if(Input.GetMouseButtonDown(1) && !canpick && pickObj.GetComponent(pickedupobj).refusethrow != true){

canpick = true;

pickObj.GetComponent.<Rigidbody>().useGravity = true;

pickObj.GetComponent.<Rigidbody>().isKinematic = false;

pickObj.transform.parent = null;

pickObj.GetComponent.<Collider>().isTrigger = false;

pickObj = pickref;
}

}

function OnGUI () {

GUI.Label (Rect (Screen.width/2,Screen.height/2.1,Screen.width/2,Screen.height/2), “X”);

if (guipick && canpick){

GUI.Label (Rect (Screen.width/2,Screen.height/2,Screen.width/2,Screen.height/2), “Pick Up”);

}
}

 

 

 

Semester 2 – Week 10

IMG_0061

After role playing some of the mechanics in the last iteration we distributed the tasks and my task was to make a Unity Scene that displayed sound direction. So we went in brainstorm mode and thought about our respective tasks.

The scene I thought of designing was a house where there are pickable objects which would provide an environment interaction. You can pick three colored balls and as you throw them they will will make a 3d bouncing sound using the Unity Logarithmic Roll Off thereby producing an accurate sound with depth and accurate direction.

Semester 2 – Week 9

After GDC week it was time to work our thesis and we were back in Salt Lake City. We resumed the development on the Binaural Sound thesis game. So the game idea revolved around a protagonist girl who is sort of imprisoned and like every other person in the world is going to get changed into something that is evil . Hence the goal of this game is to induce a feeling of liberation by escaping such a hell house and freeing herself from the evils that she might commit in the future. This was the basic narrative. We yet had to think of evil corporation that is turning innocent children into something evil.

The next important component was the mechanic. We decided to role some of the mechanics which were sound based. We basically tied cloth on one of the persons eyes and tried to make noise from different parts of the room and checked whether the blindfolded person could identify where the sound is coming from the depth. Hence Depth and Direction were the first mechanics we were going to build upon.

The following picture shows some of the mechanics we were going to experiment with.

IMG_0038

Semester 2 – Week 8

This week we got a chance to go to San Francisco for the Game Developer Conference 15 ! Everyone was really excited for the conference. I attended several GDC lectures and got a chance to speak with industry people and make connections. I got to hang out with the game developers at the microsoft xbox, intel, unreal engine and Unity booth. I also got to try new games and technologies all all these booths which was awesome.10887247_10152824044358655_4870440770154060173_o

 

10842214_10152824044598655_434714315935481597_o

 

10887162_10152824044563655_1115237689382978528_o

10916403_10152824044018655_607278099963995157_o

 

I sat for a couple of AI and graphics lectures. They were lectures on new physically based rendering systems and shaders which were quite interesting. The AI and Physics lectures were also quite good. Through GDC I realized that my specific area of interest in terms of game programming is in graphics which was something I did not realize before and hence it was quite a memorable trip.

 

 

10686683_10152824042848655_1493565430986807208_n

 

Semester 2 – Week 7

This was the final week for this project and we had to finish our build by next week. All the NPC behavior work that I was assigned was finished. In addition to that I was doing the level design and working on the Buddy NPC behavior which keeps following the protagonist. This was done using the following blueprint.
12345

The buddy AI simply keeps the track of the protagonist and runs towards him while maintaining a certain distance from him.

In terms of level design I included the war outposts produced by the artists and put two guards on the outpost towers to keep a look out. The objective of the outpost was to make it scenic as the camera is the main mechanic for our game. So I tried to make it as scenic as possible by using the assets made by the artists.

Also, I had to create a chaos behavior so when the protagonist enters the place he can have a couple of options to take pictures from. The event I created was 5 soldiers shooting in the air and carrying out a rowdy behavior by scaring the hostages and pointing the gun at them from time to time. The other 5 soldiers were basically training and doing shooting practice. There were also civilians here and there doing day to day activity. This produced a scenic environment and conveyed the message of out game.

The 10 thesis ideas were pitched in front of the industry panel and ultimately the list was reduced to 5 thesis games which would be the final games for our thesis. Out of the 5 games I went for Binaural Sound because I thought this game we will explore the new technology of Binaural Audio and make a game that follows audio ques. Hence I finalized in Binaural Sound game and we would resume the development after the GDC week.

 

Semester 2 – Week 6

In week 6 I had to populate the map and flood it with around 60 NPC’s using the similar blueprint I posted earlier. I could populate it with only half of the NPC’s because more of them were causing a performance bottleneck and so I ended up adding 30 NPC’s with a half of them as soldiers. I used the Mixamo character pack with already had the animations rigged which made it easier for me to code using the blueprints and change the current states of the NPC’s depending on the TriggerBox overlaps.