Programarea sistemului pe QC;)
Creați fișierele de script QC pentru compilarea modelelor de jocuri 3D în format MDL
Pe scurt, articolul compilează o listă de comenzi comune pentru compilatorul studiomdl cu parametri, descrieri și exemple. Să începem cu cele de bază:
$ modelname
Această comandă îi spune studiomdl cum să numească și unde să plaseze modelul compilat.
Exemplu pentru modelul Gordon.mdl:
$ modelname "C: \ Half-Life \ supapă \ modele \ player \ Gordon.mdl"
Un exemplu care specifică numai numele modelului și, prin urmare, stochează în dosarul curent:
$ modelname "shlang.mdl"
$ cd
Această comandă indică compilatorului studiomdl directorul curent de lucru. Comanda funcționează la fel ca în comanda DOS "cd".
un exemplu de cale relativă la același director în care este localizat fișierul .qc:
$ cd "."
un exemplu de cale absolută:
$ cd "C: \ Half-Life \ supapă \ modele \ sursă \ Gordon"
$ cdtexture
Această comandă îi spune compilatorului studiomdl unde se află texturile.
Un exemplu de cale absolută:
$ cdtexture "C: \ Half-Life \ supapă \ modele \ sursă \ Gordon \ texturi"
Un exemplu de cale relativă din dosarul curent în subfolderul de texturi:
$ cdtexture "." texturi "
$ texte externe
Această comandă spune studiomdl că este necesar să salvați texturile model ca un fișier * t.mdl separat. (Aici, sub asterisc, numele modelului utilizat în fișierul model principal * .mdl este înlocuit automat). Ghidul de „Modelare si animarea pentru Half-Life“, spune echipa de $ externaltextures nevoie de aceste modele, care sunt adesea cauzate de motor, dar nu apar pe ecran pentru ei separat de grila de stocare textura va duce la o accelerare a randare grafică.
exemplu:
$ texte externe
De asemenea, dezvoltatorii au conceput această comandă pentru comoditatea înlocuirii texturilor în unele modele înlocuind fișierul * t.mdl selectat, fără a atinge datele volumetrice. Pe scurt, acum această oportunitate nu este folosită des.
$ cliptotexturi
Această comandă spune studiomdl dacă să compileze texturile cu modelul. Acesta este de obicei utilizat cu modele de jucători pentru dezmatch.
exemplu:
$ cliptotexturi
$ scară #
Scara modelului este mai mare sau mai mică. Valoarea implicită este întotdeauna 1.
un exemplu care îl mărește de 1,2 ori:
$ scară 1.2
$ origine
Aceasta este deplasarea originii modelului. Acest parametru este necesar pentru ajustarea modelului, dacă, de exemplu, faceți un model deasupra lui 0 pe coordonata Z, atunci trebuie să specificați cât de mult ați plasat-o. În caz contrar, modelul nu va fi afișat corect pe ecran. Atenție: după decompilarea modelului de arme din mișcarea CS a mâinilor, nafiul nu merge acolo unde vreți, iar cu ajutorul acestei comenzi puteți să întoarceți modelul mâinilor înapoi fără a modifica animația.
exemplu de corecție a axei Z:
$ origine 0 0 36
$ ochi
Pentru roboți sau monștri într-un singur joc, trebuie să spuneți jocul în care ochii monștrilor sunt relativi la originea modelului. De exemplu, din cauza poziției greșite a ochilor, el poate să nu vadă nimic din cauza blocajului ghemuit, deși modelul arată mai mult decât blocul de 4 ori și apoi îl puteți fixa la vedere.
un exemplu de înălțime a ochilor la nivelul a 65 de unități deasupra solului (aproximativ la o altitudine de 1,6 metri, presupunând că 40 de unități pe 1 m):
Poziția ochi 0 0 65
$ bbox (min pe x) (min pe y) (min pe z) (max pe x) (max pe y) (max la z)
Definește un paralelipiped al dimensiunilor hărții orientate de-a lungul axelor X, Y și Z. Permite motorului grafic să cunoască lungimea modelului. Este util să cerem modele mari care să nu poată fi trase fără ea, atunci când se uită la obstacole aparent mici. Deseori această cutie este centrată în lungime și lățime, atunci când (min în x) = - (max pe x) și (min pe y) = - (max pe y). De asemenea, Solicitarea înălțime (la max z), în ciuda faptului că partea de jos, la nivelul podelei, astfel încât cerut (min, z) = 0. Site-ul valvesoftware.com scrie, că aceasta este, de asemenea, numit cadru (Engl. Hull. Dar nu de tăiere a corpului adică nu este același cu scheletul limitelor coliziunilor).
Un exemplu de copac cu o înălțime de aproximativ 6 metri:
$ bbox -48 -48 0 48 48 240
$ cbox (min pe x) (min pe y) (min pe z) (max pe x) (max pe y) (max la z)
Definește un paralelipiped al dimensiunilor coliziunilor.
NB. Va fi necesar să verificați dacă în dimensiunile sale vă veți odihni în joc atunci când modelul este inserat în harta jocului folosind obiectul cicler?
Exemplu de obiect de mărimea unei persoane:
$ cbox -16 -16 0 16 16 72
$ texturegroup
Comanda permite modelului dvs. să aibă texturi interschimbabile. Acest exemplu arată cum texturile normale ale capului și corpului pot fi înlocuite în joc cu texturi sângeroase. Asigurați-vă că ați activat extensia .bmp.
Exemplul presupune că modelul rețelei are inițial texturi body_normal.bmp și head_normal.bmp:
$ durere texturegroup
<"body_normal.bmp" "head_normal.bmp">
<"body_pain.bmp" "head_pain.bmp">
>
$ renamebone
Character Studio versiunea 2.x și mai în vârstă utilizează un nume diferit pentru unele oase ale unui animal cu două picioare. Dacă amestecați modele sau animații din versiunile anterioare, acestea trebuie redenumite. Cu această comandă, puteți redenumi cu ușurință zarurile la momentul compilării, în loc să le redenumiți în fiecare fișier original .max.
exemplu:
$ renamebone "Bip01 R Claviculă" "Bip01 R Arm"
$ include
Pentru a include un alt fișier .cc în compilație.
exemplu:
$ includ "C: \ Half-Life \ val \ modele \ player \ player_shared.qc"
$ atașament
Specifică un anumit punct din spațiu care se alătură vârfului scheletului dat. Acesta este setat pentru a reproduce de la locul său diferite efecte, de exemplu, cum ar fi focul de foc, sprite, sparking etc. Coordonatele specifică îndepărtarea unui punct din vârful scheletului.
exemplu:
$ atașament 0 "Bip01 R Hand" 20 2 5
$ controlor
Această comandă permite jocului să controleze rotația axelor modelului, adică oase. Exemplul cel mai evident este rotirea capului monstru, în exemplul 1. Comanda permite jocului să rotească capul de la -60 grade la +60 de-a lungul axei X. Exemplul 2 arată cum se face controlerul gurii astfel încât monstrul să poată vorbi.
Exemplul 1:
$ controler 0 "Bip01 Head" XR -60 60
exemplul 2:
$ controler gura "Bone03" ZR 0 45
Notă: acțiunea r_drawentities 0 din consola va ascunde toate entitățile și funcționarea cu valorile 1, 2 și 3 din ilustrație:
$ gamma
Specifică raportul de contrast al cartografierii texturii modelului (cu alte cuvinte, coeficientul c). Implicit, acest factor este setat la 1,8.
Un exemplu care crește contrastul texturii modelului cu 3.2:
$ gamma 3.2
Și acesta este un exemplu al influenței raportului de contrast asupra cartografierii modelului gnome pentru valorile 5, 3 și 1.8:
$ sequencegroupsize
Aceasta separă fișierele de animație scheletică de modelul de ochiuri de plasă în fișiere mai mici. Este necesar ca animațiile să fie încărcate în memorie numai atunci când este necesar, în loc să le descărcați pe toate. Acest lucru este util pentru monștri cu un script de animație dat. Adevărat, calculatoarele moderne sunt rareori împovărate cu astfel de lucruri, deci nu le puteți folosi decât dacă optimizați jocul pentru telefoane mobile.
Exemplu de defalcare de 64 KB:
$ sequencegroupsize 64
$ secvență "smd" [extracție de mișcare] [fps] [amestec] [origine] [scală] [buclă] [cadru] ["activitate" multiplicator]
Comanda stabilește compilatorul un fișier de tip .smd cu mișcare.
[fps] Setează viteza de redare a cadrelor de animație pe secundă ("cadre pe secundă" este exact numărul de "cadre pe secundă").
exemplu: fps 15
[blend] Puteți să listați două fișiere de animație .smd și să le amestecați împreună. Acesta este adesea folosit pentru a combina animațiile de fotografiere ale unui monstru în jos atunci când se declanșează dintr-un deal, și ardere în sus atunci când acesta trage la țintele care zboară. Cu ajutorul amestecării, o versiune intermediară a mișcării este obținută automat pentru fotografiere directă. Acest exemplu combină mișcarea de la -45 la +45 grade în axa X. Parametrul nu este pe deplin înțeles, dar îl puteți găsi în modelele soldaților și experimentați.
exemplu: amestec XR -45 45
[origine] La fel ca originea $, dar se aplică numai acestei animații.
exemplu: origine 0 0 13
[scale] este aceeași cu scala $, dar se aplică numai mișcării date.
exemplu: scara 1.3
[loop] indică faptul că animația este cuplată, adică vor fi jucate fără sfârșit până când se va apela la următoarea mișcare.
exemplu: buclă
[frame] Acest lucru restricționează redarea cadrelor de mișcare.
exemplu: cadrul 5 10
["multiplicator" de activitate] Dacă aveți mai multe mișcări, de exemplu o lovitură de la aceeași armă, atunci această comandă va spune jocului că această mișcare ar trebui jucată de 3 ori mai des decât restul.
exemplu:
ACT_RANGE_ATTACK2 3
se înțelege că mișcarea ACT_RANGE_ATTACK2 este deja specificată în codul programului al obiectului.
['rotate'] Roti mișcarea în unghiul specificat
Exemplu, care transformă mișcarea setată cu un sfert de tură:
roti -90
Evenimente pe care această animație le poate declanșa. Parametrul nu se modifică prea mult, dar este foarte util pentru crearea de efecte diferite. Cinci mii de evenimente, i. care încep cu cele cinci - 5XXX sunt procesate de clientul motorului de joc și, prin urmare, sunt importante pentru proiectarea modelului în joc. Evenimentele de la 0XXX la 4XXX lucrează cu motorul motorului și gestionează mai multe sarcini globale, cum ar fi interacțiunile cu comanda sau schimbarea stării obiectului.
Important este ca evenimentele 5XXX să poată fi solicitate: reproducerea sunetului, afișarea unui sprite la un anumit punct, aruncarea scântei sau efectuarea altceva dacă pre-programați ceea ce aveți nevoie.
Exemplul 1:
Cazul 5004 - redați sunetul, pornind de la 1 cadru. Introduceți calea care începe cu dosarul modului dvs. Începătorii aici se vor întâlni cu o mică zamorochka, care este descrisă după acest exemplu.
Exemplul 2:
Evenimentele 5001, 5011 și 5021 sunt pentru sprites, în special focul și fumul de arme. Acest exemplu pornește sprite din pușca de asalt MP5, muzzleflash1.spr cu sistemul de coordonate din cadrul 1. "20" indică faptul că scara sprite # 0 va fi mărită de 2 ori. Mai jos este o listă de sprite cu numere ordinale și descriere pentru ce sunt folosite:
50 A1: muzzleflash1.spr - MP5
51 A1: muzzleflash2.spr - pistol, pistoale
52 A1: muzzleflash3.spr - Alicante dart sau "gheare" dart
Sprites trebuie să fie definit punctul de atașare, numărul care determină penultima figura A. Cazul 5001 face acest lucru, la originea sprite a fost de $ cu 0 atașament, origine sprite 5011th - la $ 1 atașament și 5021st origine - în $ atașament 2 (și astfel puteți atribui până la 9 atașamente).
Exemplul 3:
Cazul 5002 este pentru scântei. Aici este jucat cu privire la sistemul de coordonate 10 și dimensiunea lor este mărită de 5 ori.
Exemplul 4:
Este doar un caz de lansări # 7 la sistemul de coordonate 2. Cazul 7 poate fi orice, dar trebuie să fie specificat în codul ARTIFICIAL monstru INTELIGENȚĂ.
Exemplul 5:
Cazul 1003 declanșează un mecanism în hartă numit "bigexplozion" cu privire la sistemul de coordonate 20.
Iată exemplele comenzii de secvență $:
Primul exemplu:
$ secvență crouch_shoot_mp5 "crouch_shoot_mp5"
O echipă foarte simplă care conține minimul necesar pentru a funcționa. Crouch_shoot_mp5 - numele animației și "crouch_shoot_mp5" - un fișier de animație fără extensia .smd.
Al doilea exemplu:
$ secventa trage "trage" <
Acest exemplu folosește astfel de evenimente pentru a arăta munca spritelor și sunetul armei de ardere. Se presupune că sunetul este încărcat motor de joc hks1.wav în obiectul de cod pre-programate (de exemplu, un monstru, un dispozitiv de caracter), în caz contrar pe carduri care folosesc acest model va avea nevoie pentru a descărca un fișier audio prin orice obiect care permite încărcați un sunet arbitrar, de exemplu, în Half-Life și CS utilizați de obicei ambient_generic.
Un exemplu de fișier mai simplu:
// numele modelului viitor
$ modelname "proba.mdl"
// fișierele de plasă și animații sunt preluate din dosarul curent
$ cd "."
// fișierele de textură sunt preluate din dosarul curent
$ cdtexture "."
// model vector din fișierul proba_ref.smd
corpul corpului "proba_ref"
// 1 animație unică (7 cadre / secunde) din fișierul idle1.smd
$ secvență "idle1" "inactiv" fps 7
Exemplu pentru modelul din joc Opposing-Force:
// numele modelului de gardă completă din jocul Opposing Force
$ modelname "otis.mdl"
// calea către fișierele de model
$ cd "."
// calea către texturile modelului
$ cdtexture "."
// scară 1: 1
$ scară 1.0
// coordonatele paralelipipedului afișajului (pentru o persoană completă - dimensiuni mari)
$ bbox -17 -17 0 17 17 72
// coordonatele paralelipipedului de coliziuni
$ cbox -16 -16 0 16 16 72
// înălțimea ochilor, la fel ca în tot umanoidul
$ opozitie 0.000000 0.000000 63.000000
// model file otis_body_reference.smd
$ body studio "otis_body_reference"
// grup de submodele de arme
$ arma de grup
// În mod implicit, pistolul din tocul este luat din fișierul grid otis_reference_wgunnholster.smd
studio "otis_reference_wgunnholster"
// arma în mâini
studio "otis_reference_wgun"
// în mâna dreaptă gogoasa
studio "otis_donut_reference"
>
// grup de submodele de capete
$ capete de grup
// capul implicit din fișierul otis_head_bald_wht2_reference.smd
studio "otis_head_bald_wht2_reference"
studio "otis_head_bald_wht_reference"
>
// 1 Atașament la locația butoiului, unde este tras focul sprite
$ atașament 0 "Bip01 R Hand" 12.000000 3.000000 4.500000
// 2 controler: gâtul poate fi rotit
$ controler 0 "Bip01 Head" XR -60.000000 60.000000
// și deschide gura în timpul unei conversații
$ controler gura "Bone05" ZR 0.000000 45.000000
// mișcare:
// trafic inactiv în mod repetat cu activitate în așteptare ACT_IDLE (specificată în cod) cu parametrul 50:
$ secvență "idle1" "idle1" fps 15 buclă ACT_IDLE 50
// mișcare idle 15 cadre / s cu apelul inactiv ACT_IDLE (setat în cod) cu parametrul 1:
$ secvență "idle2" "idle2" fps 15 ACT_IDLE 1
.
// distanta miscare repetitive cu trecerea de translație a X (LX), cu o activitate de apel ACT_WALK (așa cum este specificat în codul) cu parametrul 1 și sunete npc_step1.wav în timpul etapelor 3 și cadru npc_step3.wav în timpul unui cadru 18:
$ secventa "plimbare" "plimbare" LX fps 30 buclă ACT_WALK 1
// Eveniment mișcare repetitivă cu o schimbare de X cu activitatea de mers în gol de apel ACT_RUN (în codul) cu parametrul 1 și sunete npc_step2.wav în timpul etapelor 5 și npc_step4.wav în timpul 13 fotografii:
$ secvență "run" "run" LX fps 25 buclă ACT_RUN 1
// ardere mișcare pentru a apela activitatea de atac la distanță ACT_RANGE_ATTACK1 (în cod) cu parametrul 1 și la zero atașamente Flash Sprite muzzleflash1.spr, de 21 de ori marite, pe parcursul a 2 cadre eveniment + 3 (în cod, și, eventual, bumbacul emisiilor sonore mâneci) în timpul acelorași 2 cadre. Mai important de notat Uniți două mișcări de shootgun_blend1.smd, atunci când Otis șutează un unghi de 50 ° în jos, și când shootgun_blend2.smd șutează un unghi de 50 ° în sus în raport cu poziția orizontală, acestea vor combina motorul de joc în funcție de poziția țintă:
$ Sequence "shootgun" "shootgun_blend1" "shootgun_blend2" amestec XR -50 50 fps 25 ACT_RANGE_ATTACK1 1
.
// rândul său, la stânga, cu apelul la rândul din stânga ACT_TURN_LEFT (setat în cod) cu parametrul 1:
$ secvență "turnul" "turnul" fps 15 ACT_TURN_LEFT 1
// virați dreapta cu apelul de activitate ACT_TURN_RIGHT pentru a porni dreapta cu parametrul 1:
$ secvența "turnright" "turnright" fps 15 ACT_TURN_RIGHT 1
.
// mișcare de 22 cadre / s, când Otis dă o mână unei persoane:
$ secvența "barn_wave" "barn_wave" fps 22
.
Vă mulțumim persoana sub numele Spider descrierea pentru comenzile de compilare în limba engleză și dezvoltatorii de la id Software and Company Valve pentru motorul de joc Half-Life și instrumente.
<<Назад в раздел "Статьи"