Student Journal


Week 1
Introduced to Unity 3D Game Engine. Unity is a game development software that has a powerful rendering engine to create interactive 3D content. Many independent developers and studios use this to create video games. Through Unity, we how to produce a crowd simulated environment to potentially be used in a virtual reality environment. This environment can assist our lab working with another lab focused on virtual reality research to reproduce environments such as ancient Rome, Greece, and allow the user to actually walk within this virtual environment and see how the people behaved through crowd simulated representations. I spent most of the week going through tutorials on the features and tools of the Unity software. I completed the tutorial programs to gain a better understand of working with Unity 3D.



Week 2
Dr. Guy explained the process of crowd simulation and our current goal for the project. Through Unity, I was able to generate multiple cubes on top of a terrain and had them continuously move to random positions on screen using the "MoveTowards" method listed in Vector3 from Unity. The problem that occurred was that the cubes would collide into each other. After discussing my method with Dr. Guy I found out that the 'MoveTowards' method of Vector3 in Unity is not the most efficient way of moving objects in Unity. He gave me a formula dealing with acceleration, and velocity to apply to each individual cube's position (transform.position in code) to produce movement for the blocks. After achieving this and applying this formula, I was able to make steps towards collision avoidance.



Week 3
I successfully was able to generate multiple cubes that would avoid each other somewhat while moving to their randomized position with minimal collision. The problem is that all of the cubes do not avoid each other in a smooth nature. They tend to stagger when they are close to each other and a fair cubes will collide still. Another issue is that some of the cubes begin to move beyond the terrains boundaries while making an attempt to avoid other cubes. This could mean that there is a method wrong with my formula. The velocity could be too high resulting in some of the cubes moving off of the board and the values input for my avoidance collision function needed to be modified to produce a smooth movement. After discussing this with Dr. Guy, he introduced me to the method he uses to avoid collision called Reciprocal Velocity obstacle. This method treats each individual cube as a point, then factors in the time to collision to cause the cube to avoid the object it is approaching. I am still working on applying this method the correct way, but I am making progress towars getting this implemented in my project.



Week 4
Continued to work on producing an avoid collision functions without a rigidbody. This means that my objects won't depend on the actual rigidbody component to retrieve the velocity because this kept producing the wrong value from the actual velocity required for calculations. I still have not been able to produce a true avoid collision method in my project; however, I am still testing different methods and values to reproduce reciprocal velocity obstacles for real time avoidance collision. I will continue to work with Dr. Guy to get this working in my Unity project.



Week 5
I successfully used the methods to have the objects avoid collision. My objects detect the time to collision to another object if it is within a certain distance of that object. By finding the time to collision, the velocity will adjust for both objects to prevent collision between them. This method is currently working and now the next step according to Dr. Guy is to create a text document that will allow me to assign the starting position of objects and the goal position for each specific object from a text file.



Week 6
Spent most of the week using different methods to attempt to parse a text file to allow information to be placed into the text file as input resulting in a generated cube with a set starting, ending position, and speed. Multiple methods were used and various methods were implemented to convert the information from the text document into the variables inside of the 'ReadData' script I created. I successfully created a script that takes the information from a text file about a cube's starting position, ending position, and speed that will create cubes based on the information put into the text file.



Week 7
Successfully parsed text file so that information can be read from the file to create the specified amount of cubes, their starting position, speed, and ending position. THe only problem is that there is an error that is occurring in the collision avoidance because they are sometimes disappearing when they get too close to each other. Another strange instance is that they often collide then vere off from each other so there may be an issue with my implementation of RVO collision avoidance method in the code.



Week 8
I solved the issue with the cubes disappearing and it occurred because a case that I intended to never happen in the code occurred. After changing a few values around, I solved the disappearing method, but the problem with the cubes sometimes colliding was still occurring. I spent most of the week going through many methods to prevent and solve this error.



Week 9
With Dr. Guy's help, I was able to solve the issue with my RVO method and edit the formula a bit. He gave me a different RVO method that actually worked better than the one I was using and corrected me about how I handled the objects current speed versus its preferred speed. I originally used the preferred speed within the equations instead of updating the objects current speed that comes from the object attempting to avoid collision. With this fix implemented, I now a fully functional RVO collision avoidance method in Unity 3D. The next goal is to fuse my avoidance method with a fellow student, Jassiem Ifill also working in the same lab, to create a fully functional project with animated human models that avoid collision and takes information from a text file. Through the text file, a person should be able to choose which avoidance collision method they want implemented and where a model starts, ends, and the speed they will move at.



Week 10
Successfully fused my project with Jassiem. We were able to create a user interface for a user to input information on the starting position, ending position, and speed of the agent to be run in the project. We also allow users the option to create and export a file with this information so that they'll be able to run this same environment again. I made a third option for RVO collision avoidance that allows a user to start with one agent continuously moving to random position and will allow the user to duplicate this model in the scene by pressing 'T' so that they'll be able to see RVO collision avoidance without needing to create a file.