Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 29. listopad 2017, 19:41:32 Předmět: GLSL - tabulka vs výpočet |
|
|
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 _________________ Perry.cz |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 30. listopad 2017, 08:37:34 Předmět: |
|
|
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 |
|
|
Peto
Založen: 01. 08. 2007 Příspěvky: 206 Bydliště: Košice
|
Zaslal: 30. listopad 2017, 11:18:09 Předmět: |
|
|
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 Ale ako vravel Semo zavisi od velmi vela veci.. takze istotu budes mat az po teste.. _________________ Code or die!
|
|
Návrat nahoru |
|
|
pcmaster
Založen: 28. 07. 2007 Příspěvky: 1824
|
Zaslal: 30. listopad 2017, 15:22:22 Předmět: |
|
|
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?
https://www.wolframalpha.com/input/?i=atan%28pow%28e,+x%29%29,+-pi%3Cx%3Cpi _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
|
micky
Založen: 28. 02. 2008 Příspěvky: 348 Bydliště: Plzeň, Praha
|
|
Návrat nahoru |
|
|
megaton
Založen: 19. 05. 2016 Příspěvky: 17
|
Zaslal: 30. listopad 2017, 16:06:58 Předmět: |
|
|
OT: toto je super optimalizacia
abs alternative (only one mul !)
kód: |
float abs(float x)
{
return sqrt(x*x);
} |
|
|
Návrat nahoru |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 30. listopad 2017, 16:36:00 Předmět: |
|
|
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ší _________________ Perry.cz |
|
Návrat nahoru |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 30. listopad 2017, 16:47:05 Předmět: |
|
|
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 |
|
|
|