Unreal Developer Network Technical
Welcome to the Unreal Developer Network The Engine Unreal Powered Content Creation Technical Playstation2 Xbox Gamecube Licensee Log In

Technical

Technical home

Documents listed below, but not hyperlinked, are restricted to engine licensees only.

As certain texts become relevant, due to released games using that technology, new documents will be made available. Check back often!
 
Getting Started
   - WhatToReadFirst
   - WhoDoIAskAbout
   General Engine Support
   - UnProg (mailing list)
   - UnProgTraffic (summaries)
   - UnDevIRC (chat)
   - UnDevIRCTraffic (summaries)
   Codedrop-Specific Support
   - NextCodeDropStatus
   - UDNBuildIntro
   - UDNBuildReports
   - CodeDrop2226
   - CodeDrop2110
   - CodeDrop927
   - CodeDrop829
   - Patch777PS2
   - CodeDrop777
   - CodeDrop739
   - CodeDrop697
   HW/SW Support
   - RecommendedHardware
   - RecommendedSoftware
   - AthlonLockups
   - ImmersionForceFeedback
   - BelkinSpeedPad
   Toolchain Support
   - UtraceDebugging
   - VTuneUsage
   - VisualSourceSafe
   - UnrealScriptHighlighting
   - VisualStudioAddIns
   - UnrealToolsAddin
   - UnrealToolsDotNet
   - UnrealDebugging
   - UnDox
   - AutoDiff
   - SearchUCinXP
   - EnhancedPkgCommandlet
   - UnrealScriptDebugger
   - BuildingUnrealOnLinux
   - NoStepInto

Unreal Specifics
   - NewProjectPreparation
   Basics
   - UnrealScriptReference
   - UnrealClasses
   - CollisionHash
   - UnrealStrings
   - MemAlloc
   - ConsoleCommandLineParameters
   - UccCommandlet
   - IniFilesTutorial
   - SaveConfiguration
   - GameRules
   - UmodInstaller
   - UmodWizard
   - CreatingGameInstallers
   Rendering Architecture
   - RenderingPipeline
   - CameraEffects
   - TypedTextCameraEffect
   Skeletal System
   - UWSkelAnim
   - UWSkelAnim2
   - ExtendingUWSkelAnim
   - SkeletalAttachments
   - SkeletalBlending
   - AdditionalSkelNatives
   - PhysicsBasedAnim
   - AnimNotifies
   - BinaryFormatSpecifications
   Physics
   - PhysicsOverview
   - RootMotionPhysics
   Particle System
   - ParticlesInfo
   - RibbonEmitter
   - ParticleExtensions
   New Particle Editor
   - ParticleSystemEditorCode
   User Interface
   - HeadsUpDisplayTutorial
   - InteractionReference
   - CanvasReference
   Materials
   - MaterialTricks
   Projected Textures
   - ProjectorTricks
   - RenderToTextureShadows
   - RenderToTextureShadows2
   UnrealScript
   - UnrealScriptDelegates
   - ScriptQuats
   - ConditionalCompilation
   - AsyncFilePackage
   UnrealEd
   - AnimatedTextureBrowser
   - ViewCorrected3DDrag
   Networking
   - NetworkingTome
   - PlayerReplicationHandout
   Terrain
   - TerrainChanges927
   Other Stuff
   - PathingImprovements
   - Gameandaihandout
   - SubmitBugReport
   - GraphsAndMemory
   - BumpMapping
   - MakeYourOwnDemoMode
   - ExportGeometryIntoMAX
   - InGameMovies
   - CustomArchives
   - LicenseeCodePool
   - LicenseeFileExtensions

Misc
   - CodeDropSong br>    - UptBenchmarks

mathengine.gif
Karma Physics
   - KarmaReference
   - VehiclesInUT2003

Contribute!
You can create a new page, and then you can edit this list to add it to the categories, as well as edit the Technical homepage to tell everyone about it!

Make Requests!
You can also stop by the UdnStaff page to see what we're working on, and edit it to add your own document requests.


Please take note! For mod developers working with Unreal Tournament 2003, this documentation is meant to be a starting point for your own explorations into UT2003, not a definitive guide. There will be differences between the documentation here and the product in your hands, and you may have to figure out quite a bit for yourself. Check out the Unreal Tournament 2003 page in the Unreal Powered area for links to community sites if you're having problems. UDN is a licensee support site, and cannot provide technical support or game-specific assistance to end users.

BinaryFormatSpecifications

Licensees can log in.

Interested in the Unreal engine? Check out the licensing page.

Questions about UDN itself? Contact the UDN Staff.

Binary format specifications for skeletal and vertex animation source files

Original author - Erik de Neve (EpicGames).

Skeletal animation and mesh source binaries

As exported by ActorX from Max or Maya, the PSA and PSK binary files contain the raw animation and mesh information used to import skeletal animation art into the Unreal engine. Specifications are given here to aid anyone interested in expanding the format or writing 3rd party utilities for it (skin painter programs, exporters for other 3d packages, etc. )

PSK format:

This contains the mesh, bone influence indices and weights for each vertex, the bone names, bone hierarchy, and skeletal default pose.

PSK format, Version 1.0

  • General Header (all headers are of type VChunkHeader)

When the VChunkHeader.Typeflag version number equals decimal '1999801' or lower it denotes this version 1.0 layout of the PSK file.

  • Header specifying number of points ( in ChunkHeader.Datacount )

  • VPoint points array

  • Header specifying amount of wedges.

  • VVertex wedges array (a wedge consists of a UV pair with an index into the 3d points array.)

  • Header specifying amount of faces.

  • VTriangle faces array.

  • Header specifying amount of materials.

  • VMaterial Materials array.

  • Header specifying amount of bones.

  • VBone bones array.

  • Header specifying amount of bone influences.

  • VRawBoneInfluence array of Influences.

PSA format:

PSA files contain the bone names, one or more sequence names, and for each sequence, its frame number N, and tracks of N rotations and N translations for each bone.

PSA format, Version 1.0

  • General Header (all headers are of type VChunkHeader)

When the VChunkHeader.Typeflag version number equals decimal '1999801' or lower it denotes this version 1.0 layout of the PSA file.

  • Header specifying amount of bones.

  • FNamedBoneBinary bone names array

  • Header specifying amount of animation sequence info chunks.

  • AniminfoBinary array of animation sequence info chunks.

  • Header specifying amount of raw keys.

  • VQuatAnimKey array

The raw key array holds all the keys for all the bones in all the specified sequences, organized as follows:

For each AnimInfoBinary's sequence there are [Number of bones] times [Number of frames keys] in the VQuatAnimKeys, laid out as tracks of [numframes] keys for each bone in the order of the bones as defined in the array of FnamedBoneBinary in the PSA.

C++ structures used

The relevant structs and classes are outlined in this header file:

UnrealAnimDataStructs.h

Note that all structures are assumed padded to multiples of DoubleWord (32 bit) sizes by VC++ - when writing custom code, putting #pragma pack(push,1) around the definitions will break psa/psk binary compatibility. The default packing can be forced with #pragma pack(push,4). Fortunately the 'wasted' space is not an issue because this is for the raw data only. The same padding is assumed in the editor's import code as well as in the Max/Maya exporters.

Animation data inside the engine

Once the data from the PSK (now digested into native skeletal mesh) and PSA ( digested into a native animation object containing one or more sequences ) are associated together at runtime, bones are linked up by name. Any bone in a skeleton (from the PSK) that finds no partner in the animation sequence (from the PSA) will assume its reference pose stance ( as defined in the offsets & rotations that are in the VBones making up the reference skeleton from the PSK)

The native animation and mesh code data as imported into the editor's animation browser, takes the shape of UKX package files - see the UKXPackagesTutorial.

Vertex animation

The classic vertex animation raw data format hasn't changed since Unreal 1 - though in the engine, rendering has been sped up since, and now works with continuous level-of-detail, unlike skeletal meshes, which - since UT2003 - uses static LOD levels.

Overal CPU overhead for vertex animated meshes is still much larger than for skeletal meshes, so vertex animation should never be your first choice if you can achieve the same animation with a skeletal setup and a reasonable number of bones. Also, the vertex mesh animation code does not support any blending features.

Tools used to generate vertex animated meshes include the Max and Maya ActorX exporter plugins and the older 3DS2UNR tool.

Like the skeletal animation raw data, we have both a 'reference' mesh and the animation data, though unlike skeletal, these two have to be imported together and are inextricably linked; Vertex animation cannot be shared between multiple meshes.

By convention, the mesh's face UV mapping and vertex index data resides in the "Data" file with the extension *_d.3d, while the animation "Aniv" data file has the extension *_a.3d.

The relevant C++ structures mentioned are defined in detail in UnrealVertexAnimation

The files contain the following data:

Data file format

  • Data File Header, type FJSDataHeader

- NumPolygons : number of faces, as present in the array below.

- NumVertices : number of vertices.

  • Array of [] elements of type FJSMeshTri

One important clarification: since UT2003, the Flags byte in each FJSMeshTri is no longer relevant since properties like translucency and double-sidedness are now derived from the assigned materials, rather than the intrinsic mesh-face properties they used to be in Unreal 1.

Animation file format

  • Aniv File Header, type FJSAnivHeader

- NumFrames : number of animation frames, as present in the array below.

- FrameSize : size in BYTES of each frame; i.e. number of vertices * 4.

  • Array of ( NumFrames * NumVertices ) 32-bit packed XYZ vectors.

When importing - which can only be done by recompiling the .u scripts, not through the editor as with skeletal animation - it is up to script code to designate sequence names to subsections of the frame sequence.


BinaryFormatSpecifications - r1.6 - 26 Mar 2003 - 02:11 GMT - Copyright © 2001-2003 Epic Games
Unreal Developer Network Content by those crazy Perilith guysSite design and art by 2 design