.[ ČeskéHry.cz ].
Novus Inceptio
Jdi na stránku Předchozí  1, 2, 3, 4, 5 ... 39, 40, 41  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Hry pro PC, konzole, ...
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
McMagic



Založen: 06. 08. 2012
Příspěvky: 615

PříspěvekZaslal: 9. březen 2013, 15:57:35    Předmět: Odpovědět s citátem

Tak malá video ukázka kácení stromů.

Strom i spadený kmen je SpeedTree - "animace" pádu je řízená přes server (nejedná se o běžnou animaci objektu, ale o realtime změnu rotace objektu atd.) - proto je nepřirozená, ale asi jediné řešení jak to udělat na SpeedTree.

(model klády je starý - bude předělán, tak aby korespondoval s daným stromem)

http://youtu.be/wclq5jsjUMs
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Rexistens



Založen: 29. 07. 2007
Příspěvky: 62
Bydliště: kousek od Zlina a nekdy Brno

PříspěvekZaslal: 9. březen 2013, 16:44:33    Předmět: Odpovědět s citátem

to ze to pri tom padu tak "posekava" je schvalne, slabym pc, nebo to je to jak rikas, ze to nevypada prirozene? resp se pri tom padu skoro u zmene jakoby zastavia to vyapda hodne blbe...
Kdyby to spadlo bez toho sekani tak je to myslim v pohode...
_________________
Osobní stránky a portfolio
Stránky BlueA www.bluea.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
McMagic



Založen: 06. 08. 2012
Příspěvky: 615

PříspěvekZaslal: 9. březen 2013, 16:51:54    Předmět: Odpovědět s citátem

Rexistens napsal:
to ze to pri tom padu tak "posekava" je schvalne, slabym pc, nebo to je to jak rikas, ze to nevypada prirozene? resp se pri tom padu skoro u zmene jakoby zastavia to vyapda hodne blbe...
Kdyby to spadlo bez toho sekani tak je to myslim v pohode...


To je tím, že se nejedná o animovaný 3D objekt.
Ale o řízenou změnu rotace objektu v reálném čase přes server.

SpeedTree nelze animovat jako běžné modely + potřebuji aby ostatní hráči viděli že padá strom.

Uvidím zdali se podaří udělat statickou verzi stromu a v momentě pádu ji napojit místo ST a pak zase zaměnit za ST.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
if.then



Založen: 13. 04. 2008
Příspěvky: 579

PříspěvekZaslal: 9. březen 2013, 17:10:42    Předmět: Odpovědět s citátem

To nemůžeš jenom poslat klientům command, že strom začal padat na koncovou rotaci X v čase Y a spadne v čase Z, a potom jenom clientside počítat aktuální transformaci stromu? Serverside to bude hrozný overkill Surprised

EDIT: Jinak respekt, je vidět, že na tom opravdu děláš, od první strany to už vypadá daleko lépe (i když práce na tom ještě samozřejmě bude dost a dost).
_________________
For guns and glory, go to www.ceske-hry.cz.
For work and worry, execute VC++.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
McMagic



Založen: 06. 08. 2012
Příspěvky: 615

PříspěvekZaslal: 9. březen 2013, 17:20:23    Předmět: Odpovědět s citátem

if.then napsal:
To nemůžeš jenom poslat klientům command, že strom začal padat na stranu X v čase Y a spadne v čase Z a potom jenom clientside počítat aktuální transformaci stromu? Serverside to bude hrozný overkill Surprised


Smile Takto jednoduše to nejde s objekty co nejsou postaveny přes engine.

Objekty co vytvoří hráč se replikují přes server do všech klientů (a jakákoliv jejich změna se také replikuje v reálném čase) atd.

Ta "animace" přes server je hodně pracovní - uvidím co jak ještě půjde.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
if.then



Založen: 13. 04. 2008
Příspěvky: 579

PříspěvekZaslal: 9. březen 2013, 18:00:23    Předmět: Odpovědět s citátem

To upřímně moc nechápu. Ideálně bych si to představoval takto:
Level designer/GM/hráč si řekne, že postaví strom a řekne serveru "postav tu strom". Server požadavek vyhodnotí, vytvoří si v DB strom A a řekne klientům, kterých se to týká, "strom A postaven v tomto čase na téhle lokaci".

O něco později přijde ke stromu hráč X a řekne si, že ho pokácí. Řekne serveru "pokácej strom A". Server požadavek vyhodnotí a řekne klientům, kterých se to týká, "strom A se kácí od tohoto času do tohoto času a spadne sem". V průběhu padání stromů klienti interpolují jeho pozici a po spadnutí ho považují za spadlý.

Chápu správně, že tohle v Hero Engine nejde? Shocked
_________________
For guns and glory, go to www.ceske-hry.cz.
For work and worry, execute VC++.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
McMagic



Založen: 06. 08. 2012
Příspěvky: 615

PříspěvekZaslal: 9. březen 2013, 18:17:07    Předmět: Odpovědět s citátem

if.then napsal:
To upřímně moc nechápu. Ideálně bych si to představoval takto:
Level designer/GM/hráč si řekne, že postaví strom a řekne serveru "postav tu strom". Server požadavek vyhodnotí, vytvoří si v DB strom A a řekne klientům, kterých se to týká, "strom A postaven v tomto čase na téhle lokaci".

O něco později přijde ke stromu hráč X a řekne si, že ho pokácí. Řekne serveru "pokácej strom A". Server požadavek vyhodnotí a řekne klientům, kterých se to týká, "strom A se kácí od tohoto času do tohoto času a spadne sem". V průběhu padání stromů klienti interpolují jeho pozici a po spadnutí ho považují za spadlý.

Chápu správně, že tohle v Hero Engine nejde? Shocked


Jde i nejde:)

To co popisuješ jde a tak to i funguje na běžné operace.
Problém je ale někde jinde a to v Seamless spojení oblastí, kdy je třeba předat tyto data i do dalších oblastí - tady má HE problém a nedokáže to replikovat.
Docházelo tak k tomu, že hráč co stojí v oblasti A a sází strom, tak hráč co stoji v oblasti B nevidí žádnou změnu i když mu byla poslána.

Když pak někdo stojí na hranici oblasti A (pořád je v oblasti B) a vidí hráče jak něco kutí, tak neví co a pokud udělá krok do oblasti A tak zničehonic je před ním strom.

Ve výsledku to znamenalo, že hráč běží po světě a najednou narazí do zdi - kterou neviděl.

Sice by se dala použít replikace pro klienty - ale tam bylo ještě více problému:)

------
Na tu animaci stromu ale mohu použít animaci přes klienta - když jsem se nad tím teď zamyslel - tak pro tuto operaci mohu zavolat všechny klienty a spustit u nich animaci. (objekt ve skutečnosti už leží jako pokáceny, jen se vizuálně spustí animace - pro efekt). A zde není potřeba aby danou animaci viděl někdo z jiné oblasti - ten už uvidí pokáceny strom díky server objektu.

-----
Před pár dny jsem ale změnil fungování celého smyslu světa a Seamless spojení + design světa tak abych předvídal a mohl obejít nedostatky enginu -> takže většinu věcí budu replikovat na klienty.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
McMagic



Založen: 06. 08. 2012
Příspěvky: 615

PříspěvekZaslal: 9. březen 2013, 18:32:01    Předmět: Odpovědět s citátem

BTW:
Animace přes klienta je již aplikovaná - pro tento typ úkonu je to v pohodě a nic to nenarušuje;) - díky za popíchnutí.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
McMagic



Založen: 06. 08. 2012
Příspěvky: 615

PříspěvekZaslal: 10. březen 2013, 20:11:45    Předmět: Odpovědět s citátem

Tak jsem to ještě trošku vyladil.
Animaci spouštím jen pro hráče, kteří jsou poblíž (abych nezatěžoval každého klienta co je v dané oblasti).

Pokud by stromy nebyli SpeedTree, tak by to vše šlo udělat jednoduší cestou přes replikaci Animovaného assetu.
Ale tak jako tak, jedná se jen o efekt - objekt ve skutečnosti už dávno leží na zemi jako pokácený (efekt je jen pro blízké okolí a hlavně samotného hráče co kácí strom;) )

Pro zájemce ukázka kódu:
SERVER (část kódu při vygenerování kmene stromu po skácení)
kód:

        InstanceSP as NodeRef of Class GR2Instance = $EDIT._AddInstance(AssetSP,"GR2Instance","game")
        InstanceSP.NI_lookupListIndexedByStringOfString = dataList//predame DB data
        //build help object
        $EDIT._EditCMDSetInstanceProperties(SYSTEM.REMOTE.CLIENT, "", InstanceSP, fieldsSP, valuesSP, rawSP )
        //GLOM HELP OBJ
        GlomClass("NI_BUILDWORDOBJECT",InstanceSP)//napojime server tridu pro onmouse efekt
        //set parent instance
        InstanceSPClass as NodeRef of Class NI_buildWordObject = InstanceSP
        InstanceSPClass.NI_parentNode = Instance
        //EFEKT KACENI
        when akce
          is "kacet"
            //CALL CLIENT ANIM EFFECT
            players as List of ID = GetPlayersInArea(GetAreaNumber(),GetInstanceNumber())
            call client players %NI_ITEM.runAnimEffectKaceniSPGom(InstanceSP, Instance)
          .
        .

SERVER zavolá každého online klienta v dané oblasti přes CLIENT prototyp NI_ITEM

kód:

remote method runAnimEffectKaceniSPGom(object as NodeRef, parentNode as NodeRef)
  objectC as NodeRef of Class SpeedTreeNode = parentNode
  Player as NodeRef of Class CharacterNode = GetPlayerCharacterNode()
  ObjectPos as Vector3
  PlayerPos as Vector3
  Vzdalenost as Float = DistanceSquaredBetweenNodes(Object,Player)
  if (Vzdalenost <= 100)
    //Spoustime klient animaci
    GlomClass("NI_dynamicFlora",objectC)//dynamic flora client class
    //run dynamic flora
    StartNode as NodeRef of Class NI_dynamicFlora = objectC
    StartNode.padaStromStart()
  . 
.

Pokud je hráč v požadovaném dosahu tak se spustí proces animace

kód:

method padaStromStart()
  Object as NodeRef of Class SpeedTreeNode = me
  ObjectRot as Vector3 = GetNodeRotation(Object)
  //Spoustime klient animaci
  ObjectRot.x = 0//narovnani objektu
  SetNodeRotation(Object,ObjectRot)
  //
  me.NI_string = "kacet"
  me.timeIndex = (SYSTEM.TIME.NOW+00:00:10)
  me.NI_timeInterval = 00:00:00.06
  me.NI_timeIndex02 = SYSTEM.TIME.NOW
  //
  RegisterForPerFrameMethodCallback(me)
.
method onFrameUpdate(elapsed as TimeInterval)
  when me.NI_string
    is "kacet"
      Object as NodeRef of Class SpeedTreeNode = me
      AnimObjectRot as Vector3 = GetNodeRotation(Object)
      //
      EndTime as DateTime = me.timeIndex
      Interval as TimeInterval = me.NI_timeInterval
      IntervalTime as DateTime = (me.NI_timeIndex02+Interval)
      //
      if(EndTime >= SYSTEM.TIME.NOW  )
        if(SYSTEM.TIME.NOW > IntervalTime)
          //set new interval end
          me.NI_timeIndex02 = SYSTEM.TIME.NOW
          //anim
          if(AnimObjectRot.x > -5)
            AnimObjectRot.x = AnimObjectRot.x-0.5
          else if(AnimObjectRot.x > -10)
            AnimObjectRot.x = AnimObjectRot.x-1
          else if (AnimObjectRot.x > -45)
            AnimObjectRot.x = AnimObjectRot.x-5
          else
            AnimObjectRot.x = AnimObjectRot.x-10 
          .
          padEnd as Float = -90
          if(AnimObjectRot.x <= padEnd)
            AnimObjectRot.x = -90
            SetNodeRotation(Object,AnimObjectRot)
            me.NI_string = "kacet_end"
            me.timeIndex = (SYSTEM.TIME.NOW+00:00:10)
            me.NI_timeInterval = 00:00:00.05
            me.NI_timeIndex02 = SYSTEM.TIME.NOW
          else
            SetNodeRotation(Object,AnimObjectRot)
          .
          //
        .
      else
        AnimObjectRot.x = -90
        SetNodeRotation(Object,AnimObjectRot)
        UnRegisterForPerFrameMethodCallback( me )
      .
    .
    is "kacet_end"
      Object as NodeRef of Class SpeedTreeNode = me
      AnimObjectRot as Vector3 = GetNodeRotation(Object)
      //
      EndTime as DateTime = me.timeIndex
      Interval as TimeInterval = me.NI_timeInterval
      IntervalTime as DateTime = (me.NI_timeIndex02+Interval) 
      if(EndTime >= SYSTEM.TIME.NOW  )
        if(SYSTEM.TIME.NOW > IntervalTime)
          //set new interval end
          me.NI_timeIndex02 = SYSTEM.TIME.NOW
          //anim end effect
          if(AnimObjectRot.x = -90)
            AnimObjectRot.x = AnimObjectRot.x+2//88
          else
            AnimObjectRot.x = AnimObjectRot.x-90.1 
          .
          padEnd as Float = -90
          if(AnimObjectRot.x <= padEnd)
            AnimObjectRot.x = -90
            SetNodeRotation(Object,AnimObjectRot)
            UnRegisterForPerFrameMethodCallback( me )
          else
            SetNodeRotation(Object,AnimObjectRot)
          .
        .
      else
        AnimObjectRot.x = -90
        SetNodeRotation(Object,AnimObjectRot)
        UnRegisterForPerFrameMethodCallback( me )
      .
    .
    default
      UnRegisterForPerFrameMethodCallback( me ) 
    .
  .
.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
McMagic



Založen: 06. 08. 2012
Příspěvky: 615

PříspěvekZaslal: 11. březen 2013, 20:02:42    Předmět: Odpovědět s citátem

Vylepšená verze kácení stromů (borovice a jabloň).
Stromy již generují korektní klády.
+ byla aplikovaná váha objektů, a první jazykové mutace atd.

http://youtu.be/X3OjkFC_F3w
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Dlaha



Založen: 30. 07. 2007
Příspěvky: 598
Bydliště: Olomouc

PříspěvekZaslal: 12. březen 2013, 08:56:21    Předmět: Odpovědět s citátem

Připomněl jsi mi Komando, kde Schwarzeneger na začátku tahá na rameni obrovskou kládu stromu, jakoby se nic nedělo.

Ale oproti němu je ta tvoje slečna mnohem větší frajer, koukám Very Happy
_________________
Other Inside
Greenlitnuto!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
McMagic



Založen: 06. 08. 2012
Příspěvky: 615

PříspěvekZaslal: 12. březen 2013, 09:05:13    Předmět: Odpovědět s citátem

Dlaha napsal:
Připomněl jsi mi Komando, kde Schwarzeneger na začátku tahá na rameni obrovskou kládu stromu, jakoby se nic nedělo.

Ale oproti němu je ta tvoje slečna mnohem větší frajer, koukám Very Happy


Smile

No dle váhy to do báglu dáSmile

Ale zvažuji ještě zapojit objem - nebo určit zdali objekt lze dát do báglu nebo ne.

Ve výsledku unese postava 3 malé klády z jabloně (což není moc) a max jednu z borovice.

Bylo by asi pěkné kdyby je měla na zádech nebo tak nějak, ale to je ještě daleko...

Musím zvážit pro a proti. Nechci jít cestou kde má člověk v inventáři 100ks prken:) Ale také zase nechci aby to bylo až moc přehnané a ovlivňovalo moc hratelnost (nosit půl dne klády do tábora abych pak udělal pár prken není taky moc zábavné právěSmile .
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



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

PříspěvekZaslal: 12. březen 2013, 09:26:25    Předmět: Odpovědět s citátem

V reálu by člověk použil koně nebo něco.
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
McMagic



Založen: 06. 08. 2012
Příspěvky: 615

PříspěvekZaslal: 12. březen 2013, 09:35:38    Předmět: Odpovědět s citátem

frca napsal:
V reálu by člověk použil koně nebo něco.


Tj. koně , vozík apod. (to si bude muset ale prvně vyrobit a ochočit)

Ale musím počítat s tím že postava začíná skoro bez ničeho ve světě který nezná a je plný nebezpečí - má jen holé ruce + hitech věcičku (ta by mohla pár věcí vyřešit, ale to nechci zatím moc rozvádět - ještě to nemá 100% logiku pro všechny situace).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Dlaha



Založen: 30. 07. 2007
Příspěvky: 598
Bydliště: Olomouc

PříspěvekZaslal: 12. březen 2013, 10:08:23    Předmět: Odpovědět s citátem

Jestli je ta high-tech věcička dámská kabelka, tak tam by se i ten strom klidně ztratil Very Happy

Podle mě si ze začátku bude muset hráč udělat tábor u zdrojů surovin, pokácí strom a hned vedle lesa si postaví třeba chatrč. Až se trochu posune v technologii, postaví si vozík, ochočí si mezka, tak bude moci přepravovat suroviny na větší vzdálenosti.
_________________
Other Inside
Greenlitnuto!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Hry pro PC, konzole, ... Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2, 3, 4, 5 ... 39, 40, 41  Další
Strana 4 z 41

 
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