Ahojte, po siedmich rokoch som sa nostalgicky pozrel spat na toto forum a ono este stale existuje Nedokazal som si obnovit stary ucet, email uz je zruseny tak aspon takto sa hlasim
Dnes budeme zapékat. Nejprve budeme potřebovat spoustu prazvláštních ingrediencí a pojedeme podle nekonvenčních receptů. Ke konci se dostaneme k našemu známému VHE, kde si ukážeme nový typ servírování.
Červenci jste mohli zahlédnout video, ve kterém jsem prezentoval možnost fyzikální simulace "přímo v mapě" - bez žádného módu. Nechtěl jsem o tom moc mluvit, protože jsem tento trik chtěl využít v mapě Pozdemí. Teď je na čase odhalit, jak to celé vlastně (ne)funguje.
Ve VHE vytvoříme mapu a všechny objekty, které chceme aby se v simulaci hýbaly, převedeme na entity. Je v podstatě jedno, jaké entity zvolíme, protože nám jde jen o oddělení od brushů.
Jako ukázku jsem připravil pár beden stojících na dvou prknech, přičemž jedno z nich praskne.
Mapu stačí zkompilovat pouze s CSG a BSP. U BSP je dobré použít parametr -subdivide 512, aby se nevytvořilo moc faců.
Zkompilované BSP otevřeme v BSP Vieweru. Důležité je, aby byl každý objekt ve své vlastní entitě, jinak by se provedly optimalizace a zahodily by se facy, které se dotýkají.
V BSP Vieweru klepneme na File -> Export -> 3DS File. V okénku zaškrtneme Export Materials a uložíme 3ds soubor.
Simulace v Blenderu
Pokud je toto vaše první zkušenost s Blenderem, tak se připravte na to, že to bude kruté. Bude to horší jak práce s GIMPem, dokonce možná horší jak práce s Inkscape, a to je co říct.
Po nainstalování Blenderu je potřeba nainstalovat skripty rba2ba a SMD Tools, takže je nakopírujeme do složky Blender\verze\scripts\addons\ a následně je povolíme v File -> User Preferences -> Addons (je tam toho spousta, tak použijte hledání).
Teď naimportujeme náš soubor přes File -> Import -> 3D Studio (.3ds).
Na horní liště zvolíme místo Blender RenderBlender Game. Dále roztáhneme pravý panel tak, abychom mohli klepnout na ikonku Physics.
Nyní pro každý objekt nastavíme Physics type:Rigid Body, zaškrtneme Collision Bounds a vybereme typ Bounds. V našem případě to pro krabice a zadní prkno bude typ Box, pro části předního prkna použijeme Convex Hull.
Dále označíme všechny objekty, stiskneme intuitivní klávesovou zkratku Shift+Ctrl+Alt+C a zvolíme možnost Origin to Geometry. Přepneme na záložku World.
Nastavíme Gravity: 800. Teď je čas zkusit simulaci, takže stiskneme klávesu P a posoudíme, jestli vypadá dobře, či ne. Pokud malé objekty padají skrz podlahu, nastavte větší počet Substeps. Pokud se vám aktuální simulace nelíbí, zkuste si trochu pohrát s gravitací. I malé změny gravitace ovlivní simulaci a lze nimi "opravit" všemožné bugy.
Až se vám bude simulace líbit, zaškrtněte Game -> Record Animation. Po nahrání animace smažeme objekty, které sloužily pouze jako překážky - brushe.
Opět označíme všechny objekty, stiskneme mezerník, napíšeme rba2ba a klepneme na Rigid body anim to bone anim.
Tím se nám vytvoří kosti potřebné pro export animace. Ještě musíme dát všechny objekty do jedné skupiny, takže je označíme a stiskneme Ctrl+G.
Nakonec exportujeme SMD přes File -> Export -> Source Engine, zvolíme Scene as configured a to je pro blender vše.
Kompilace MDL
Z Bledneru jsme sice dostali SMD, ale v něm potřeba udělat ještě několik úprav, takže spustíme smdfix.vbs Group.smd out.smd. Tím se zkonvertuje smd na starší verzi, opraví se názvy textur a UV mapy se jakž-takž zarovnají na texturu. Do složky s smd budeme potřebovat dostat textury použité na objektech ve formátu bmp. Pokud jste použili originální textury, vyexportujte je přes Wally. Ještě potřebujeme QC soubor, takže si jeden vytvoříme a dovnitř napíšeme: $cd "."
$body "body" "out"
$sequence "idle" "anims/ArmatureAction" fps 50
Soubor uložíme a zkompilujeme přes studiomdl.exe.
Spínaná animace ve VHE
Všude dobře, doma nejlíp. Vytvoříme entitu cycler, nastavíme jí náš model a otočíme / posuneme ji tak, aby se náš model překrýval s připravenou scénou. Entity, které jsou nyní součástí modelu, smažeme.
Entita cycler má oproti cycler_sprite dvě výhody:
- když je cycler sepnut (přes E nebo klasicky přes target), animace modelu se pozastaví / spustí
- když je cycler zasažen, přepne se animace na další v seznamu (spustí se další sequence)
Narozdíl od cycler_sprite má taky kolizní box o velikosti standartní postavy, který většinou překáží.
Vrátíme se do nastavení cycleru, nastavíme mu nějaké jméno, např. mdl_cycler; pak vypneme SmartEdit a přidáme: sequence 1
framerate 1
Zvolením neexistující sequence dosáhneme toho, že je animace na začátku zapauzovaná.
Dále budeme potřebovat něco, co cycler zasáhne. Tady se dostáváme do bodu, kdy to začíná nefungovat. Někdy totiž funguje env_explosion, někdy trigger_hurt a někdy env_laser. Něco z toho si tedy vybereme a pojmenujeme to mdl_hit.
Vytvoříme multi_manager, pojmenujeme ho mdl_mm a přidáme hodnoty: mdl_cycler 0
mdl_hit 0.01
mdl_cycler#1 2.35
Třetí číslo závisí na délce vaší animace, takže se vrátíme k souboru anim/ArmatureAction.smd, sjedeme až dolů, mrkneme se na poslední řádek začínající time a opíšeme si číslo posledního framu, v mém případě time 118. Toto číslo vydělíme fps uvedeným v našem QC souboru a zaokrouhlíme, pro jistotu můžeme odečíst jednu setinu. V mém případě (118/50)-0.01 = 2.35.
Nakonec budeme potřebovat něco na spuštění multi_manageru, já jsem použil non-solid button_target.
Závěrem
Není problém místo Blenderu použít např. 3ds Max s Rayfire, výsledek by rozhodně vypadal lépe, nicméně je to komerční řešení.
Pokud se vám nelíbí pauzování na začátku a konci animace, je možnost vytvořit si dvě idle animace, kdy první bude počáteční stav, druhá bude vyexportovaná z Blenderu a třetí bude koncový stav. Pak stačí jen zasáhnout cycler při spuštění a při resetu animace.
V článku neuvádím jak na kolizi. V Podzemí jsem ji řešil přes func_wall_toggle, také by šla řešit přes func_train, dělat ji ale manuálně by byla spousta práce, takže pokud by si to někdo chtěl vyzkoušet, mohl bych se pokusit napsat utilitku na vygenerování path_cornerů z SMD animace.
Pokud je animace tak velká, že ji studiomdl odmítne zkompilovat, je potřeba se vrátit do blenderu a zmenšit scale časové osy. Samozřejmě je to pak potřeba vyrovnat snížením fps v QC souboru.
Přidal/a Backup
dne 06.10.2012 16:35:12 ·
7 Komentářů ·
65087 x Přečtené ·
Když do mapy includneš všechny textury (parametr -nowadtextures u CSG), tak je pak můžeš z BSP Vieweru vyexportovat přes File -> Export -> Bitmaps. Když je vyexportuješ do stejné složky kde máš to 3ds, tak je pak uvidíš i v Blenderu. Je tam ale nějaký háček - když jsem to renderoval, jen pár faců bylo ve finále opravdu otexturováno.
Co má být koncový výsledek? Možná existuje lepší řešení než takovéhle krkolomné.
Cíl by měl být minimálně dostat ty textury do blenderu tak, jak byly v hammeru, ideální by bylo aby fungoval i ten render. Zkusím to co jsi psal, jestli se to dobře vyrenderuje.
Edit: Tak z 50% úspěšnost, textury se mi sice do blenderu přidaly, ale zřejmě v invertním provedení (na obr. je zobrazení "texture" ). Na render to pak vypadá asi tak jako na tom tvym obrázku.
Textury ve složce s .3ds souborem mají normální barvu.
Teď jak na to:
1, Stáhni si Crafty.
2, Stáhni si http://tvorbamap....meInfo.csf a n ahraď tím soubor Program Files/Nem's Tools/Crafty/Specifications/GameInfo.csf
3, V nastavení Crafty nastav složku se steamem a pokud v seznamu UserName nebude na výběr tvůj účet, napiš tam common.
4, V Crafty dej Setup -> Profiles -> Counter-Strike
5, Otevřeš mapu a dáš Export, export do .obj.
6, Obj importneš do Blenderu a správě otočíš.
Pokud tam nebudeš mít textury, zkontroluj si, že v nastavení Crafty záložka Exporting máš zaškrtlé Textures.