## Poznámky k implementaci

### 5 roomka

- Portál který vidím skrz jiný portál se NEVYPNE, ale vidí scénu z nějakého uplně pošahaného
venkovního úhlu. Protože reálně jsem od něj mega daleko, takže portálová kamera je taky daleko.

### Island level

- Dolní collider jsem musel hodně zvětšit aby skrz něj hráč neproletěl během 1 physics framu
- Horní jsem musel trochu potočit, jinak se hráč objevil zrcadlově??
  - Zapnout/Vypnout tadyto *proporční* teleportování? V MC se člověk objeví asi uprostřed nether
	portálu i když je kde chce
- Kdybych chtěl mesh do dveří (oblouk), možná by bylo jednodušší udělat masku než spešl mesh. 
  Viewport je čtveratý tak jako tak.

### Semafor

3 místnosti do čtverce

- Zkusil jsem vymodelovat vlastní mesh v blenderu. Moc to nefunguje, Godot je asi zmatený z toho
  že on má Y-up a Blender používá Z-up. V portal repu je k tomu poznámka ale nepochopil jsem to asi.
  - Divně se na ten mesh pak projektuje ta textura kamery??
- Možná by stálo za to udělat procedurální mesh. Nejběžnější tvar portálu bude asi obdélník
- `OnScreenNotifier3D` nemůže specifikovat _která_ kamera ten objekt vidí, takže je asi k ničemu.
  Portály se vidí různě navzájem, s tolika kamerama ve scéně je to nepředvídatelné trochu.
  - **I když** možná by to šlo pofejkovat s culling vrstvama. Vzdáváme se tím rekurzivních portálů, ale kdyby portály **ne**renderovaly ostatní portály, tak by se daly vypnout v momentě kdy nejsou vidět (stonks?)
- **Fejkování světel** (OmniLight) by možná šlo!!! S rendering layerama bys nastavil aby některé světla byly vidět JEN skrz portály a NE tou kamerou co má hráč na sobě. 
  - Tohle platí hlavně u ~~free-standing~~ portálů na které jde koukat z obou stran. *Bylo by divné kdyby byl zezadu portálu ve vzduchu light source jenom proto, že na druhé straně portálu (bůh ví kde) takový source někde je*
  - Free-standing portál neni uplně dobrý příklad, protože by to světlo mělo házet _výseč_ ven. To ničím fajné, to jsme zpátky u raytracingu. Leda by to člověk oblbnul nějakým shadow meshem nebo něco.. hm. Velmi specifické. Ale u těch dveří jako v semaforovém levelu by to fungovalo asi v pohodě, protože kolem futer je stěna.
	- Spotlight..?

### Gizmos

- Kreslím kubickou bezierku, která spojuje portál s exit portálem, ale nevypadá to nic moc. Je to blbě vidět a hloubka se dost ztrácí.
  - Možná by bylo lepší ten exit portal _highlightnout_ podobně jak je zrovna vybraný node - double line gizmo
- TODO: Handly na procedurální mesh. Inspirace v godotím CollisionShape

### Procedural mesh

Momentálně procedural mesh generuju helper nodem. Tohle je ideální kandidát na _gizmo handles_ podobně jak collision shape

- Normály jsou pass. Mám jenom 8 vertexů, takže to bude dycky vypadat blbě. Ale portály jsou stejně vždycky unshaded.
  - **Zmínit v DP!** Docela dobrý sell, obhajoba rozhodnutí.
- *UV coords:* Když se na portál podívám přímo zepředu (ortogonálně), tak ten indent není vubec vidět. Nejsem si jistý jestli to je k něčemu.. ten portálový mesh který jsem vzal z _simple portal sytem_ ani žádné UV coodinates nemá. Procedural mesh funguje hezky ✅ 
  - Možná by se to hodilo kdyby měl portál "inactive" texturu... ale to se dá obejít placatým meshem narvaným před něj.. a neřešíš prohlubeň. Asi undefined behavior tady :D nechám na vývojářích
  - Na to kolik jsem s tím teď zabil času, tak tohle je asi nanic. Prohlubeň je extrémně důležitá featura.

![portal-uv-coordinates](assets/portal-uv-coordinates.png)

- **Stíny** - shadow mesh tam můžu a nemusím plácnout (stejný jako hlavní). Další věc je že stíny by asi měly být na OFF a nebo DOUBLE_SIDED. Asi to nechám na uživateli.. to s meshem nesouvisí nutně.

### Texture portal mask :x:

Mám v plánu udělat texture masku pro tvarování protálů. S házením stínů to bude průser. V tomhle je přístup s _tvarem meshe_ lepší. Měl bych nakódit generování vícero tvarů...?

:exclamation: Tohle asi nebude fungovat kvůli té prohlubni

- Kdybys měl oblouk nahoře, tak nemůžeš jenom tak clipnout obdélníkový portál. Kdyby byl plochý, tak jo. Ale takhle bude ten okraj nahoře jakoby zabořený a nebude to pěkné (asi). Zvlášť v rožkách.

![round-portal-frame-square-portal-mesh](assets/round-portal-frame-square-portal-mesh.png)

:question: Tohle asi řeší tenký box s **culling- off** jak měl Sebastian ve svém Unity videu. Akorát to žere trochu renderingu.. ale v porovnání s X kamerama navíc je to asi fuk.

> BoxMesh3D mi nefunguje na hned. Ugh, nejsem si jistý proč.. ale mám dojem že ten chlapík co vyrobil ty portály by to asi zkusil. Prohlubeň možná dává smysl.

> Dal by se udělat celkem jednoduchý algoritmus co by generoval mesh "s prohlubní" pro jakýkoliv nákres zepředu. Obdélník je nejjednodušší, ale udělat oblouček by asi nebyl problém.
>
> Podobně jak se dá "kreslit" s CSG polygonem. Ale to by byl teda komplikovaný editor widget. Ty oblouky bysme asi chtěli hladké - to vypadá na něco na styl Curve editoru... ugh
>
> ![csg-polygon](assets/csg-polygon.png)
>
> [Cyclops Level Editor](https://github.com/blackears/cyclopsLevelBuilder/blob/master/doc/index.md#display-mode)

**Custom Mesh subclassa?**

- Custom mesh subclassa je trochu divná věc. Když to všechno nastaví jeden editorový Node tak to bude asi lepší. Custom mesh se mi přegenerovává při každém spuštění, ale já chci aby se prostě "zapekl" a uložil a nazdar bazar...

## Detekce teleportu

> Marek Zouhar: navrhuje predikovat jestli hráč projde portálem příští frame. Tohle by mohlo řešit
> clipping. Protože já vlastně toho hráče _doopravdy_ teleportuju až když je _za_ portálem. 
>
> V tu chvilku už je pozdě!! A pak musím mít promáčklý mesh.
>
> S tímhle bych mohl mít prostě _plane mesh_. 

> Potenciálně 2 plejny těsně za sebou abych předešel clippingu?
