Saturday 16 May 2009

Final stretch

Last week of project time, now focusing entirely on writing the dissertation. The main technique I had hoped to explore in my project will, unfortunately, remain unfinished.

On reflection, it was a poor choice of investigation, and had I done in-depth research of my own, instead of relying on results gathered from previous papers, I may have re-evaluated the scale of the problem.

I had also hoped that this project would be a platform for learning more advanced shader programming, however, since I had only a basic understanding of shader implementation at the beginning of the project, I underestimated the time needed to learn the skills required, setting me back quite substantially.

The techniques I had hoped to explore were also much more complex than my initial research suggested. If I could revise my project with the knowledge I have now, I would focus exclusively on ONE technique instead of trying to investigate three.

As a direct result of this, my results are poor, with many missing parts. There are results available from previous research for all of these techniques which I can use, however, these results are at least 5 years out of date now and would almost certainly be different with current generation hardware.

In spite of poor initial planning, I hope some meaningful conclusions might finally be achieved.

Sunday 12 April 2009

April

Coming to the final few weeks of project time, progress on my current schedule in not satisfactiory. This would not normally be a problem since I planned for a few weeks slippage. I had been trying to avoid a last minute rush, unfortunately my week off for illness, on top of previous delays with my shaders, have pushed my schedule past the deadline. According to my initial schedule, I should be progressing on the shell/fin method, while I'm still stuck on particle fur.

In order to make up this lost time, I'm cutting out as many distractions as possible and focusing 100% on coursework. So for the next 3 weeks I'll be in crunch mode, however if all goes well, I should be finished with a several days to spare.

I've updated my chart to account for the lack of time, and my new work schedule:

Wednesday 1 April 2009

Unexpected delays

I have been unable to work this past week due to illness. This has taken over a week from my schedule and means I'll need reorganize my working time to make up this lost week.

Tuesday 10 March 2009

Tuesday 17 February 2009

Warm, fuzzy, furry project milestones

Milestone 1:

Task: Impliment basic particle systems using directX 9 fixed pipeline.
Goal: Get back into graphics progamming, become familiar with the basics of particle systems.
Time: February 16 --> 23 (1 week)


Milestone 2:

Task: Impliment a particle system using vertex and pixel shaders.
Goal: Create a workable framework to use shaders. Get a good understanding of HLSL.
Time: February 23 --> March 16 (2 weeks)


Milestone 3:

Task: Create a particle based hair/fur renderer.
Goal: To have a good understanding of how to visually approximate hair/fur.
Time: March 16 --> March 30 (2 weeks)


Milestone 4:

Task: Attempt possible optimisations, inculding implimenting the shell/fin method.
Goal: Get performance results for the various optimisations.
Time: March 30 --> April 20 (3 weeks)


Milestone 5:

Task: Gather results for comparison annd write report
Goal: Find if any of the methods researched are appropriate for games.
Time: April 20 --> Hand-in deadline (2-3? weeks)

Wednesday 14 January 2009

Final proposal

Introduction:
The overarching aim of the project is to create a fairly realistic looking model of hair and fur which can be rendered in real-time and could be used in a game environment.

This is an area which has been somewhat neglected in game graphics, possibly due to the perceived difficulty of the subject. Most current methods of creating hair and fur depend entirely on the skill and time of the artist. More advanced techniques have already been used in games, such as Shadow of the Colossus, however they have never been widely adopted.

By implementing a procedural method of hair generation, coupled with some very clever optimization as presented by Lengyel et al, I believe it is possible to take a massive step forward in the visual quality of hair and fur in games.

To do this, I will investigate particle-based hair systems, then several possible alternatives and optimisations. This includes the relatively common overlapping polygonal strip approach as presented in the Black & White (Lionhead, 2001) games.

I will examine the volumetric texture-based technique presented by Kajiya & Kay in 1989, however this method has been shown to be too computationally intensive for real-time purposes. (Sheppard 2004, p.3) Optimisations based on this technique can be used in real-time and will form the core investigation of this project. (Meyer and Neyret, 1998, p.1)

I will investigate the shell rendering approach first presented by Meyer and Neyret. There are a number of improvements which have been made to their system, most notably by Lengyel with the introduction of fin textures. I will also look into projects which optimise these techniques for current graphics hardware using shaders. (Sheppard 2004, p.43)


Research question:
"Can hair and fur be added into a real-time, 3D, game environment? If so, what techniques can be used, and how effective are they?"


Project Execution:
Firstly, a basic 3D framework will be built as a testing environment. This will most likely be done on top of DirectX9 due to its more consistent shader support, although OpenGL remains a possibility at this point. The API chosen will not make any difference to the project beyond the initial framework setup and the shader language supported.

Once the testing environment is completed, I will begin implementing and testing the various techniques I have researched. There are three techniques I am hopeful for and wish to study in detail:

1.Particle-based hair
2.Overlapping polygonal strips
3.The shell and fins method as presented by Lengyel.

For the sake of simplicity, a range of test models with UV mapped textures will be found. This should provide a good indicator of how the different hair and fur types might look when applied to real game assets.

The initial creation for the hair system will be done using particles. Once the basic rendering is taken care of, the system needs to be refined and polished into a workable model of hair and fur. This involves creating adjustable parameters for the hair properties, such as:

  • Colour
  • Length
  • Curl
  • Density
  • Stiffness
  • Thickness

These parameters can stored in a texture (or textures) and UV mapped onto the test model. Hair directionality, or combing, needs to be stored as a vector.

While particle hair provides the basis for the other methods, it it likely too slow to be of practical use due to the large amount of calculation needed each frame. At this stage of development we can move on to implementing the more optimised texture-based techniques.

For each approach, time must also be taken to investigate possible optimisations for modern graphics hardware. The most obvious optimisation is to move the bulk of graphical calculation into the GPU with use of shaders. The implementation and optimisation of these three techniques will take the bulk of the project execution time.

When the rendering is completed to a usable stage, I will begin to compare the output of the program in terms of visual quality and framerate in order to determine which, if any, of these techniques may be suitable for 3D games.

However it is worth noting that, of the texture-based techniques, the shell and fin method seems to be the most promising for a real-time game implementation and will likely end up as the primary focus as the project moves towards completion.


Evaluation:
In order to determine a good measurement of visual quality, I will follow the same procedure presented in Sheppard's Real-time Rendering of Fur p.53. That is, take a real image of hair or fur and attempt to faithfully reproduce its visual properties using my techniques. This should give a fairly robust test of the methods, both individually and comparatively.

Of course, photo-realism is not always the intended goal in games. With this in mind, various effects will be created to find the visual limits and weaknesses of each technique.

To determine performance of each method, the framerate of the program will be used. While framerate is not a perfect measure of performance, it serves as a relative guide to compare performance between the different methods.


Issues:
There are a few potential issues which could cause problems, however these are fairly minor and unlikely to affect the final outcome of the project.

With the exception of particle-based systems, all the techniques listed are limited to creating short to medium length hair and fur. They cannot be used for long or extremely stylised hair, or to create complex hair interactions. They also sacrifice any complex, realistic dynamics for the sake of speed. (Sheppard 2004, p.14) Fortunately this is unlikely to be a problem for a game environment.

Another minor problem is that it is extremely difficult to measure the visual quality of hair and fur in, definite, quantitative terms. The quality must be judged by the viewer, in this case myself, and will be subject to the viewer's own bias.


Resource Requirements:
A standard, modern PC with a C++ compiler and either the DirectX 9.0c or OpenGL SDK installed. No other special requirements.


Conclusion:
Hopefully this project will provide some motivation for future development into this area of graphics. "A vast number of creatures in the animal kingdom exhibit some kind of fur." (Sheppard 2004) Hopefully in the future these creatures can be presented in full furry 3D.



References:

J. T. Kajika, T. L. Kay (1989) Rendering Fur With Three Dimensional Textures. ACM SIGGRAPH Computer Graphics Volume 23, Issue 3

A. Meyer & F. Neyret, (1998) Interactive Volume Textures. Eurographics Rendering workshop
1998, p. 157 – 168

J. Lengyel, E. Praun, A. Finkelstein, H. Hoppe, (2000) Real-Time Fur over Arbitrary Surfaces. [online] Available from: http://research.microsoft.com/~hoppe/fur.pdf

G. Sheppard, (2004) Real-time Rendering of Fur. [online] Available from: http://www.gamasutra.com/education/theses/20051028/sheppard_01.shtml

SCEI. (2006) Shadow of the Colossus. Playstation 2. SCEI.

Lionhead Studios. (2001) Black & White. PC. Electronic Arts. Feral Interactive http://www.lionhead.com/bw2 (Last visit 08/12/2008)


Bibliography:

M. Pharr, (2005) GPU Gems 2. Addison-Wesley Professional

Hubert Nguyen (2007) GPU Gems 3. Addison-Wesley Professional

Blender Foundation (2008) Blender [online] Available from: http://www.blender.org/development/release-logs/blender-246/hair-and-fur/

Friday 14 November 2008

Honours Project Worksheet — #3

Introduction
The overall aim of the project is to create a fairly realistic looking model of hair and fur which can be rendered in real-time and could be used in a game environment.

To do this, I will investigate particle based hair systems, then several variations on the shell and fin optimization (Hoppe et al). This includes the more common overlapping polygonal strip approach.


Motivation
This is an area which has been somewhat neglected in game graphics, possibly due to the perceived difficulty of the subject. Most current methods of creating 'realistic' hair depend entirely on the skill and time of the artist. More advanced techniques have already been used in games, such as Shadow of the Colossus and Black&White, however they have never been widely adopted.

By implementing a procedural method of hair generation, coupled with some very clever optimization as presented by Hoppe et al, I believe it is possible to take a massive step forward in the visual quality of hair and fur in games.


Research question
"Can hair and fur be added into a real-time, 3d, game environment? If so, what techniques can be used, and how effective are they?"

Addressing the Question
Firstly, a basic 3D framework will be built as a testing environment. This will most likely be done on top of DirectX9, although OpenGL remains a possibility at this point.

Once the basics are in place I will begin implementing and testing the various techniques I have researched. I will then compare the results in terms of visual quality and framerate in order to determine which, if any, of these techniques are suitable for 3d games.

Resource Requirements
A standard, modern PC with either DirectX or OpenGL SDK installed. No special requirements.

-----

References and Bibliography

Lengyel, J. Praun, E. Finkelstein, A. Hoppe, H. Real-Time Fur over Arbitrary Surfaces
http://research.microsoft.com/~hoppe/fur.pdf

Sheppard, G. 2004 Real-time Rendering of Fur http://www.gamasutra.com/education/theses/20051028/sheppard_01.shtml

SCEI. 2006. Shadow of the Colossus. Playstation 2. SCEI.

Lionhead Studios. 2001. Black&White. Electronic Arts Feral Interactive

Friday 24 October 2008

Worksheet 2 with notes

At this point, I'm fairly settled on my question, and I'm moving on to researching specifics and methodology.

1. Can hair and/or fur be added into a real-time, 3d, game environment? If so, what techniques can be used, and how effective are they?

2.

a) Real-time hair and fur rendering techniques and their application in games.

b) Current technology and techniques.

c) Implement and test different techniques.

3. Compare results with regard to realism, rendering cost and overall speed.

Notes:
  • May be a bit broad an area, could read up on a few and pick three of four to do a comparison on.
  • Have you thought about what these test would be? And how you would you create a program environment to do these tests.
  • How would you test the speed of the algorithms’, how long it would take for the program to complete? May also have to take into account the more realistic the method then the longer rendering will take.


Monday 29 September 2008

Initial research topic ideas

Topic: Real-time hair and fur rendering for 3D characters

Issues: One of the final steps toward 'photo-realistic' characters. Very difficult to implement in real-time. Several real-time techniques currently used in games, though non give very good results. A few highly realistic techniques available, but are rarely used in games.

Practical: Investigate current techniques as used in film and games. Assess each technique for cost/benefits. See if realistic techniques can be adapted/optimised for current graphics hardware. Attempt to find optimal technique for real-time game characters.


Particle method:

http://en.wikipedia.org/wiki/Particle_system#Snowflakes_versus_hair

http://blenderartists.org/forum/showthread.php?t=40299


Shell and fin style method:

http://research.microsoft.com/~hoppe/fur.pdf

http://www.gamasutra.com/education/theses/20051028/sheppard_01.shtml

http://edusworld.org/ew/ficheros/2006/paginasWeb/making_of_sotc_files/

Welcome to VOODOOCODE

Hello, welcome my 4th year blog. This is where I'll be keeping all the news, info and development journals for my honours project. I'll try to keep it easy to follow and amusing, as far as possible.


"voodoo programming: n.

1. The use by guess or cookbook of an obscure or hairy system, feature, or algorithm that one does not truly understand. The implication is that the technique may not work, and if it doesn't, one will never know why. Almost synonymous with black magic, except that black magic typically isn't documented and nobody understands it. Compare magic, deep magic, heavy wizardry, rain dance, cargo cult programming, wave a dead chicken, SCSI voodoo.

2. Things programmers do that they know shouldn't work but they try anyway, and which sometimes actually work, such as recompiling everything."

(Taken from the Jargon File - http://catb.org/esr/jargon/html/index.html)