Ú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.
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.
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).
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á.
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.
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).
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.
Odevzdat do: 22. 5. 2019. Na poslední přednášce pak promítnu několik nejpovedenějších výsledků.
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.
Visual Studio projekt: 062animation-script nebo 062animation
Modifikujte a odevzdejte soubor: RayTracingAnim.cs
Přepište své jméno ve funkci InitializeParams()!
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)