.[ ČeskéHry.cz ].
Normaly u framovanych modelu
Jdi na stránku 1, 2, 3  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 1. únor 2010, 18:16:54    Předmět: Normaly u framovanych modelu Odpovědět s citátem

Zdarec,

delam na framovych animacich a bohuzel jsem se setkal s problemem, ze kdyz exportnu nejaky primitivum z maxu (kostka,koule...etc) tak se mi normaly nespocitaji dobre. Ale modely z her jako Q2, CS:S a podobne co jsem zkousel tak se spocitaji spickove. Stalo se vam to? Nebo jsem u toho zase ocas a mam nekde blbe nastavenej max nebo napsanej kod? Vim mozna to patri do sekce 3D grafika ale pokud se to moderatorum nelibi tak at to prehodi.

kody vypoctu normal: http://nopaste.ceske-hry.cz/222878
struktura vec3: http://nopaste.ceske-hry.cz/222879
ms script: http://nopaste.ceske-hry.cz/222880

jen pozn. v fcich u vec3 by nemel byt problem protoze je pouzivam jinde a funguji spickove.

diky moc za pomoc.

EDIT: chyba byla v CrossProduktu - prohozeny promenny ale porad to nevyresilo problem. Vsechno funguje krome krychli, krychle ma dycky osvetlenej vrsek a spodek.

Jeste pro upresneni, cokoliv co ma okolo 12facu se nespocita. Tudiz slozity modely sou bez problemu
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: 2. únor 2010, 10:40:29    Předmět: Odpovědět s citátem

Jak ta krychle vypadá?
Počítáš s tim, že máš v rohu krychle 3 vertexy, ne jeden?

Stejně bych si dovolil navrhnout ti jiný řešení, poněvadž tvoje počítá pouze ploché stínování.

Exportuj normály už z maxu a interpoluj je stejně jako ty vertexy (normalizace je samozřejmě stále nutná). Bude to rychlejší na výpočet a budeš mít normály přesně jak ti je nastaví grafik. Tu normalizaci můžeš udělat ve vertex shaderu, což bude rychlejší. Samozřejmě tohle řešení má větší paměťový nároky.
_________________
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
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 2. únor 2010, 10:57:23    Předmět: Odpovědět s citátem

Semo: ano mas pravdu ze je to pomalejsi ale kdyz normaly vyexportuju z maxe, tak sou jeste horsi nez ted - zkousel jsem si s tim hrat ale z tech vyslednych vyexportovanych normal se mi budou blbe pocitat tangenty etc.. Predevsim u krychle je ten stejnej problem. Krychle vzdycky maji osvetlenou jenom vrchni a spodni stranu. Tyto normale pocitam stejne jenom kvuli perpixelu - v tom kodu neni prepocet tangent a bitangent ale to neni potrebny protoze se to nevztahuje k problemu.

kód:

VertA.x = object[o].interpverts[object[o].face[n].a].x; //Prvni vertex
VertA.y = object[o].interpverts[object[o].face[n].a].y;
VertA.z = object[o].interpverts[object[o].face[n].a].z;

VertB.x = object[o].interpverts[object[o].face[n].b].x;//Druhej vertex
VertB.y = object[o].interpverts[object[o].face[n].b].y;
VertB.z = object[o].interpverts[object[o].face[n].b].z;

VertC.x = object[o].interpverts[object[o].face[n].c].x;//Treti vertex
VertC.y = object[o].interpverts[object[o].face[n].c].y;
VertC.z = object[o].interpverts[object[o].face[n].c].z;

vec3 v1 = VertB - VertA; //odectu druhej od prvniho
vec3 v2 = VertC - VertA; odectu treti od prvniho
vec3 normal = Normalize(Cross(v2,v1)); vycrossuju a znormalizuju


takze si myslim ze mam 3 vertexy do jednoho rohu.

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: 2. únor 2010, 13:50:14    Předmět: Odpovědět s citátem

Tak leda tohle:

Máš 8 vertexů (opravdu fyzicky 8 vertexů v bufferu). Chceš kreslit krychli, která má per-face normály, ale aplikuješ je per vertex. Uložíš 8 normál pro 8 vertexů a je tu chyba, protože jich má bejt 24 (V každým rohu kostky 3).

Může to být tohle? Jinak už nevím a navrhuju použít debug vykreslení normál.
_________________
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
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 2. únor 2010, 14:26:34    Předmět: Odpovědět s citátem

]semo[ napsal:
Tak leda tohle:
Máš 8 vertexů (opravdu fyzicky 8 vertexů v bufferu). Chceš kreslit krychli, která má per-face normály, ale aplikuješ je per vertex. Uložíš 8 normál pro 8 vertexů a je tu chyba, protože jich má bejt 24 (V každým rohu kostky 3).


jo to bude ono. Pogooglim jak se pocitaji normaly per vertex a napisu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ladis



Založen: 18. 09. 2007
Příspěvky: 1537
Bydliště: u Prahy

PříspěvekZaslal: 2. únor 2010, 15:28:11    Předmět: Odpovědět s citátem

Ja je teda pro vrcholy počítal tak, že jsem sečetl normály sousedících polygonů. Nicméně u té krychle a podobných tvarů člověk většinou nechce, aby mu to takhle automaticky "smoothovalo" na hranách. Automatické řešení je zvolit si mezní úhel, od kterého to nesmoothuje (to znám třeba z Lightwave SDK), ruční řešení je např. smoothing groups od grafika.
_________________
Award-winning game developer
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: 2. únor 2010, 15:42:52    Předmět: Odpovědět s citátem

Per vertex normály ti sežerou další výkon. Je skutečně lepší interpolovat už hotový normály. Pokud ti to ale opravdu nevyhovuje a chceš je mít per-face, tak bude nejrychlejší mít všechny vertexy duplikované právě tolikrát, kolik faců ho sdílí. Vzhledem k architektuře grafických karet nemůžeš snadno použít dva index buffery (jeden pro vertexy, druhej pro normály) - což by bývalo bylo ideální.

Jestli se bojíš špatných dat (kvůli tangent space), tak bys mohl interpolovat již hotový normály, ale předpřipravit si je sám při nahrátí modelu, ne vzít exportovaný z maxe. Při tom nahrávání ošetříš všechny chybový případy a duplikuješ pouze ty vertexy, který jsou potřeba.
_________________
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
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 4. únor 2010, 12:09:46    Předmět: Odpovědět s citátem

Semo: predpokladam ze predpocitanejma normalama myslis normaly pro kazdej fram v souboru si predpocitat v programu a ty normaly mezi sebou interpolovat ze? Mel jsem to takhle a rozdil zadnej. Ani zvyseni fps / rychlosti nacitani. Ted k problemu ty normaly mi zatim takhle postacuji ale potrebuju k tangentam a bitagnentam UV koordinaty. Samozdrejme ze je v tom hacek - kdyz exportuju z maxu tak na me vyzkoci hlaska "mesh tvertex out of range 605". To se stava jenom u slozitejsich modelu. U jednoduchych modelu se to nestane ale zase jsou spatne vyexportovany tex.koordinaty - predpokladam ze pro ty potrebuju taky nejakej index. A ted uz se opravdu nechytam. Ty koordinaty se musi exportovat zvlast nebo co? jsem z toho solidne jelen Very Happy
PS. google mi na tu hlasku rekl uplny prd. Napadlo me ze ten model nema tex. koordinaty ale zkousel jsem render a ma na sobe normalne namapovanou texturu takze tam problem nebude.
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: 4. únor 2010, 12:46:38    Předmět: Odpovědět s citátem

citace:
predpokladam ze predpocitanejma normalama myslis normaly pro kazdej fram v souboru si predpocitat v programu a ty normaly mezi sebou interpolovat ze? Mel jsem to takhle a rozdil zadnej.

Jestli je počítáš stejným způsobem, tak budou i stejně špatně.

Pro export UV v maxu musíš použít indexy, který ti vrátí funkce getTVFace (tak nějak se asi jmenuje). Ve výsledku je to složitý, protože máš facy geometrický a facy texturový. Dělal jsem to tak, že sem exportoval pro každý trojúhelník fyzicky 3 vertexy a 3 UV koordináty, takže počet vertexů byl vždy 3*počet trojúhelníků. Tim se ti zjednoduší exporter. Takovýhle data jsou ale naprd, protože pro optimální běh potřebuješ, aby trojúhelníky vertexy sdílely (u interpolace geometrie to platí ještě víc). Proto byla v mým systému zařazena ještě command line utilita, která se při exportu z maxu automaticky spustila a vyházela duplicitní vertexy a upravila index buffer.
_________________
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
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 4. únor 2010, 12:51:55    Předmět: Odpovědět s citátem

]semo[: no zkousel jsem nejaky pokusy a znas fci "at time x"? problem je v ni, kdyz ji nepouziju a vyexportuju statickej objekt tak nejsou problemy s texturama a ani s normalama..Jelikoz ted se mi vyexportuje 20 vertexu a 12 facu (predtim 8,12) a diky tomu mi funguji normaly a tex. koordinaty. Takze bud nekde delam chybu nebo neexistuje jeste nejaka jina volba jak to vyexportovat framove bez te fce?
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: 4. únor 2010, 13:12:29    Předmět: Odpovědět s citátem

Je to možný, že to bez "at time" funguje, ale správný je použít getTVFace. Aspoň doufám, používal jsem to. Zkus pohledat v nápovědě od MaxScriptu. Případně se inspiruj v nějakým cizím exporteru. Víc už ti asi neporadím.
_________________
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
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 4. únor 2010, 13:14:14    Předmět: Odpovědět s citátem

jn, podivam se ale moc toho neni. Nevim jestli se na to nevykaslu a neudelam kosti
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: 4. únor 2010, 13:37:06    Předmět: Odpovědět s citátem

Celkem doporučuju exportovat to tak, jak sem psal: Z maxu jednoduše a funkčně, ale s následným preprocessem. Výhoda je, že ten preprocess můžeš napsat až později, až bude potřeba optimalizovat. Neni to žádnej hardcore a budeš mít dobrej pocit z toho, že máš "čistý" data. To že se max občas chová podivně, to se ví.
_________________
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
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 4. únor 2010, 15:39:09    Předmět: Odpovědět s citátem

]semo[: vyresil jsem to timhle

kód:

                     for v = 1 to tmesh.numverts do
                     (                         
                      local TexFaces = (meshop.getFacesUsingVert tmesh v) as array
                      local TexVert = 0
                      local MeshFace = getFace tmesh TexFaces[1]
                      local MappingFace = meshop.getMapFace tmesh 1 TexFaces[1]

                      if MeshFace.x == v then(
                         TexVert = MappingFace.x
                      ) else if MeshFace.y == v then(
                         TexVert = MappingFace.y
                      ) else (
                         TexVert = MappingFace.z
                      )
                      
                      local VertUVW = meshop.getMapVert tmesh 1 TexVert
                         vert = getVert tmesh v       
                     
                     format "\nv % % % % %" (vert.x*-1) (vert.y) (vert.z) (VertUVW.x) (VertUVW.y*-1.0+1.0) to:out_file
                     )

normaly takle jak jsou mi bohate staci protoze pri perpixelu neni problem a jak jsem rikal ogl svetlo budu pouzivat jenom pri vypnutym bumpmappingu atd. Pri modelech +12 facu se neda poznat ze je nekde problem takze to neresim.
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: 4. únor 2010, 16:02:20    Předmět: Odpovědět s citátem

A to skutečně funguje? Co když budeš mít u jednoho vertexu 2 nebo víc texturových koordinátů?
_________________
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 -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2, 3  Další
Strana 1 z 3

 
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