dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

"Pareizas" & Praktiskas metodes terraina evalv
Goto page Previous  1, 2
 
dev.gamez.lv Forum Index -> Programmēšana
View previous topic :: View next topic  
Author Message
Storm



Joined: 11 Apr 2006
Posts: 742

PostPosted: Tue Oct 23, 2007 8:55 pm    Post subject:

zini taadu lietu ka HLSL nav taadas f-jas "rand()" ?
Back to top
View user's profile
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Tue Oct 23, 2007 9:00 pm    Post subject:

Nezinu kāda ir EartshSculptorā, taču vispopulārākais laikam jau ir Perlin Noise, ar kuru praktiski var iegūt visdažādākos noise veidus:
http://freespace.virgin.net/hugo.elias/models/m_perlin.htm
http://www.noisemachine.com/talk1/

Vēl diezgan bieži izmanto šo te algoritmu: http://en.wikipedia.org/wiki/Diamond-square_algorithm

snake5: rand() nav nekāds noise. Tas ir pseido-random skaitļu ģenerētājs. Pie tam diezgan slikts - tam ir mazs periods.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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 Wink
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 Wink
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: 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
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: 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
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Wed Oct 24, 2007 11:15 am    Post subject:

šie gan nav labi randomie skaitļi, bet kautkam tomēr der Wink 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
View user's profile Visit poster's website
Storm



Joined: 11 Apr 2006
Posts: 742

PostPosted: Sat May 31, 2008 2:51 pm    Post subject:

Neliels hacking side projekts -> ekstrakteejam datus (lasam MPQ formaatu) no World of Warcraft, nolasam in game failu formaatus, paarkonverteejam tekstuuras un citus vajadziigus datus, rendereejam -> voila - wow terrains xD http://www.madx.dk/wowdev/forum/viewtopic.php?f=1&t=595 un editeejams jo integreets esosajaa editoraa hihi

P.S My usr name is Semeii ;P
_________________
Izraadaas ka dazu dev.gamez.lv lietotaaju absurdaa ignorance meedz eksisteet arii augstaakas paakaapees : http://www.gamedev.net/community/forums/topic.asp?topic_id=411552
Back to top
View user's profile
Display posts from previous:   
dev.gamez.lv Forum Index -> Programmēšana All times are GMT + 2 Hours
Goto page Previous  1, 2
Page 2 of 2

 
Jump to:  
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