Learning More Best Practices and 3D Gameplay Prototyping

Yo dawgs!

On my spare time, I finished reading Game Engine Architecture by Jason Gregory, a lead programmer at Naughty Dog.  I highly recommend it to anyone who is interested in learning better ways to handle both common and complex problems in a 3D environment for all different fields of the game industry.  Some of the best practices mentioned in the book are GJK collision boundary testing for convex shapes, retargeting poses for 3D objects that have the same skeleton, blending animations using a blend tree, and swapping memory portions of different sections of an open world.  It even does an analysis of different architectures found in the Naughty Dog engine, Ogre, and Unreal.

I have also been messing around with 3D gameplay prototyping with Unreal and Unity.  They both seem to have their pros and cons, but so far, I find that Unreal has more powerful game development features than Unity and its interface has become very similar to Unity.  Also with the move to use C++ as its main scripting language and a similar component based archectiture with Unity, I have begun to like Unreal more.  The gorgeous rendering in Unreal really captured my eye before and seeing features such as retargeting animation poses that was mentioned in the book makes me want to explore Unreal more for now.


Looking Beyond the Horizon

After learning more about game UI in terms of architecture, localization, performance, and constraints, I decided to expand my knowledge about other parts of the game industry.

Recently I have finished reading Practical Game Development with Blender and Unity to learn more about the artist to game engine workflow that optimizes rendering performance and to learn any advanced techniques the book had to offer about being a generalist in the game industry.  I’m liking it so far.  The first few chapters cover about the process from designing to developing the game in more detail.  Then it delves into more about the Blender to Unity workflow and how to optimize that. It also covers the component based system and different ways to save data in Unity.

I also recently purchased some other books such as Learning C++ by Creating Games with UE4 and Game AI Pro 2: Collected Wisdom of Game AI Professionals to further my game development interests.  Learning C++ by Creating Games with UE4 seems too basic for me since I already know how to program.

Game AI Pro 2: Collected Wisdom of Game AI Professionals has some advanced tidbits about AI programming and I’m enjoying it so far.  I would recommend it to anyone looking to do AI programming.


Exporting Blender Models to Unity

Hey all!

Here’s a little tip when exporting Blender models to Unity that I learned while developing games on no budget.  If you export a Blender model directly to Unity, Unity will rotate it by -90 degrees in order to correct it.  We don’t want to deal with this especially if we are manipulating the model’s rotation via code during runtime.


  1. Select the model you want to export to Unity
  2. Go to File -> Export -> FBX
  3. In the Export FBX (See screenshot for reference):
    • Click the Selected Objects box
    • Change the Forward to – Z forward and Up to Y Up to match up with Unity’s left hand coordinate system
    • Check the Apply Transform box

Blender Export Screenshot

There you have it!  Your model appears correctly in Unity and you don’t have the wrong rotation in Unity.


Campus Collaborative

Campus Collaborative was a website I made within 2 weeks both front end and back end by myself using Bootstrap as a frontend framework and CodeIgniter for backend framework.  A lot of the Javascript is raw Javascript for dynamic interactivity and not Bootstrap.  I also used PHPMyAdmin to manage my database and create database tables.  It is a lot easier than managing MySQL scripts.

I presented the website with my group to potential investors at RIT’s Digital Journalism Incubator.

Feel free to check it out and give me feedback: http://campcollab.com/

Internship, Resume

Advice for Getting a Programming/Development Internship

More of my friends at Rochester Institute of Technology (RIT) have been asking me for advice on how to make a resume geared towards getting a development internship.  I haven’t seen any good resume advice for college students for landing an internship, so I decided to write one.  These are tips I have taught myself on how to get an internship at a software development company and advice I have received from fellow students and speakers at conferences such as Game Development Conference and Grace Hopper Conference.  Some of this advice can be generalized for getting internships.

1.  Resume – Your resume should sell yourself and not anyone else.  It can be creative or standard resume format.  Personally, I prefer a creative one as it represents more of who you are and greatly stands out from the rest of the resumes with standard format.  For an example of creative resumes, visit this page: http://www.hongkiat.com/blog/creative-designer-resume-curriculum-vitae/ and also my resume page: http://rebeccavessal.com/resume/.  My creative resume has more of a newspaper format and a legible digital font.  I’m not saying you have to go super crazy about the design of your resume, but it can definitely help.  Feel free to borrow my format for resume if you like it.

Here is a breakdown of resume content that I have adhered to which has helped me get interviews at both small and big software development companies including Uncorked Studios, ThoughtWorks, Zynga, Microsoft, and Apple.  Your content should be organized in the order of significance.  If you have internship experience, place that before education.  If you don’t, then place education before experience.

  • Content:
    • Introduction
      • Name – Your name should have a bigger font size than any other heading in your resume and be in bold.
      • Contact Info
        • Email Address – Be sure to include your school email address if you are still in college and your personal one that is appropriate.  Your school email address indicates to the recruiter that you are currently enrolled in colleges and can immensely help you in your internship search as some internships only take in currently enrolled college students.  If you aren’t enrolled in school, then your personal email address should ideally include your full name.
        • Phone Number – Include a phone number that you can easily be contacted at during anytime during the day.  I have my cell phone number in my resume, because I always carry my cell phone around wherever I go.  You never know when recruiters may contact you to schedule the first interview, so it’s really important to have this phone number.
        • Address – This is debatable one.  I don’t have an address in my resume, because it takes up space in my resume and it’s not prevalent to most of the companies I apply to for internships.  The only reason I see putting your address on your resume to be important is if you know the company only hires interns locally or wants international students.  If this is your case, then you can put your permanent address and your local address on your resume as this will help you be prioritized in getting an interview over those who are not local or not international.
    • Education
      • School – State your school name, your major, and where your school is located.
      • GPA – State both your cumulative and cumulative core classes GPA.
      • Graduation Date – Your graduation date can serve as an advantage to other candidates if you are senior and thus graduating soon.  At a company standpoint, if you are graduating soon, then they can hire you on later for full-time and not have to spend more money and time to find more candidates for the job.  Most companies will hire you on as an intern if you are a 2nd to 4th year, but some companies prefer to take on only juniors and seniors.  Recruiters tend to not hire college freshmen for an internship, so you could state you are a 2nd year or 3rd year if you are a freshman and have such a status instead of a graduation date.  This can help you go beyond the boundaries that most college freshmen have to deal with in getting an internship.
    • Skills
      • Programming Languages – You should list your proficient programming languages in level of proficiency from highest to lowest.  Also be sure to list any programming languages you are familiar with, which means you are somewhat comfortable programming in the language but don’t feel very comfortable with that particular programming language syntax.  Even familiarity with a programming language could help you land an internship.
      • Integrated Development Environments (IDEs) – Your experience with an IDE a company lists on their internship posting conveys to the recruiter that you could hit the ground running without them having to train you in using their IDE.
      • Operating Systems (optional) – You don’t have to include this, but it may help in some internships where they state in the internship opening where they use a particular operating system such as Linux.
      • Graphics Programs (optional) – This is something you don’t necessarily need as a programmer, but it can show that you know the workflow of artists and can build programs that incorporate that and speak to artists in their own language too.
    • Projects
      • Now this is the most important piece of your resume along with your experience at other internships if you have any.  This should be your OMG this person has done some wicked projects in which they used skills crucial to the internship.  In other words, this is the delicious cake you are offering to recruiters.
      • Any projects you include in your resume should showcase your skills and include achievements that may or may not include numeric results.  By quantifying your achievement results, you give the recruiter a sense of how great  your achievements are.  You can tailor your resume by including projects that appeal to general software development companies or to specific ones.
      • Be sure to include personal projects under a separate heading if you have any.  This shows that you are truly passionate about what you are currently majoring in.  You can even list projects that you are currently working on and not completely finished.  Not a lot of people take on personal projects, so this alone may get you your ideal internship.
    • Experience
      • List your work and internship experience in order of importance to the internship and recency.  Listing any internship experience definitely gives you an advantage to those who don’t have any and should be listed first.  If you don’t have any internship experience, don’t worry about it.  Ideally, you should include work experience close to what the recruiters are looking for in their ideal intern, but any work experience should be fine.
      • Follow the same rules for projects.  For your jobs, list your achievements and numeric results.
    • Outside Interests
      • Include any clubs that are relevant to the internship and display your achievements and leadership roles.
    • Awards
      • Include any school awards, awards in general, and conferences you have gone to.   Not sure if this helped me get internships, but it does impress people in general.

So, this is part one of my advice for getting a development internship.  I need to go to my C++ class.  Subscribe to my website and like this post and comment on it, if you liked this advice.


Rings of Colorful Balls Simulation – Flow Fields

Here is a link to the simulation of colorful balls following a ring path in a flow field.  Press Spacebar to turn the visibility of the flow field on and off.  Refresh the page to replay the simulation.

Essentially 6 groups of balls with colors of the rainbow are randomly spawned onto the screen with number of balls on the screen ranging from 13 to 70 and the ball’s diameter ranging from 20 to 30 pixels.  The first ball created in its color group is assigned as the leader while the rest of the balls in that group are the followers.  The followers find their leaders and once all of the followers of a particular color group find their leader, then they exhibit an orbiting behavior around their leader.  Meanwhile the white ball seeks the center of the screen and stays there once it gets there.  Once all of the followers have found their leaders, the first ring in the flow field is generated around the center of the screen and the first group in which the followers found their leader begins to steer themselves toward the center of the screen until they enter the first ring.  After all of the followers of the first group enter the first ring, a second ring is generated counterclockwise and then another ring is generated clockwise after the second group of balls enter the second ring.  This goes on until the last group of balls enter the last ring.

This was an interesting project to work on and no one else attempted to use flow fields in their project except for me.  It is now used as an example of a project using flow fields and a custom orbiting behavior for Programming for Digital Media class.

Games, Unity

Kitty Land – Unity Game Using Craig Reynolds’ Steering Algorithms

Hey guys!

I made this game called Kitty Land in as a personal project, which centered on using Craig Reynold’s steering algorithm for 3D in Unity.  You can view his steering behaviors here: http://www.red3d.com/cwr/steer/.  Also there is a breakdown of some of his algorithms and a review of vectors on this website: http://natureofcode.com/book/.

Controls for Kitty Land: Use WASD or Arrow Keys for movement,  move around the mouse to change the view of perspective, and use Spacebar to accelerate at top speeds with a rainbow trail (which is activated after returning the lost kittens to the mother cat).

Kitty Land is a game in which you play as Nyan Cat to find all of the lost kittens and return them to their mother cat.  All of the cats are puffball shaped and were inspired by the Lubies stuffed animals.  Once the player starts to chase after a lost kitten, the lost kitten seeks the nearest waypoint until it goes past that waypoint.  Then it seeks the next waypoint until it reaches the last waypoint in the predefined path upon which the lost kitten respawn at the starting point near the first waypoint and the player respawns behind the lost kitten.  Once the player collides with the lost kitten, the lost kitten engages in leader following by following the player, the leader.  As the player captures more lost kittens, the lost kittens follow each other in a single line in the order they were captured.  After the player returns all of the lost kittens to their mother, then the player can have a rainbow trail powers, which can be activated by using the Spacebar.  With the rainbow trail powers, the player can go around with world at high speeds with an extended rainbow trailing extending from the cat’s tail.

I hope you have fun playing it.  Feel free to subscribe to my blog or comment on this post.


Advice for Interns on Their First Development Internship

Some of the many concerns interns have before starting their internship are I’m not sure if I’m qualified for this internship and what if the work I produce is not good enough.  Some interns have this fear that they are inadequate for the job.  First of all, companies don’t make mistakes in hiring people.  They hire the right person for the job, so don’t worry.  You have the qualifications for the job.  For example, the qualifications for my internship where the basic standards of most development internships not necessarily if I knew iOS and Ruby on Rails off the bat.  You will learn what the company expects from you within weeks of your internship and produce that kind of work.  So take a breather and relax.  Nothing to really worry about.

One of the greatest advice I can give to interns is it’s ok to make mistakes.  No really, seriously, it’s ok to make mistakes.  No one expects you to be a genius on the first day you arrive on the internship.  There is always going to be a ramp up period whenever starting on a new internship.  You can crash programs all day long and not be able to code as well as if you knew the syntax of a certain programming language fluently.  As long as you are learning while crashing programs, it’s all good.  Honestly, sometimes, you need to break the program in order to figure out the system you are working with.  Some of the best programmers are those who take risks and make a lot of mistakes.  Like I said it’s all good.

When you need help, ask for help.  That is what mentors are for.  Even if you don’t have a mentor or your mentor isn’t there, there will always be someone at the office that can help you out with your problem.  If you are taking one to two hours when you think the problem should only take thirty minutes to solve, then ask for help.  When you are ramping up, solving problems takes longer, because you are unfamiliar with the technology and the language.  Always try to teach yourself first by attempting to Google some code snippets to help solve your problem before asking for help.  This is an invaluable skill to learn.

Growing up in an Asian academic culture and being Asian, I felt ashamed to make mistakes and didn’t ask for help back in high school.  I would stay up all night teaching myself and occasionally didn’t understand a concept for two.  I wasn’t stupid.   No.  I was part of a small group of students taking all of the honors and AP classes I could while juggling sports and other extracurricular activities.  However, because I didn’t ask for help from my teachers, I didn’t learn as much as I should have back in high school.  This is something I regret to this day.

Trust me, you don’t want to have those regrets.  Make as many mistakes you can and learn from them.  Ask for help if you don’t understand something, need clarification, or simply need help in solving a certain problem.  We all start out as newbies especially on a first development internship.  To tell you the truth, I didn’t know Objective-C and Ruby before the internship.  I learned both on the job and little bit off the job by reading an iOS programming book written by Nerd Ranch in just three weeks.  Yes, I was afraid that I was going to be fired on the very first week I started my internship, because I didn’t know Ruby that well.  Hahaha.  One of my bosses, John, laughed at me for telling him the story of how I thought I was going to be fired on the first week of my internship here at Uncorked Studios.  You might feel the same way, but trust me.  No one will fire you.  Everyone understands you are just learning a new language, and it takes time to learn a new language.

If your boss hands you a piece of the project on the very first day, take it and run with it!  This is your chance to learn on the job, which is must faster than just trying to learn from reading a programming book.  Psychology has proven that we, human beings, learn best by doing not by watching or reading.

My coworkers told me I would comfortable with the languages within a month.  I accomplished it in three weeks and so can you.

We learn and grow both professionally and socially on these internships to become the best developer the world has ever seen.  Internships give people a chance not only to learn new software engineering skills, but also how to live life successfully and choose which career path you want to take.