Dev:Ref/GoogleSummerOfCode/2017/Ideas
GSoC is a program sponsored by Google to get students started with Open Source software development.
Read more about the project in the official page.
This page collects potential ideas and mentors for student projects. The ideas are up to date for the Summer of 2016 and reviewed by developers. Read below if you are a student or mentor looking for ideas.
目次
Contacting Us
You can contact us via our bf-committers developers mailing list
Or via IRC: irc.freenode.net #blendercoders
You can also use our wiki.blender.org to write down proposal drafts in your personal space.
For matters you prefer to discuss in private, mail Ton Roosendaal: ton at blender.org.
General information for students and (potential) mentors
The list below provides ideas for projects that:
- a student coder can complete in 12 weeks (not too easy, and not too hard);
- implements topics marked as "to do" by current developers, implements a commonly agreed upon feature requested from our user community, or improves upon existing code within its original goal.
Choosing an idea from this list is not mandatory. Students are free to submit their own proposals or modified versions of the ideas from this page.
Mentors:
A mentor should be someone with Blender coding experience, who can guide a student during all stages of the work, from design to implementation.
Please add new ideas to the "Unconfirmed list". People who have mentored students in the past years can review ideas and mark them 'confirmed'. We will discuss this in our irc channel when needed.
Students:
Students who wish to apply should firstly read carefully the instructions on the Google website to check if all the conditions to participate are met.
If by some reason you can not participate or are not a student, your contribution (outside of the program) is still welcome!
Feel free to take, discuss and develop ideas from the page without any time restrictions.
If you are new to Blender, take some time to connect with the community, the mentors and ask more about the ideas you are interested in.
Then, the next step would be to get familiar with the development environment by compiling Blender on your computer and experimenting with the areas you are interested in.
None of these steps are a hard requirement, but it helps to get your proposal accepted if you show interest beforehand and that you understand your task and can make changes in Blender's code.
Nearly all projects will require a strong working knowledge of C/C++, in addition we use Python for much of our interface code (anyone skilled in C/C++ can trivially learn enough Python to make the needed interface code changes).
While C++ is present in many of the libraries we use, all of them use a C interface when accessed from within the Blender core code.
An exception to this are projects where only Python is required.
Getting the big picture
A good illustration of projects we do for Blender you can find on many places at blender.org and our wiki. For example check on:
- Release logs
- The 2016 GSoC projects
- The 2014 GSoC projects
- The 2013 GSoC projects
- The 2012 GSoC projects
- The 2011 GSoC projects
- Blender Developer ToDo list
Confirmed Ideas
Motion tracking
Camera breathing support
- Benefits: Support of zoom shots in Blender’s motion tracking
- Description: Currently Blender only handles shots with constant focal length, but in practice artists want to have VFX on zoom shots, which is not supported yet. In practical terms, we want variable camera lens focal length support.
- Requirements: Proficient in C++. experience with minimization problems
- Difficulty: Medium
- Possible mentors: Sergey Sharybin
Lens distortion estimation and grid calibration
- Benefits: Lens calibration straight from Blender, no need to use external calibration tools for that, making scene reconstruction more accurate
- Requirements: Proficient in C++. experience with camera tracking workflow.
- Difficulty: Medium
- Possible mentors: Sergey Sharybin
Cycles
Cycles UDIM support
- Benefits: Support of industry-requested image-mapping technique/library in Cycles/Blender
- Requirements: Proficient in C++
- Difficulty: High
- Possible mentors: Sergey Sharybin
Cycles full sample anti-aliasing support
- Benefits: Higher quality of post-processed images rendered with Cycles, especially when using hair and fur.
- Requirements: Proficient in C++, experience with rendering pipeline in Blender
- Difficulty: Medium
- Possible mentors: Sergey Sharybin
Cycles Motion Blur improvements
- Benefits: Improve such aspects of motion blur in Cycles as support of high quality curved motion blur and multi-step object/camera motion blur.
- Requirements: Proficient in C++
- Difficulty: High
- Possible mentors: Sergey Sharybin
Cycles anamorphic breathing
- Benefits: Enhance artistic look and feel for anamorphic bokeh lens.
- Description: Each lens has a unique "breathing" pattern.
- Requirements: Proficient in C++
- Difficulty: Medium
- Possible mentors: Sergey Sharybin, Dalai Felinto
- Challenges: We need to find a balance between real lens modeling and artistic control
Cycles IES support
- Benefits: More realistic architecture rendering
- Requirements: Proficient in C++
- Difficulty: Low
- Possible mentors: Sergey Sharybin, Dalai Felinto
- Challenges: There is a work in progress patch for this. However usability, interface and tools are a challenge on their own.
Painting
Finishing PTex support in Blender
- Benefits: PTex support for both painting in Blender and rendering in Cycles.
- Description: There was work done during 2015 which ended up in initial integration of PTex into Blender, but it was not finished and needs polishing, workflow simplifications and code quality improvements.
- Requirements: Proficient in C++
- Difficulty: High
- Possible mentors: Sergey Sharybin
Layer painting
- Benefits: Bring the painting pipeline closer to within Blender
- Requirements: Proficient in C
- Difficulty: High
- Possible mentors: Bastien Montagne
- Challenges: There is no robust multi-layer image support in Blender apart from multi-layer EXR. Adding such support is to be part of this project.
Vertex painting improvements
- Benefits: Allow artists to use vertex painting tools as easily as texture painting
- Description: Extend the vertex toolkit to support color control, masks, and other tools required for state of the art vertex painting
- Requirements: Proficient in C
- Difficulty: Medium
- Possible mentors: Bastien Montagne
Sculpting Tools
- Benefits: Better sculpting tools to give artists more control, help artists by offering better sculpting and masking tools tools.
- Description: This task can be comprised of multiple sculpting improvements, suggestions (however this is very flexible and can be planned in more detail by the mentor and student).
- Silhouette brush (ability to deform an object by sketching a new outline). (Unfinished very basic implementation in the GSoC 2016 sculpt branch only a few days worth of code, so can be ignored if this years student wants to start over)
- Fill tool (to outline a closed area on the mesh surface which will be turned into a flat surface across the region). (See sculpt mask brush code for region selection, and sculpt flatten brush for flattening code)
- Grab brush - option to limit to connected geometry (so when grabbing say the foot of a character mesh, if the edge of the grab brush touches the foot fo the other leg, then only the foot near the center of the brush will move and the other foot will be ignored). (See bmesh and proportional editing Connected code for algorithm how to find which faces are locally connected)
- Sharpen/Blur flood fill for masking (so that all masks on the sculpt object are blurred, similar to using the shift smooth bluring in mask brush mode but over the entire object)
- Click and drag masking similar to the gimp 'blend tool' (so you click and drag in the 3d view port, and when you release the mouse everything in the direction of the drag line is masked)
- Cavity masking for sculpting (see cavity masking used in painting code)
- Optimizations (improved performance for undo and possibly optimize VBO updates).
- Requirements: Knowledge of C, basic Linear Algebra (possibly OpenGL depending on the scope of the project).
- Difficulty: Medium
- Possible mentors: Tom Musgrove (LetterRip)
Modeling
Normal Editing Tools
- Benefits: Exposing this via tools will give artists (especially those working on low poly modeling - assets for games), more control when adjusting shading for their models is common.
- Description: Blender’s has editable normals currently, but no way for the user to directly edit them in Edit mode, this project would require the student to write tools to manipulate mesh normals.
It will also imply a serious design step, to decide *how* to expose them in Edit Mode (new mode? standard edit mode when polys + vertices selections are active? etc.). - Requirements: Proficient in C, 3d-math.
- Difficulty: Hard
- Possible mentors: Bastien Montagne, Howard Trickey
Higher Quality Solidify Modifier
- Benefits: This makes it much easier for anyone who is 3D printing to make a solid shell from a mesh without having to manually create the shell.
- Description: While Blender already has a solidify modifier, this is intended to be fast, for animation and real-time editing, this project would involve writing a modifier that performs more comprehensive computations to create a solid shell from a mesh.
- Requirements: Proficient in C, 3d-math.
- Difficulty: Hard
- Possible mentors: Bastien Montagne, Howard Trickey
Boolean modifier improvements
- Benefits: Boolean modifier which just works!
- Description: The current boolean modifier in Blender fails in real case scenarios.
- Requirements: Proficient in C, 3d-math
- Difficulty: High
- Possible mentors: Bastien Montagne, Sergey Sharybin
- Challenges: BMesh based boolean modifier currently doesn't support: self-intersecting shapes, exactly overlapping geometry and zero (or near zero) length edges in faces, see T47030.
Multires modifier improvements
- Benefits: These improvements will make multires a more flexible and useful tool for digital sculpting.
- Description: There are many improvements that could be made - apply lower levels of multires ('delete lower'). Have editing of basemesh with loopcuts or loop deleting interpolate data of higher multires levels rather than copy face data. The greatest wished for feature is for 'layers' for digital sculpting - that could be blended between.
- Requirements: Proficient in C
- Difficulty: Low (Delete Lower) to High (Layers)
- Possible mentors: Sergey Sharybin, Bastien Montagne
Advanced Snapping Toolset
- Benefits: A more advanced snapping toolset would help when high precision is needed for modelling or object placement.
- Description: Mainly, this project would mean to add more snapping features and rework the snapping UI/workflow. (Proposal)
- Requirements:
- Difficulty: Medium
- Possible mentors: Germano Cavalcante
Interoperability
Import/Export support for glTF File Format
- Benefits: Web developers working on 3D projects will have a viable format for loading skinned meshes (animated characters for example).
- Description: glTF is a new, open format intended for exporter designed to be used with web technologies, since X3D and other formats were not designed with support skinned meshes in mind.
- Difficulty: Medium
- Possible mentors: Bastien Montagne, Mitchell Stokes, Jeroen Bakker, Mike Erwin
- Notes: Initial work has begun on an exporter, this project may be to write an importer, will need to be re-evaluate closer to GSOC start date.
See: io_scene_gltf
Performance
Sequencer realtime playback
- Benefits: Make sequencer playback real-time on a setup with a reasonable complexity, avoiding hiccups on strips start/finish, and scene strip proxy
- Requirements: Proficient in C, experience with non-linear video editing
- Difficulty: Medium
- Possible mentors: Sergey Sharybin, Aaron Carlisle
Improved threadability of Compositor nodes
- Benefits: Increased interactivity of Compositor
- Description: Various nodes (Glare, for example) are still single-threaded or requiring full buffer to be ready on input in order to start operation. This reduces interactivity a lot. Using different implementation of those nodes would make them thread-friendly, making user experience much better. Bringing more nodes to GPU will also improve performance.
- Requirements: Proficient in C++, experience with post processing techniques
- Difficulty: Medium
- Possible mentors: Sergey Sharybin, Jeroen Bakker, Monique Dewanchand, Dalai Felinto
Python
Package Manager (for add-ons and possibly other resources)
- Benefits: Users will be able to keep their add-ons up to date, and developers will have a way to send fixes and updates.
- This also means developers who sell add-ons via online stores can have a way to update them.
- Description: Blender can already manage add-ons, however there is no convenient way to update add-ons once installed.
- Requirements: Proficient in Python. Having some experience using requests and asyncio is a bonus.
- Difficulty: Medium
- Possible mentors: Inês Almeida, Bastien Montagne, Sybren Stüvel
- Notes: We have written some initial design notes on this topic, see: package management design notes.
Benchmark Project
- Benefits: Share and monitor performance of Blender rendering online.
- Description: A system to gather render time and present it in a centralized web portal, seamlessly integrated with Blender eco-system.
- Requirements: Proficient in Python and web development
- Difficulty: High
- Possible mentors: Sybren Stüvel, Francesco Siddi, Dalai Felinto, Sergey Sharybin
Various ideas
Improve stand-alone animation player
- Benefits: Improved usability for animators to preview their work.
- Description: Blender can run as an animation player already, however this features is very primitive and can use various improvements:
- Multi-threaded image loading.
- Frame pre-fetching
- Improved usability (feedback when settings are changed, on screen key-map display).
- Requirements: Proficient in C.
- Difficulty: Low
- Possible mentors: Inês Almeida, Aaron Carlisle
Trackpads, smooth scrolling, and multitouch support
- Benefits: Blender should get cross-platform support for modern input devices. Linux and Windows (Surface Pro) are falling behind.
- Description: Windows, Linux X11 and macOS code (GHOST library) should have the same functional level for touch screen events, multi-touch, trackpads, tablets + pens. Best case: implement prototype for multitouch event handling in Blender.
- Requirements: Linux, proficient in C, C++. Some event system code experience in Linux would be cool.
- Difficulty: Medium
- Possible mentors: Sergey Sharybin, Ton Roosendaal, Inês Almeida, Mike Erwin, Aaron Carlisle
- Challenges: This may require a similar framework as for VR inputs.
Improve Motion Paths
- Benefits: Make motion path usable by animators in real production shots.
- Description: Currently Motion Paths are slow to calculate resulting in poor usability, completion of this project would make this feature painlessly usable by animators. Refactor MotionPath and Rig evaluation/dependency graph code so that it is possible for motion paths to refresh automatically on bone/object motion. Threaded evaluation will prevent the UI from freezing during evaluation.
- Requirements: Proficient in C, optimization and cyclic algorithms/dependency graphs, threading
- Difficulty: Hard
- Possible mentors: Joshua Leung, Bastien Montagne
- Artist/Stakeholders: Hjalti Hjálmarsson
Multi-Object Editing
- Benefits: Allow artists to pose multiple characters at the same time, multi-uv editing, ...
- Requirements: Proficient in C.
- Difficulty: Medium
- Possible mentors: Dalai Felinto
- Challenges': This has to be done in blender2.8, which is not fully functional for the time being
Audio Nodes
- Benefits: Enables artists to use Blender's node editor for audio editing.
- Requirements: Proficient in C++
- Difficulty: Medium
- Possible mentors: Jörg Müller
Unconfirmed Ideas
Template
- Benefits:
- Description:
- Requirements:
- Difficulty:
- Possible mentors:
User Interface
Configuration Splash Screen
- Description: The current splash screen that appears when opening Blender should be updated to provide quick access to important user preference options. These options should be placed in multiple pages of the splash screen (support for this would have to be added).
- Benefits: A configuration splash screen would allow users to easily and quickly configure Blender for their needs.
- Requirements: Proficient in C, experience in interface design; design should be mostly finished when GSOC starts (not necessarily by student, we can ask some artists with UI experience to do this).
- Difficulty: Easy/Medium
- Possible mentors: Ton Roosendaal, Julian Eisel
- Note from Ton: this is not a good GSoC imho, the design/prototype phase is most of the work (and very hard), code then is possible to do in few days.
- Artist/Stakeholders: Jonathan Williamson/Sebastian König (TODO ask them! :) )
Info Editor Redesign/Repurpose
- Description: As part of the Blender 2.8 workflow project, it's planned to introduce a new global top-bar as a replacement for the Info Editor, which can be repurposed then. The Info Editor should become a place for various statics, logs and general information. Check the 2.8 UI workshop writeup for more info (esp. sections Top Bar, Status Bar and Info Editor).
- Benefits: A central place for users to find all kinds of additional information about the project and the system they're working on.
- Requirements: Proficient in C, experience in interface design; An initial design should be agreed on before the GSOC coding period starts, the UI team is availabe to help getting this done.
- Difficulty: Medium
- Possible mentors: Julian Eisel
Modeling
Redesigned Font Objects
- Benefits: Redesigned and recoded font objects would fix old limitations and create a basis for future development.
- Description: Code and design of Blender's font objects are almost as old as Blender itself. This project would involve recoding and redesigning them.
- Requirements: Proficient in C, proficient typography knowledge
- Difficulty: Hard
- Possible mentors: Bastien Montagne
Various Ideas
Seamless Nodes
- Benefits: A review of currently existing material nodes with a game pipeline in mind would result in simpler node setups for game and real-time simulation artists.
- Description: Work with existing nodes to add a 'Seamless' option where applicable, as well as other needed options for Blender's material system to be compatible with what is expected to export assets to a modern game or VR engine. See this presentation for an overview of current problems and necessary workarounds with material node setups. Compatibility with game engines and Substance Designer should be investigated.
- Requirements: Knowledge of C/C++
- Difficulty: Medium
- Possible mentors: <mentor needed!>
- Artist/Stakeholders: Aidy Burrows