.[ ČeskéHry.cz ].
GLSL - tabulka vs výpočet

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
perry



Založen: 28. 07. 2009
Příspěvky: 850

PříspěvekZaslal: 29. listopad 2017, 19:41:32    Předmět: GLSL - tabulka vs výpočet Odpovědět s citátem

Mám shader v mobilní aplikaci, kde počítám pro každý pixel

kód:

atan(pow(E, x))
x = <-pi, pi>


Chtěl jsem udělat lookup tabulku a předpočítat si hodnoty (nepotřebuji 100% přesné řešení). Nicméně abych měl určitou přesnost, vychází mi z testů na CPU, že potřebuji alespoň 6400 předpočítaných hodnot. To bohužel nedostanu do 1D textury.

Dvě otázky:
a) Vyplatí se to vůbec...
b) Jak vyřešit tu velikost - udělat 2D texturu 80x80 by bylo OK, ale pak přijdu o linerání interpolaci, kterou potřebuji. Můžu udělat 4 textury 1600x1 a "ifovat", ale nevím zda to zase nezabije výkon.

Samozřejmě, ideální by bylo to proměřit, ale než zabiju půl dne implementací měření, tak se raději nejdříve ptám Smile
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1363
Bydliště: Telč

PříspěvekZaslal: 30. listopad 2017, 08:37:34    Předmět: Odpovědět s citátem

Hlavní otázka by spíš měla být, jestli to potřebuješ řešit. Máš problém s výkonem toho shaderu? Nebo budeš tu funkci nahrazovat nějakou složitější?

Jinak bych takhle od boku střelil, že lookup do textury bude v tomto případě spíš pomalejší. Ono bude asi záležet, jak do tý textury budeš přistupovat. Jestli několikrát na náhodný místa, nebo hodněkrát za sebou. Kvůli cache. Ale tady se pohybuju na tenkým ledě. Nevím, jak přesně se chová moderní GPU - navíc na mobilu (tam to chceš, ne?). V dobách Mafie II třeba zpomalovalo, když jsem reflexní texturu na silnici samploval vícekrát po ose Y (vertikální skoro-blur).

Ohledně lineární interpolace: tu přece uděláš snadno sám i nad "nearest filtrovanou" texturou :-).
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Peto



Založen: 01. 08. 2007
Příspěvky: 195
Bydliště: Košice

PříspěvekZaslal: 30. listopad 2017, 11:18:09    Předmět: Odpovědět s citátem

To meranie bude asi jedine vychodisko aby si si bol isty.. kazdopadne, naprv si zmeraj kolko ta funkcia zerie.. teda uprav shader tak ze tu funkciu das prec a zmeraj aky to je rozdiel (aby si si bol isty ze je to tvoj problem).. ak velky tak podla mna pol den na vyskusanie textury s prepocitanymi hodnotami by malo byt OK Smile Ale ako vravel Semo zavisi od velmi vela veci.. takze istotu budes mat az po teste..
_________________
Code or die!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1684
Bydliště: Zvolen.SK-Praha.CZ

PříspěvekZaslal: 30. listopad 2017, 15:22:22    Předmět: Odpovědět s citátem

Clovece, atan(pow(e, x)) = atan(e^x)=atan(2.71828^x) pre x=[-3.14,3.14] je "skoro linearna" funkcia, nestacila by ti na to polynomialna aproximacia? Smile

https://www.wolframalpha.com/input/?i=atan%28pow%28e,+x%29%29,+-pi%3Cx%3Cpi
_________________
http://pcmaster.koinbahd.com
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.

Call of Santa: Modern Giftware - http://callofsanta.com/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
micky



Založen: 28. 02. 2008
Příspěvky: 311
Bydliště: Plzeň, Praha

PříspěvekZaslal: 30. listopad 2017, 15:33:22    Předmět: Odpovědět s citátem

To je fakt. Smile

http://www.wolframalpha.com/input/?i=%CF%80%2F4+%2B+x%2F2+-+x%5E3%2F12+%2B+x%5E5%2F48-+(61+x%5E7)%2F10080;+atan(pow(e,+x))+from+-pi+to+%2Bpi
_________________
http://www.bluepulsar.cz/
https://twitter.com/bluepulsargames/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
megaton



Založen: 19. 05. 2016
Příspěvky: 13

PříspěvekZaslal: 30. listopad 2017, 16:06:58    Předmět: Odpovědět s citátem

OT: toto je super optimalizacia Laughing

abs alternative (only one mul !)
kód:
float abs(float x)
{
     return sqrt(x*x);
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 850

PříspěvekZaslal: 30. listopad 2017, 16:36:00    Předmět: Odpovědět s citátem

Jj.. pojede to na mobilu a hledám místa kde se něco počítá abych optimalizoval, protože to je pomalé... a jiné věci moc nejdou.

Nahradit polynomiálně asi nejde, počítá to mapovou Mercator projekci, takže potřebuji přesnost i u těch krajů. To už jsem si právě testoval, že potřebuji cca. těch 6400 vzorků (s lineárním krokem) abych měl jakž takž výsledek.

Ručně linerání interpolaci můžu udělat v pohodě... bral jsem že pro texture look-up by měla být asi ta HW rychlejší Smile
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
mar



Založen: 16. 06. 2012
Příspěvky: 474

PříspěvekZaslal: 30. listopad 2017, 16:47:05    Předmět: Odpovědět s citátem

perry napsal:
Nahradit polynomiálně asi nejde, počítá to mapovou Mercator projekci, takže potřebuji přesnost i u těch krajů.

A na to ti stačí floaty? To si asi nehraješ na centimentry co se týká přesnosti.

Takže co natesselovat geometrii (nevím, co přesně kreslíš) a počítat to per vertex?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna