Viewing Polynomial Texture Maps Using Java

Similar documents
Making natural looking Volumetric Clouds In Blender 2.48a

INTRODUCTION TO RENDERING TECHNIQUES

Silverlight for Windows Embedded Graphics and Rendering Pipeline 1

A Proposal for OpenEXR Color Management

Image Processing and Computer Graphics. Rendering Pipeline. Matthias Teschner. Computer Science Department University of Freiburg

Optimizing AAA Games for Mobile Platforms

Computer Applications in Textile Engineering. Computer Applications in Textile Engineering

Fundamentals of Java Programming

Course Overview. CSCI 480 Computer Graphics Lecture 1. Administrative Issues Modeling Animation Rendering OpenGL Programming [Angel Ch.

Quick Tutorial. Overview. The NVIDIA Software Improvement Program. Creating an Effect

An Overview of Java. overview-1

OpenEXR Image Viewing Software

GRAFICA - A COMPUTER GRAPHICS TEACHING ASSISTANT. Andreas Savva, George Ioannou, Vasso Stylianou, and George Portides, University of Nicosia Cyprus

The BSN Hardware and Software Platform: Enabling Easy Development of Body Sensor Network Applications

CUBE-MAP DATA STRUCTURE FOR INTERACTIVE GLOBAL ILLUMINATION COMPUTATION IN DYNAMIC DIFFUSE ENVIRONMENTS

Cork Education and Training Board. Programme Module for. 3 Dimensional Computer Graphics. Leading to. Level 5 FETAC

CS506 Web Design and Development Solved Online Quiz No. 01

Touchstone -A Fresh Approach to Multimedia for the PC

History OOP languages Year Language 1967 Simula Smalltalk

Dhiren Bhatia Carnegie Mellon University

NVPRO-PIPELINE A RESEARCH RENDERING PIPELINE MARKUS TAVENRATH MATAVENRATH@NVIDIA.COM SENIOR DEVELOPER TECHNOLOGY ENGINEER, NVIDIA

Tutorial Reference Manual. Java WireFusion 4.1

Extending Desktop Applications to the Web

Building a Multi-Threaded Web Server

The Lighting Effects Filter

Monash University Clayton s School of Information Technology CSE3313 Computer Graphics Sample Exam Questions 2007

C++ INTERVIEW QUESTIONS

1. Definition of the project. 2. Initial version (simplified texture) 3. Second version (full textures) 5. Modelling and inserting 3D objects

MicroStation V8i Training Manual 3D Level 3

So, you want to make a photo-realistic rendering of the Earth from orbit, eh? And you want it to look just like what astronauts see from the shuttle

Computing Concepts with Java Essentials

About the Render Gallery

Multivariate data visualization using shadow

INTRODUCTION TO COMPUTER PROGRAMMING. Richard Pierse. Class 7: Object-Oriented Programming. Introduction

Enumerated Types in Java

Multi-GPU Load Balancing for Simulation and Rendering

Web Based 3D Visualization for COMSOL Multiphysics

Introduction to Computer Graphics

Syllabus for CS 134 Java Programming

WebObjects Web Applications Programming Guide. (Legacy)

ASSEMBLY PROGRAMMING ON A VIRTUAL COMPUTER

Java 6 'th. Concepts INTERNATIONAL STUDENT VERSION. edition

Crash Course in Java

Part 1 Foundations of object orientation

Computer-Generated Photorealistic Hair

An evaluation of JavaFX as 2D game creation tool

Experiences with 2-D and 3-D Mathematical Plots on the Java Platform

Java Interview Questions and Answers

How To Teach Computer Graphics

A Short Introduction to Computer Graphics

Java (12 Weeks) Introduction to Java Programming Language

Variable Base Interface

Getting Started with iray in 3ds Max 2014

NetBeans Profiler is an

Fire Simulation For Games

Extracting, Storing And Viewing The Data From Dicom Files

JavaFX Session Agenda

Programming 3D Applications with HTML5 and WebGL

Topics. Introduction. Java History CS 146. Introduction to Programming and Algorithms Module 1. Module Objectives

Artificial Intelligence. Class: 3 rd

Freescale Semiconductor, I

IV3Dm provides global settings which can be set prior to launching the application and are available through the device settings menu.

A Color Placement Support System for Visualization Designs Based on Subjective Color Balance

Glossary of Object Oriented Terms

Quiz for Chapter 1 Computer Abstractions and Technology 3.10

Template-based Eye and Mouth Detection for 3D Video Conferencing

SkillsUSA 2014 Contest Projects 3-D Visualization and Animation

VisIt Visualization Tool

Recent Advances and Future Trends in Graphics Hardware. Michael Doggett Architect November 23, 2005

Designing with Exceptions. CSE219, Computer Science III Stony Brook University

My Materials. In this tutorial, we ll examine the material settings for some simple common materials used in modeling.

Overview Motivation and applications Challenges. Dynamic Volume Computation and Visualization on the GPU. GPU feature requests Conclusions

Data Storage. Chapter 3. Objectives. 3-1 Data Types. Data Inside the Computer. After studying this chapter, students should be able to:

The 3D Animation Process at Framework Media

ANIMATION a system for animation scene and contents creation, retrieval and display

Gear View Basic. User Help. Version Written by: Product Documentation and R&D Date: August 2015 LX-DOC-GVB UH-EN-REVA

MovieClip, Button, Graphic, Motion Tween, Classic Motion Tween, Shape Tween, Motion Guide, Masking, Bone Tool, 3D Tool

The RADIANCE Lighting Simulation and Rendering System

Advanced Graphics and Animations for ios Apps

How To Write A Program For The Web In Java (Java)

Files Used in this Tutorial

WRITING DATA TO A BINARY FILE

Apache Thrift and Ruby

EquaLight. Version 3.1. Operating Manual

Color correction in 3D environments Nicholas Blackhawk

Snagit 10. Getting Started Guide. March TechSmith Corporation. All rights reserved.

GUI GRAPHICS AND USER INTERFACES. Welcome to GUI! Mechanics. Mihail Gaianu 26/02/2014 1

Data Storage 3.1. Foundations of Computer Science Cengage Learning

High Dynamic Range and other Fun Shader Tricks. Simon Green

PRODUCT LIFECYCLE MANAGEMENT COMPETENCY CENTRE RENDERING. PLMCC, JSS Academy of Technical Education, Noida Rendering 1 of 16

OpenGL Performance Tuning

Maya 2014 Still Life Part 1 Texturing & Lighting

Mail Programming Topics

AMD GPU Architecture. OpenCL Tutorial, PPAM Dominik Behr September 13th, 2009

Managing Variability in Software Architectures 1 Felix Bachmann*

core. Volume I - Fundamentals Seventh Edition Sun Microsystems Press A Prentice Hall Title ULB Darmstadt

The Rocket Steam Locomotive - Animation

Deferred Shading & Screen Space Effects

Transcription:

Viewing Polynomial Texture Maps Using Java Clifford Lyon Harvard Extension School Independent Study in Computer Graphics December 2004 cplyon928@comast.net

Acknowledgements Thanks to Hanspeter Pfister for directing the project, Tom Malzbender and Dan Gelb for their willingness to share their technology and helpful hints, Henry Leitner and Bill Robinson for allowing this to happen, and Carla Schroer, Mark Mudge, and Joseph Padfield for their feedback and giving it a try.

Table of Contents Viewing Polynomial Texture Maps Using Java... 1 PTM Background... 4 Java Implementation... 4 Java PTM Library... 5 Approach: PTM Model... 5 Reading PTMs... 6 Version Support... 6 Display Method... 7 Challenges and Alternatives... 7 Supported Features... 8 Ambience... 8 Directional Light... 8 Specular Highlights... 8 Diffuse Gain... 9 New Features... 9 Animation... 9 Point light... 9 Environment Mapping... 9 Appendix... 11 Code Example... 11 PTM Library Diagram... 12 References... 13

The PTM Viewer for Java was developed for an independent study in computer graphics through the Harvard Extension School. This paper highlights the structure of the Java application, some of the challenges encountered during the development process, and the features offered by the viewer. The appendix includes a working code sample for the interested coder. The images above, produced by the viewer, show a PTM lit with a directional light, with specular reflection enabled, and with environment mapping enabled. PTM Background Hewlett-Packard Labs developed Polynomial Texture Mapping (PTM) as a way of increasing the photorealism of texture maps (Malzbender, T., Gelb, D., & Wolters, H. 2001.) Coefficients of a biquadratic polynomial are stored per texel and used to reconstruct surface color under varying lighting conditions. Like bump mapping, this allows the perception of surface deformations. However, the PTM method is image-based, and photographs of a surface under varying lighting conditions can be used to construct these maps. Unlike bump maps, Polynomial Texture Maps (PTMs) also capture variations due to surface self-shadowing and interreflections, which enhance realism. Java Implementation HP implemented a PTM viewer in software using OpenGL, a graphics application programming interface (OpenGL Architecture Review Board, 2003.) The viewer can be downloaded from the PTM website at: http://www.hpl.hp.com/ptm/. The user can change the location of the light using the mouse, producing variations in the PTMs appearance. In addition to image relighting using a directional light, the viewer demonstrates novel lighting effects and material simulations. The viewer is easy to use, fast, and loads all types of PTMs. However, the viewer must be downloaded and unpacked before use. Our goal was to reproduce the functionality of the OpenGL viewer using the Java programming language (Gosling, J., Joy, B., & Steele, G. 2000.) The main benefit of a pure Java solution is accessibility across operating systems. Anyone with the Java plug-in installed and a web browser can use our viewer through the internet. We tried to create a simple, intuitive, and user-friendly interface that would demonstrate the range of PTM

effects in a few minutes using a modern web browser. We also added some new features, such as using the recovered surface normals to perform sphere environment mapping, a technique that simulates the effect of a surrounding environment on the appearance of an image. Java PTM Library Approach: PTM Model We wanted a framework that made it easy to introduce new lighting effects. The design of our PTM library separates the PTM data model, transformations on the data, and presentation of the data into distinct modules. All of the lighting effects take place in the transformation module, which creates a view of the data for presentation. The user chooses which transformations to apply through a graphical user interface (GUI.) The user can adjust parameters for the transformations through the GUI s control panel. The software applies the selected transformations to the data, and presents the results to the viewer. The figure below illustrates flow of data from its raw form through transformation and finally to the viewer, who can modify the transformation parameters interactively and re-display the data. Graphical Interface PTM Data Tranforms Display User Figure 1 - PTM Model Module separation fosters extensibility for new transformations: new lighting effects are simply new concrete Transform classes; the data model and presentation modules remain unchanged.

Reading PTMs The first step in acquiring the PTM for display is reading the PTM file. Several versions of PTM files exist. The PTMIO module (PTM input/output) reads the PTM files into a standard PTM object. The PTMIO module provides static methods for accessing the PTM data, and hides the details of the file type from the main library. Inside the class, PTMIO reads the header of the file, and instantiates a concrete instance of a PTMReader appropriate to the file. If no appropriate parser is available, the module throws an exception. Figure 2 expands the figure above, illustrating the place of the PTMIO module in the data path. PTMs PTMIO Graphical Interface PTM Data Tranforms Display User Figure 2 - PTMIO Version Support Currently, our software supports a subset of existing PTM file formats: LRBG and JPEG LRGB, versions 1 and 2. LRGB PTMs use a single polynomial at each pixel for all colors (red, green, and blue.) In contrast, RGB PTMs use a separate equation for each color, requiring additional operations at rendering time and additional memory. Since RGB PTMs have a bigger memory footprint and greater runtime cost, we chose LRGB types over RGB counterparts. However, the structure of the library is such that supporting concrete RGB PTM and PTMReader subclasses would reuse much of the existing framework.

Display Method The software displays PTMs by applying a transformation to the source PTM data and writing the results to a buffer that stores the pixels of the image displayed in the viewer. The PTM object stores raw RGB color channel information and the polynomial coefficients for lighting effects. A concrete Transform operator iterates over the color channel and coefficient arrays, computing a destination value for each array element in the pixel buffer and writing that result. The buffer belongs to a Java BufferedImage class encapsulated in a display object, the PTMCanvas. All of the relighting and effects happen inside of a transform operation. The operators keep a reference to the BufferedImage pixel buffer, and use that reference to rewrite pixel values. Once the transformation completes, the paintimmediately() method updates the BufferedImage container. The transform operators implement the re-lighting effects documented by HP Labs in their PTM paper (Malzbender, T., Gelb, D., & Wolters, H. 2001.) In addition, there are some other effects available, such as a point light source and environment mapping. Challenges and Alternatives We spent a great deal of time performance tuning. We evaluated OpenGL bindings for Java, the various Java 2D image implementations, and fast math packages. In the end, we settled on a pure Java implementation using a DataBuffer from a BufferedImage for display, as described above. This choice offered good performance and easy access through a web browser. All of the original performance-critical code is inside the transform classes. In the end, three things sped up the transformations and delivered the best frame rates: Implementing floating-point calculations as integer math. Despite claims that modern chips do a fine job optimizing floating-point calculations, there was a noticeable improvement in performance using bit-shifted integer approximations for floating point numbers. Inlining method calls in the rendering loop. This prevented a more elegant pipeline implementation, with a series of callbacks stacked together and fired during the rendering loop. However, it was worth the tradeoff for better performance.

Limiting array index lookups. Java checks that array index values are inbounds each time an array element is dereferenced. However, if an array is used in a loop in such a way that the compiler can tell an out-ofbounds element will never be addressed, this check can be skipped and there is a performance lift. Beyond these general guidelines, several specific performance enhancements improved individual transformation performance (caching, piecewise approximations for continuous functions, etc.) Supported Features Ambience The user can adjust the ambient light in the scene by using the light slider in the first panel of the control window, general. Moving the light slider from left to right increases the amount of ambient light. Directional Light The default setting for relighting the image is a directional light. One assumes a directional light to be an infinite distance from the object, so incoming rays striking each pixel are considered parallel. Given this assumption, the parameters for the biquadratic polynomial need only be determined once for the entire image, giving a very reasonable performance. Specular Highlights The specular highlight operation uses recovered surface normals and a standard Phong lighting equation: I I ( ) ( ) n aka I d kd N L I sks N H (1) In this implementation, the diffuse component (the second term) of the lighting equation is simply the directional PTM lighting. The control panel exposes the k d and c terms, as well at the exponent n. The k d term controls the amount of diffuse light in the equation. The k s term controls the degree of specular reflection, and the exponent controls the size of the highlights (high values narrow the highlights). The ambient term is a global value and may be adjusted using light slider in the general control panel.

Diffuse Gain The diffuse gain operator provides enhanced contrast, revealing greater surface detail. This effect was part of the original OpenGL implementation. The HP paper describes it in detail. The level of diffuse gain can be set through the GUI using the dgain slider. New Features Animation The animation feature simply moves the light location automatically in a background thread. Point light The point light source determines biquadratic polynomial parameters for each pixel separately, factoring in the distance of the light from the source. While more expensive than a directional light, the point light source enables the user to change the distance of the light from the PTM, producing a distinct lighting effect. Environment Mapping Environment mapping (or reflection mapping) is a way of adding realism to a scene by allowing the surrounding environment to influence lighting. We implemented sphere environment mapping using the standard OpenGL indexing techniques and Paul Debevec s sphere maps (http://www.debevec.org/probes/.) The sphere map image represents the environment surrounding the PTM. Debevec s maps combine two images to avoid the problem of poor sampling near the backward-facing directions around the circumference of the sphere. The more accurate the derived normals of the original PTM, the better the resulting effect. The software allows the user to select an environment map and to rotate it interactively around the Z-axis.

Implementation The sphere mapping implementation uses the OpenGL method for indexing into the environment map with the reflection vector. We calculated the recovered surface normal as described in the HP PTM paper for the general case, equations (16), (17), and (18): given coeficients a0, a1, a5, the normal is: Where : a a lu0 4 N ( lu, lv, 1 lu, lv ) a a lv0 4 2 2 0 0 0 0 2 4 1 3 2 a0a1 a2 (2) 2 a a (3) 2 a a (4) 2 3 0 4 2 a0a1 a2 Given the normal, and the incedent light, we compute the reflection vector: R 2 N( N I ) I (5) Define: m Rx Ry Rz 2 2 2 ( 1) (6) The texture coordinates into the environment map range from 0 to 1: R x 1 s 2m 2 R y 1 t 2m 2 (7) (8) The specular and directional transform operators read the value of the indexed pixel from the environment map, and factor that into the final pixel value. The reflectance slider on the control panel adjusts the degree of Gaussian blur and down sampling of the environment map. We combined these closely corelated parameters into a single adjustment for simplicity. Moving the reflectance slider from left to right increases the simulated roughness of the material, and so results in a more diffuse lighting effect.

Appendix Code Example This is a code sample demonstrating a helo world PTM application using the project library. import java.awt.event.*; import java.io.*; import javax.swing.*; import jpview.gui.ptmcanvas; import jpview.io.ptmio; import jpview.ptms.ptm; import jpview.transforms.*; public class Example implements MouseMotionListener { PixelTransformOp pixeltransformop = new DirectionalLightOp(); PTMCanvas canvas = null; PTM ptm = null; int mousex = 0; int mousey = 0; public Example( String ptmfilename ) { try { ptm = PTMIO.getPTMParser(new FileInputStream(new File(ptmFileName))).readPTM(); canvas = PTMCanvas.createPTMCanvas ( ptm.getwidth(), ptm.getheight(), PTMCanvas.BUFFERED_IMAGE ); pixeltransformop.transformpixels ( canvas.getpixels(), ptm, ptm.getwidth()/2, ptm.getheight()/2 ); catch ( Exception e ) { e.printstacktrace(); public void mousedragged(mouseevent e) { mousex = Math.min(Math.max(e.getX(),0),ptm.getWidth()); mousey = Math.min(Math.max(e.getY(),0),ptm.getHeight()); pixeltransformop.transformpixels(canvas.getpixels(), ptm, mousex, mousey ); canvas.paintimmediately(0,0,canvas.getwidth(),canvas.getheight()); private static void createandshowgui(string name) { Example example = new Example(name); JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("Example"); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.getcontentpane().add(example.canvas); frame.addmousemotionlistener(example); frame.pack(); frame.setvisible(true); public static void main(string[] args) { try { final String name = args[0]; SwingUtilities.invokeLater(new Runnable() { public void run() { createandshowgui(name); ); catch (Exception e ) { e.printstacktrace();

PTM Library Diagram The diagram below shows the layers of the library along the data path. The PTM Reader reads the data and stores the model; the transformations present a view of the data to the GUI. While not a strict implementation of the model-view-controller pattern, it uses a similar separation of concerns. PTM Reader PTM File PTMIO Java PTM Object Transformations Environment Mapping Specular Light Sampling Point Light Normal Visualization Diffuse Gain Interpolated Sampling Directional Light PTM Display Control Panels PTM Canvas Thumbnail Browser

References OpenGL Architecture Review Board. (2003). OpenGL Programming Guide (4th ed.) Boston: Addison- Wesley. Malzbener, T., Gelb, D., & Wolters, H. (2001). Polynomial Texture Maps. Siggraph 2001 Proceedings. Retrieved May 1, 2004, from http://www.hpl.hp.com/research/ptm/papers/ptm.pdf Gosling, J., Joy, B., & Steele, G. (2000). The Java Language Specification: Vol.. The Java Language Specification (2nd ed.) Boston: Addison-Wesley.