Deep Inverse Reinforcement Learning


  • Developed reinforcement learning algorithms to reduce human’s burden for training an agent performing specific tasks using TensorFlow which made the learning 2X faster

  • Designed Neural Networks architectures and applied machine learning techniques to strengthen the RL algorithms

Realistic Rendering of Ice and Crack Propagations 


Ice rendering is a challenging subject in path tracing which requires special care to have decently rendered pictures. There have been some efforts in past projects to make this happen, and they were successful to get good results. However, the appearance of the surface of most of these ices is unrealistically clear and pristine. Here, a class called MicrofacetGlass is defined to perturb the normal surfaces at the hit point in order to blend the properties of a glass and a surface out of the rendering. Our random bubble generator which generates bubbles within a range of specified radius inside the ice, along with physical fractures, makes our ice cubes look highly realistic.


Path Tracer


In this project I have implemented the important functions which are necessary for a ray-tracing method. This includes generating a number of rays inside a [0,1]*[0,1] box for each pixel and projecting them to the camera view in our scene which is in the world coordinates. Then, these rays should be followed in the scene to check for the intersection. In part 1 of the projection I check the intersection between each ray generated and all the mesh triangle in the scene for intersection which is time-consuming and returns the closest intersection as a spectrum which includes the color of the pixel. This should be done for all sample rays for a pixel and the averaged value overall sample rays are the final spectrum passed to a pixel to be shown. In part 2 I try to improve method using bounding box trees; it is done by dividing all the primitives(triangles, circles, ...) to sub bounding boxes of a tree structure and testing each sample to see if there is an intersection between a bounding box and the ray. This helps to efficiently find the primitives that a ray is actually intersecting with and I will be able to efficiently do the ray tracing for more complicated shapes. To be able to show the results for the first two parts I used normal vector of each primitive at the point to get a spectrum for the pong and use this spectrum as the color of the pixel to show


Cloth Simulation


In this project I have simulated a clothe by assuming that it is a system of masses and springs. Where each mass is connected to its vertical and horizontal components through spring and this connection is called a Structural type of connection. These masses are also connected to their diagonal neighbors by spring and these connections are called Shearing. The next connection is with the second vertical and horizontal neighbors which are called Bending connection. In the first part of the project I have positioned all the masses in their position based on the input of the cloth that is vertical or horizontal and constructed a vector of mass points. Then, I implemented the connection between masses through the construction of a vector of springs and specifying the type of connection and which point masses are connected through
each connection.​


Style Transfer


The general idea behind style transfer is to take two images, and produce a new image that reflects the content of one but the artistic "style" of the other. This is done by first formulating a loss function that matches the content and style of each respective image in the feature space of a deep network, and then performing gradient descent on the pixels of the image itself.