/qpov

Tool for converting Quake demo files to POV-Ray

Primary LanguageGoGNU General Public License v2.0GPL-2.0

QPov

Copyright Thomas Habets thomas@habets.se 2015-2016

https://github.com/ThomasHabets/qpov

Introduction

QPov takes the data files from Quake and turns them into POV-Ray, which is a raytracer that then renders them to png. Example video.

Why

Modern CPUs are idle too much. Ray tracing tends to be able to consume any and CPU cycles you give to it. QPOV generates data that POV-Ray can then use to solve this problem.

A second reason is that Quake is getting harder to get running in good quality. GLQuake from Steam doesn't start on my machine, and if I want to watch Quake Done Quick then all the videos on YouTube are either low res, or has other settings that make them crap.

I also want to experiment with POV-Ray and for example make programatic realistic water, and a quake demo gives me a nice 3D animation to work with.

Installing

mkdir go
cd go
GOPATH=$(pwd) go get github.com/ThomasHabets/qpov
for bin in bsp dem mdl pak render; do GOPATH=$(pwd) go build github.com/ThomasHabets/qpov/cmd/$bin;done

You'll need the Quake data files, either shareware or full version.

Optionally you can also use the Quake Reforged replacement textures.

Running

You need to convert Quake maps and models in addition to the demos.

mkdir demo1
bsp -pak /.../pak0.pak convert -lights=false -out demo1
mdl -pak /.../pak0.pak convert -out demo1
dem -pak /.../pak0.pak convert -out demo1 -fps 30 -camera_light=true demo1.dem
render -fast demo1/*.pov
avconv -r 30 -i demo1/frame-%08d.png -f mp4 -q:v 0 -vcodec mpeg4 demo1.mp4

To mix in audio (can be created using sound.sh in demo1 directory), run:

avconv -i demo1.mp4 -i sound.wav -c copy demo1-sound.mp4

Running a render node

Suitable for EC2 Ubuntu:

sed -i 's/^# deb / deb /' /etc/apt/sources.list
apt-get update
apt-get install schedtool povray{,-includes} screen rar
mkdir qpov-wd
drender -scheduler=addr-of-dscheduler:12345 -wd=qpov-wd

Running a render node docker image

docker create thomashabets/qpov
docker ps -a
docker start the_id_from_previous_command

Scheduling render work

dmaster \
    -scheduler addr-of-dscheduler:12345 \
    -package https://foo/bar.tar.gz \
    -dir balcony \
    -file balcony.pov \
    +Q11 +A0.3 +R4 +W3840 +H2160

Using retextures

7zr x QRP_map_textures_v.1.00.pk3.7z
unzip QRP_map_textures_v.1.00.pk3
for d in . *; do (cd $d && for i in *.tga; do convert $i $(basename $i .tga).png; done); done

And then use -retexture=/path/to/textures with bsp.

Hacking

Example frames

Assuming 30fps and QDQr recam:

  • light levels:
    • e1m1: 10 610
  • brown slime:
    • e1m1: 232 610
    • e1m3: 300

Blog posts this project

General tips

  • When experimenting with light settings (-light_fade_distance and -light_fade_power) it's useful to add options +RP5 +RS9 to hop around a bit as the frame is rendering.

Interesting links