Job offer: c++ engineer

We are seeking the future engineer of the ANR Structures project !

Location

LocationLaboratoire IRIT, STORM research team, Université Paul Sabatier – Toulouse
AdvisorDavid Vanderhaeghe (vdh@irit.fr), Nicolas Barroso.
Duration12 months
StartingAs soon as possible
FundingANR project Structures ANR-19-CE38-0009-01

Context

Our project proposed new tools for stylized 2D animations. Our research prototypes allows artist to create stylized stroke based rendering animation, based on keyframes drawn by the artist and automatic intermediates frames rendering.

Mission

The recruited person will have several missions

  • work on the user experience, in collaboration with a professional artist hired for testing our tools
  • improve performances, in particular work on multi threading and rendering
  • make our code base more robust, with unit tests and improved CI

Expected competences

The ideal candidate should have

  • Master or PhD in Computer Science, or equivalent.
  • Strong background in real time computer graphics, mathematics, and c++ programming.
  • Additional skills in some of the following topics would be appreciated: expressive rendering, user interface, numerical optimization.
  • Technical knowledge on git and continuous integration with gitlab is a plus.
  • Fluent French or English speaking.

We will study carefully all applications, do not hesitate to apply even if you don’t fulfill all theses expected competences. Some of the competences could be learned during the firsts mouths of work, accompanied by the collaborators of the project.

Working conditions

The recruited person will join our research team, STORM, and will be hosted in the IRIT laboratory main building.

The working place is the Rangueil campus, in the IRIT building, south of Toulouse, nearby all facilities and ground public transportation to reach Toulouse city center.

Our research team is composed of four permanent full time researchers, and a dozen PhD and engineers. As a member of the team, the recruited person will join our weekly scientific meeting, and participate to the team life.

The structures project involve a PhD student, one researcher hosted at IRIT, and collaborators from Animation industries as well as researchers from Inria Bordeaux Sud-Ouest. See the project website for more details.

Application

Send your application to David Vanderhaeghe vdh@irit.fr with

  • a cover letter
  • a complete CV

Sujet de bureau d’étude LFlex

Amélioration du moteur de rendu Radium

L’objectif de ce bureau d’étude est d’améliorer la gestion des caméras virtuelles et du rendu volumique dans le moteur de rendu open source Radium-Engine. Le développement se fera en c++/OpenGL et utilisera les outils de gestion de projet git via github.

Encadrement

David Vanderhaeghe vdh@irit.fr

François Gaits francois.gaits@irit.fr

Description du context

Radium-Engine est un moteur de rendu 3D orienté pour la recherche en informatique graphique. Il est développé et maintenu par l’équipe de recherche STORM. Ce moteur de rendu a de nombreuses applications, de la visualisation de modèles 3D à l’animation, mais surtout l’exploration et le développement de nouvelles méthodes de synthèse d’images.

Dans le cadre de ce bureau d’étude, vous serez amené à vous familiariser avec Radium Engine, son architecture et ses concepts, implémenter de nouvelles fonctionnalités correspondant à des besoins utilisateurs et finalement proposer une démo basée sur ces nouvelles fonctionnalités.

Radium est entièrement écrit en C++ et propose une abstraction haut niveau de l’API graphique OpenGL. Un premier travail d’apprentissage de l’environnement de développement peut être à prévoir, comprenant la compilation, l’utilisation du C++ et les concepts rendu classique.

Ce bureau d’étude s’axe principalement autour de deux thématiques : la gestion de la caméra et le rendu volumique

Gestion de la caméra

L’objectif est de fournir de nouveau outils comme la création de chemins de caméras permettant de créer des vidéos ou l’implémentation de nouveau types de caméras. Il sera sans doute nécessaire de modifier l’architecture du programme concernant ses caméras, mais surtout d’inventorier les caméras existantes.

Rendu volumique

les volumes 3D représentent une grande quantité d’information et sont très utilisés notamment en imagerie médicale, plusieurs techniques existent pour les visualiser (MIP, marching cubes, slicing…).Cette thématique a donc pour but de créer de nouvelles visualisations de volumes au sein de Radium, mais aussi d’étudier les mécanismes d’import et d’export de volumes présents. Cette thématique a donc pour but de créer de nouvelles visualisations de volumes au sein de Radium, mais aussi d’étudier les mécanismes d’import et d’export de volumes présents.

Radium fournit aussi la possibilité de créer des démos mettant en avant ses fonctionnalités. La finalité de ce BE est donc de créer une démo du travail effectué.

Cadre de travail

Le sujet est pensé pour une équipe de 4 à 12 étudiant.e.s. Les objectifs seront modulés en fonction de la taille de l’équipe.

Radium Engine utilise cmake comme gestion de la compilation.

Radium Engine est multi plateforme, l’environnement de développent est laissé libre pour chaque participants.

Le code devra être déposé sur github, et l’intégration éventuelle des résultats passera par le système de pull request de github. De plus le code devra respecter les règles de conduite du projet, en terme de qualité, tests unitaires, nommage des différents composants.

Nous accompagnerons la montée en compétences en c++, OpenGL, l’utilisation de git et github.

David Vanderhaeghe est membre de l’équipe STORM de l’IRIT.

François Gaits est membre des équipes STORM et MINDS de l’IRIT

Internship proposal/Offre de stage

poste pourvu / job filled

  • Offre de stage animateur 2D
  • Durée 2 à 3 mois
  • Démarrage à partir de mi avril 2022
  • Localisation IRIT, 118 route de Narbonne 31062 Toulouse
  • Candidature envoyé CV+LM+relevé de notes des 2 dernières années à David Vanderhaeghe

Contexte

Dans le cadre d’un projet de recherche pour la création de nouveaux outils informatique pour l’animation, nous sommes à la recherche d’un·e stagiaire animateur 2D

Nous développons des outils de simulation informatique de l’apparence peintures animées. Ces outils permettent d’obtenir l’apparence des techniques traditionnelles, avec un contrôle artistique accru tout en diminuant le temps de production. Les premiers résultats sont disponible sur le site du projet

Objectif

L’objectif du stage est de produire une animation avec nos outils, de faire les retours sur l’utilisabilité et remonter les bugs.

Le scénario de l’animation à produire est libre, mais sera valider avec l’équipe.

Environnement de travail

Le/la stagiaire sera accueilli à l’IRIT, sur le campus de l’université Paul Sabatier Toulouse 3.

  • Encadrement scientifique : David Vanderhaeghe
  • Équipe technique : Nicolas Barroso, deux stagiaires dev. info.
  • Équipe artistique : Studio Les Affranchis

Profil recherché

De formation animation traditionnel 2D, sur papier ou sur outils informatique, vous avez la curiosité de tester les nouveaux outils et un esprit créatif (le scénario étant libre).

Vous avez idéalement quelques connaissance en animation 3D (avec blender par exemple)

Un bon coup de crayon voir de pinceau, avoir des expérience de graphisme et d’animation à la tablette.

Un bon relationnel est primordial pour échanger avec l’équipe de dev.

Formation possible: 2ème année DMA animation, BAC+3/4/5 en animation 2D, 3D …

Magic rebase and (re-) format

If you like clean coherent formatted code, you may already use something like clang-format and git hook to ensure format when commit

If you like clean history, you might use a lot of rebase.

Sometimes during conflit, format is lost, but it’s pita to fix it afterwards without introducing some commit out of the clean history

Update 2022-05-10

I have switch to pre-commit.ci to perform pre-commit hook and formating, applying the same principle, I run

git rebase --strategy-option=theirs -x 'git reset --soft HEAD~1 && git commit -C HEAD@{1}' origin/master 

Which reset and reapply commits, hence triggering pre-commit hook. Then conflict resolution is nearly the same, I use the following oneliner to fix all possible conflicts

git add -u && git commit -C HEAD@{1} && \
git rebase --continue          

Older version

I use run-clang-format script with rebase and exec. This will stop rebase if format is not respected

git rebase --exec "./run-clang-format.py -r -i \
--style file --extensions inl,cpp,hpp src/" \
new-base-branch

When it stops, you can examine the situation with

git status
git diff

Once everything looks good (in case of conflict, simply use remote, and reformat)

git add -u && \
git commit -m"fix format" && \
git rebase --continue

Then rebase -i again so you can squash/fix all “fix format” commits with their immediate ancestor.

TODO : explain a bit more

Turning crazy with sound

UPDATE: problem is still preset … still trying to find what is going on.

After a recent update on my debian workstation, I had spurious sound volume changes, only with line out, no matter my usb headset either plug in or out (but when I listen with the usb headset, there was no problem).

I did a few days of search, first is where to dig for a problem, then how to check pulse audio log, then how to check alsa, and acpi.

And the problem was … HARDWARE !

So the problem comes from spurious front jack headphone event as shown with the following logs. These plug/unplug event mess alsa and jack with volumes … maybe it can be fixed with some configuration to restore correct sound after unplug, but the problem is that I do not have front jack used at all.

headset

(I use the explanation here to have pulseaudio log, tldr:

systemctl --user stop pulseaudio.socket #since the socket relaunch pulseaudio all the time.
echo autospawn = no >> ~/.config/pulse/client.conf 
LANG=C pulseaudio -vvvv --log-time=1 > ~/pulseverbose.log 2>&1
$ cat pulseverbose.log  | grep Jack | grep plug
(6391.015|   6.180) D: [pulseaudio] module-alsa-card.c: Jack 'Front Headphone Jack' is now plugged in
(6391.036|   0.018) D: [pulseaudio] module-alsa-card.c: Jack 'Front Headphone Jack' is now unplugged
(6476.288|  67.655) D: [pulseaudio] module-alsa-card.c: Jack 'Front Headphone Jack' is now plugged in

$ sudo acpi_listen 
 jack/headphone HEADPHONE plug
 jack/headphone HEADPHONE unplug
 jack/headphone HEADPHONE plug
 jack/headphone HEADPHONE unplug

I tryied to plug/unplug an headset in the front jack, and the event do not coicinde … so I unplug the front jack from the motherboard, TADAA ! no more spurious event.

Next step is to check cable conductivity, and clean with contact cleaner, but nevermind, I do not use this jack anymore.

Take home message, sometimes events are related sometimes not … when dealing with computer events used to be linked (the update mess up a lot of things, because of gnome-shell update and incompatibility with some plugins), but this one was not, and it slow down a lot the resolution (since most of my net searches have gnome 3.38 in the key words, or debian update …) After a few days, I think of the problem differently, as how I can track what is going on rather than something is not correctly installed.

Internship proposal: Stroke clustering for stylized animation automatic in-betweening

Location : Laboratoire IRIT, STORM research team, Université Paul Sabatier – Toulouse

Advisor : David Vanderhaeghe, vdh@irit.fr, www.dlyr.fr, Amélie Fondevilla

Funding : ANR project Structures ANR-19-CE38-0009-01

Keywords : stroke-based rendering, painterly animation, example-based methods, computer graphics

Context.

Animation movies show great media of artistic expression (see Fig. [fig:ex]), allowing artists to convey powerful narrations, while not being limited to the existing range of shapes and motions. Unfortunately, they are significantly tedious and time consuming to produce. It is particularly the case for 2D animation composed of sets of marks, such as paint or drawings.

Standard stroke-based rendering methods can automatically produce stylized content made of marks such as paint strokes or hatching . They either focus on a specific style or technique to propose a fully automatic process, or allow to tweak style along larges sets of parameters , which may not be the more intuitive solution for an artist. They usually do not take into account style features related to motion, which is an important aspect of animation design .

Internship Project.

The high level goal of the project is to ease the creation of stroke based rendering animation, with the look and feel of hand made animation. One key question is how to capture user style and automatically create new frames of the animation. This kind of approach mixes an animated input (a 3D scene in our framework) with style information (digital painted frames in this proposal). The goal of the internship project is to analyze user created frames and generate intermediate frames in the same style. The first step is to define a metric to cluster strokes in a given frame. Theses clusters could be linked to an underlying 3D scene, which guides the animation. The second step is to create link the clusters extracted from two frames, and then provide a interpolation scheme to create in between frames.

Candidate’s profile.

Potential candidates for the thesis should have :

  • Master student in Computer Science, or equivalent.
  • Strong background in real time computer graphics, mathematics, and c++ programming.
  • Additional skills in some of the following topics would be appreciated: expressive rendering, user interface, numerical optimization.
  • Fluent french or english speaking.

Application.

Send your application to David Vanderhaeghe (vdh@irit.fr) with

  • a complete CV,
  • high education grades report
  • reference name/email address

About STORM-IRIT

STORM is a research team part of the IRIT Laboratory (UMR CNRS 5505). We conduct research on computer graphics, including geometric modeling, 3D animation and rendering. See our webpage for more details about recent research https://www.irit.fr/STORM/site/. The PhD will take place on the Rangueil campus, in the IRIT building, south of Toulouse, nearby all facilities and ground public transport to reach the city.

Git: cleaning a branch before a PR, and merge back the clean history to the messy WIP branch

Sometimes, I have a branch with a new feature I work on, call it Feature_mess.

At some point I want to show this feature to colleagues, so I want to have a clean history, and remove some WIP stuff

To this end :

git checkout Feature_mess
git checkout -b Feature_clean
git rebase -i Feature_clean master (or whatever base you want)

Cleanup history here, remove crappy things, merge a lot of commits, rewrite history !
Now to benefit from this clean history as a base of Feature_mess

git branch temp Feature_mess
git checkout temp
git reset --soft Feature_clean

Now you are in the state of mess, with the history of cleanup, you can check diff and then

git commit

Et voilà !

More information on git reset here : https://gist.github.com/tnguyen14/0827ae6eefdff39e452b