Úloha 062: Animace RT scény s panoramatickou kamerou

Úkolem je implementovat animaci scény do paprskového zobrazovače (IRayScene). Ve scéně musíte použít panoramatickou kameru implementovanou v úloze 022. I scéna se může měnit v čase jakýmkoli vhodným způsobem, např. implementací translačních a rotačních pohybů jednotlivých částí, animací textury, volnými pády či vrhy, odrážejícími se tělesy, ..
Ideální by bylo zahrnout animační skript do skriptu definice scény – viz projekt 062animation-script.

Animace kamery - inspirace

Jednoduchá animovaná kamera již je součástí projektu 062animation-script (062animation). Můžete se tam podívat, jak se používá interface ITimeDependent (pro obecnou závislost objektu na čase). Celá RT scéna je uzavřena do objektu IRayScene, v tomto konkrétním případě je již class AnimatedScene : AnimatedRayScene, tj. nastavování času pro celou scénu je tam již implementováno.

Interface ITimeDependent

Nastavuje se přes něj aktuální čas libovolnému objektu, který umí být závislý na čase. Pozor: protože se výpočty paralelizují, je potřeba vždy dodržovat re-entranci vašeho kódu. Standardně se to zajišťuje tak, že si každé vlákno naklonuje svou vlastní kopii scény, pokud je ta scéna časově závislá (interface ITimeDependent). Detaily viz AnimatedRayScene.Clone() - každý objekt implementující interface ITimeDependent se musí umět naklonovat (tzv. "deep-copy" pro časově závislá data).

Náměty

Uzel stromu scény, který umí v závislosti na čase posunovat nebo otáčet přivěšeným podstromem, zvolení vhodné interpolační křivky pro hladce vypadající trajektorii, .. Pro skriptovanou translaci (tj. ne fyzikálně věrné vrhy apod.) bych doporučil některou z Hermitovských interpolačních křivek (např. Catmull-Rom spline), pro orientaci kvaterniony (obojí si můžete přečíst v prezentaci hw-08-math.en.pdf).
Implementace: některé křivky jsou mj. v jazyce C implementovány v repository ogl, stejně tak kvaterniony. Kvaterniony máme též v knihovně OpenTK, která se již v našich projektech používá.

Co modifikovat

Ve zdrojovém souboru RayTracingAnim.cs implementujte Vaši animovanou 360°/180° kameru. Definici scény můžete buď editovat přímo ve třídě class AnimatedScene nebo použijte CSscript definující scénu (inspirace viz skript AniomatedScene.cs).
Navrhněte nějakou zajímavou animaci, která by váš kód, zejména velký zorný úhel Vaší kamery, dobře demonstrovala.

Co odevzdat

Musíte poslat zdrojový soubor RayTracingAnim.cs. Deklarujte, pro jaký časový interval máte data animace navržena. U této úlohy je třeba, abyste sami vyrobili panoramatické video a uploadnuli ho např. na YouTube, Vimeo, apod. Odkaz na vystavený video-soubor pošlete spolu se zdrojovým souborem.

pokud použijete CS-script k definici scény (viz projekt 062animation-script), přiložte skript jako druhý soubor. Formát skriptu: viz vestavěné definice v adresáři data/rtscenes/ (zejména the data/rtscenes/AnimatedScene.cs – toto je animovaná verze originální statické scény Two spheres a ukazuje animační prostředky spolu s načítáním dalšího parametru /index lomu 'n'/ z textového pole params formuláře).

Výroba video-souboru

Pro výrobu videa z jednotlivých snímků použijte tento návod. Binárku ffmpeg pro Windows si můžete stáhnout např. zde. Příklad BAT souboru pro zakódování AVI souboru najdete přímo v repository (encode.bat).

Panoramatické video - viz např. tento YouTube návod nebo obecný návod od Google.

Animations ukázky animace kamerou

Termín

Odevzdat do: 22. 5. 2019. Na poslední přednášce pak promítnu několik nejpovedenějších výsledků.

Body

Základ: 20 bodů (animace panoramatické kamery, vyrobený a zveřejněný video-soubor),
až 8 bonusových bodů za animaci scény (pohybující-se objekty ve scéně),
další bonus za zajímavé nápady, ozvučení, apod.
soutěž: po termínu odevzdání vystavím všechny výsledky na webu a budete moci hlasovat pro videa, která se vám budou líbit. Nejlepší autoři budou oceněni dalšími body navíc.

Projekt

Visual Studio projekt: 062animation-script nebo 062animation

Zdrojový soubor

Modifikujte a odevzdejte soubor: RayTracingAnim.cs
Přepište své jméno ve funkci InitializeParams()!

Soutěž

Hlasujte na stránce soutěže, do 2. 6. 2019.


Copyright (C) 2012-2019 J.Pelikán, last change: 2020-12-08 00:57:30 +0100 (Tue, 08 Dec 2020)