Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 11. září 2014, 11:05:48 Předmět: PRNG |
|
|
Pokud by se někomu hodil rychlý, jednoduchý a kvalitní PRNG (prošel mi dieharder testy), tady je (samozřejmě public domain):
Abych nezapomněl: ULong = uint64_t a Byte = uint8_t. Od C++11 lze bez warningů použít ull suffix u konstant.
kód: |
struct PRNG
{
static const ULong C0 = 0xc5462216u | ((ULong)0xcf14f4ebu<<32);
static const ULong C1 = 0x75ecfc58u | ((ULong)0x9576080cu<<32);
ULong keys[2]; // IV
static ULong Rotate( ULong v, Byte s ) {
return (v >> s) | (v << (64-s));
}
ULong Next()
{
ULong tmp = keys[0];
keys[0] += Rotate( keys[1] ^ C0, 1 );
return keys[1] += Rotate( tmp ^ C1, 9 );
}
void Seed( ULong val )
{
keys[0] = keys[1] = val;
for ( int i=0; i<64; i++ ) {
Next();
}
}
};
|
Co se týká periody, tak vím určitě, že je vyšší než 2^38, ale reálně odhaduji kolem 2^60 až 2^62. |
|
Návrat nahoru |
|
|
frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
|
Návrat nahoru |
|
|
DespeRadoX
Založen: 28. 07. 2007 Příspěvky: 520
|
|
Návrat nahoru |
|
|
pcmaster
Založen: 28. 07. 2007 Příspěvky: 1824
|
Zaslal: 12. září 2014, 11:01:50 Předmět: |
|
|
Wow, epic, ako si na to prisiel? _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 13. září 2014, 11:49:30 Předmět: |
|
|
pcmaster napsal: |
Wow, epic, ako si na to prisiel? |
Sel jsem na to vedecky, takze metoda pokus-omyl:)
C0 a C1 jsou z dev/urandom,
Rotace jsem videl v Jenkinsovych kiss prng.
Na x64 to prekladace umi prevest na ror insn.
Nakonec zbyvalo odstranit pipeline dependency,
Proto ta temporary (1.6x rychlejsi)
A nakonec jsem chtel generator, ktery s nulovym IV nebude
produkovat sekvenci nul. |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 15. září 2014, 08:22:22 Předmět: |
|
|
Paráda, to se může hodit. A jak že si to testoval? Neznám "dieharder" testy.
Snad nebude vadit, když hodím jeden link, co mi poslal bývalý kolega (Guru na 3D enginy). Jsou tam rychlý GPU noisy bez textur: http://briansharpe.wordpress.com/. Rovněž užitečné. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 15. září 2014, 12:05:06 Předmět: |
|
|
No pekne, hadam ze typek to pouziva na proceduralne
gen. teren v realnem case. Nedavno jsem videl moc pekne
4k nebo 8k intro, ale na nazev si nevzpomenu.
A simplex noise je koukam neco noveho od Perlina?
Jinak dieharder je takova sada testu, melo by se to dat
nainstalovat v ramci asi jakehokoli linuxoveho distra.
Pak uz jenom sypes na stdout pseudonah. cisla a doufas,
ze to projde |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 15. září 2014, 12:09:18 Předmět: |
|
|
To sem neznal, díky. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 22. prosinec 2014, 14:17:39 Předmět: |
|
|
Tak jsem ho taky použil :-).
(zjedonušování geometrie pomocí Multiple Choice algoritmu) _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 22. prosinec 2014, 23:10:32 Předmět: |
|
|
Super, jsem rád, že se to hodí
Kdysi jsem implementoval melaxův polychop, který je taky založený na edge collapse, nicméně používá jednodušší cost funkci (resp. počítání chyby).
Řešíš tam nějak i atributy vertexů (uv švy, ...)? Ten paper vypadá v pohodě, líbí se mi relativně jednoduché řešení. Určitě se časem k něčemu takovému zase dostanu.
Rád bych pak zkusil něco lepšího, než jenom posouvat v1=>v2 nebo v2=>v1. |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 23. prosinec 2014, 10:58:41 Předmět: |
|
|
Trochu jsme od PRNG odbočili, ale když už o tom mluvíš, tak tu udělám takové simplifikační okénko :-).
Řeším i atributy vertexů. Respektive, dneska je budu řešit víc :-). Základem jsou unikátní pozice (zweldovaný) a k tomu více "vrstev" indexů pro další atributy. Neni to tak svazující a zašmodrchaný, jako duplicitní vertexy s různýma atributama, který se hodí spíš pro rendering. Po zjednodušování se zase vytvoří kombinace. Jinými slovy, je rychlejší si ten mesh přesypat do vhodných struktur, než se snažit dolepit to na nějaký obecný mesh pro rendering engine.
Pokud už jsi měl implementovaný polychop, tak jsi měl funkční collapse edge funkci. Pak je dodělání Quadric Error Metrics záležitostí max. několika hodin (pro snazší pochopení, výcuc). QEM fungujou až pohádkově dobře. Hodně mě překvapily jednoduchostí a robustností. Zároveň se pomocí toho dá jednim násobením matice vypočíst optimální bod, do kterého má edge zkolapsovat. Potíž ale je, najít co nejrychlejc edge, který dává nejmenší chybu geometrie. Na to se používá buď brutální síla nebo heap (jak píšou v tom QEM paperu) nebo zmíněný Multiple Choice algoritmus, na který používám tvůj PRNG :-).
A kdyby ses do toho pouštěl, vyhni se Half-Edge struktuře, kterou všude prosazujou. Je to dobrý tak na Stanfordského králíka. Hrozný opruz. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 23. prosinec 2014, 15:44:51 Předmět: |
|
|
Díky za linky a vysvětlení, zní to dobře. Myslím, že je jedno, že to je OT, protože to je zajímavé a určitě se to může hodit i ostatním.
Takže jestli to dobře chápu, pro každý vertex spočítáš obecné roviny sousedních trojúhelníků a z nich vytvoříš Kp matici a ty sečteš. Error se pak počítá v*Kp*v [resp. (v*Kp).v?] (čím menší, tím lepší?), novou pozici získáš invertováním Kp, kde poslední řádek zaměníš za e4 a collapse error je jednoduše Kp0 + Kp1 aplikovaná na novou pozici?
Ještě drobnost, co když matice nejde invertovat? Pak se bere jako target třeba jeden z koncových?
Vypadá to dost dobře a jestli to chápu správně, tak ti stačí ukládat Kp pro každý vertex plus asi mít bokem dynamickou strukturu hran, kterou upravíš a pak pomocí toho MCA vybereš náhodné kandidáty.
Btw. nechtěl bys sem postnout nějaké obrázky s výsledky? Celkem by mě to zajímalo |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 23. prosinec 2014, 16:22:34 Předmět: |
|
|
Jo, je to přibližně tak, jak píšeš, jen při výpočtu toho collapse targetu ta matice neni jen se změněným posledním řádkem, ale některé prvky se torchu liší (koukni pozorně na ten paper). Ale to je fakt drobnost, já to taky přehlíd a fungovalo to i tak. Pokud matice nejde invertovat, tak používám jako target střed hrany, ale posloužil by i koncový bod.
Co je ale fakt pecka, je ochrana otevřených hran (což můžou bejt i hrany, které mají trojúhelníky s různým materiálem). Takové hraně zvýšíš cenu velice dobře tím, že vytvoříš rovinu, která prochází tou hranou a je kolmá na připojený trojúhelník. Z ní pak uděláš error matici (Kp), kterou přičteš k erroru vertexů hrany.
A ještě něco. Vůbec nelituju vlastní implementace (a snad nebudu litovat časem :-) ). Jsou různý knihovny na meshe a hodně jsem to zvažoval, ale například tyto data jsou tak specifický, že je prostě dobře mít nad tim 100% kontrolu (dají se dělat různý modifikace error funkce a podobně).
Obrázků moc nemám, ale tady je snad něco vidět. Neni to bůhvíjaký hipoly, snad časem něco bude dalšího.
_________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 23. prosinec 2014, 17:15:30 Předmět: |
|
|
No, musím říct, že to vypadá velmi pěkně, obzvlášť ten tvůj nápad s penalizací mi přijde velmi elegantní. Na ten paper ještě kouknu, díky.
citace: |
A ještě něco. Vůbec nelituju vlastní implementace (a snad nebudu litovat časem ). Jsou různý knihovny na meshe a hodně jsem to zvažoval, ale například tyto data jsou tak specifický, že je prostě dobře mít nad tim 100% kontrolu (dají se dělat různý modifikace error funkce a podobně).
|
Já mám taky radši vlastní implementaci. Je to sice relativně víc práce, ale zase se to pak líp integruje a můžeš si to mnohem snadněji přižpůsobit svým potřebám. A hlavně pak nevisíš na ničem externím (co má třeba x dalších závislostí). Z mého pohledu mnohem větší volnost.
(A opravuješ své bugy a nemusíš se bát, že to někdo vylepší tak, že to rozbije |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 26. prosinec 2014, 20:40:35 Předmět: |
|
|
...s těma hranama to neni uplně originální nápad. Sice mě to tuším napadlo, ale taky jsem to četl v nějakým paperu. No, hlavně že to funguje a dá se s tim nějak experimentovat. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
|