Page 43 of 56

Re: Offtopic (I/2011)

Posted: Mon Aug 08, 2011 11:41 pm
by CCE
legend wrote:Mitäs sanotte tästä http://www.youtube.com/watch?v=00gAbgBu8R4 . Tuleeko coolbasic 3d tukemaan tuota :D (Niille jotka ei klikkaa videota: Videossa kerrotaan uudesta tekniikasta, jossa polygoneja voi olla loputtomasti. Ja näyttetään demoa, jossa tekniikka on toiminnassa. Eli peleissä ei tule enään olemaan kulmikkaita palloja, eikä neljömäisiä henkilöitä.)
Kyllä. Jos katsoit videon kokonaan kuulit kuinka suurieleinen esittelijä mainitsi sen pyörivän kokonaan prosessorilla ilman 3d laitteistokiihdytystä. Itseasiassa se olisi mahdollinen jo nykyisellä CoolBasicilla, ei tosin realiajassa. Käsittääkseni tuossa käytetään joko raytracettua (yksinkertainen raytracer CoolBasicilla tehtynä) vokselikarttaa, tai splatting algoritmia point cloud datan kanssa, jotka molemmat ovat toteutettavissa ilman laitteistokiihdytystä.

Edit: Niin tosiaan tarkkojen kenttien tallentaminen veisi valtavat määrät muistia, mutta videossa esitelty ilmeisesti kolmiulotteisista tileistä kasattu kenttä on täysin mahdollinen.

Re: Offtopic (I/2011)

Posted: Mon Aug 08, 2011 11:42 pm
by esa94
CCE wrote:
legend wrote:Mitäs sanotte tästä http://www.youtube.com/watch?v=00gAbgBu8R4 . Tuleeko coolbasic 3d tukemaan tuota :D (Niille jotka ei klikkaa videota: Videossa kerrotaan uudesta tekniikasta, jossa polygoneja voi olla loputtomasti. Ja näyttetään demoa, jossa tekniikka on toiminnassa. Eli peleissä ei tule enään olemaan kulmikkaita palloja, eikä neljömäisiä henkilöitä.)
Kyllä. Jos katsoit videon kokonaan kuulit kuinka suurieleinen esittelijä mainitsi sen pyörivän kokonaan prosessorilla ilman 3d laitteistokiihdytystä. Itseasiassa se olisi mahdollinen jo nykyisellä CoolBasicilla, ei tosin realiajassa. Käsittääkseni tuossa käytetään joko raytracettua (yksinkertainen raytracer CoolBasicilla tehtynä) vokselikarttaa, tai splatting algoritmia point cloud datan kanssa, jotka molemmat ovat toteutettavissa ilman laitteistokiihdytystä.
Heijastava vesi vaikuttaisi raytracingilta.


Tai huijaukselta.

Re: Offtopic (I/2011)

Posted: Tue Aug 09, 2011 9:37 am
by axu
Myös animaatioiden kanssa voisi tulla ongelmaa... Ainakin oma käsitykseni on, että vokselit taittuvat paljon kehnommin kuin polygonit animointiin. Myös miguelcepero puhuu tämän tekniikan heikkouksista tässä.

Itse voisin ajatella, että jonkinsortin sekatekniikka voisi toimia: Pelin hahmot ja maasto rakennetaan polygoneista, ja toistuvat objektit kuten kasvisto ja arkkitehtuurin osat vokseleista.

Re: Offtopic (I/2011)

Posted: Tue Aug 09, 2011 1:26 pm
by esa94
axu wrote:Myös animaatioiden kanssa voisi tulla ongelmaa... Ainakin oma käsitykseni on, että vokselit taittuvat paljon kehnommin kuin polygonit animointiin. Myös miguelcepero puhuu tämän tekniikan heikkouksisä tässä.

Itse voisin ajatella, että jonkinsortin sekatekniikka voisi toimia: Pelin hahmot ja maasto rakennetaan polygoneista, ja toistuvat objektit kuten kasvisto ja arkkitehtuurin osat vokseleista.
Ei kun maasto ja muu staattinen vekseleistä ja dynaamiset osat polyista.

Re: Offtopic (I/2011)

Posted: Tue Aug 09, 2011 2:56 pm
by axu
esa94 wrote:Ei kun maasto ja muu staattinen vekseleistä ja dynaamiset osat polyista.
Kaiken maaston tallentaminen vie paljon tilaa, ja sen vuoksi ajattelin vain ne kohteet, jotka toistuu maastossa (yksityiskohdat) vokselidatana.

Re: Offtopic (I/2011)

Posted: Tue Aug 09, 2011 3:29 pm
by esa94
axu wrote:
esa94 wrote:Ei kun maasto ja muu staattinen vekseleistä ja dynaamiset osat polyista.
Kaiken maaston tallentaminen vie paljon tilaa, ja sen vuoksi ajattelin vain ne kohteet, jotka toistuu maastossa (yksityiskohdat) vokselidatana.
Vähintään maaston pintakerros pitää joka tapauksessa tallentaa vekselidatana ja silloinhan sillä ei ole mitään väliä.

Re: Offtopic (I/2011)

Posted: Tue Aug 09, 2011 4:40 pm
by MaGetzUb
Mitä jos aina tarvittavat osat, joita piirretään konvertataan muistiin ladatusta 3D objektista vekseleiksi?
EDIT:

Hidastahan se voi olla, riippuu toteutuksesta. :)


Re: Offtopic (I/2011)

Posted: Tue Aug 09, 2011 5:08 pm
by esa94
MaGetzUb wrote:Mitä jos aina tarvittavat osat, joita piirretään konvertataan muistiin ladatusta 3D objektista vekseleiksi?
EDIT:

Hidastahan se voi olla, riippuu toteutuksesta. :)

Wat

Instantiointi on kyllä keksitty elikkä voi tehdä vaikka kuutiometrin kokoisen palikan vekseleitä, panna sen muistiin ja sitten tiputella niitä sata miljoonaa vierekkäin.

Re: Offtopic (I/2011)

Posted: Wed Aug 10, 2011 1:19 am
by atomimalli
Ikävä fakta on ettei vokseleilla saa paremman näköistä jälkeä kuin polygoneillakaan, ei parempaa fysiikkaa, eikä parempaa suorituskykyä.

Lupauksieen täyttämiseen tarvittavan muistin määrä saavutetaan vasta parissa kymmenessä vuodessa, eikä nykyresoluutio riitä tyydyttävään simulaatioon. Realistinen simulaatio oikeassa mittakaavassa vedellä nykyisin hiukan kättä suuremman alueen ja siinäkin huijataan vähäsen. Vokseleilla joutuisi menemään vielä paljon pienempään mittakaavaan jotta vesi käyttäytyisi oikein. Vielä ainakin kymmenen vuotta kannattaa ennemmin huijata kuin käyttää "atomeita", eivätkä vokselit edes ole atomeita. Ne ovat jumittuneet ruudukkoon. Niillä ei ole vapaata liikkuvuutta.

Henkilökohtaisesti kyllä pidän vokselimaastosta ja minua kiehtoo ajatus atomipohjaisesta virtuaalimaailmasta mutta toistaiseksi niistä ei ole nykyaikaisiin peleihin.

Vokseleilla on kyllä sovellusta nykyaikaisessa grafiikassa, kuten tämä esimerkki näyttää http://artis.imag.fr/Publications/2011/CNSGE11a/, mutta siinäkin vokseleille on käyttöä vain epäsuorasti ja ne generoidaan polygonien pohjalta.

Minecraft on hyvä esimerkki vokselien raskaudesta. Serveri huutaa tuskissaan kun pelaajia on yli kymmenen ja muistinkäyttö ja nettiliikenne jokaista muutosta kohden on valtava. Yhtään pienempiä vokseleilla ei voi kuvitellakaan dynaamista pelaamista netissä.

Atomontage enginestä ei ole taidetukaan vielä puhua. Se on ihan kiva, se jopa käyttää näytönohjainta hyväksi ja näyttää edistyneempää valaistusta kuin unlimited detail ja sillä on näyttää pelinkaltaisia esimerkkejä. Se ei markkinoi yhtä aggressiivisesti ja harhaanjohtavasti vaan näyttää tuloksia ja kertoo että missä on parannettavaa.

Sitten pitää vielä esitellä parempi välivaihtoehto, dynaamiset partikkelit tai mitä lienevätkään.
Niitä ei tarvitse olla yhtä paljon kuin vokseleita, eivätkä ne ole rajoittuneita ruudukkoon. Niillä onnistuu kangassimulaatio, esineiden repiminen, hajoittaminen luonnollisesti, nesteet...
Niitä käytetään jo nyt ja ne kehittyvät koko aika pienempään mittakaavaan ja niiden määrää voidaan säädellä tarpeen mukaan, toisinkuin vokselien, joiden on oltava ruudukossa.

Vokselit joutuvat vieläpä säilömään paljon ylimäärästä dataa, jos niillä halutaan jotain nykyaikaisia shadereita, fysiikoita tai jotain muita vuorovaikutuksia. Se työntää ne entistä kauemmaksi tulevaisuuteen.

Minusta vokseligrafiikka on okei, sillä pystyy kivasti ja suht halvasti esittää yleistä maastoa ja sitä sillä on tehty jo kymmeniä vuosia, mutta sitä ei ole okei väittää paremmaksi seuraavilla osa-alueilla: tarkkuus, fysiikat, animaatio, fotorealistisuus, käytännöllisyys.

Re: Offtopic (I/2011)

Posted: Thu Aug 11, 2011 10:18 pm
by axu
Jee Trackmania 2:n julkinen beta tulee vajaan viikon päästä! Kuinka moni aikoo ostaa?

Re: Offtopic (I/2011)

Posted: Sat Aug 13, 2011 11:49 pm
by Wingman
axu wrote:Jee Trackmania 2:n julkinen beta tulee vajaan viikon päästä! Kuinka moni aikoo ostaa?
Riippuu vähän rahatilanteesta, ainakin aion ostaa ;)

Re: Offtopic (I/2011)

Posted: Sun Aug 14, 2011 12:08 pm
by legend
Joskus satuin näkemään cbkk 3d sound function. Se osasi soittaa äänen oikealta, jos ääni oli sijoitettu oikealle. Niin voisiko joku uppia sen tänne. Ymmärsikö kukaan?

Re: Offtopic (I/2011)

Posted: Sun Aug 14, 2011 1:18 pm
by MrMonday
legend wrote:Joskus satuin näkemään cbkk 3d sound function. Se osasi soittaa äänen oikealta, jos ääni oli sijoitettu oikealle. Niin voisiko joku uppia sen tänne. Ymmärsikö kukaan?
Eikö tuo funktio olisi kohtalaisen helppo tehdä itsekkin, kun cb:n PlaySound-komennossa voi määrittää äänen sijainnin suoraan..
EDIT:

Siis tarkoitan, että jos haluaa äänen sijainnin vaikka johonkin objektiin, niin vääntää nuo arvot (-100 vasen kaijutin, 100 oikea kaiutin) ruudun leveyteen ja siitä laskisi objektin sijainnin, elis siis jos ikkunan koko esim. 800*600, niin tuo leveys jaettaisiin kahdella sadalla (800/200)=4, eli kun objekti liikkuu neljä oikealle niin äänen sijaintia muutettaisiin yhden pykälän oikeaan kaiuttimeen päin, jolloin ääni siirtyisi objektin mukana.. Ja tuo siis toimisi varmaankin SetSound-komennolla.. En tiedä ymmärsitkö tai oliko tämä yhtään sitä mitä hait, mutta toivottavasti oli jotain apua :D


Re: Offtopic (I/2011)

Posted: Sun Aug 14, 2011 1:21 pm
by axu
legend wrote:Joskus satuin näkemään cbkk 3d sound function. Se osasi soittaa äänen oikealta, jos ääni oli sijoitettu oikealle. Niin voisiko joku uppia sen tänne. Ymmärsikö kukaan?
En kyllä näe miten tuo olisi 3D-ääntä... Sehän on 1d sound :D Kuitenkin, eikös setsoundissa saa asetettua äänen sijainnin oikealle tai vasemmalle. Seuraavalla periaatteella saa äänen sijoitettua maailmakoordinaattehin:

Code: Select all

Const F_Balance = 90   //Määrittää, kuinka nopeasti ääni siirtyy
Const F_Volume = 0.3    //Määrittää, kuinka nopeasti ääni hiljenee
Function Sound1D(sound, x#, y#)
    Dist# = Distance(CameraX(), CameraY(), x, y)
    x = x - CameraX()
    x = x / ScreenWidth() * Balance
    
    PlaySound(sound, Min(100, Max(0, 100 - Dist * F_Volume)), Min(100, Max(-100, x)))
End Function
Tässä tosiaan on vain periaate, ja tasapaino on säätämättä (en testannut ollenkaan toimivuutta). Bonuksena myös ääni hiljenee kauettaessa kamerasta!

Re: Offtopic (I/2011)

Posted: Sun Aug 14, 2011 2:01 pm
by valscion
NetMatchissa moinen toteutetaan Sound.cb-tiedostossa tällaisessa funktiossa:

Code: Select all

//================================================================================
// Äänen soittaminen
//================================================================================
Function PlayGameSound(_sound, _x, _y)
    // Ääntä ei ole olemassa
    If _sound = 0 Then Return 0
    snd = gSounds(_sound)
    
    // Äänenvoimakkuus riippuu etäisyydestä
    volume# = (100 - Max(0, Distance(_x, _y, CameraX(), CameraY()) / 20)) / 100.0 * Float(gFXVolume)
    Return PlaySound(snd, volume)
EndFunction

Re: Offtopic (I/2011)

Posted: Sun Aug 14, 2011 3:21 pm
by esa94
axu wrote:En kyllä näe miten tuo olisi 3D-ääntä... Sehän on 1d sound :D
Äänellä ei ole ulottuvuuksia. Kysehän on tietysti siitä että kanavien voimakkuutta säädetään sen perusteella missä äänilähde sijaitsee pelaajaan verrattuna, mikä aiheuttaa illuusion siitä että ääni todellakin lähtisi äänilähteestä.

Re: Offtopic (I/2011)

Posted: Sun Aug 14, 2011 3:36 pm
by MetalRain
legend wrote:Joskus satuin näkemään cbkk 3d sound function. Se osasi soittaa äänen oikealta, jos ääni oli sijoitettu oikealle. Niin voisiko joku uppia sen tänne. Ymmärsikö kukaan?
Teinpä tälläisen äänen suunnan ja etäisyyden huomioon ottavan systeemin. Doppler-ilmiö vielä saattaisi jossain tilanteissa olla
hyödyllinen, mutta äänitiedostojen taajuuksien arvaaminen voi olla hieman hankalaa.

Code: Select all

SCREEN 1024,768

Type Sound2D
    Field file As String
    Field source As Integer 
    Field sound As Integer 
    Field x As Float
    Field y As Float
    Field vol As Integer 
    Field freq As Integer 
    Field cont As integer 
    Field isPlaying
    Field isLoad 
    Field static 
End Type 

//etäisyyden merkitys yksikköä kohden
// esim jos etäisyys on 100 vaikuttaa se 100*0.3 = 30 yksikköä voimakkuuteen
Const DistanceModifier = 0.3

//kuinka paljon voimakkuuteen etäisyydellä on merkitystä maksimissaan
Const DistanceModifierAmount = 100.0

//kuinka paljon voimakkuuteen kulmalla on merkitystä maksimissaan
Const ListeningAngleModifierAmount = 40.0

//kuuntelupisteen arvot
Global ListeningPointX, ListeningPointY, ListeningAngle, ListenInWorldCoordinates


b = LoadSound("Media\SK_Battle2.mp3")

s = PlayLoadedSound2D(b)

DrawToWorld ON 

ShowMouse OFF

Repeat

    //luodaan staattisia hetkellisiä ääniä
    If MouseHit(1) Then 
        PositionSound2D(PlaySound2D("Media\SK_Battle2.mp3",1,Rand(30,100)),MouseWX(),MouseWY())
    EndIf 
        
 
    a#=Timer()/30.0
    sx# = Cos(a#)*100
    sy# = Sin(a#)*100
    
    PositionSound2D(s, sx, sy)
    
    
    For ss.sound2D = Each sound2D
    
        If ss\static Then Color 0,255,0 Else Color 255,0,0
    
        If ss\isPlaying Then  
            DrawSound(ConvertToInteger(ss))
        EndIf 
    Next ss
    
    Color cbwhite

    lx = MouseWX()
    ly = MouseWY()
    
    Circle lx-2, ly+2,5,1
    Line lx+Cos(la+45)*20, ly+Sin(la+45)*20, lx, ly
    Line lx+Cos(la-45)*20, ly+Sin(la-45)*20, lx, ly

    la = la + MouseMoveZ()*10
    
    ListenIn(lx,ly,la)
    
    
    DrawScreen 

Forever 

//piirtää ääniaaltoja
Function DrawSound(sound,border#=60)
    If sound <> 0 Then 
        s.Sound2D = ConvertToType(sound)
        If s <> NULL Then 
            
            a#=Timer()/15.0
        
            r = GetRGB(RED)
            g = GetRGB(GREEN)
            b = GetRGB(BLUE)
            
            size# = DistanceModifierAmount*(1.0/DistanceModifier)
            
            amount = size#/border#
            
            For i=0 To amount-1
                rad = Int(a#+i*border#) Mod Int(size#)
                
                m# = 1.0-(Float(rad)/size#)
                
                Color r*m#,g*m#,b*m#
                
               // If ListenInWorldCoordinates Then 
                    Circle s\x-rad, s\y+rad,rad*2,0
               // Else 
               //     Circle s\x-rad, s\y-rad,rad*2,0
               // EndIf 
            Next i
            
        EndIf 
            
    EndIf 

End Function 

//kertasoitto tiedostosta
Function PlaySound2D(source$, static = 0, vol=100,freq=-1)

    s.Sound2D = New (Sound2D)
    s\vol = vol
    s\freq = freq
    s\cont = 0
    s\static = static
    s\isload = False 
    s\sound = PlaySound (source$, s\vol)
    s\isPlaying = True

    Return ConvertToInteger(s)
End Function 

//alkaa soittamaan muistiin ladattua ääntä, voi myös toistaa
Function PlayLoadedSound2D(source, static = 0, vol=100,cont=1,freq=-1)

    s.Sound2D = New (Sound2D)
    
    s\source = source
    s\vol = vol
    s\freq = freq
    s\cont = cont
    s\static = static
    s\isload = True 
    s\isPlaying = True 
    s\sound = PlaySound (s\source, s\vol)
    
    Return ConvertToInteger(s)
End Function 

//asettaa kuuntelupisteen ja päivittää staattiset äänet
Function ListenIn(x#=0.0,y#=0.0,ang#=0.0,worldCoordinates=1)
    ListeningPointX = x#
    ListeningPointY = y#
    ListeningAngle = ang#
    ListenInWorldCoordinates = worldCoordinates
    
    For s.sound2D = Each sound2D
        If s\static = 1 And s\isPlaying Then  
    
            UpdateSound2D(ConvertToInteger(s))
    
        EndIf 
    Next s
    
End Function 


// asettaa äänilähteen paikoilleen ja päivittää
// soivan äänen
Function PositionSound2D(sound, x#, y#)
    If sound <> 0 Then 
        s.Sound2D = ConvertToType(sound)
        
        s\x=x#
        s\y=y#
        
        If s\static = 0 Then UpdateSound2D(ConvertToInteger(s))

    EndIf 
End Function 

//päivittää soivan äänen
Function UpdateSound2D(sound)
    If sound <> 0 Then 
        s.Sound2D = ConvertToType(sound)
        
        If SoundPlaying(s\sound) = 0 Then 
        
            If s\cont = 1 And s\isLoad And s\isPlaying Then 
                s\sound = PlaySound (s\source, s\vol)
            Else 
                Delete s
            EndIf 
        EndIf 
        
        If s <> NULL And s\isPlaying Then 
         
            x#=s\x
            y#=s\y
            
            ly# = ListeningPointY
            lx# = ListeningPointX
            
            If ListenInWorldCoordinates Then 
                y#=-y#
                ly#=-ListeningPointY
            EndIf 
            
            ang# = GetAngle(lx#,ly#,x#,y#)
            
            dis# = Distance(lx#,ly#,x#,y#)
            
            fVol# = Min(Cos(ang#-ListeningAngle)*ListeningAngleModifierAmount,0.0) +  s\vol - Min(dis#*DistanceModifier,DistanceModifierAmount)
            
            vol = Min(Max(fVol#,0),100)
            
            position = -Sin(float(ang#-ListeningAngle))*100.0
        
            If s\freq = -1 Then 
                SetSound s\sound, OFF, vol, position
            Else 
                SetSound s\sound, OFF, vol, position, s\freq
            EndIf 
        EndIf 
    EndIf 

End Function 

Re: Offtopic (I/2011)

Posted: Sun Aug 14, 2011 6:03 pm
by legend
Kiitos monista vastauksista :)

Re: Offtopic (I/2011)

Posted: Mon Aug 15, 2011 4:59 pm
by Nassi_Setä
Huoh on ensimmäinen kunnon lukio päivä saatettu loppuun. On aika uupunut olo ja oli vaan lyhyt päivä :D
Huomenna sitten on tavallinen päivä eli koulu alkaa klo. 8:05 ja loppuu 16:00
Olis pitänyt mennä amikseen metallille...

Re: Offtopic (I/2011)

Posted: Mon Aug 15, 2011 5:10 pm
by valscion
Nassi_Setä wrote:Huoh on ensimmäinen kunnon lukio päivä saatettu loppuun. On aika uupunut olo ja oli vaan lyhyt päivä :D
Huomenna sitten on tavallinen päivä eli koulu alkaa klo. 8:05 ja loppuu 16:00
Olis pitänyt mennä amikseen metallille...
Kyllä se lukion arki sitten alkaa jossain vaiheessa rullaamaan ;) loppua kohti helpponee. Itselläni oli tänään eka sivarityöpäivä, klo 8.15 - 16:15 ja matkoihin se 45min vielä molempiin suuntiin. Lukioaikana sentään riitti kun heräsi seitsemän aikoihin, nyt piti herätä jo sitäkin aikasemmin niin nyt vähä väsyttääpi.