fteqw/ftetools_readme.txt

250 lines
12 KiB
Text
Raw Permalink Normal View History

openxr plugin: tweaked - inputs should be working properly now, and are visible to csqc. subject to further breaking changes, however. _pext_vrinputs: added cvar to enable vr inputs protocol extension allowing vr inputs to be networked to ssqc too. defaults to 0 for now, will be renamed when deemed final. updates menu: the prompt to enable sources is now more explicit instead of expecting the user to have a clue. updates menu: added a v3 sources format, which should be more maintainable. not final. updates menu: try to give reasons why sources might be failing (to help blame ISPs if they try fucking over TTH dns again). presets menu: no longer closes the instant a preset is chosen. some presets have a couple of modifiers listed. force the demo loop in the background to serve as a preview. prompts menus: now does word wrapping. ftemaster: support importing server lists from other master servers (requested by Eukara). server: try to detect when non-reply inbound packets are blocked by firewalls/nats/etc (using ftemaster to do so). qcvm: added pointcontentsmask builtin, allowing it to probe more than just world, with fte's full contentbit range instead of just q1 legacy. qcvm: memfill8 builtin now works on createbuffer() pointers. qcvm: add missing unsigned ops. Fixed double comparison ops. fixed bug with op_store_i64. added missing OP_LOADP_I64 qcc: added '#pragma framerate RATE' for overriding implicit nextthink durations. qcc: fixed '#pragma DONT_COMPILE_THIS_FILE' to not screw up comments. qcc: added __GITURL__ __GITHASH__ __GITDATE__ __GITDATETIME__ __GITDESC__ for any mods that might want to make use of that. qcc: fix up -Fhashonly a little setrenderer: support for vulkan gpu enumeration. rulesets: reworked to support custom rulesets (using hashes to catch haxxors, though still nothing prevents just changing the client to ignore rulesets) bspx: use our BIH code for the bspx BRUSHLIST lump instead of the older less efficient code. (static)iqm+obj: these model formats can now be used for the worldmodel (with a suitable .ent file). Also using BIH for much better collision performance. pmove: tried to optimise PM_NudgePosition, should boost fps in stress tests. wayland: fix a crash on startup. mousegrabs now works better. imagetool: uses sdl for previews. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5813 fc73d0e0-1445-4013-8a0c-d673dee63da5
2021-04-14 05:21:04 +00:00
FTE TOOLS README
============
This file contains the following sections:
1. FTEQCC
2. PACKAGE MANAGEMENT
3. IQM TOOL
4. IMAGE TOOL
5. CONTACT
6. LICENSE
1. FTEQCC
========
FTEQCC is used to compile
Full FTEQCC documentation can be found here: https://fte.triptohell.info/moodles/fteqcc/README.html
2. PACKAGE MANAGEMENT
===========
The commandline version of fteqcc doubles up as a pak/pk3 creator/extractor
`fteqcc -l PACKAGENAME`
Lists the contents of a file on the stdout.
`fteqcc -x PACKAGENAME`
Extracts all files from the named package to the working directory. You should normally use ../foo.pak in order to avoid overwriting files unintentionally.
`fteqcc -x PACKAGENAME SUBDIR`
Extracts specific files from the named package.
`fteqcc -0 SUBDIR`
Generates a `subdir.pak` file with the contents of that subdir. Unlike most pak generators, the pak will also be openable with any zip tool for users to easily view files (they shouldn't edit them though).
`fteqcc -9 SUBDIR`
Generates a `subdir.pk3` file with the contents of that subdir. Contents will be compressed to reduce filesize, but won't work in vanilla quake.
`fteqcc -z SUBDIR`
Generate a `subdir.pk3` dictionary file, and an (additional) `subdir.pXX` file (name generated sequentially). The dictionary file will be versioned with different servers potentially using different versions. This prevents re-downloading redundant copies of the same files for each different version. The spanned data files are not versioned, so these should only be generated by authoritive developers (ie: not same-filename forks).
Many engines support interpretting `foo.pk3dir` subdirs as proto-packages, which makes it easier to test packages without constant re-compression.
3. IQM TOOL
===========
About:
This is a commandline tool for creating iqm files from intermediate files exported from modelling programs.
Possible Inputs:
smd
gltf
glb
iqe
md5mesh
md5anim
fbx
obj
Outputs:
iqm / vvm
The default format. 'vvm' is a moniker for the backwards-compatible extensions fte supports which are not supported by other engines/tools.
mdl
quake1's model format. Horrible format, but a handy fallback for people who refuse to use better engines.
Usage:
IQM tool Can be used two ways.
`iqm foo.cmd` uses a command script to decide which files to read, modifiers for each sequence or mesh, etc.
`iqm foo.iqm foo.gltf` converts the gltf file to an iqm file. Animation rate will be guessed.
`iqm foo.mdl foo.gltf` writes out a quake1 mdl file. Framegroups will be used for each animation sequence.
Command script:
#COMMENT
//COMMENT
Just a comment, ignored.
exec filename
Invokes an external script (useful when you have multiple models with the same animations or so).
modelflags BITS
Sets the output model's flags. Queryable in gamecode.
mesh MESHNAME ATTRIBUTELIST
Overrides attributes of an imported mesh to use for the visible part of the model. Use the `import` command to actually import the geometry.
Attributes are:
contents BITSORNAMES
Controls which traces may impact the imported surfaces. You should normally specify 0 if you are using hitboxes. Default is CONTENTS_BODY.
surfaceflags BITSORNAMES
Misc info eg reported by tracelines.
body NUM
The 'body' number which can be queried in gamecode (typically used to report eg headshots).
geomset SET ID
Sets this mesh to only draw when geomset SET has been configured as ID.
lodrange MIN MAX
This mesh will only be drawn when the screen coverage is within the specified range. Exact interpretation can vary according to engine cvars.
hitbox BODYNUM BONENAME MINS MAXS
Creates a cuboid mesh around the named bone (as a box in the base pose). The mesh will be given CONTENTS_BODY such that it will be hit by hitmesh traces. The bodynum arg can be queried via gamecode.
bone NAME ATTRIBUTELIST
rename NEWNAME
The bone read from input files will be written as NEWNAME in the output file (so gamecode can manipulate things consistently).
group GROUPNUM
Bones can be reordered in the output according to their group numbers. Only the root bone of each group needs its group specified (children will inherit). This simplies bone range operations in gamecode
import FILENAME ATTRIBUTELIST
model FILENAME ATTRIBUTELIST
scene FILENAME ATTRIBUTELIST
animation FILENAME ATTRIBUTELIST
Loads model AND animation data from an imported file.
File formats must match the given filename extensions.
Attributes are:
Any attributes supported by the mesh command (such attributes here define the default values for imported meshes).
name NEWNAME
The animation will be queryable to gamecode as the NEWNAME.
fps RATE
Overrides the frame rate of the animation.
loop
Specifies that the animation must loop.
clamp
Specifies that the animation must NOT loop (animation will stop once it reaches the last pose).
unpack
Generates single-pose animations, consistent with the way vanilla QC animates.
pack
Generates multiple-pose animations, gamecode will be able to specify animation and time separately.
nomesh
Do NOT generate meshes from this file.
noanim
Do NOT generate animations from this file.
materialprefix PATH
Prefixes the imported texture with an additional path (to avoid conflicts with other files).
start FRAME
end FRAME
Limits inputed data to the specified poses.
scale SCALE
Resizes the input data.
rotate PITCH ROLL YAW
Rotates the imported data (quake is +x=forward, +y=left, +z=up).
translate X Y Z
Moves the mesh+bones around a bit.
event [SEQUENCE:]POSE EVCODE EVSTRING
Defines a model event at the specified timestamp.
output FILENAME
output_iqm FILENAME
output_vvm FILENAME
output_qmdl FILENAME
output_md16 FILENAME
Specifies the file to be written. You may have one per supported output model format, each will contain roughly equivelent data (where supported).
4. IMAGE TOOL
=============
About:
This is a tool for converting various image file types to more favourable ones.
This includes generating wad files, cubemap images, etc.
Wad Examples:
`imgtool --ext mip [--PIXFMT] [--resize W H] *.EXT`
Converts the input files to quake's miptex format. Input files will not be changed.
If compression was specified, the resulting miptex will contain an additional high-colour alternative.
If --resize is used, the paletted data will be resized without affecting the high-colour alternative.
Supported pixel formats:
rgba8,rgb8, rgb565,rgba5551,rgba4444, l8, bc1-7, etc1,etc2,etcp,etca, astc*x*, e5bgr9
NOTE: use of alternative formats requires a qbsp which does NOT strip this information. The vanilla qbsp will work fine for this purpose, but more advanced qbsp utils have a tendancy to strip the info (including ericw's, sadly).
`imgtool -w WADFILE *.mip`
Packs the specified miptex files into the named wad file.
`imgtool -x --ext EXT WADORBSP`
Extracts the textures from the specified wad or bsp file, saving them as EXT files.
General Examples:
`imgtool --help`
Shows a list of compressed pixel formats, and supported file formats.
`imgtool -i FILE`
Shows info about the named file(s).
`imgtool --ext ktx [--PIXFMT] *.EXT`
`imgtool --ext dds [--PIXFMT] *.EXT`
Converts the input files to a hardware-friendly file format (with the specified pixel format). Input files will not be changed.
ktx supports all recognised hardware formats. dds is more limited (and eg doesn't support etc or astc).
hud artwork should generally be astc4x4 or bc7 for best quality.
models and walls can be of lower quality, astc6x6, etc2, or bc1 are good choices.
for hdr pixel formats, try astc4x4_hdr or bc6.
`imgtool --ext png *.EXT`
Converts the input files to png format for viewing/editing. Input files will not be changed.
`imgtool --cube [--PIXFMT] -o mysky.dds mysky_*.tga`
Converts 6 input files to a single cubemap file.
Inputs will be reordered according to quake's typical cubemap postfixes (and flipped as appropriate), otherwise be careful with wildcards.
`imgtool --2darray [--PIXFMT] -o foo.ktx IDX0 IDX1 IDXN`
Converts the input textures into a 2d texture array. Input file order matters.
`imgtool --3d [--PIXFMT] -o foo.ktx LAYER0 LAYER1 LAYERN`
Converts the input textures into a 3d texture. Input file order matters.
Which pixel format to use:
ASTC:
The ldr-only profile is part of the gles3.2 spec (but likely to be emulated on nvidia).
ASTC has a range of block sizes with each block being 16 bytes, thus larger block sizes yield greater compression.
This format supports multiple planes, which reduces issues with multiple gradients in a block, which means it can cope with pixel art better than eg s3tc with larger block sizes.
Bits are distributed according to usage per block, this means it can use more bits for the rgb channels where alpha is constant, giving it more useful bits than eg bc3.
ASTC is able to use a second set of weights for any single channel (not just alpha), which makes it suitable for encoding normalmaps for instance.
To encode ASTC pixel formats, you will need to install astcenc - https://github.com/ARM-software/astc-encoder/releases (or use astc-encoded source files).
ETC2:
Part of the gles3.0/gl4.3 spec
ETC2 is a superset of ETC1, and has been somewhat obsoleted by ASTC.
BC1/2/3:
AKA s3tc, AKA dxt, available only via optional extensions, but is mandated by d3d 9_1 feature level.
These formats all encode two 565 colours per 4*4 block with 2-bits per pixel for interpolation, which can result in discolouration.
bc2 uses an additional 64bit block to encode 4bit alpha.
bc3 also uses an additional block for alpha, but does so simiarly to its rgb values (two 8bit alpha values, with 3-way interpolation).
To encode s3tc pixel formats, you will need to install libnvtt-bin - https://github.com/castano/nvidia-texture-tools (or export from image editors as dds or ktx files).
BC4/5:
AKA rgtc, part of the gl3.0 spec, or d3d10.
These formats reuse bc3's 'alpha' compression to encode one or two channels respectively. BC1 can be handy for heightmaps/greyscale/etc, while BC5 can be useful for 2-channel normalmaps. They are not generally useful as eg wall textures.
BC6/7:
AKA bptc, part of the gl4.2, or d3d11.
These formats support one or two planes per block, which means they can cope with pixel art quite a bit better than bc1/3.
While they're the same size as bc3 (twice that of bc1), they have multiple modes per block that allow them to eg avoid wasting bits on unused alpha data.
The difference is that BC7 encodes RGBA ldr data, while BC6 encodes RGB hdr data.
To encode s3tc pixel formats, you will need to install (debian experimental) libnvtt-bin - https://github.com/castano/nvidia-texture-tools (or export from image editors as dds or ktx files).
Too Long didn't read:
Use ASTC if you're targetting modern mobile devices (astc6x6 for walls, astc4x4 for huds, or something).
Use ETC2 if you're targetting older mobile users.
Use BC1 for desktop model/wall textures, and bc3 for things with non-binary alpha channels.
Use BC7 for desktop hud textures or other textures where BC1 does a terrible job.
Use jpegs if you just want to get filesize down without caring about performance.
If the user's hardware doesn't support the used formats then FTE can software-decode, so if you're expecting both mobile+desktop users with a single set of textures then favour mobile (desktop GPUs have better memory bandwidth).
5. CONTACT
==========
If you need more help, have suggestions or want to hang out with the
developers that make FTE what it is, join us on IRC!
No account required.
irc.quakenet.org #fte
Bug reports welcome!
6. LICENSE
==========
Copyright (c) 2004-2020 FTE's team and its contributors
Quake source (c) 1999 id Software
FTEQW is supplied to you under the terms of the same license as the
original Quake sources, the GNU General Public License Version 2.
Please read the 'LICENSE' file for details.
The latest source is always available at:
http://svn.code.sf.net/p/fteqw/code/trunk/
Binaries are usually built at:
https://fte.triptohell.info/moodles/