From f91dc3e68ac01ea28a3c83d66d2cef1963dc66fd Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 16 Aug 2023 20:24:57 -0400 Subject: [PATCH 1/6] implement anti-aliasing for dump image (and dump movie) --- doc/src/dump_image.rst | 15 +++++++++++- src/dump_image.cpp | 29 ++++++++++++++++++++++ src/image.cpp | 55 +++++++++++++++++++++++++++++++++--------- src/image.h | 3 ++- 4 files changed, 89 insertions(+), 13 deletions(-) diff --git a/doc/src/dump_image.rst b/doc/src/dump_image.rst index 25d1efff7d..2aec55bb60 100644 --- a/doc/src/dump_image.rst +++ b/doc/src/dump_image.rst @@ -103,7 +103,7 @@ Syntax dump_modify dump-ID keyword values ... * these keywords apply only to the *image* and *movie* styles and are documented on this page -* keyword = *acolor* or *adiam* or *amap* or *gmap* or *backcolor* or *bcolor* or *bdiam* or *bitrate* or *boxcolor* or *color* or *framerate* or *gmap* +* keyword = *acolor* or *adiam* or *amap* or *gmap* or *backcolor* or *bcolor* or *bdiam* or *bitrate* or *boxcolor* or *color* or *framerate* or *fsaa* or *gmap* * see the :doc:`dump modify ` doc page for more general keywords .. parsed-literal:: @@ -151,6 +151,8 @@ Syntax R,G,B = red/green/blue numeric values from 0.0 to 1.0 *framerate* arg = fps fps = frames per second for movie + *fsaa* arg = yes/no + yes/no = do or do not apply anti-aliasing *gmap* args = identical to *amap* args Examples @@ -957,6 +959,17 @@ frequently. ---------- +.. versionadded:: TBD + +The *fsaa* keyword can be used with the dump image command to improve +the image quality by enabling full scene anti-aliasing. Internally the +image is rendered at twice the width and height and then scaled down by +computing the average of each 2x2 block of pixels to produce a single +pixel in the final image at the original size. This produces smoother, +less ragged edges. + +---------- + The *gmap* keyword can be used with the dump image command, with its *grid* keyword, to setup a color map. The color map is used to assign a specific RGB (red/green/blue) color value to an individual grid cell diff --git a/src/dump_image.cpp b/src/dump_image.cpp index 1ba433f93f..41d4671f95 100644 --- a/src/dump_image.cpp +++ b/src/dump_image.cpp @@ -1555,6 +1555,35 @@ int DumpImage::modify_param(int narg, char **arg) return n; } + // if antialias state changes, we need to increase the buffer space + // change the (internal) image dimensions and reset the view parameters + if (strcmp(arg[0],"fsaa") == 0) { + if (narg < 2) error->all(FLERR,"Illegal dump_modify command"); + int aa = utils::logical(FLERR, arg[1], false, lmp); + if (image->fsaa == NO) { + if (aa == YES) { + image->width = image->width*2; + image->height = image->height*2; + // reallocate buffers to make room + image->buffers(); + } + } else { + if (aa == NO) { + image->width = image->width/2; + image->height = image->height/2; + box_bounds(); + box_center(); + view_params(); + } + } + image->fsaa = aa; + // reset size based parameters + box_bounds(); + box_center(); + view_params(); + return 2; + } + if (strcmp(arg[0],"bcolor") == 0) { if (narg < 3) error->all(FLERR,"Illegal dump_modify command"); if (atom->nbondtypes == 0) diff --git a/src/image.cpp b/src/image.cpp index 0f31ae9927..2516ae3fdc 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -55,7 +55,9 @@ enum{NO,YES}; /* ---------------------------------------------------------------------- */ -Image::Image(LAMMPS *lmp, int nmap_caller) : Pointers(lmp) +Image::Image(LAMMPS *lmp, int nmap_caller) : + Pointers(lmp), depthBuffer(nullptr), surfaceBuffer(nullptr), imageBuffer(nullptr), + depthcopy(nullptr),surfacecopy(nullptr),rgbcopy(nullptr) { MPI_Comm_rank(world,&me); MPI_Comm_size(world,&nprocs); @@ -69,6 +71,7 @@ Image::Image(LAMMPS *lmp, int nmap_caller) : Pointers(lmp) persp = 0.0; shiny = 1.0; ssao = NO; + fsaa = NO; up[0] = 0.0; up[1] = 0.0; @@ -154,6 +157,13 @@ Image::~Image() void Image::buffers() { + memory->destroy(depthBuffer); + memory->destroy(surfaceBuffer); + memory->destroy(imageBuffer); + memory->destroy(depthcopy); + memory->destroy(surfacecopy); + memory->destroy(rgbcopy); + npixels = width * height; memory->create(depthBuffer,npixels,"image:depthBuffer"); memory->create(surfaceBuffer,2*npixels,"image:surfaceBuffer"); @@ -380,6 +390,26 @@ void Image::merge() } else { writeBuffer = imageBuffer; } + + // scale down image for antialiasing. can be done in place with simple averaging + if (fsaa) { + for (int h=0; h < height; h += 2) { + for (int w=0; w < width; w +=2) { + int idx1 = 3*height*h + 3*w; + int idx2 = 3*height*h + 3*(w+1); + int idx3 = 3*height*(h+1) + 3*w; + int idx4 = 3*height*(h+1) + 3*(w+1); + + int out = 3*(height/2)*(h/2) + 3*(w/2); + for (int i=0; i < 3; ++i) { + writeBuffer[out+i] = (unsigned char) (0.25*((int)writeBuffer[idx1+i] + +(int)writeBuffer[idx2+i] + +(int)writeBuffer[idx3+i] + +(int)writeBuffer[idx4+i])); + } + } + } + } } /* ---------------------------------------------------------------------- @@ -1037,6 +1067,7 @@ void Image::compute_SSAO() void Image::write_JPG(FILE *fp) { #ifdef LAMMPS_JPEG + int aafactor = fsaa ? 2 : 1; struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; JSAMPROW row_pointer; @@ -1044,8 +1075,8 @@ void Image::write_JPG(FILE *fp) cinfo.err = jpeg_std_error(&jerr); jpeg_create_compress(&cinfo); jpeg_stdio_dest(&cinfo,fp); - cinfo.image_width = width; - cinfo.image_height = height; + cinfo.image_width = width/aafactor; + cinfo.image_height = height/aafactor; cinfo.input_components = 3; cinfo.in_color_space = JCS_RGB; @@ -1055,7 +1086,7 @@ void Image::write_JPG(FILE *fp) while (cinfo.next_scanline < cinfo.image_height) { row_pointer = (JSAMPROW) - &writeBuffer[(cinfo.image_height - 1 - cinfo.next_scanline) * 3 * width]; + &writeBuffer[(cinfo.image_height - 1 - cinfo.next_scanline) * 3 * (width/aafactor)]; jpeg_write_scanlines(&cinfo,&row_pointer,1); } @@ -1071,6 +1102,7 @@ void Image::write_JPG(FILE *fp) void Image::write_PNG(FILE *fp) { #ifdef LAMMPS_PNG + int aafactor = fsaa ? 2 : 1; png_structp png_ptr; png_infop info_ptr; @@ -1091,7 +1123,7 @@ void Image::write_PNG(FILE *fp) png_init_io(png_ptr, fp); png_set_compression_level(png_ptr,Z_BEST_COMPRESSION); - png_set_IHDR(png_ptr,info_ptr,width,height,8,PNG_COLOR_TYPE_RGB, + png_set_IHDR(png_ptr,info_ptr,width/aafactor,height/aafactor,8,PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE,PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT); png_text text_ptr[2]; @@ -1111,9 +1143,9 @@ void Image::write_PNG(FILE *fp) png_set_text(png_ptr,info_ptr,text_ptr,1); png_write_info(png_ptr,info_ptr); - auto row_pointers = new png_bytep[height]; - for (int i=0; i < height; ++i) - row_pointers[i] = (png_bytep) &writeBuffer[(height-i-1)*3*width]; + auto row_pointers = new png_bytep[height/aafactor]; + for (int i=0; i < height/aafactor; ++i) + row_pointers[i] = (png_bytep) &writeBuffer[((height/aafactor)-i-1)*3*(width/aafactor)]; png_write_image(png_ptr, row_pointers); png_write_end(png_ptr, info_ptr); @@ -1129,11 +1161,12 @@ void Image::write_PNG(FILE *fp) void Image::write_PPM(FILE *fp) { - fprintf(fp,"P6\n%d %d\n255\n",width,height); + int aafactor = fsaa ? 2 : 1; + fprintf(fp,"P6\n%d %d\n255\n",width/aafactor,height/aafactor); int y; - for (y = height-1; y >= 0; y--) - fwrite(&writeBuffer[y*width*3],3,width,fp); + for (y = (height/aafactor)-1; y >= 0; y--) + fwrite(&writeBuffer[y*(width/aafactor)*3],3,width/aafactor,fp); } /* ---------------------------------------------------------------------- diff --git a/src/image.h b/src/image.h index 51a0acc61c..4f87e92b67 100644 --- a/src/image.h +++ b/src/image.h @@ -28,13 +28,14 @@ class Image : protected Pointers { double zoom; // zoom factor double persp; // perspective factor double shiny; // shininess of objects + int fsaa; // antialiasing on or off int ssao; // SSAO on or off int seed; // RN seed for SSAO double ssaoint; // strength of shading from 0 to 1 double *boxcolor; // color to draw box outline with int background[3]; // RGB values of background - double ambientColor[3]; // light color settings (adjustable by caller) + double ambientColor[3]; // light color settings (adjustable by caller) double keyLightColor[3]; double fillLightColor[3]; double backLightColor[3]; From aedda9513e55ae82443f5f3b9fe6f1baa6dfd9c7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 17 Aug 2023 13:11:41 -0400 Subject: [PATCH 2/6] document cost of FSAA --- doc/src/dump_image.rst | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/src/dump_image.rst b/doc/src/dump_image.rst index 2aec55bb60..4eaff739d2 100644 --- a/doc/src/dump_image.rst +++ b/doc/src/dump_image.rst @@ -965,8 +965,11 @@ The *fsaa* keyword can be used with the dump image command to improve the image quality by enabling full scene anti-aliasing. Internally the image is rendered at twice the width and height and then scaled down by computing the average of each 2x2 block of pixels to produce a single -pixel in the final image at the original size. This produces smoother, -less ragged edges. +pixel in the final image at the original size. This produces images with +smoother, less ragged edges. The calculation of this effect can +increase the cost of computing the image by roughly 4x or more, +especially for large images and with large processor counts due to +increased communication cost. ---------- From f4fe28d8d02adbf2a92eee1474d470c08c80add8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 17 Aug 2023 16:42:22 -0400 Subject: [PATCH 3/6] change PNG compression from best compression to best speed --- src/image.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/image.cpp b/src/image.cpp index 2516ae3fdc..5caaf350dd 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -1122,7 +1122,7 @@ void Image::write_PNG(FILE *fp) } png_init_io(png_ptr, fp); - png_set_compression_level(png_ptr,Z_BEST_COMPRESSION); + png_set_compression_level(png_ptr,Z_BEST_SPEED); png_set_IHDR(png_ptr,info_ptr,width/aafactor,height/aafactor,8,PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE,PNG_COMPRESSION_TYPE_DEFAULT,PNG_FILTER_TYPE_DEFAULT); From 988b121a961d0bd3260f73158a1bd9248dee73b5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 17 Aug 2023 16:55:57 -0400 Subject: [PATCH 4/6] silence compiler warnings --- src/image.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/image.cpp b/src/image.cpp index 5caaf350dd..c9e9960a3c 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -56,8 +56,8 @@ enum{NO,YES}; /* ---------------------------------------------------------------------- */ Image::Image(LAMMPS *lmp, int nmap_caller) : - Pointers(lmp), depthBuffer(nullptr), surfaceBuffer(nullptr), imageBuffer(nullptr), - depthcopy(nullptr),surfacecopy(nullptr),rgbcopy(nullptr) + Pointers(lmp), depthBuffer(nullptr), surfaceBuffer(nullptr), depthcopy(nullptr), + surfacecopy(nullptr), imageBuffer(nullptr), rgbcopy(nullptr), writeBuffer(nullptr) { MPI_Comm_rank(world,&me); MPI_Comm_size(world,&nprocs); From 5528cefe0f5741893262258ac7d23e137a00ce55 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 17 Aug 2023 19:57:46 -0400 Subject: [PATCH 5/6] move fsaa keyword next to ssao and away from dump_modify we don't need to reallocate the buffers this way --- doc/src/dump_image.rst | 51 +++++++++--------- doc/utils/sphinx-config/false_positives.txt | 1 + src/dump_image.cpp | 58 +++++++++------------ 3 files changed, 51 insertions(+), 59 deletions(-) diff --git a/doc/src/dump_image.rst b/doc/src/dump_image.rst index 4eaff739d2..6e0f28af74 100644 --- a/doc/src/dump_image.rst +++ b/doc/src/dump_image.rst @@ -24,7 +24,7 @@ Syntax * color = atom attribute that determines color of each atom * diameter = atom attribute that determines size of each atom * zero or more keyword/value pairs may be appended -* keyword = *atom* or *adiam* or *bond* or *grid* or *line* or *tri* or *body* or *fix* or *size* or *view* or *center* or *up* or *zoom* or *box* or *axes* or *subbox* or *shiny* or *ssao* +* keyword = *atom* or *adiam* or *bond* or *grid* or *line* or *tri* or *body* or *fix* or *size* or *view* or *center* or *up* or *zoom* or *box* or *axes* or *subbox* or *shiny* or *fsaa* or *ssao* .. parsed-literal:: @@ -85,6 +85,8 @@ Syntax diam = diameter of subdomain lines as fraction of shortest box length *shiny* value = sfactor = shinyness of spheres and cylinders sfactor = shinyness of spheres and cylinders from 0.0 to 1.0 + *fsaa* arg = yes/no + yes/no = do or do not apply anti-aliasing *ssao* value = shading seed dfactor = SSAO depth shading shading = *yes* or *no* = turn depth shading on/off seed = random # seed (positive integer) @@ -103,7 +105,7 @@ Syntax dump_modify dump-ID keyword values ... * these keywords apply only to the *image* and *movie* styles and are documented on this page -* keyword = *acolor* or *adiam* or *amap* or *gmap* or *backcolor* or *bcolor* or *bdiam* or *bitrate* or *boxcolor* or *color* or *framerate* or *fsaa* or *gmap* +* keyword = *acolor* or *adiam* or *amap* or *gmap* or *backcolor* or *bcolor* or *bdiam* or *bitrate* or *boxcolor* or *color* or *framerate* or *gmap* * see the :doc:`dump modify ` doc page for more general keywords .. parsed-literal:: @@ -151,8 +153,6 @@ Syntax R,G,B = red/green/blue numeric values from 0.0 to 1.0 *framerate* arg = fps fps = frames per second for movie - *fsaa* arg = yes/no - yes/no = do or do not apply anti-aliasing *gmap* args = identical to *amap* args Examples @@ -229,7 +229,7 @@ details have to be looked up in the `FFmpeg documentation described below. To write out JPEG and PNG format files, you must build LAMMPS with -support for the corresponding JPEG or PNG library. To convert images +support for the corresponding JPEG or PNG library. To convert images into movies, LAMMPS has to be compiled with the -DLAMMPS_FFMPEG flag. See the :doc:`Build settings ` page for details. @@ -599,13 +599,25 @@ image will appear. The *sfactor* value must be a value 0.0 <= *sfactor* <= 1.0, where *sfactor* = 1 is a highly reflective surface and *sfactor* = 0 is a rough non-shiny surface. -The *ssao* keyword turns on/off a screen space ambient occlusion -(SSAO) model for depth shading. If *yes* is set, then atoms further -away from the viewer are darkened via a randomized process, which is -perceived as depth. The calculation of this effect can increase the -cost of computing the image by roughly 2x. The strength of the effect -can be scaled by the *dfactor* parameter. If *no* is set, no depth -shading is performed. +.. versionadded:: TBD + +The *fsaa* keyword can be used with the dump image command to improve +the image quality by enabling full scene anti-aliasing. Internally the +image is rendered at twice the width and height and then scaled down by +computing the average of each 2x2 block of pixels to produce a single +pixel in the final image at the original size. This produces images with +smoother, less ragged edges. The application of this algorithm can +increase the cost of computing the image by about 3x or more. + +The *ssao* keyword turns on/off a screen space ambient occlusion (SSAO) +model for depth shading. If *yes* is set, then atoms further away from +the viewer are darkened via a randomized process, which is perceived as +depth. The strength of the effect can be scaled by the *dfactor* +parameter. If *no* is set, no depth shading is performed. The +calculation of this effect can increase the cost of computing the image +substantially by 5x or more, especially with larger images. When used +in combination with the *fsaa* keyword the computational cost of depth +shading is particularly large. ---------- @@ -959,20 +971,6 @@ frequently. ---------- -.. versionadded:: TBD - -The *fsaa* keyword can be used with the dump image command to improve -the image quality by enabling full scene anti-aliasing. Internally the -image is rendered at twice the width and height and then scaled down by -computing the average of each 2x2 block of pixels to produce a single -pixel in the final image at the original size. This produces images with -smoother, less ragged edges. The calculation of this effect can -increase the cost of computing the image by roughly 4x or more, -especially for large images and with large processor counts due to -increased communication cost. - ----------- - The *gmap* keyword can be used with the dump image command, with its *grid* keyword, to setup a color map. The color map is used to assign a specific RGB (red/green/blue) color value to an individual grid cell @@ -1067,6 +1065,7 @@ The defaults for the dump_modify keywords specific to dump image and dump movie * boxcolor = yellow * color = 140 color names are pre-defined as listed below * framerate = 24 +* fsaa = no * gmap = min max cf 0.0 2 min blue max red ---------- diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 3ed6fb8e42..bcf1e741c4 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -1195,6 +1195,7 @@ Freitas Frenkel Friedrichs fs +fsaa fsh fstyle fsw diff --git a/src/dump_image.cpp b/src/dump_image.cpp index 41d4671f95..b1b91c6543 100644 --- a/src/dump_image.cpp +++ b/src/dump_image.cpp @@ -248,10 +248,14 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : if (iarg+3 > narg) error->all(FLERR,"Illegal dump image command"); int width = utils::inumeric(FLERR,arg[iarg+1],false,lmp); int height = utils::inumeric(FLERR,arg[iarg+2],false,lmp); - if (width <= 0 || height <= 0) - error->all(FLERR,"Illegal dump image command"); - image->width = width; - image->height = height; + if (width <= 0 || height <= 0) error->all(FLERR,"Illegal dump image command"); + if (image->fsaa) { + image->width = width*2; + image->height = height*2; + } else { + image->width = width; + image->height = height; + } iarg += 3; } else if (strcmp(arg[iarg],"view") == 0) { @@ -345,6 +349,23 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : image->shiny = shiny; iarg += 2; + } else if (strcmp(arg[iarg],"fsaa") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal dump_modify command"); + int aa = utils::logical(FLERR, arg[iarg+1], false, lmp); + if (aa) { + if (!image->fsaa) { + image->width = image->width*2; + image->height = image->height*2; + } + } else { + if (image->fsaa) { + image->width = image->width/2; + image->height = image->height/2; + } + } + image->fsaa = aa; + iarg += 2; + } else if (strcmp(arg[iarg],"ssao") == 0) { if (iarg+4 > narg) error->all(FLERR,"Illegal dump image command"); image->ssao = utils::logical(FLERR,arg[iarg+1],false,lmp); @@ -1555,35 +1576,6 @@ int DumpImage::modify_param(int narg, char **arg) return n; } - // if antialias state changes, we need to increase the buffer space - // change the (internal) image dimensions and reset the view parameters - if (strcmp(arg[0],"fsaa") == 0) { - if (narg < 2) error->all(FLERR,"Illegal dump_modify command"); - int aa = utils::logical(FLERR, arg[1], false, lmp); - if (image->fsaa == NO) { - if (aa == YES) { - image->width = image->width*2; - image->height = image->height*2; - // reallocate buffers to make room - image->buffers(); - } - } else { - if (aa == NO) { - image->width = image->width/2; - image->height = image->height/2; - box_bounds(); - box_center(); - view_params(); - } - } - image->fsaa = aa; - // reset size based parameters - box_bounds(); - box_center(); - view_params(); - return 2; - } - if (strcmp(arg[0],"bcolor") == 0) { if (narg < 3) error->all(FLERR,"Illegal dump_modify command"); if (atom->nbondtypes == 0) From 283c928aac93ac5fb1b3f1ede8a146a3bf45bc1f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 18 Aug 2023 14:08:43 -0400 Subject: [PATCH 6/6] add note and images to showcase the effect of fsaa and ssao --- doc/src/JPG/image.both.png | Bin 0 -> 23406 bytes doc/src/JPG/image.default.png | Bin 0 -> 21978 bytes doc/src/JPG/image.fsaa.png | Bin 0 -> 23151 bytes doc/src/JPG/image.ssao.png | Bin 0 -> 23091 bytes doc/src/dump_image.rst | 22 ++++++++++++++++++++++ 5 files changed, 22 insertions(+) create mode 100644 doc/src/JPG/image.both.png create mode 100644 doc/src/JPG/image.default.png create mode 100644 doc/src/JPG/image.fsaa.png create mode 100644 doc/src/JPG/image.ssao.png diff --git a/doc/src/JPG/image.both.png b/doc/src/JPG/image.both.png new file mode 100644 index 0000000000000000000000000000000000000000..b74b0d773d8efbbafc66b7d09d1203a5fb5574f2 GIT binary patch literal 23406 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 A+W-In literal 0 HcmV?d00001 diff --git a/doc/src/JPG/image.default.png b/doc/src/JPG/image.default.png new file mode 100644 index 0000000000000000000000000000000000000000..7acf8378508dcb760d03aae0016388cf3b08be2b GIT binary patch literal 21978 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 literal 0 HcmV?d00001 diff --git a/doc/src/JPG/image.ssao.png b/doc/src/JPG/image.ssao.png new file mode 100644 index 0000000000000000000000000000000000000000..8270268dd07f5f04fdd9dcf2b2465a594b0612a4 GIT binary patch literal 23091 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 CC@ePs literal 0 HcmV?d00001 diff --git a/doc/src/dump_image.rst b/doc/src/dump_image.rst index 6e0f28af74..4e227d2f72 100644 --- a/doc/src/dump_image.rst +++ b/doc/src/dump_image.rst @@ -621,6 +621,28 @@ shading is particularly large. ---------- +Image Quality Settings +"""""""""""""""""""""" + +The two keywords *fsaa* and *ssao* can be used to improve the image +quality at the expense of additional computational cost to render the +images. The images below show from left to right the same render with +default settings, with *fsaa* added, with *ssao* added, and with both +keywords added. + +.. |imagequality1| image:: JPG/image.default.png + :width: 24% +.. |imagequality2| image:: JPG/image.fsaa.png + :width: 24% +.. |imagequality3| image:: JPG/image.ssao.png + :width: 24% +.. |imagequality4| image:: JPG/image.both.png + :width: 24% + +|imagequality1| |imagequality2| |imagequality3| |imagequality4| + +---------- + A series of JPEG, PNG, or PPM images can be converted into a movie file and then played as a movie using commonly available tools. Using dump style *movie* automates this step and avoids the intermediate