Google Summer of Code 2020 Final Work Product#
Name: Lenix Lobo
Organisation: Python Software Foundation
Sub-Organisation: FURY
Project: FURY - Improve Shader Framework
Introduction#
The current shader framework for FURY is based on VTK and lacks documentation to get started which can be overwhelming for new users. The objective of this project is to enable users to be easily able to understand and use the shader framework to render stunning visual representations of data. The project involves programming vertex and fragment shaders to generate effects for more immersive visualization.
Proposed Objectives#
Adding SDF actor to the API
This actor uses raymarching to model actors using SDF. The method provides several actors including ellipsoid, sphere and torus. Shader demos
Use the FURY shader system to create and visualize different shading algorithms. Implementations include SphereMap, Toon, Gooch and Vertex Noise
Unsubmitted Functionalities#
Spherical Harmonics using Shaders.
The spherical harmonics algorithm is used to generate spherical surfaces using biases and coefficients computed. The general approach to achieve this is computationally expensive. The idea proposed was to leverage the GPU hardware using shaders to provide a faster more efficient alternative to the current implementations. The second month of the coding period was devoted to the same task but unfortunately, the observed performance was quite unsatisfactory than the expected performance. Moreover, the output shape of the geometry was distorted. It was then decided to continue the work after the GSoC period and prioritize the task at hand.
The Work in Progress can be accessed here. lenixlobo/fury
Dynamic Texture using Geometry Shader
Geometry Shaders provide a lot of flexibility to users to create custom geometry behaviors such as instancing. The idea was to create a dynamic Fur/Hair effect on top of a FURY actor. Unfortunately due to missing documentation on VTK geometry shaders and lack of resources, the project was not completed during the GSoC period. However, I will continue to try to solve the issue.
The source code for the current progress can be accessed here. lenixlobo/fury
Objectives Completed#
SDF based Actor
The objective here was to provide an alternative approach to users to use SDF modeled actors in the scene. This actor is modeled using the raymarching algorithm which provides much better performance than conventional polygon-based actors. Currently, the shapes supported include ellipsoid, sphere and torus
Pull Requests: SDF Actor method: fury-gl/fury#250
Multiple SDF Actor
The objective was to create a method through which multiple SDF primitives are rendered within a single cube. This task helped us explore the limitations of the shader system and also benchmarking the performance.
Pull Requests: MultiSDF Shader: fury-gl/fury
Shader Demos
The task here was to create a pull request showcasing the capabilities of the FURY shader system and to also provide examples or new users to get started with integrating custom shaders into the scenes.
Pull Requests: Shader Demos: fury-gl/fury#296
Other Objectives#
Tutorials
Create Tutorials for new users to get familiar with the Shader System
Pull Requests: - Shader UI Tutorial
-SDF Actor Tutorial
GSoC weekly Blogs
Weekly blogs were added for FURY’s Website.
Pull Requests: - First & Second Evaluation:
fury-gl/fury#250 fury-gl/fury#267
Third Evaluation:
Timeline#
Date |
Description |
Blog Link |
---|---|---|
Week 1(30-05-2020) |
Welcome to my GSoC Blog! |
|
Week 2(07-06-2020) |
Geometry Shaders! |
|
Week 3(14-06-2020) |
Ray Marching! |
|
Week 4(21-06-2020) |
RayMarching Continued |
|
Week 5(28-06-2020) |
Spherical Harmonics |
|
Week 6(05-07-2020) |
Spherical Harmonics Continued |
|
Week 7(12-07-2020) |
Multiple SDF Primitives |
|
Week 8(19-07-2020) |
Improvements in SDF primitives |
|
Week 9(26-07-2020) |
Merging SDF Actor and Benchmarks! |
|
Week 10(02-08-2020) |
More Shaders |
|
Week 11(08-08-2020) |
Even More Shaders |
|
Week 12(16-08-2020) |
Picking Outline |
|
Week 13(23-08-2020) |
Final Week |
Detailed weekly tasks and work done can be found here.