|
dev.gamez.lv Latvian Game Developers Community
|
View previous topic :: View next topic |
Author |
Message |
Storm
Joined: 11 Apr 2006 Posts: 742
|
Posted: Tue Oct 23, 2007 8:55 pm Post subject: |
|
zini taadu lietu ka HLSL nav taadas f-jas "rand()" ? |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Tue Oct 23, 2007 8:59 pm Post subject: |
|
uzreiz būtu teicis!
vispār ir redzēti daudz sources vienkāršiem random skaitļiem neatkarīgi no prog. valodas!
tikai uzgooglē
http://neverfriday.com/blog/?p=14
te viens, pat 5 min. nepagāja meklējot _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle
Last edited by snake5 on Tue Oct 23, 2007 9:05 pm; edited 1 time in total |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Tue Oct 23, 2007 9:07 pm Post subject: |
|
bubu wrote: | snake5: rand() nav nekāds noise. Tas ir pseido-random skaitļu ģenerētājs. Pie tam diezgan slikts - tam ir mazs periods. |
nu ja tā iegūto vērtību pieskaita heightmapes kāda punkta vērtībai, iegūst vajadzīgo efektu!
btw, labu noise uz HLSL nebūs tik viegli dabūt.. _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Tue Oct 23, 2007 9:12 pm Post subject: |
|
snake5 wrote: | nu ja tā iegūto vērtību pieskaita heightmapes kāda punkta vērtībai, iegūst vajadzīgo efektu! |
Iegūsi nevis efektu, bet gan pilnīgu defektu - rezultāts izskatīsies pēc nekā. Apmēram šādi te: http://www.squaregear.net/gimptips/worn04.png
Quote: | btw, labu noise uz HLSL nebūs tik viegli dabūt.. |
Uz ko saderam, ka ir gan to dabūt, pie tam ļoti viegli? |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Tue Oct 23, 2007 10:26 pm Post subject: |
|
nu tas efekts/defekts ir atkarīgs no šīm lietām:
1. kāds ir skaitļu intervāls
2. ar kādām atstarpēm skaita klāt randomos skaitļus (ja starpā interpolē)
un vispār, tā kā tajā bildē tas nevar izskatīties, ja vien nav ņemts pilnīgi tukšs terrains (melns heightmaps) un randomie skaitļi robežoti no 0 līdz 255 un netiek izmantots blurs! _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Tue Oct 23, 2007 10:38 pm Post subject: |
|
Nu redzi - pats nonāci pie secinājuma, ka ar pliku vien rand() nepietiks. Ir vajadzīgas vēl citas lietas un metodes, ar kuru nonākt pie vajadzīgā random terraina. Un tieši to jau Storm arī prasīja - kā to panākt, kādā veidā, nevis kādu C API funkciju lietot!
Tikpat labi atbilde uz viņa jautājumu varēja būt - uzprogrammējot. Jo uzprogrammēt var visu. |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Tue Oct 23, 2007 10:50 pm Post subject: |
|
bubu wrote: | Nu redzi - pats nonāci pie secinājuma, ka ar pliku vien rand() nepietiks. Ir vajadzīgas vēl citas lietas un metodes, ar kuru nonākt pie vajadzīgā random terraina. Un tieši to jau Storm arī prasīja - kā to panākt, kādā veidā, nevis kādu C API funkciju lietot!
Tikpat labi atbilde uz viņa jautājumu varēja būt - uzprogrammējot. Jo uzprogrammēt var visu. | nu ne visu... bet tas lai paliek citam offtopikam
bet es pēctam teicu, ka googlē var atrast kodu, kurš randomā ģenerē skaitļus! pietam vienkāršu kodu! vispār šādā gadījumā varētu pat izmantot ciparu limitus - veco random skaitli pareizini ar kādu lielu, tad ar mod dabū kādu mazu! bet, esmu ievērojis, ka, ja pārsniedz ciparu limitu, kautvai ar parastu loopu, iegūst tiešām randomus skaitļus _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Wed Oct 24, 2007 12:25 am Post subject: |
|
snake5 wrote: | veco random skaitli pareizini ar kādu lielu, tad ar mod dabū kādu mazu! bet, esmu ievērojis, ka, ja pārsniedz ciparu limitu, kautvai ar parastu loopu, iegūst tiešām randomus skaitļus ;) |
Atkal tu offtopikā brauc, bet nu atbildēšu - tādā veidā tu iegūsi ne pārāk kvalitatīvu pseido-random skaitļu ģenerātāju. Skaitļi var gadīties, ka nebūs visai randoma un sāks atkārtoties. Ir jau labu laiku atpakaļ gudri cilvēki to pierādījuši un parādījuši labākus pseido-random ģeneratorus. Palasi kautvai vikipēdiju par šo tēmu: http://en.wikipedia.org/wiki/Linear_congruential_generator |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Wed Oct 24, 2007 10:09 am Post subject: |
|
tici man, random skaitļus ir vēl vieglāk ģenerēt, nekā tu domā: http://yy.lv/download.php?f=76054 _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Wed Oct 24, 2007 10:50 am Post subject: |
|
Tas, ka cilvēkam skaitļi izskatās pietiekoši "randomiski" neko vēl nenozīmē. Galvenais kā tie izskatās datoram - binārā formā. Jo ne jau cilvēks operēs ar šiem skaitļiem, bet gan dators.
Papētīju tavus "random" skaitļus. Mani novērojumi ir, ka tie ir ļoti slikti, jo:
1) visi ir nepāra skaitļi - 0-tais bits vienmēr ir 0. Tāpēc tas nederēs boolean random vērtības ģenerēšainai (formā - get_random()%2 == 0).
2) Ir bezjēdzīgi reizināt 16-bitu skaitli ar skaitli, kurā ir vairāk kā 16-bitu. Jo (x*y)%n = (x%n) * (y%n). Tātad random_number*74354351 = (random_number%65536) * 36527.
3) Ja ģenerē šos skaitļus visu laiku nevis tikai 100 reizes, tad var pamanīt, ka pēc 4097 reizēm skaitļi sāks atkārtoties!! T.i. Code: | for (int i=0; i<4097; i++) { get_random(); } std::cout << get_random() << std::endl; | Izvadīs skaitli 1. Nākamais izsaukums izvadītu 36527, u.t.t. Tātad šī "random" ģeneratora periods ir tikai 4097. No 65536 skaitļiem viņš var uzģenerēt tikai 4097 skaitļus un tas ir ļoti maz! Tikai 4097*100/65536 = 6.3%. Seši procenti!! Ja tu piemēram savā spēlē tu ļaunos pretiniekus liktu random pozīcijā ar koordinātēm no šī randoma, tad viņi visi koncentrētos tikai noteiktās vietās - tajos sešos procentos. Visās pārējās vietās viņi nekad nenostātos
4) Šajos 4097 skaitļos vieninieku bitu sadalījums ir ar dažām problēmām (kā jau varēja redzēt 1-punktā):
Code: | [4097, 2048, 2048, 2048, 0, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048] |
(skiatļis masīvā ar indeksu i nozīmē cik bitu ar vērtību 1 ir bijis tajos 4097 skaiļos)
Var redzēt, ka 0-tais bits ir 1 visos skaitļos, kā jau sākumā teicu. Bet 4-tais bits ir 0 visos skaitļos! Arī nelaba "fīča". Parējie biti gan ir ok.
Secinājumi - tici man, tu ne s**a nesaproti kā ģenerēt labus pseido-random skaitļus un tas nav tik viegli kā izskatās. |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Wed Oct 24, 2007 11:15 am Post subject: |
|
šie gan nav labi randomie skaitļi, bet kautkam tomēr der nu bet
http://www.google.com/search?hl=en&q=terrain+heightmap+noise
šādi meklējot daudzas labas lietas atrodas ;)
btw, ja saki, ka pēc 4097 reizēm sāks atkārtoties, tad bildi lielāku par 64x64 nav jēgas tā veidot.. _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
Storm
Joined: 11 Apr 2006 Posts: 742
|
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|