Skip to content

Latest commit

 

History

History
256 lines (168 loc) · 10.3 KB

GSOC-2018.md

File metadata and controls

256 lines (168 loc) · 10.3 KB

Google Summer of Code 2018

This is a list of project ideas for students applying to the Google Summer of Code program (GSoC 2018).

It's only an indicative list, and is subject to change as Godot is very actively developed by hundreds of contributors. Use this list as an inspiration source, but feel free to come with your own ideas on what you would like to work on in Godot.

Make sure to discuss your ideas with Godot developers on the #godotengine-devel IRC channel (Freenode server), so that we can help you refine your ideas and ensure that they fit in the Godot roadmap and architecture.

TSCN exporter for Blender

Skills: Python, Blender plugin API, knowledge of 3D assets structure, some familiarity with C++.

The 3D assets pipeline requires importing 3D models, skeletons, animations, etc. from thirdparty 3D modeling software such as the open source Blender, or the proprietary Maya or ZBrush.

This is usually done by exporting the models or scenes using a dedicated asset exchange format supported by the game engine (such as Collada or glTF 2.0), and then import it into Godot. However, this can lead to a few inconsistencies due to the peculiarities of exporter and importer plugins, as well as the feature set of the exchange format itself.

One idea would be to create an export plugin for Blender (privileged due to its open source nature) that can generate a Godot scene file directly from a Blender scene, bypassing the intermediate step. This would allow to simplify the workflow, ensure great compatibility with the Eevee PBR features, and export Blender shader graphs to Godot's expected scene format.

This would require understanding the Blender API and Python plugin scripting, and the text format of Godot scenes. A proof of concept already exists to export meshes from Blender to Godot, but it needs to be completed to add all features that are shared by Blender and Godot.

Existing WIP: https://github.com/godotengine/blender-exporter Related issues: godotengine/godot#7102

ARCore support and CameraServer improvements

Skills: Android/Java/C++

Augmented Reality (AR) is a new trend in game and application development. Godot 3.0 added initial support for AR via its ARVRServer and CameraServer interfaces, with some support for the ARKit library for iOS AR projects.

The equivalent for Android devices is ARCore, and it should be possible to write an Android module for Godot to expose ARCore features to the Android version of the engine.

The work would also imply ensuring that the ARCore, ARKit and possible future backends all use a shared and consistent API, so that users could create AR games for both Android and iOS using a high level API. Godot already has an initial implementation of such a common interface in the ARVRServer class, and a pending proposal of a CameraServer API which needs to be extended. Improving those classes to ensure a user-friendly design would typically be done in parallel to implementing ARCore support.

An option could also be to explore the open source ARToolKit for iOS, as replacement/alternative to Apple's ARKit.

Existing WIP: godotengine/godot#10643 Related issues: godotengine/godot#12714

HoloLens support

Skills: UWP/C++

The HoloLens is a very interesting device from Microsoft that is mainly used in business software. Preliminary experimentation has proven that the UWP build of Godot will run on the HoloLens.

The work here would involve joining Godot to the Holographic SDK in order to obtain tracking information and render stereoscopic output to the HoloLens.

We believe this can be build on top of the existing AR framework and likely implemented as a GDNative plugin. Because the HoloLens is a see through device this AR solution is not dependent on the CameraServer implementation.

GearVR and Daydream support

Skills: Android/Java/C++

Another modern topic is virtual reality. The participants of this project would work on support two SDKs for mobile VR: GearVR and Daydream. This would be based on the Godot's VR backend, which is already available.

Oculus Rift support

Skills: C++

Support for Oculus Rift was added to Godot early 2018 however there are a number of improvements that Godot can benefit from that are interesting projects for students to pursue.

The Oculus SDK has two modules that are interesting projects in their own right to implement on top of the existing interface:

  • The Avatar SDK, allows bringing in the users avatar, render models for controllers
  • The Audio SDK, which has a number of interesting functions specific to audio in a VR setting. While Godot's own audio system may already cover all the features this may be interesting to include support for.

Other projects of interest are:

  • improving the support for timewarp, Oculus' predictive system to combat latency issues when rendering to the HMD
  • improving the support for touch controllers to reflect hand positions

Existing WIP: https://github.com/BastiaanOlij/godot_oculus

Microsoft Mixed Reality

Skills: UWP/C++

While this has some overlap with the HoloLens and anyone who wants to work on this would be smart to team up with whomever picks up Hololens the mixed reality implementation does have a number of differences to the HoloLens implementation. For instance one thing that needs to be investigated here is whether MR support can be added to the normal Windows build of Godot and not rely on UWP.

The VR headsets that are part of the MR ecosystem are still under represented in other game engines even though they offer a cheap entry into VR.

Microphone API and audio input

Skills: C++/Audio/OS API

There is a few genres of games that relies on audio input from the player, especially through the device's microphone.

This project is about supporting such input in the many platforms that Godot supports, both desktop and mobile.

Related issues: godotengine/godot#13268

WebRTC integration

Skills: C++/Network

WebRTC is a project that enables real time communication inside the browser with ease. Adding support for it in Godot would allow game developers to make multiplayer games on all platforms using a common protocol.

Related issues: godotengine/godot#12108

Improve i18n support

Skills: C++

Godot currently uses CSV files for game translations but this format is not widely supported by the translation engines.

This project would consist in providing support for gettext features ( .po and .mo files), which is more capable and easier to make translations using specialized third-party software.

Related issues: godotengine/godot#9398

GDScript Code formatter

Skills: C++/GDScript

The integrated script editor of Godot is a great tool for editing GDScript files, with code folding and auto-completion. However, there's nothing yet to make the code look pretty to the human eyes.

Following this idea, the applicant would work on a set of editor features to define code beautifier rules and apply them automatically to the source code.

Related issues: godotengine/godot#7392

Plugins for video decoding

Skills: C/C++

It's quite common for games to rely on videos for intros and cutscenes. However, supporting all the myriad of formats out-of-the-box is unpractical for Godot's unbloated and open source approach.

The idea is to have multiple official plugins that can be added to each game individually using the GDNative interface, allowing many more video codecs to be supported than what's currently available.

Plugins for MIDI and MOD support

Skills: C/C++

MIDI and MOD are small audio formats that are based on events and musical information, rather than storing the digitalization of a sound.

Supporting this would require the ability for users to set sample libraries and loading the files in editor as resources (by using the import system).

Template builder for Android and iOS

Skills: C++

It's common for mobile applications to load extra modules, in particular for ad support (which is a common request). Since Godot won't pick a specific ad provider, all the modules comes from third-party.

To ease the job of users relying on those modules, the template builder would allow game developers to bundle modules in the export process.

Headless version for server applications

Skills: C++

Sometimes Godot need to run in a server environment, be it to act as a server for a game, or to be used in a Continuous Integration environment.

The headless version would have no requirement for sound cards nor graphical capabilities, since those are not available on servers. This would require a dummy graphics and audio drivers for Godot.

Related issues: godotengine/godot#11389

Plugin: A tool to edit meshes in the editor

Skills: C++

To simplify the workflow of the level designer, it might be interesting to implement a new tool to block out levels within the editor. It would allow creating basic shape, combine then with binary modifiers, extrude them, etc... This should be made as a gdnative plugin.

Related issues: godotengine/godot#17411

A threaded and paged filesystem cache

Skills: hardcore C++

On most platforms, the OS takes care of caching filesystem activity and it does its best to serve the wide variety of applications that run on the system. Sonetimes howver, that's not enough, either because a game will require a specific caching behavior that the system doesn't provide, or because there's no cache at all in the OS. In that case we currenly use the FileAccessCached class, which is a nice hack, but not enough.

The objective would be to create a class that manages all the cached content in pages, and provides features such as reading ahead for streamed files, scheduling reads for files that will be needed in the future, queueing simultaneous reads from the same device while threading them fron separate devices, etc. Not all features will be finished in one summer, but the basic architecture should he there.

Could be done mostly as a gdnative midule, but might require some hooks in the engine core.

"Animation Bootcamp" in Godot

Skills: C++, 3D

Implement this:

https://www.gdcvault.com/play/1020583/Animation-Bootcamp-An-Indie-Approach

Should be doable as a generic/parametric character module.