4 - Presentation and Wrapping Up
November 26th

Presentation Preparation

For this Software Development 4 subject I had to create and present an in person presentation that outlined my research and a demonstration of my created software artefact. This was an exciting opportunity for me and allowed me to really polish everything up and present it to my peers. I'm very happy with the progress that I completed and the results were all very promising. Despite having to miss out on some initial goals, the artefact I created this semester is very indicative of the initial goals and purposes that I had for the research paper. It fully showcases the use cases and opportunities that it can bring to an artists workflow in creating stunning 3D images.

I think the presentation went fairly well, I was able to present and showcase the tool and important research areas that I had studied. I wasn't sure of time restrictions so I didn't get to demo the tool live in Unity like I had planned, but I played a video I prepared earlier which showcased each of the important features.

Wrapping Up

At this point, I've tidied my code, and created some installation instructions to accompany my artefact submission. I exported it all as a *.unitypackage file which allows for easy installation into other Unity projects. I know have just a few things to write about in my research paper and then I'll be finished with that as well.

Overall I'm very happy with the results I was able to achieve and am very excited and reassured of the future possibilities of such a tool. During my research Unity announced a partnership with OTOY and their Octane renderer which offers similar ideals to my research paper, which only reassures that there is a public interest in such a tool.

Future

After this subject is complete, I plan on further implementing some of the features I missed out on implementing for the assignment and hopefully releasing it in some form to the public. I could go open source and get lots of people to help contribute and share around the plugin, or I could release it as a paid asset on the Unity store. Either way I'd love to get it into the hands of actual developers and hear their feedback and opinions to help make this tool really useful and successful.

This is likely to be my last blog post on this website, but if I decide to continue development I'm likely to keep this updated with any future news.

Ben

Some Screenshots


3 - Planes
November 14th

Issues Faced

In the last two weeks I solved the triangle rendering problems I was having previously, however encountered an additional problem. I had been "Brue Forcing" all of the triangles at once. This came with significant performance issues and meant incredibly slow and unresponsive workflows.

I then spent several days looking into potential fixes and acceleration structures that could be used to optimize performance. After trying to implement several, I came to a difficult decision where I felt that it would be better to not support triangular meshes in favour of having a fast and interactable experience with simple primitive shapes, such as the Sphere, Plane, and Box.

From there, I spent the next week implementing planes, better materials, a much nicer Unity UI, and the ability to export renders to a file. I'm quite happy with the progress I've made for this artefact, however there are several features I'd like to add, and I'd also like to clean up my code significantly. From here however the most important task is to complete the accompanying Research paper for the Software Development 4 subject. Originally this paper was going to focus more on different Path Tracing techniques, however I feel more comfortable now writing about the integration with Unity 3D and their Compute Shaders. This was a fairly undocumented area of research that I found creating this artefact and could do with some formalised research and development.

Weekly Render Showcase

Here is a selection of renders from this week which were exported using the new Export to PNG feature. This will help document and show the evolution of the renderer.


2 - Improvements
October 13th

Current

Apologies for not making a blog post sooner. Up until the beginning of October, I was flat out working on written assessments and other assignments. On top of this I also did some contract work for two weeks. I'm back on track now for both assignments and have been putting in extra time to ensure I meet all set goals and deadlines.

The path tracer has made solid progress. I have begun work on better integration with the Unity scene and will continue adding features. At the moment, I'm working on passing mesh data into the compute shader in structured buffers. This seems to be working well, however I seem to be having some werid transform space problems with the meshes. Where as the spheres are represented accurately in the 3D space, the triangles seem to be locked to the camera. I'm sure this is a problem where either the camera rays or the triangle data has not been converted into the proper transform space, however I'm still yet to solve it.

Other than that, I've got some very basic material color and emission properties being passed into the path tracer and accurately being represented. I'm going to have to implement a rather basic BRDF function for the path tracer due to time restrictions, but hopefully it will be abstracted enough to allow others to implement their own.

Future

From here, I need to properly render triangle meshes, support at least point and directional lights, and improve the UI for setting renderer options such as quality, bounces, resolution, etc.


1 - Initial Progress
September 15th

Today the literature review for INFT 578 was due. I've spent the last three weeks researching path tracers, and the various techniques used in the industry. Many companies such as Disney, Animal Logic, Octane, and more have release a lot of their research publicly which has significantly helped in learning and researching this topic.

My goal for this subject is to create a GPU powered unbiased, physically accurate path tracing renderer for Unity. Seamless integration with Unity will hopefully allow artists to harness the offline rendering benefits of a path tracer and will help empower artists to quickly create high quality, in-game renders.

I am not aiming to create a real time rendering engine for unity, instead I'm hoping to offer artists and easy alternative for rendering in-engine images and animations in a phyiscally accurate and unbiased fashion. This renderer has the potential to expand in the future to support lightmap baking and more, however the scope of this assignment does not accomodate for those features.

This image below is an in-engine screenshot of the current build of my artefact. The very basics of the path tracer have been implemented in a Compute Shader, and the resulting texture is then displayed in a Unity Editor Window. To create the path tracer, I followed several tutorials to build a foundational knowledge of the process of path tracing. This code created the path tracer in CUDA. From here I adapted the code to work in a Compute Shader (a version of HLSL). My next goal is to work on adapting the path tracer to better integrate with the Unity scene and interface.