SerweryWłasny serwerDla twórcówForumFAQDokumentacjaBezpieczeństwo
Pobierz launcher
  1. Trilogy Hub
  2. Dla twórców
  3. Generator kolizji

Generator kolizji

Wrzuć model, ustaw liczbę trójkątów i pobierz gotowy plik .col. Wszystko liczy się w Twojej przeglądarce, plik nigdzie nie jest wysyłany.

Po co osobna kolizja?

Postacie, auta i kule w GTA SA odbijają się od kolizji modelu, nie od tego, co widać. Ładny model ma dziesiątki tysięcy trójkątów, a kolizja potrzebuje ich dużo mniej: mniej pracy dla gry przy każdym kroku, strzale i zderzeniu.

Generator robi plik .col w formacie COL3, takim samym jak w grze. Upraszcza model metodą QEM (łączy krawędzie tam, gdzie kształt prawie się nie zmienia), więc płaskie ściany, kąty i krawędzie zostają na miejscu nawet przy małej liczbie trójkątów. Pod podglądem widzisz, o ile najbardziej i średnio kolizja odstaje od modelu.

Krok po kroku

  1. Wrzuć model na pole wyżej. Model .gltf wrzuć razem z plikiem .bin (zaznacz oba naraz).
  2. Wybierz tryb i liczbę trójkątów. Wynik liczy się sam po każdej zmianie; pomarańczowa siatka w podglądzie to kolizja.
  3. Odznacz materiały bez kolizji (szyby, liście, firanki) i ustaw powierzchnię: domyślną dla całości albo osobną dla materiału.
  4. Pobierz plik .col, włóż go do zasobu obok modelu i wpisz w meta.xml.
  5. Wczytaj go w skrypcie klienta przed podmianą modelu:
<!-- meta.xml -->
<file src="lampa.glb" />
<file src="lampa.col" />
<script src="client.lua" type="client" />

-- client.lua
local col = engineLoadCOL(":moj_zasob/lampa.col")
engineReplaceCOL(col, 1337)
engineReplaceModel(engineLoadMesh(":moj_zasob/lampa.glb"), 1337)

Osie i jednostki są liczone tak samo jak przy engineLoadMesh, więc kolizja leży dokładnie pod modelem, bez przesuwania.

Który tryb wybrać?

TrybCo robiDo czego
SiatkaUproszczona siatka trójkątów, dokładnie wzdłuż modelu.Budynki, wnętrza, schody, rampy, wszystko z wklęsłościami.
OtoczkaNajmniejsza wypukła bryła, która obejmuje cały model.Kamienie, rzeźby, skrzynie o nieregularnym kształcie. Bez wnęk i przejść.
PudełkaKilka prostopadłościanów ułożonych z wokseli.Meble, ogrodzenia, stragany. Bardzo tanie dla gry.
PudełkoJedno pudełko na wymiar modelu.Skrzynie, kontenery, automaty.
KulaNajmniejsza kula wokół modelu.Beczki, piłki, krzaki, drobne przedmioty.

Ile trójkątów ustawić?

  • 50–300: drobne przedmioty: słupek, ławka, kosz.
  • 300–1500: meble, auta-dekoracje, małe budynki.
  • 1500–6000: budynki z wnętrzem, mosty, rampy do jazdy.
  • Do 12 000: duże kawałki mapy. Więcej zwykle nie poprawia jazdy, a obciąża grę.

Patrz na „największy błąd kształtu”. Do chodzenia wystarcza kilka centymetrów; jeśli błąd rośnie do dziesiątek centymetrów, postać będzie wisieć w powietrzu albo wchodzić w ściany. Format COL3 mieści najwyżej 65 535 trójkątów, a model musi się zmieścić w 255 m od swojego środka.

Materiały i powierzchnie

Lista materiałów pokazuje, z czego składa się model. Materiały, które wyglądają na przezroczyste (szkło, okna, liście, tekstury z alfą), są od razu odznaczone: drzewo koliduje pniem i gałęziami, nie koroną. Możesz to zmienić.

Powierzchnia decyduje o dźwięku kroków, iskrach przy strzale i śladach opon. Ustaw jedną dla całości albo inną dla każdego materiału, np. drewno dla podłogi i szkło dla okien. Powierzchnia działa w trybie „Siatka”; pudełka, otoczka i kula dostają powierzchnię domyślną.

Formaty i osie

  • FBX (binarny i tekstowy): jednostki i oś pionowa z pliku, przekształcenia obiektów.
  • OBJ, glTF, GLB: oś Y w górę zamieniana na Z w górę, jak w grze. glTF z przekształceniami węzłów.
  • DFF z GTA SA: ramki RenderWare; pomija modele LOD (_vlo), części uszkodzone (_dam) i koła.
  • 3DS, STL, PLY: współrzędne bez zmian, w metrach.
  • COL: wrzuć gotowy plik .col (COLL, COL2, COL3, COL4), żeby obejrzeć jego kolizję.

Jeden metr w grze to jedna jednostka. Model z Blendera zapisany w metrach ma od razu dobry rozmiar; podgląd pokazuje wymiary pod obrazem.

Bez pliku: kolizja liczona w grze

Ten sam generator jest w kliencie gry. engineReplaceModel bez pliku .col robi kolizję sam (do 12 000 trójkątów, bez przezroczystych materiałów). Własne ustawienia podajesz w engineGenerateCOL:

local mesh = engineLoadMesh(":moj_zasob/dom.fbx")
local col = engineGenerateCOL(mesh, { mode = "mesh", triangles = 2500, material = 43, skipTransparent = true })
if col then
  engineReplaceCOL(col, 1337)
  outputChatBox(("kolizja: %d z %d trojkatow, blad %.2f m"):format(col.generatedFaces, col.originalFaces, col.deviation or 0))
end

Gotowy plik jest lepszy dla dużych modeli: gra nie liczy nic przy wejściu na serwer, a Ty widzisz wynik przed wydaniem. Pod podglądem generatora jest gotowe wywołanie z Twoimi ustawieniami. Wszystkie opcje opisuje dokumentacja engineGenerateCOL.

Problemy

  • Postać przechodzi przez ścianę: ściana jest za cienka albo za mało trójkątów. Zwiększ liczbę trójkątów albo pogrub ścianę w modelu.
  • Postać wisi nad podłogą: sprawdź „największy błąd kształtu” i zwiększ liczbę trójkątów. W trybie „Otoczka” wnęki są zawsze zamknięte.
  • Kolizja jest obok modelu: model ma przesunięty środek albo niezastosowane przekształcenia. W Blenderze: Object → Apply → All Transforms, potem eksport.
  • „Model sięga dalej niż 255 m”: podziel model na kilka obiektów.
  • Brakuje pliku .bin: zaznacz razem .gltf i .bin albo zapisz model jako .glb.

Grove Street czeka.