Skip to content

Google Summer of Code 2021

Serge Koudoro edited this page Mar 25, 2021 · 10 revisions

Introduction to FURY

FURY is a free and open source software library for scientific visualization and 3D animations. FURY contains many tools for visualizing a series of scientific data including graph and imaging data. FURY is participating in GSoC this year for the first time under the umbrella of the Python Software Foundation (PSF).

How to become a part of FURY's Google Summer of Code 2021

GSoC is a program the allows students to learn by contributing to an open-source project while receiving a fellowship from Google, and mentorship from open-source software developers. For details about this year's GSoC, please refer to this page.

Before considering becoming part of the FURY GSoC, please read about our expectations.

All participants should have basic knowledge of computer graphics, scientific computing, and development in Python. For a comprehensive introduction to these topics, please refer to these 2 books:

However, you should be already familiar with data analysis using Python and Numpy before applying.

Be happy to ask questions directly by subscribing to our mailing list and sending a message to [email protected] or by opening a discussion and Select GSOC Request or by joining our discord community.

Getting Started

Potential candidates should follow all these steps before applying for the GSoC:

  1. Take a look at the guidelines on how to contribute to FURY.
  2. Go through the tutorials and examples on the website, make sure you're familiar with the library.
  3. Run the tests. FURY has unit tests that are at about 90% coverage (amount of lines of code tested). Make sure you know how to run them, and if you've never done Python unit tests before you might want to read up on Pytest library.
  4. Figure out how to run a single test! Running one test instead of all of them will speed up your workflow when you are writing your tests! (hint, it's in the contributing docs!)
  5. Make your first contribution to FURY !!! Making a small enhancement/bugfix/documentation fix/etc to FURY is really important! It shows your understanding of the library and your Github knowledge. The fix does not need to be related to your proposal. We have and will continue adding some beginner-friendly issues in Github. You can see some of them here

This a requirement from the PSF; it can help you get some idea of how things would work during the GSoC.

Project Ideas (7)

Notice: We want to provide the best mentoring to our students, only 2 or 3 of these projects will be selected. Not more!

If you have any questions or if you want to contact a mentor:

Project 1. Molecular Surface and Ribbon Representations for Proteins

Description:

The structure of proteins is the amino acid composition. Understanding the properties and conformations of proteins requires the determination of their 3D structure. Among 3D molecular representations that depict protein structures, ribbon and molecular surface models are very popular. Ribbon model of protein presents the visual basics of a molecular structure (twist, fold, and unfold). Molecular surface representation of protein helps us in analyzing protein folding and predicting protein-ligand and protein-protein interactions. The students will be able to implement protein ribbon and molecular surface models in FURY. This is a great opportunity for students who are interested in both biology and coding to visualize the 3D structure of proteins and become members and contributors to the FURY community.

Here are the different steps to achieve:

  • Step 1: Add Ribbon Model to FURY codebase
  • Step 2: Create a tutorial/demo and explain the ribbon Model.
  • Step 3: Expand Protein representation via other models.

Difficulty: Intermediate

Skills required: Biology (basic), Python, Algorithms

Potential Mentors: TBD (Nasim Anousheh, Eleftherios Garyfallidis)

Project 2. Network layouts for FURY

Description:

Networks are everywhere [1], from social media to the physics of the cosmos. They can be used to model the functioning of the brain, the spreading of diseases, the dissemination of misinformation and memes on the internet, among several other applications. Visualizing such structures is a crucial area of research in Network Science [2]. This usually requires three main components: Layouting, which is basically determining the positions of nodes; rendering; and interactivity. FURY is panned to have its own network analysis pipeline, allowing the visualization of huge datasets. The student will implement and integrate a set of layout algorithms to FURY and, in the process, learn all about the amazing things we can do with networks.

  • Step 1: Understand how FURY works and the basics of Network Science
  • Step 2: Implement or combine code from other sources to a python component having the ForceAtlas2 [3] algorithm and Gradient descent-based layouts [4] (which can be implemented using Scipy or Tensorflow).
  • Step 3: Integrate the code with FURY network rendering pipeline
  • Step 4: Use it to visualize a huge real-world network as an example

Difficulty: Advanced

Skills required: Python, FURY, Network Science (basics), Scipy (and/or Tensorflow)

Potential Mentors: TBD (Filipi Nascimiento, Javier Guaje)

Project 3. Create new user interface widget

Description:

In this project, you will build scifi-like 3D and 2D user interfaces inspired by Guardians of the Galaxy video. FURY provides many visualization capabilities. However, we were not happy with interactive capabilities found in existing GUIs. For this reason, we built our own UI engine. No Qt! Everything is integrated into the VTK scene. In this project, you will extend this work and add more futuristic widgets. The motto of this project is to make everything interactive without performance issues.

Here are the different steps to achieve:

  • Step 1: Get familiar with the library by fixing some issues with some previous UI.
  • Step 2: Create SpinBox UI, Accordion UI
  • Step 3: Select, Explore, and develop one of these 2 subjects: Tree UI, Layout management.

Difficulty: intermediate

Skills required: Python and VTK

Potential Mentors: TBD (Serge Koudoro, Soham Biswas)

Project 4. Add new shader effects

Description: Our new visualization engine supports GLSL shading language. Join our effort to built stunning effects of scientific datasets. You will have to program vertex and fragment shaders to generate different effects on FURY primitives. Below, an example of a disco horse:

Here are the different steps to achieve:

  • Step 1: Pick 2 effects between Fur, Glow, glass, fire, water and start to study/implement them
  • Step 2: Create a tutorial/demo and explain those effects.
  • Step 3: Select one new effect proposed above and start to implement it.
  • Step 4: Propose and develop your own new effects.

Difficulty: high

Skills required: GLSL, Python, OpenGL, and VTK

Potential Mentors: TBD (Serge Koudoro, Javier Guaje)

Project 5. Physically Based Rendering (PBR)

Description: Photorealistic rendering is the key to improve the scientific visualization field. The student will need to understand the Physically Based Rendering concept and have some notion of GLSL to allow FURY to use this feature in its visualization engine.

Here are the different steps to achieve:

  • Step 1: Study and list all PBR models.
  • Step 2: Smooth integration of PBR model already available in VTK to FURY.
  • Step 3: Develop a new PBR model.
  • Step 4: Test and validate this model.

Difficulty: Advanced

Skills required: Python, VTK, FURY, Love of opengl

Potential Mentors: TBD (Nasim Anousheh, Javier Guaje)

Project 6. Bring New Physics Simulations and Robotics to FURY

Description: FURY has an optional physics engine available. The student will need to understand PyBullet and build a realistic simulation that uses the engine to simulate physics but use FURY to do the visualization.

Here are the different steps to achieve:

  • Step 1: Understand how PyBullet and FURY work
  • Step 2: Build desired physics simulations (TBD) that integrate both engines
  • Step 3: Build a larger animation that showcases physics simulations

Difficulty: Advanced

Skills required: Python, PyBullet, FURY, Love of physics

Potential Mentors: TBD (Soham Biswas, Serge Koudoro)

Project 7: Bring your own idea!

Description: If you've got a brilliant idea you'd like to propose, please, open a new discussion with GSOC as a category to discuss it!

Difficulty: Easy/Intermediate/Advanced

Skills required: Python, 3D Visualization

Potential Mentors: TBD