Skip to content

Capitolo 4.2: Modelli 3D (.p3d)

Home | << Precedente: Texture | Modelli 3D | Successivo: Materiali >>


Introduzione

Ogni oggetto fisico in DayZ -- armi, abbigliamento, edifici, veicoli, alberi, rocce -- è un modello 3D memorizzato nel formato proprietario P3D di Bohemia. Il formato P3D è molto più di un contenitore di mesh: codifica più livelli di dettaglio, geometria di collisione, selezioni per animazioni, punti di memoria per attacchi ed effetti, e posizioni proxy per oggetti montabili. Comprendere come funzionano i file P3D e come crearli con Object Builder è essenziale per qualsiasi mod che aggiunge oggetti fisici al mondo di gioco.

Questo capitolo copre la struttura del formato P3D, il sistema LOD, le selezioni nominate, i punti di memoria, il sistema proxy, la configurazione delle animazioni tramite model.cfg e il flusso di lavoro di importazione da formati 3D standard.


Indice dei Contenuti


Panoramica del Formato P3D

P3D (Point 3D) è il formato di modello 3D binario di Bohemia Interactive, ereditato dal motore Real Virtuality e portato avanti in Enfusion. È un formato compilato, pronto per il motore -- non scrivi file P3D a mano.

Caratteristiche Principali

  • Formato binario: Non leggibile dall'uomo. Creato e modificato esclusivamente con Object Builder.
  • Contenitore multi-LOD: Un singolo file P3D contiene più mesh LOD (Livello di Dettaglio), ognuna con uno scopo diverso.
  • Nativo del motore: Il motore DayZ carica P3D direttamente. Nessuna conversione a runtime.
  • Binarizzato vs. non binarizzato: I file P3D sorgente da Object Builder sono "MLOD" (modificabili). Binarize li converte in "ODOL" (ottimizzati, sola lettura). Il gioco può caricare entrambi, ma ODOL si carica più velocemente ed è più piccolo.

Tipi di File che Incontrerai

EstensioneDescrizione
.p3dModello 3D (sia MLOD sorgente che ODOL binarizzato)
.rtmRuntime Motion -- dati keyframe delle animazioni
.bisurfFile proprietà superficiali (usato insieme al P3D)

MLOD vs. ODOL

ProprietàMLOD (Sorgente)ODOL (Binarizzato)
Creato daObject BuilderBinarize
ModificabileNo
Dimensione filePiù grandePiù piccola
Velocità di caricamentoPiù lentaPiù veloce
Usato duranteSviluppoRilascio
ContieneDati di modifica completi, selezioni nominateDati mesh ottimizzati

Importante: Quando impacchetti un PBO con la binarizzazione abilitata, i tuoi file P3D MLOD vengono automaticamente convertiti in ODOL. Se impacchetti con -packonly, i file MLOD vengono inclusi così come sono. Entrambi funzionano nel gioco, ma ODOL è preferito per le build di rilascio.


Object Builder

Object Builder è lo strumento fornito da Bohemia per creare e modificare modelli P3D. È incluso nella suite DayZ Tools su Steam.

Funzionalità Principali

  • Crea e modifica mesh 3D con vertici, spigoli e facce.
  • Definisci più LOD all'interno di un singolo file P3D.
  • Assegna selezioni nominate (gruppi di vertici/facce) per animazioni e controllo texture.
  • Posiziona punti di memoria per posizioni di attacco, origini particelle e sorgenti sonore.
  • Aggiungi oggetti proxy per oggetti collegabili (caricatori, ottiche, ecc.).
  • Assegna materiali (.rvmat) e texture (.paa) alle facce.
  • Importa mesh da formati FBX, OBJ e 3DS.
  • Esporta file P3D validati per Binarize.

Configurazione del Workspace

Object Builder richiede il drive P: (workdrive) configurato. Questo drive virtuale fornisce un prefisso di percorso unificato che il motore usa per localizzare gli asset.

P:\
  DZ\                        <-- Dati vanilla DayZ (estratti)
  DayZ Tools\                <-- Installazione strumenti
  MyMod\                     <-- Directory sorgente della tua mod
    data\
      models\
        my_item.p3d
      textures\
        my_item_co.paa

Tutti i percorsi nei file P3D e nei materiali sono relativi alla radice del drive P:. Ad esempio, un riferimento a un materiale all'interno del modello sarebbe MyMod\data\textures\my_item_co.paa.

Flusso di Lavoro Base in Object Builder

  1. Crea o importa la tua geometria mesh.
  2. Definisci i LOD -- come minimo, crea LOD Resolution, Geometry e Fire Geometry.
  3. Assegna materiali alle facce nel LOD Resolution.
  4. Nomina le selezioni per qualsiasi parte che anima, scambia texture o necessita di interazione via codice.
  5. Posiziona punti di memoria per attacchi, posizioni del flash della canna, porte di espulsione, ecc.
  6. Aggiungi proxy per oggetti che possono essere collegati (ottiche, caricatori, silenziatori).
  7. Valida usando la validazione integrata di Object Builder (Structure --> Validate).
  8. Salva come P3D.
  9. Compila tramite Binarize o AddonBuilder.

Il Sistema LOD

Un file P3D contiene più LOD (Livelli di Dettaglio), ognuno con uno scopo specifico. Il motore seleziona quale LOD usare in base alla situazione -- distanza dalla telecamera, calcoli fisici, rendering delle ombre, ecc.

Tipi di LOD

LODValore RisoluzioneScopo
Resolution 01.000Mesh visiva al massimo dettaglio. Renderizzata quando l'oggetto è vicino alla telecamera.
Resolution 11.100Dettaglio medio. Renderizzata a distanza moderata.
Resolution 21.200Basso dettaglio. Renderizzata a grande distanza.
Resolution 3+1.300+LOD di distanza aggiuntivi.
View GeometrySpecialeDetermina cosa blocca la vista del giocatore (prima persona). Mesh semplificata.
Fire GeometrySpecialeCollisione per proiettili e proiettili. Deve essere convessa o composta da parti convesse.
GeometrySpecialeCollisione fisica. Usata per collisione di movimento, gravità, posizionamento. Deve essere convessa o composta da decomposizione convessa.
Shadow 0SpecialeMesh per la proiezione ombre (a corto raggio).
Shadow 1000SpecialeMesh per la proiezione ombre (a lungo raggio). Più semplice di Shadow 0.
MemorySpecialeContiene solo punti nominati (nessuna geometria visibile). Usato per posizioni di attacco, origini suoni, ecc.
RoadwaySpecialeDefinisce le superfici percorribili sugli oggetti (veicoli, edifici con interni accessibili).
PathsSpecialeSuggerimenti per il pathfinding IA per gli edifici.

Valori di Risoluzione LOD (LOD Visivi)

Il motore usa una formula basata su distanza e dimensione dell'oggetto per determinare quale LOD visivo renderizzare:

LOD selezionato = (distanza_dall_oggetto * fattore_LOD) / raggio_sfera_contenente_oggetto

Valori inferiori = telecamera più vicina. Il motore trova il LOD il cui valore di risoluzione è la corrispondenza più vicina al valore calcolato.

Creare LOD in Object Builder

  1. File --> New LOD o click destro sulla lista LOD.
  2. Seleziona il tipo di LOD dal menu a tendina.
  3. Per i LOD visivi (Resolution), inserisci il valore di risoluzione.
  4. Modella la geometria per quel LOD.

Requisiti LOD per Tipo di Oggetto

Tipo OggettoLOD ObbligatoriLOD Aggiuntivi Consigliati
Oggetto portatileResolution 0, Geometry, Fire Geometry, MemoryShadow 0, Resolution 1
AbbigliamentoResolution 0, Geometry, Fire Geometry, MemoryShadow 0, Resolution 1, Resolution 2
ArmaResolution 0, Geometry, Fire Geometry, View Geometry, MemoryShadow 0, Resolution 1, Resolution 2
EdificioResolution 0, Geometry, Fire Geometry, View Geometry, MemoryShadow 0, Shadow 1000, Roadway, Paths
VeicoloResolution 0, Geometry, Fire Geometry, View Geometry, MemoryShadow 0, Roadway, Resolution 1+

Regole LOD Geometry

I LOD Geometry e Fire Geometry hanno requisiti rigorosi:

  • Devono essere convessi o composti da componenti convessi multipli. Il sistema fisico del motore richiede forme di collisione convesse.
  • Le selezioni nominate devono corrispondere a quelle nel LOD Resolution (per le parti animate).
  • La massa deve essere definita. Seleziona tutti i vertici nel LOD Geometry e assegna la massa tramite Structure --> Mass. Questo determina il peso fisico dell'oggetto.
  • Mantienilo semplice. Meno triangoli = migliori prestazioni fisiche. Il LOD geometry di un'arma potrebbe avere 20-50 triangoli vs. migliaia nel LOD visivo.

Selezioni Nominate

Le selezioni nominate sono gruppi di vertici, spigoli o facce all'interno di un LOD che sono etichettati con un nome. Servono come maniglie che il motore e gli script usano per manipolare parti di un modello.

Cosa Fanno le Selezioni Nominate

ScopoEsempio Nome SelezioneUsato Da
Animazionebolt, trigger, magazineSorgenti animazione model.cfg
Scambi texturecamo, camo1, bodyhiddenSelections[] in config.cpp
Texture dannozbytekSistema danni del motore, scambi materiale
Punti di attaccomagazine, optics, suppressorSistema proxy e attacchi

hiddenSelections (Scambi Texture)

L'uso più comune delle selezioni nominate per i modder è hiddenSelections -- la possibilità di scambiare texture a runtime tramite config.cpp.

Nel modello P3D (LOD Resolution):

  1. Seleziona le facce che dovrebbero essere ritexturizzabili.
  2. Nomina la selezione (ad es. camo).

In config.cpp:

cpp
class MyRifle: Rifle_Base
{
    hiddenSelections[] = {"camo"};
    hiddenSelectionsTextures[] = {"MyMod\data\my_rifle_co.paa"};
    hiddenSelectionsMaterials[] = {"MyMod\data\my_rifle.rvmat"};
};

Questo permette varianti diverse dello stesso modello con texture diverse senza duplicare il file P3D.

Creare Selezioni Nominate

In Object Builder:

  1. Seleziona i vertici o le facce che vuoi raggruppare.
  2. Vai a Structure --> Named Selections (o premi Ctrl+N).
  3. Clicca New, inserisci il nome della selezione.
  4. Clicca Assign per etichettare la geometria selezionata con quel nome.

Suggerimento: I nomi delle selezioni sono case-sensitive. Camo e camo sono selezioni diverse. La convenzione è minuscolo.

Selezioni Attraverso i LOD

Le selezioni nominate devono essere consistenti tra i LOD affinché le animazioni funzionino:

  • Se la selezione bolt esiste nel LOD Resolution 0, deve esistere anche nei LOD Geometry e Fire Geometry (coprendo la geometria di collisione corrispondente).
  • I LOD Shadow dovrebbero avere anch'essi la selezione se la parte animata deve proiettare ombre corrette.

Punti di Memoria

I punti di memoria sono posizioni nominate definite nel LOD Memory. Non hanno rappresentazione visiva nel gioco -- definiscono coordinate spaziali che il motore e gli script riferiscono per posizionare effetti, attacchi, suoni e altro.

Punti di Memoria Comuni

Nome PuntoScopo
usti hlavnePosizione della canna (dove originano i proiettili, appare il flash della canna)
konec hlavneFine della canna (usato con usti hlavne per definire la direzione della canna)
nabojnicestartInizio porta di espulsione (dove emergono i bossoli)
nabojniceendFine porta di espulsione (direzione di espulsione)
handguardPunto di attacco del paramano
magazinePosizione dell'alloggiamento caricatore
opticsPosizione della slitta ottica
suppressorPosizione di montaggio del silenziatore
triggerPosizione del grilletto (per IK della mano)
pistolgripPosizione dell'impugnatura a pistola (per IK della mano)
lefthandPosizione della presa mano sinistra
righthandPosizione della presa mano destra
eyePosizione dell'occhio (per allineamento vista in prima persona)
pilotPosizione del sedile guidatore/pilota (veicoli)
light_l / light_rPosizioni fari sinistro/destro (veicoli)

Punti di Memoria Direzionali

Molti effetti necessitano sia di una posizione che di una direzione. Questo si ottiene con punti di memoria accoppiati:

usti hlavne  ------>  konec hlavne
(inizio canna)        (fine canna)

Il vettore direzione è: konec hlavne - usti hlavne

Creare Punti di Memoria in Object Builder

  1. Passa al LOD Memory nella lista LOD.
  2. Crea un vertice nella posizione desiderata.
  3. Nominalo tramite Structure --> Named Selections: crea una selezione con il nome del punto e assegna il singolo vertice ad essa.

Nota: Il LOD Memory deve contenere SOLO punti nominati (vertici individuali). Non creare facce o spigoli nel LOD Memory.


Il Sistema Proxy

I proxy definiscono posizioni dove altri modelli P3D possono essere collegati. Quando vedi un caricatore inserito in un'arma, un'ottica montata su una slitta, o un silenziatore avvitato su una canna -- quelli sono modelli collegati tramite proxy.

Come Funzionano i Proxy

Un proxy è un riferimento speciale posizionato nel LOD Resolution che punta a un altro file P3D. Il motore renderizza il modello riferito dal proxy alla posizione e orientamento del proxy.

Convenzione di Denominazione dei Proxy

I nomi dei proxy seguono il pattern: proxy:\percorso\al\modello.p3d

Per i proxy di attacco sulle armi, i nomi standard sono:

Percorso ProxyTipo di Attacco
proxy:\dz\weapons\attachments\magazine\mag_placeholder.p3dSlot caricatore
proxy:\dz\weapons\attachments\optics\optic_placeholder.p3dSlitta ottica
proxy:\dz\weapons\attachments\suppressor\sup_placeholder.p3dMontaggio silenziatore
proxy:\dz\weapons\attachments\handguard\handguard_placeholder.p3dSlot paramano
proxy:\dz\weapons\attachments\stock\stock_placeholder.p3dSlot calcio

Aggiungere Proxy in Object Builder

  1. Nel LOD Resolution, posiziona il cursore 3D dove l'attacco deve apparire.
  2. Vai a Structure --> Proxy --> Create.
  3. Inserisci il percorso del proxy (ad es. dz\weapons\attachments\magazine\mag_placeholder.p3d).
  4. Il proxy appare come una piccola freccia che indica posizione e orientamento.
  5. Ruota e posiziona il proxy per allinearsi correttamente con la geometria dell'attacco.

Indice del Proxy

Ogni proxy ha un numero indice (partendo da 1). Quando un modello ha più proxy dello stesso tipo, l'indice li differenzia. L'indice è riferito in config.cpp:

cpp
class MyWeapon: Rifle_Base
{
    class Attachments
    {
        class magazine
        {
            type = "magazine";
            proxy = "proxy:\dz\weapons\attachments\magazine\mag_placeholder.p3d";
            proxyIndex = 1;
        };
    };
};

Model.cfg per le Animazioni

Il file model.cfg definisce le animazioni per i modelli P3D. Mappa le sorgenti di animazione (guidate dalla logica del gioco) a trasformazioni sulle selezioni nominate.

Struttura Base

cpp
class CfgModels
{
    class Default
    {
        sectionsInherit = "";
        sections[] = {};
        skeletonName = "";
    };

    class MyRifle: Default
    {
        skeletonName = "MyRifle_skeleton";
        sections[] = {"camo"};

        class Animations
        {
            class bolt_move
            {
                type = "translation";
                source = "reload";        // Sorgente animazione del motore
                selection = "bolt";       // Selezione nominata nel P3D
                axis = "bolt_axis";       // Coppia di punti di memoria per l'asse
                memory = 1;               // Asse definito nel LOD Memory
                minValue = 0;
                maxValue = 1;
                offset0 = 0;
                offset1 = 0.05;           // Traslazione di 5cm
            };

            class trigger_move
            {
                type = "rotation";
                source = "trigger";
                selection = "trigger";
                axis = "trigger_axis";
                memory = 1;
                minValue = 0;
                maxValue = 1;
                angle0 = 0;
                angle1 = -0.4;            // Radianti
            };
        };
    };
};

class CfgSkeletons
{
    class Default
    {
        isDiscrete = 0;
        skeletonInherit = "";
        skeletonBones[] = {};
    };

    class MyRifle_skeleton: Default
    {
        skeletonBones[] =
        {
            "bolt", "",          // "nome_osso", "osso_genitore" ("" = radice)
            "trigger", "",
            "magazine", ""
        };
    };
};

Tipi di Animazione

TipoParola ChiaveMovimentoControllato Da
TraslazionetranslationMovimento lineare lungo un asseoffset0 / offset1 (metri)
RotazionerotationRotazione attorno a un asseangle0 / angle1 (radianti)
RotazioneX/Y/ZrotationXRotazione attorno a un asse fisso del mondoangle0 / angle1
NascondihideMostra/nascondi una selezioneSoglia hideValue

Sorgenti di Animazione

Le sorgenti di animazione sono valori forniti dal motore che guidano le animazioni:

SorgenteIntervalloDescrizione
reload0-1Fase di ricarica dell'arma
trigger0-1Pressione del grilletto
zeroing0-NImpostazione di azzeramento dell'arma
isFlipped0-1Stato ribaltamento mirino
door0-1Apertura/chiusura porta
rpm0-NRPM motore veicolo
speed0-NVelocità veicolo
fuel0-1Livello carburante veicolo
damper0-1Sospensione veicolo

Importazione da FBX/OBJ

La maggior parte dei modder crea modelli 3D in strumenti esterni (Blender, 3ds Max, Maya) e li importa in Object Builder.

Formati di Importazione Supportati

FormatoEstensioneNote
FBX.fbxMigliore compatibilità. Esporta come FBX 2013 o successivo (binario).
OBJ.objWavefront OBJ. Solo dati mesh semplici (nessuna animazione).
3DS.3dsFormato legacy 3ds Max. Limitato a 65K vertici per mesh.

Flusso di Lavoro di Importazione

Passo 1: Prepara nel tuo software 3D

  • Il modello deve essere centrato all'origine.
  • Applica tutte le trasformazioni (posizione, rotazione, scala).
  • Scala: 1 unità = 1 metro. DayZ usa i metri.
  • Triangola la mesh (Object Builder lavora con i triangoli).
  • UV unwrap del modello.
  • Esporta come FBX (binario, senza animazione, Y-up o Z-up -- Object Builder gestisce entrambi).

Passo 2: Importa in Object Builder

  1. Apri Object Builder.
  2. File --> Import --> FBX (o OBJ/3DS).
  3. Rivedi le impostazioni di importazione:
    • Fattore di scala (dovrebbe essere 1.0 se la sorgente è in metri).
    • Conversione assi (Z-up a Y-up se necessario).
  4. La mesh appare in un nuovo LOD Resolution.

Passo 3: Configurazione post-importazione

  1. Assegna materiali alle facce (seleziona facce, click destro --> Face Properties).
  2. Crea LOD aggiuntivi (Geometry, Fire Geometry, Memory, Shadow).
  3. Semplifica la geometria per i LOD di collisione (rimuovi piccoli dettagli, assicura la convessità).
  4. Aggiungi selezioni nominate, punti di memoria e proxy.
  5. Valida e salva.

Suggerimenti Specifici per Blender

  • Usa l'addon della community Blender DayZ Toolbox se disponibile -- semplifica le impostazioni di esportazione.
  • Esporta con: Apply Modifiers, Triangulate Faces, Apply Scale.
  • Imposta Forward: -Z Forward, Up: Y Up nel dialogo di esportazione FBX.
  • Nomina gli oggetti mesh in Blender per corrispondere alle selezioni nominate previste -- alcuni importatori preservano i nomi degli oggetti.

Tipi di Modelli Comuni

Armi

Le armi sono i modelli P3D più complessi, richiedendo:

  • LOD Resolution ad alto poligonaggio (5.000-20.000 triangoli)
  • Selezioni nominate multiple (bolt, trigger, magazine, camo, ecc.)
  • Set completo di punti di memoria (canna, espulsione, posizioni di presa)
  • Proxy multipli (caricatore, ottiche, silenziatore, paramano, calcio)
  • Scheletro e animazioni in model.cfg
  • View Geometry per l'ostruzione in prima persona

Abbigliamento

I modelli di abbigliamento sono rigged allo scheletro del personaggio:

  • Il LOD Resolution segue la struttura ossea del personaggio
  • Selezioni nominate per varianti texture (camo, camo1)
  • Geometria di collisione più semplice
  • Nessun proxy (di solito)
  • hiddenSelections per varianti colore/mimetica

Edifici

Gli edifici hanno requisiti unici:

  • LOD Resolution grandi e dettagliati
  • LOD Roadway per superfici percorribili (pavimenti, scale)
  • LOD Paths per la navigazione IA
  • View Geometry per impedire di vedere attraverso i muri
  • LOD Shadow multipli per prestazioni a diverse distanze
  • Selezioni nominate per porte e finestre che si aprono

Veicoli

I veicoli combinano molti sistemi:

  • LOD Resolution dettagliato con parti animate (ruote, porte, cofano)
  • Scheletro complesso con molte ossa
  • LOD Roadway per passeggeri in piedi nei cassoni dei camion
  • Punti di memoria per luci, scarico, posizione guidatore, sedili passeggeri
  • Proxy multipli per attacchi (ruote, porte)

Errori Comuni

1. LOD Geometry Mancante

Sintomo: L'oggetto non ha collisione. Giocatori e proiettili lo attraversano. Soluzione: Crea un LOD Geometry con una mesh convessa semplificata. Assegna la massa ai vertici.

2. Forme di Collisione Non Convesse

Sintomo: Glitch fisici, oggetti che rimbalzano erraticamente, oggetti che cadono attraverso le superfici. Soluzione: Suddividi le forme complesse in componenti convessi multipli nel LOD Geometry. Ogni componente deve essere un solido convesso chiuso.

3. Selezioni Nominate Inconsistenti

Sintomo: Le animazioni funzionano solo visivamente ma non per la collisione, o l'ombra non si anima. Soluzione: Assicurati che ogni selezione nominata che esiste nel LOD Resolution esista anche nei LOD Geometry, Fire Geometry e Shadow.

4. Scala Sbagliata

Sintomo: L'oggetto è gigantesco o microscopico nel gioco. Soluzione: Verifica che il tuo software 3D usi i metri come unità. Un personaggio DayZ è alto circa 1.8 metri.

5. Punti di Memoria Mancanti

Sintomo: Il flash della canna appare nella posizione sbagliata, gli attacchi fluttuano nello spazio. Soluzione: Crea il LOD Memory e aggiungi tutti i punti nominati richiesti nelle posizioni corrette.

6. Nessuna Massa Definita

Sintomo: L'oggetto non può essere raccolto, o le interazioni fisiche si comportano in modo strano. Soluzione: Seleziona tutti i vertici nel LOD Geometry e assegna la massa tramite Structure --> Mass.


Buone Pratiche

  1. Inizia con il LOD Geometry. Blocca la forma di collisione prima, poi costruisci il dettaglio visivo sopra. Questo previene l'errore comune di creare un modello bellissimo che non può collidere correttamente.

  2. Usa modelli di riferimento. Estrai i file P3D vanilla dai dati di gioco e studiali in Object Builder. Mostrano esattamente cosa il motore si aspetta per ogni tipo di oggetto.

  3. Valida frequentemente. Usa Structure --> Validate di Object Builder dopo ogni cambiamento significativo. Risolvi gli avvisi prima che diventino bug misteriosi nel gioco.

  4. Mantieni il conteggio triangoli dei LOD proporzionale. Resolution 0 potrebbe avere 10.000 triangoli; Resolution 1 dovrebbe avere ~5.000; Geometry dovrebbe avere ~100-500. Riduzione drastica ad ogni livello.

  5. Nomina le selezioni in modo descrittivo. Usa bolt_carrier invece di sel01. Il tuo te stesso futuro (e gli altri modder) ti ringrazieranno.

  6. Testa prima con il file patching. Carica il tuo P3D non binarizzato tramite la modalità file patching prima di impegnarti in una build PBO completa. Questo cattura la maggior parte dei problemi più velocemente.

  7. Documenta i punti di memoria. Tieni un'immagine di riferimento o un file di testo che elenca tutti i punti di memoria e le loro posizioni previste. Le armi complesse possono avere 20+ punti.


PrecedenteSuSuccessivo
4.1 TextureParte 4: Formati File e DayZ Tools4.3 Materiali

Released under CC BY-SA 4.0 | Code examples under MIT License