.[ ČeskéHry.cz ].
PRNG

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



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

PříspěvekZaslal: 11. září 2014, 11:05:48    Předmět: PRNG Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



Založen: 28. 07. 2007
Příspěvky: 1558

PříspěvekZaslal: 11. září 2014, 12:51:03    Předmět: Odpovědět s citátem

Nice!
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
DespeRadoX



Založen: 28. 07. 2007
Příspěvky: 520

PříspěvekZaslal: 11. září 2014, 20:33:10    Předmět: Odpovědět s citátem

parada, thx.
_________________
http://www.touchgames.eu/
http://playito.com
TW: @Despo100
Space Merchants Online ...zruseny, pracujem na mobilnej verzii space merchantu
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1824

PříspěvekZaslal: 12. září 2014, 11:01:50    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
mar



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

PříspěvekZaslal: 13. září 2014, 11:49:30    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



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

PříspěvekZaslal: 15. září 2014, 08:22:22    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
mar



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

PříspěvekZaslal: 15. září 2014, 12:05:06    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



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

PříspěvekZaslal: 15. září 2014, 12:09:18    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



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

PříspěvekZaslal: 22. prosinec 2014, 14:17:39    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
mar



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

PříspěvekZaslal: 22. prosinec 2014, 23:10:32    Předmět: Odpovědět s citátem

Super, jsem rád, že se to hodí Smile
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
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



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

PříspěvekZaslal: 23. prosinec 2014, 10:58:41    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
mar



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

PříspěvekZaslal: 23. prosinec 2014, 15:44:51    Předmět: Odpovědět s citátem

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 Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



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

PříspěvekZaslal: 23. prosinec 2014, 16:22:34    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
mar



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

PříspěvekZaslal: 23. prosinec 2014, 17:15:30    Předmět: Odpovědět s citátem

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 Smile ). 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 Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



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

PříspěvekZaslal: 26. prosinec 2014, 20:40:35    Předmět: Odpovědět s citátem

...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
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 -> Obecné Č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