15th June 2013 (or two years in 7 paragraphs)

This website is well overdue for a remake - I keep putting it off because I'd like to do something fancy using Webgl created in Clayworks, which seems appropriate. The trouble with that is, it's a big task and they get put off. I'm using google+for most of my up to date bloggery on Clayworks: I'm now a director of a indepdendent games company called Chaos Trend and we're developing a great new 3D game for iOS, Android and desktop platforms. Before comming on board with Chaos Trend, I'd been Developing my own apps under the name Totga Games. I've been using Clayworks for most of the graphics for both ventures,which has been great for Clayworks's development as a useful tool.

20th October 2005 (or two years in 7 paragraphs)

Two years is a long time to go without updating a plan file, isn't it? Well suffice to say, I've been a bit busy. I gained my postgrad degree about a year and a half ago and Tirion, my beautiful baby daughter will be 2 in 10 days. I'm currently working on 3D stuff in Java for a company in Swansea. I can't say much about that at the moment but I will be talking more about it closer to release. Yes, I do write things that actually get released!

I'm still working on ClayWorks of course but, as always, time is limited and I have bread to win. However, I've been working on this program for a long time and I hate leaving anything unfinished. I also like to release quality code, which is the luxury of having total control over a project. A little while back I added support for subdivision surfaces. I want to add some more features to this in order to control the tightness of the generated mesh around edges. The files that ClayWorks generates are still very small and will be great for online use (even the XML version of the format can do a lot in very few bytes).

Other than that, I've been busy with my other interests; being dad, doing some painting, tinkering with electronics and making music. I'm currently building a little solar tracker with the idea in mind that I'll trickle charge up an array of car batteries using my solar panels for domestic use.

I've also been doing a lot of random paintings on rocks using beach sourced materials being. Tiri loves to join in too. It's a bit like impermanent graffiti (it'll all get washed off by the tide) and it's fun to see people gather around when I'm finished. I've been laying off updating my main site with the stuff I've been up to until I've written more back-end server code to make updating it easier. I want to do something a bit special that makes use of the java work I've been doing so that's another impediment to making updates under the current (clunky,ugly and increasingly dated) design.

Screenshots ho!

30th June 2003

My, how time flies. I couldn't run a blog even if I wanted to. I'm very close to finishing my thesis (well, a solid literature review away truth be told) and this has been taking up most of my time. Once that's out of the way and the degree is over, I've got a couple of plans to set in motion that will hopefully mean great things for Clayworks and the core technologies that make Clayworks possible. I've coded almost all the features I want for the first full release and I'm very happy with the way Clayworks has been shaping up. In the meantime, here's a new crop of tasty screenshots. n.b. The A10 is from the battlefield 1942 mod desert combat and is therefore copyright of trauma studios.

Yet another space plane The earth, with atmosphere and volumetric clouds A fluffy torus A10 from the BF1942 mod desert combat Flying above the earth The earth, with atmosphere and volumetric clouds Scene with a lighthouse on an island; the lighthouse itself needs a texture. Light house scene again, this time at dusk. Light house, with pre-rendered skybox. Clayworks will be able to generate such skyboxes itself in the future.

7th November 2002

Sorry for the gap in updates (yet again), the last seven months have been rather tumultuous for me, resulting in a lot of radical changes in my future plans. Well, to be honest, the old plan (return to Japan, get another job in the games industry) has been totally shot out of the window and after I finish my research degree, I'll be looking for a job programming graphics just about anywhere. It's kind of liberating to have the freedom to do this but also rather unfortunate that I probably won't ever be fluent in Nihon-go now :( shoganai

Claywork's development has been slower than normal as I took a hiatus from programming for a couple of months after April but things are back on track now. I've been slowly getting back to speed and I've spent the last few weeks writing a nice triangle stripping routine which also works with concave and non-planar polygons; This is a rather small but important feature and adds a lot more flexibility to editing shapes. It's one of those things I've put off for ages but I realized that I really needed to put it in there and make a good job of it.

Now that routine is done, I'll be working on some octtree code which is more relevant to my research topic than any major clayworks feature but it should prove generally useful, particularly in huge datasets. Aside from octtrees, I'll probably add support for BSP trees as a data channel in the mesh class which should also prove useful for certain kinds of objects (particularly in Boolean operations).

I've also updated the 'node panel' view which now lets you view multiple node panels at once (when you select more than one node) and I've also implemented a roll-down class which makes managing multiple node panels easier.

Although I'm always keen on developing Clayworks, my main goal right now is to finish my degree. Clayworks plays a part in my degree (as a testbed for new graphics techniques) but the degree itself is independent of my program and at this point, my priorities seem pretty clear. Also, I've been doing a lot of teaching to make ends meet which eats up way too much coding and research time, as well as being great way to catch all the various forms of flu that the freshers bring to campus.

Soon, I'll be adding Directx8 support to Clayworks. I think I've overcome some of the difficulties that the rather flimsy 2d blitting of dx8 inflicts (the one area where dx7 was superior and an area in which OpenGL has always been lax) and should soon be able to get my mitts on all that juicy pixel and vertex shader stuff. I can't wait to start coding funky new material classes that will really look great in Clayworks; Hopefully, the graphics you'll see in Clayworks will compare favourably with the latest crop of 3d engines (Doom3, Halo 2 etc). Real-time shadows in the editor are another feature that should make it in there soon; Not only do shadows look nice, they are a valuable 3d cue that should aid modelling.

13th April 2002

Testing has been going well and I've recieved a lot of good feedback from all of you who emailed me; thanks very much folks :) I've been making some more changes, implementing some of the suggestions and generally tidying things up. Here's some of the changes I've made so far:

  • Fixed bug in the spinner class (the one for inputing numbers) where it wasn't accepting keyboard entry correctly.
  • Removed non-functioning buttons and fixed a nasty crash bug in the toolbars.
  • Fixed crash bug when deleting objects
  • Added some work arounds for some problems with the mouse on some systems.
  • Improved compatibility with various cards a great deal.
  • Added validation code for materials and functionality.
  • Added support for non-hardware accelerated cards; still early code.
  • Added numerical input to the stretch manipulator. The new node panel for this is excelent for aligning mesh data.
  • Fixed rotation bug although the rotation manipulator still needs a lot of work.
  • Improved detection of available texture formats and improved surface/texture managment code.
  • Clayworks now takes better advantage of 2d hardware for UI rendering.

From Monday, I'll be able to concentrate full time on Clayworks for a while. I have a couple of deadlines that need to get done before then, one for a little java game, the 3d objects for which are all created in Clayworks.

There are a number of features I want to add now that I'm happy with the functionality so far and these include:

  • Undo and redo; absolutely has to get in there soon!
  • Texture mapping application support. This will be per selection and will include uvunwrapping.
  • Multiple materials per object.
  • Mesh smoothing as a modifier and also including the ability to convert the render mesh object into a smooth render mesh; that way, you can keep editing the low-resolution hull whilst seeing the smoothed results in realtime. This will also have options to control the smoothing over sharp edges so that these can be preserved somewhat in the final smoothed mesh.
  • Implementation of several new modifiers including:
    • Latice deformations
    • Twist
    • Bend
    • Relax/blur
    • flip/mirror
    • Weld/merge vertices
    • Boolean operations between objects
    • Assign smooth group.
    • Bevel with small bevel edge editor in the node panel
    • Sweep
    • Mesh merge; combining two seperate meshes into one
I want to add some new object classes. These will be compatible with existing modifiers, where applicable.
  • Metaballs/blobs (still have some old code for this, just have to get it into the editor)
  • Splines
  • Nurbs
On the shader/material front, I have a couple of goodies lined up for those with the hardware to render these:
  • Light based bumpmapping (rather than just environment map based)
  • Fresnel shading (controls the amount of specular reflection that a surface recieves, based on angle. Looks good!)
  • Full enivronment mapping, including diffuse lighting, bump mapping, fresnel, specular and high specular pass
  • Toon shading
  • Glows and halos
  • All, of course, in realtime as you edit
Also, I'm planning on extending the 'material override' that you see in the orthographic views to include a menu above each 3d view pane that will include several options to make modeling easier:
  • Wireframe
  • Wireframe with backface removal
  • Solid rendering with wireframe edges (no material, just solid)
  • Vertex colours, solid smooth shaded
  • Vertex weights, solid smooth shaded
  • Full on render, using assigned materials
For the UI, I'm planning the following additions:
  • Dockable toolbars/workspaces
  • Better short cut key support
  • In object select mode, the node panel selection will be syncronised with the selection in the 3d views
  • Ability to view several node panels at once
  • Ability to view several nodes of the same type in one node panel, updating them all at once
  • Child nodes will appear as nested roll-downs within the node panel of the parent
  • Reworking the UI rendering to make it more efficient
The import/export routines for various file formats currently contains only legacy code for the old version of my scenegraph. However, this isn't such a big job to update as the main job of parsing these file formats is already done. Clayworks will be able to import at least the following:
  • 3ds (3d studio max)
  • lwo (lightwave)
  • geo/peo (Homeworld models)
  • md3/md2/mdl (Quake/Hafelife/any other game that uses these models)
  • t3d (unreal props, thanks Gusher)
  • odt (Mindformer; A modeling program by Martin Robinson which I worked on several years ago)
  • VRML2
  • Shockwave 3d (got the sdk, just have to work it all out :)
  • Possibly POV, if I get a month spare :)
  • rwx (renderware)
And export the following:
  • 3ds
  • lwo
  • geo/peo
  • md3/md2/mdl
  • t3d
  • odt
  • VRML2
  • Shockwave 3d
  • POV
  • rwx

Later on, I'll be adding animation support. Those of you who've used Clayworks may have noticed the graph view, messy though it currently is. All the yellow boxes represent nodes and the squares to the left and the right of these boxes represent inputs and outputs.

All animation involves is, when animation mode is enabled, instead of setting these inputs directly, a keyframe will be generated and the changes will stored there. When you play the animation back, the input will be smoothed across keyframes to produce animation. It really isn't that much hard work to get the whole system running as an animation program, it was designed like that from the ground up.

All I have to do is program the keyframe editor and redirect the input et voila, you have an animation package. You'll be able to animate anything you can change in the editor at the moment which means you could even animate the amount of segments in a sphere, if you so desired. Once that's in there, the floodgates are open for a whole bunch of new nodes including particle systems, animated textures, a physics engine, the whole lot.

Again, thanks very much to those of you who've tried the program and have emailed your findings to me, you've helped me a great deal.

9th April 2002

Sleep, puh, who needs it? I've been pulling a few all nighters, trying to make Clayworks more stable on all the weird and wonderful configurations out there. Clayworks has entered the alpha testing phase and I'm currently recruiting people who want to help out. I've given out early copies to a number of people already and if you're interested in testing the software, please email me at tim@clayworks3d.com .

Clayworks now runs on win2k, windows 9x/me and, reports suggest, it's runs on XP as well. I've increased compatibility with various graphics cards by a large degree and so far it's been tested and has worked on the following cards:

  • Nvidia TNT
  • Nvidia Geforce 256
  • Nvidia Geforce 2
  • Nvidia Geforce 3
  • Nvidia Geforce 4
  • Matrox millenium g400
  • Matrox millenium g450
  • ATI rage turbo pro
  • Raedon

The ATI board is the lowest spec'd board it works on so far and the program isn't without problems on that card; you won't be able to use any fancy shaders and it only seems happy running in 16 bit colour mode; These old ATI cards don't have a lot of video memory and can't create a zbuffer in 32bit mode.

Clayworks does not support 24bit colour mode. This is an awkward mode to program for due to the inefficient organization of memory when running in this mode. Also, many cards that are capable of rendering hardware accelerated 3d graphics refuse to do so in 24bit colour modes. Therefore, I have disabled support for this mode. You'll have to run Clayworks in 16bit or 32bit modes.

I'm still having problems with detecting what cards can and cannot do. Even with the extensive capability flags that DirectX provides, it's a difficult task to work out exactly what a card is capable of and making sure that you don't ask it to do something it isn't supposed to. The ATI cards are bad for this sort of thing and I've had a great deal of trouble getting bump mapping working on matrox g400/g450 cards, even though it works fine on a geforce 3. As you can probably tell, I haven't had much time for adding any features in Clayworks since testing began. My main priority now is to make sure that what I have so far will work on as many different systems as possible. After that, I can build upon what I have already in order to deliver a top notch modelling program. So, if you want to see the program in action, please drop me a line and I'll tell you where to get it.

21st March 2002

I've just got back from a quick holiday in Ireland to celebrate St.Pat's day. Great fun but I have to get back into the flow of things now. Other pressures (I have to write a new java game and I've got a research paper to write; both the game and the paper rely on ClayWorks to some extent so this still means that some progress, albeit tangential, is being made) mean that I can't release just yet but it's still coming along nicely.

I've fixed some bugs in the load/save routines (my unique IDs for nodes weren't quite unique enough) and added some texture mapping support. Thanks to adding the texture mapping support, I have some nice screen shots to show you, one utilizing some hi-res earth maps I've snagged off Nasa (I want to try and get the 30k x 15k earth maps working but that's going to mean creating some nifty texture LOD routines that go a bit beyond mip mapping) and the other, a screen shot of the level editor for the afore mentioned game I'm creating in Java. My eventual aim for that java engine is to be able to load Clayworks scene files and run them; The node connection system in ClayWorks can be used to create all sorts of events and behaviours that are well suited to game development.

Anyway, here're the images...

This is a shot of our own planet, hanging in space. Note the different specular qualities of the land and the sea and also the alpha blended clouds and city lights, added as extra passes. This shows the level editor for simple tile based games that I've created inside ClayWorks; it's fairly specific to one task at the moment but I'll be using the ideas to do a handy texture painting tool.

5th March 2002

The loading/saving of files is all done now and I'm improved the speed by a factor of _lots_. Apart from that, I've fixed a few niggling bugs and added a few material tools. My next priority is to write the UV application tools, a few more modifiers, fix some undo/redo problems and maybe put the spline support back in (although working out which modifiers will work with these and which ones should be purely polygonal might be a pain).

All in all, it's getting there. I can't release it before the end of March due to other rather pressing research deadlines but after that, expect a release.

For those of you who'll be beta testing (I'll be asking for beta testers very soon), the following system is the base spec for the coming beta:

  • Pentium/Anthlon system 300+ mhz
  • GeForce 1 or any card with hardware transformation and lighting. It's been tested on a geforce 2 and a geforce 3
  • Windows2k ;I haven't got a copy of XP to test it on and although it works under 9x/me, I haven't tested it as much on those systems... not that anything runs particularly well under windows me :)
  • DirectX7 or above.
  • 64megs of ram, the more the better.
  • Not to be running your desktop in some crazy colour depth like 4bit or 8bit; 16bit and 32bit are fine.

The final release will be less fussy about the setup; at the moment, I'm concentrating on getting all modelling tools sorted, I can worry more about weird setups and so on a bit later. Don't worry though, the code is very modular and I can get this running on just about any system, given the resources and time.

1st March 2002

Happy saint Dafydd's day all :). I've just about finished the serialization code which means I can load and save the whole scenegraph; It wasn't too difficult as the connected node architecture actually makes it easier to write save/load routines but it took a few days because there are so many different nodes. When I've eventually got an SDK out that people can use, it should be a snap to write a load/save plugin for your custom nodes that will neatly snap into the fileformat; provided you write it correctly (so please do).

The files that clayworks creates are typically quite small; Great big lists of vertices are rarely stored, rather it's a list of procedural modifications. If you colapse the modification history, then a mesh will be stored but otherwise, it's just lots of little connected modifier nodes. Whilst I have to really do things this way and it works quite well, I'm a bit worried about the load times. The whole scene essentially has to be recreated on loading and for intensive scenes, this is a bit slow (as in around a second for a scene with 100 spheres, all of them having at least one selection, stretch and extrusion modifier applied to them). Still, now that I can actually save files, I'll set about creating some interesting shapes (I don't really have the heart to do this when I can't save the damned thing!) and see how this works in practice.
I'll start working on the texture application tools next, watch this space.

22nd Feb 2002

After a mini-coding marathon, I've finished implementing a neat feature regarding selections. You can now create an object, select a region of it, do whatever you want to that selection (e.g extrude, stretch, twist, whatever) and then go back to the original shape's properties and edit the amount of points. Unlike other 3d programs (including maya and 3ds), Clayworks does a very good job of retaining the desired shape. It's just one method of increasing the resolution of a mesh parametrically but from a bottom up approach, rather than top down (as in subdivision surfaces).

Other than that, I've put the grid lock (and display) features back in; these haven't been in there since I made the shift to hardware rendering and I thought it was about time I put them back in. Also, I've started working on the serialization methods so that I can save the scene and all the node connections. The Clayworks scene file will be similar in some respects to a Quake wad file; All the resources needed for the scene will be stored in this file. This might mean that the files get a bit hefty with many textures stored inside but don't worry, I'll use compression. Importing scene files from other programs should prove interesting; some, such as lwo and 3ds are fairly easy but others such as the quake3 pk3 files (which are essentially zipped up directories) should prove more challenging. Whilst importing individual md3 model files is fairly easy, it'd be nice if I could load up more information and display it in a meaningful way in Clayworks. This would mean parsing the bsp files, loading up models, skins, animation and providing some kind of material that can do the things that quake3 shaders use. It might also be possible to get Clayworks to work in a 'restricted' mode where you can only use nodes that are quake specific (I'm mostly thinking of materials in that case). Anyway, all of that's for the future. For now, I'll concentrate on the rest of the essential modelling tools. Shouldn't be too long now...

19th Feb 2002

Work continues apace although not as speedy as I'd like. I've recently got some essential tools back in there that were missing since my new methodology crusade started over a year ago. These include the extrusion tools, and some basic manipulation stuff. The extrusions are neat; you can alter the amount of extrusion segments at any time, even after you've made loads of other modifications and it all works out well. The extrusion modifiers (any thing that changes an object is now a procedural modifier; good for animation non linear editing and implementing the undo/redo functionality) tie in with a new option regarding selections which allows you to specify a fall off value. All the modifiers that affect the positions of vertices (i.e. Rotate, stretch, move, twist etc) make use of these weights. Unlike in other 3d programs, you can also actually see the falloff in the editor. This tool makes all of the standard manipulation modifiers a lot more powerful; for instance, an extrusion followed by a rotation can create a sweep or a twist, depending on how you rotate it. The modifier in question decides how it will use the falloff information; the rotation tool uses a quaternion based interpolation to give spherical interpolation whereas the stretch and translation modifiers use linear interpolation. The result is an intuitive range of base tools that can be tweaked to produce very different effects.

At the moment, all of this flexibility comes at a price; The memory usage is a bit too high for my liking at the moment. Whilst it compares favourably to say, 3dstudio max, I know that I can make more efficient use of memory by caching less information on each of the object modifiers; At the moment, if you need to move some vertices around, it'll cache the whole bunch of them, instead of only storing the vertices that have moved. There's a trade off here between speed of execution and memory usage but I think I'll be able to strike a happy balance.

Other problems have arisen from the switch to the latest NVidia drivers; I had some legacy code in there that didn't make use of vertex buffers. This code wasn't performance critical so I let it lie for a while until I discovered that Nvidia's latest drivers have many bugs in them regarding the use of drawing primitives without using vertex buffers. Take a look at games such as Alien Vs. Predator or Anarchy Online to see what I mean.

Everything in Clayworks now uses VBs (as Nvidia recommends) even when their use seems a little clumsy. Anyway, for hardware that can do hardware transformation and lighting, this is fine and a lot faster. However, for legacy cards that lack this functionality (and there are a lot out there, particularly in portable machines), using vertex buffers seems to be unreasonably slow. At the risk of getting way too geeky with this update, I'll point out that I am declaring vertex buffers in system memory for non T&L cards and whilst this speeds things up quite a bit, my software rasterizer and transformation engine is actually faster; I've no idea why at the moment, this certainly should not be the case.

So, the first beta of clayworks might be a bit slow for those of you without good enough graphics hardware. At this point, I recommend at least a geforce 1 or equivalent if you want it work at the expected speed. I'll fix these problems in good time but in order to get ready for a release as soon as possible, I've got to concentrate on more pressing matters.

Finally to give you a quick indication of what needs to be done before the release, here's my latest to-do list:

  • UV application tools need to be implemented. (again... the curse of rewriting it all)
  • Need to write serialization methods for the new modifiers so that I can actually save and load files!
  • Need to write a few more modifiers; Most of this is cut and paste work, not too difficult.
  • Improve memory usage.
  • Alter import/export filters so that they work with the new framework.
  • Implement vertex/weight/texel painting tools.
  • Get the skinning system working again.
  • Improve the scenegraph display; it's functional but messy at the moment.
  • Get undo/redo working correctly, there's a few problems with this but nothing too difficult.

The animation tools will have to wait until after the first release. The new scenegraph was designed with animation in mind but actually implementing all of the UI tools for this may take some time.

27th December 2001

Well, I promised quite a few people that I'd have the beta released before Christmas but alas, Christmas itself intervened and I haven't been able to adhere to my self imposed deadlines. For those who are waiting, I can't really express how unhappy I am with such a slip as I've been so keen to get everything done by the end of 2001 as it's been so many years since I started this overwhelming project. However, I'm still working on it and I hope to overcome some final coding hurdles soon so that I can get the beta out as soon as possible. Despite the delays, things really are coming together. ClayWorks isn't vapour-ware, it never has been. It's just the product of a bloody minded perfectionist who wants to create the perfect 3d modelling program. Whilst such a goal is arrogant and unobtainable, it's important to aim high. For those who are both technically minded and interested, I'm currently implementing the channel-based mesh modifier code which will allow for infinite undo functionality and procedural animation in everything from moving a single vertex around through mesh skinning, per vertex colour animation, uv manipulation and a whole lot more without some of jarring limitations and user interface foibles found in more expensive contemporary software such as 3dsmax (fine though that software is).

Like I said, I'm aiming high and after six years of work, I hope you'll agree it's been worth it.

2nd November 2001

As you can probably tell by the large gaps between updates, I'm not particulary good at updating my site :) Since the last update (almost a year ago..), I've been implementing the system I mentioned in that post. It turned out to be a bigger alteration that I thought but now it's complete and I anticipate a release of Clayworks once I've sorted out a few niggeling bugs. No, really. I'll be releasing a beta before Chirstmas.

Other than the remaining bugs on my list, there are a couple of small features that I need to put in before the release but these are mostly re-implementations of stuff that worked before I went on my new scenegraph coding crusade. There are a few important features that aren't in there yet, such as an unlimited undo feature but I think I've finally found a neat way of implementing such a feature without huge memory overheads. Again, that's thanks to the new design of the scenegraph which is making the implementation of new features very smooth and easy.

So, they'll be a few features missing in the beta but my primary concearn is to make it as stable as a rock, get the really essential things in there and release a demo for all of you who've been waiting so long.

If it makes you feel any better; Whilst you've been waiting, I've been working my arse off!

Translucent windows are nice.

18th January 2001

Happy new year :) Hope you all had a good time or will, if you're waiting for the Chinese new year. I've made some changes to Claywork's GUI in the last week, improving efficiency and also adding support for translucent windows. I've been concentrating on this side of things mostly because I'm doing similar stuff in my day job and Clayworks was a good platform to test things on (the target for the day-job stuff being the Playstation 2), Although the transparent windows are cool, there are some performance issues involved with using them. Resizing the whole desktop with several transparent views inside can lead to nasty shearing effects. However, most other windowing systems don't typically resize the whole desktop so I suppose I can be forgiven. Still, I'll work on optimizing it. Work is also going well with the scenegraph related work I talked about last month; more on that later.

Translucent windows are nice.

13th December 2000

It's been a few months since I've updated this site but it appears that the last time I updated it, I overwrote all of this years updates with an older file. Ooops. Well, a lot has happened in the last few months so this is going to be a big update. So much has changed in the last year, it's difficult to know where to begin. A lot of the work has been behind the scenes tweaking and fiddling; basically fine tuning the bits that aren't going to change, rather than doing the major tasks which will eventually allow the project to move ahead more quickly.

This sort of thing can spell death for a personal project as it's up to the yourself to discipline your own work and certainly I was depressed about the lack of progress I was making until I finally sat down and made a list of the major tasks that I have to complete before moving ahead.

These fell into two groups but finally the bottleneck proved to be the fact that I hadn't yet made the shift to hardware rendering. I had hardware rendering tests years ago but there's a significant difference between technology tests and fully integrating them into a program.

As with the shift from dos to windows, going from a software rendering engine that was tightly coupled to the Scenegraph to a loosely coupled immediate mode rendered gave me a big excuse to put things off but finally proved quite easy. However, maybe that's because I'd spent months thinking about all the issues!

The new model now allows me to hot-swap between my own software engine, direct 3d and hopefully openGL as well in the future although that is less relevant for the windows version. Also out of the window is the major difference between orthographic views and the 3d perspective views. Mainly for performance reasons, the code to render orthographic views was totally separate from the code to render perspective views. However, the little gained in performance is quite irrelevant these days and it's actually faster to treat all of the views the same, just with a different projection matrix. The unified approach also means that my code is a lot less bloated and is much easier to read and update.

All of these changes are fairly low level, basic bread and butter stuff of a 3d modelling program. However, these changes have paved the way for the more advanced features that I've wanted to integrate for over a year. Clayworks has been useable as a 3d polygon modelling program for some time (as opposed to releasable, I trust you'll appreciate the difference) and is actually a very good one. However, if it's going to progress, higher level constructs are needed. I've mentioned in previous updates that I'm looking into curved surfaces or that I've got a metaballs demo working. Well, now I actually have them in ClayWorks. Such higher order shapes and surfaces are just the tip of the iceberg. The real power comes from the new Scenegraph which allows you to connect together behaviours from different objects for animation purposes. In the Scenegraph manager, an object (e.g. a mesh, a spline, a material or camera ) presents a set of outputs and inputs of various kinds. A material with a diffuse layer and a specular layer would present texture and a colour input for the diffuse layer and a texture, colour and shininess value for the specular layer (note that materials can have as many layers as you want). If you wanted to animate the material, you would then connect wires from other objects into the material, much as you would wire up the audio out of your video to a stereo system. A procedurally animated texture could be plugged into the texture input of the diffuse layer or you could take the output of the time node (always present in the Scenegraph manager), plug that through a sine wave generator and then plug the output of that into the diffuse colour of your material so that it pulsates during the course of your animation. Similarly, you could do the same for the position or rotation of an object or perhaps to a deformer which then affects the object (such as a set of bones for skinned animation) or for the angle of a camera or the height of a flame generated by a particle system. The possibilities are pretty much endless.

The Scenegraph is the first element I want to turn into a plugable sdk. By programming your own 'black box' Scenegraph nodes, you can write complex object deformers, procedural textures, a new shading model or anything else that can manipulate the basic object types inside ClayWorks. Similarly, an exported black box set of behaviours from clayworks could be used in a game to simplify the creation of character behaviours. For example, you might have a jet aeroplane that can roll, bank, apply after burners, deploy landing gear, open the cockpit hatch and so on. From the programming point of view, this object would have a series of input and output attributes. If you were to change the pitch of the aircraft, you would input the new value and the model would take care of the smaller details such as adjusting the position of the wing flaps. Similarly, setting the state of the landing gear would involve passing a true or false value to a corresponding input on the model. As outputs, the model might have a convex hull, mass, position, orientation and so on in order to plug into a physics module.

As you can see, I've not been idle during the past year and although there's still a lot to do, the release finally in sight.

For now, feast your eyes on some funky screenshots.

This shot shows the colour picker being to use to change the fog colour. Clayworks using Direct 3d, showing the new texture manager and material editor.

10th November '99

What with my holiday back home in Britain, a nasty bout of flu and a lot of stuff to do on the dreaded day job, Clayworks development has been slower than I would like. Unfortunately, that's sometimes just the way it goes with one man shows like this.

However, I'm getting back on track now and I'm working on some texture object stuff; First planar, spherical and cylindrical mapping and then onto some kind of unwrapping tool; This will be useful for precise and non distorted mapping; Clayworks will create a template texture based on the object's topology which can then be edited in an art package. I may extend this so that it can be used to print out foldable version of the object, which would be kind of neat. I want to allow some sort of user interaction in this as an automated method of determining the shape of the texture might not be ideal.

Any thoughts people have on this would be greatly appreciated : email luther2001@hotmail.com

16th September '99

Sorry for the lack of updates there, I've been spending a lot of time doing research into curves and other forms which has meant there isn't as much to show with regards to screen shots. This time has paid off however. I'm now sure I can add at least beizer patches and curves into clayworks but I'll probably extended this to more general forms such as NURB surfaces, after I have the more basic forms up and running. NURB curves are easier to use in one sense because due to their higher-order nature, they can accommodate imported lower order geometry. I'm pretty new to all this cubic curve stuff but it is fascinating and I really want to add this functionality to clayworks.

The curve segments will mean smoother extrusion paths for polygonal selections and also for curves themselves, generating surface patches. The curves are particularly good for modelling animation paths as well and this shall make it's way into clayworks too. Once I have the hard work of generating surfaces quickly and connecting them so that they preserve geometric continuity out of the way, I shall try and integrate these primitives into clayworks. This will probably mean making some more object type tabs and I'll probably split them up into polygonal object meshes, metaballs, splines and surfaces with a selection of drawing tools in each tab. I want to keep all this as self consistant as possible and so the selection paradigms will extend to splines and surfaces (where the control points are vertices and the curves/surfaces are analogous to polygons).

Another reason for the lack of updates is that I've been stuck in engine revamp hell; as fun as fiddling with rasterization routines is (I've heard one guy say he would rather nail his own head to the floor than spend his time writing polygon scan routines), It can take an awful amount of time, counting those clock cycles and trying to squeeze that little more performance out of your routines. Ultimately futile as I expect most people will want to use the hardware accelerated version of clayworks and it does detract from the real development. However, I'm done with that now and hopefully the next engine update will contain a lot of calls that start with glBegin and end with glEnd, or something like that anyway. Still, the new stuff is much faster and also more accurate.

I'm getting an amazing 5 days off at the end of this month and I intend to use that precious time to sort out some of the loose ends in clayworks and move on to the next slew of features.. rather than spend it climbing mountains, soaking in an onsen or taking the train down to the izu peninsular, sitting on the beach of a volcanic island, watching storm clouds form over Mnt. Fuji, with a beer in my hand.

Nope, none of that, I'll be in a room where the primary source of illumination is the computer monitor and the view outside is of 50 storey buildings looking like rejects from the film BladeRunner .. ah well :)

7th July '99

So far this month has been a strange one; I had a nightmare of a week last week whilst upgrading my machine with a new 4gig disk for linux and 64 megs more ram because it was going cheap :) I was afraid I'd screwed up my machine and after a few very late nights (only 3 hours sleep sort of thing) but the tried and trusted method of taking the thing apart and putting it back together again worked a treat and now I have both linux and windows on my machine; the problem was either solved by a tidier arrangement of ide cables or that jumper switch I lost was mislabeled in the manual and previously set to 'fail sporadically in the middle of crucial operation' mode.

Anyway, whilst all that was happening I did bugger all work on Clayworks and instead concentrated on my 3d java engine and some 2d effects. Thanks to that, my 3d java engine now has sub pixel, sub texel and sub-whatever you call an element of gouraud shading accuracy, a 32 bit zbuffer and it generally looks a lot nicer. It displays the clayworks objects I've created really rather nicely and I'll be putting up an object viewer applet on the '3d models' page this month. The changes I've made in my java engine will filter back down to the rendering engine in Clayworks and will hopefully make that much faster and nicer looking.

The 2d effects I have been working on may or may not make their way into clayworks; I wrote a little bump mapper a while ago and I think I can do 3d environment bump mapping in software using this (and in the future, hardware. Only the latest matrox board supports environment bump mapping at the time of writing); I have been experimenting with the well known water technique using feedback buffers and this would make a wonderful procedural texture map in clayworks if I could get an interface for interactions with 3d objects right; anything that hits the surface would cause a ripple to start which would look great with falling rain particles. I shall code a little demo of this in the future, either in C or Java.

If you are a 3d programmer and you haven't added sub pixel accuracy to your engine yet, take a look at Fatmap2 as this explains this easy technique very well; it really makes a huge difference when animating, everything appears a lot more solid and smooth. The Fatmap2 document also describes neat ways of speeding up software texturing; less relevant today with all the hardware rasterization but still an interesting read.

Anyway, once the engine updates are complete I shall be back to coding Clayworks; Next stop involves some work with the selection stuff; I have selection edge finding for polygon selections working but not for vertex selections. I will also be improving the manipulation methods for single elements (click once to make a vertex/edge/polygon or object the current and then click on it again to manipulate it; the single element that was clicked upon also updates the selection lists.. which will make sense when you see the demo :) )

22nd June '99

Almost a month and no updates to the site but that just shows I've been working hard on the actual program :)

I've added quite a lot of stuff this month, most significantly extrusion,copying and the ability to save files. The extrusion code currently only handles one level of extrusion but that's easy to change. I am sure you will like the extrusion tool; when I am finished it will be very flexible and very easy to use; More of a nuclear powered swiss army knife than the blunt spanner that normally pass for extrusion tools. When make a selection, the polygon edges that will be extruded are shown in cyan; At the moment, an extrusion only uses the edges of selections (something the old clayworks couldn't do) but I may add an option to extrude the interior polygons as well. Now that I have good edge finding code, I should be able to draw the edges of selected objects (tricky as it changes with the view position) as well so that you know which objects, edges, polygons and vertices are selected easily. With the addition of these handy features, the new clayworks can finally create objects worth saving! A new problem emerged with this new level of useability; I have been making nice objects and then saving over them by mistake. Duh. As I haven't coded the mundane 'message box' window yet, I have plumbed for a temporary, ugly, 'do you want to save this' splatted across the screen. Crude but at least it will save me heartache now that I'm actually making nice objects in here. I've also started on the undo tools; you may think that undo and redo options are trivial in an art package. Well, they aren't unfortunatley but I think I'm on the right track with the system I'm coding. The image below shows several objects I've created in the last half hour; the plane could do with some textures but I haven't added the UV mapping tools yet :)

scene in clayworks

Please click on the image for a larger version.

27th May '99

Most of the work this week has been behind the scenes, non user visible stuff. However, I've got this shot up showing the result of a selection in the 3d viewport; you can 'paint' a selection (or deselection, depending on the mode) on the surface of a 3d object with ease, very handy. After having a look at shots of 3dsmax r3 I see they've added quite a few things that even the old version of clayworks has had for years, such as bounding box's and element selection across different objects; they've also tidied up that awful interface and added... hmm, a tab box across the top. Do autodesk look at this page or what? :) Ah well, fear not those with shallow pockets, a hankering to model in 3d and a dislike of warez pups, your time is almost here.

Thanks to a suggestion by Andy Coleburn of AC3D fame, I think I've found a way to get this program working on just about anything with a decent opengl driver. As clayworks is not tied to the user interface of any particular system (I wrote it myself folks, knew it would pay off someday) I believe it is very possible to use opengl for the interface as well as the 3d stuff; initial tests are promising. This means that clayworks will be ultra portable and hopefully users of Macs, linux, windows, windows NT, SGI and perhaps even amiga owners with a fast enough box will be able to enjoy Clayworks. Watch this space, as soon as I have something working, I'll let you know.

The following shot shows the result of a 'paint' selection, one of the 4 forms of selection that also include selecting by rectangle, freehand and circle. Note the specular reflection on the grid caused by the two point lights hovering above it.

scene in clayworks

Please click on the image for a larger version.

19th May '99

I've done a lot of work on clayworks over the last couple of weeks; Amongst the features added are:

  • 4 modes of polygon and vertex selection; new selection, add to selection, remove from selection and using either a drawn bounding box or, in the 3d view, by clicking on individual polygons, vertices, objects or edges which light up as you move the mouse over them.
  • The 3ds reader is 90% done; just a few more things to add to that.
  • Fixed some bugs in the menu and drop down list code.
  • Navigation is really easy; Even whilst selecting, manipulating or drawing shift will pan and ctrl zooms in; This works in both the 2d and 3d views although in the 3d view, holding both together results in rotation around the 3d cursor. Combined with the new selection methods this makes selecting those hard to reach polygons very straight forward.
  • added a preferences dialog; this only allows adjustment of the fog values at the moment but will include much more.
  • Added code to delete selected polygons and vertices.

There are many things I plan to add in the comming weeks; The next step is to add code for copying and also extrusion, after that comes the tools to perform texture mapping. Another feature I will add shortly is vertex level material mapping; this will let you apply a different set of material values to a vertex, rather than just a polygon face; applying these is really easy. Just go into the materials dialog, click the material tab and then the 'apply' button will apply the current material to whatever vertices, edges, polygons or objects are selected (exactly which depends on the current selection level, which is clearly marked). I have been careful to retain paradigms across the program, functions that are complex in more convoluted software will be very easy in Clayworks' WYSIWYG enviroment.

The following screenshot shows a scene with multiple objects and 3 lights active (one directional and two point sources) and a grey distance fog (realtime volumetric fog shall come soon) the landscape is a deformed grid and you can see a transparent object in the foreground which was constructed by deforming a superelipsoid object. Note that the highlights are less transparent, creating a great realtime glassy look; Just wait till you see the hardware accelerated version :)
The file is 1024x768 so sorry for the long download.

scene in clayworks

Please click on the image for a larger version.

5th May '99

We've just had what is known as 'golden week' in Japan which, as the name suggests, equates to a week of holidays. Unfortunatly, my company can't count and I only got 4 days off, one being a sunday anyway :/ However, a little time to myself was enough to get a lot of work done on clayworks. Most of this work is behind the scenes stuff that you probably wouldn't notice but includes many user interface enhancments and some serious work on the dialog boxes. I've overhauled the materials dialog box (it now shows a big long list of materials and also has a very funky photoshop-esque yet realtime colour picker) and added a file load/save dialog box which works a lot better than the old one; It also supports windows95 style right click menus for file managment. You might ask why don't I just use the standard windows95 one? Well, trust me, you will be supprised how good it looks when the final skins are added.

7th Feb '99

For those of you who used the original Clayworks (Hi mum!) you may have noticed what utter tosh the grid-snap feature was. Well, in keeping with my general philosophy of doing it right from the start this time, I have added 'proper' grid stuff in the new version. There's not much to say about it other than it's fast, looks kind of like that special grid paper you may have used in school (which I always thought looked rather nice) and it works just fine.

Another nice feature in the new clayworks is what it doesn't do. 90% of speeding up graphics operations is quickly deciding what not to draw; converting your rasterizating code to assembler is the last step;

Quake, for example, does this sort of thing partly by using BSP trees and Potentially Visible Sets, their role is to quickly discount a lot of polygons rather than process each one individually which would slow the game down a great deal. When the beta test of clayworks is released, you'll see that when you select a certain set of polygons or vertices and move them around there will be a bit of flicker on the polygons that you are moving and only the polygons you are moving. I could have got rid of the flicker by using more memory but I decided that was a bit irresponsible; however, it goes to illustrate the care I'm taking in Clayworks to make it as responsive as possible.

If you drag a single vertex around from an object with 10,000 polygons in it, it will only process the vertex itself and the polygons connected to it so it's much faster and easier to use than other programs that don't regard speed as an issue.

This whole system could have been very messy; there are a lot of different elements that could be drawn or discounted (which could result in very complex, prone to bugs code) but I've worked out a nice little way of doing this that has resulted in tighter, easier to read and smaller code.

As a trivial bit of interest (probably to myself alone), I recently dug up the very first version of clayworks from way back in 1992! The best thing about this version was the graphics around the edges; it was written in Archemides basic and I've put the code and the graphics on the downloads page for amusment purposes only (This was a long time ago when I had just started to program so please, don't take it the wrong way!) If anybody has an Arch and can get that stuff to work, please send me a screenshot of it in action (I don't have the time or inclination to write a basic interpretor.. isn't that how m$ started?)

4th Feb '99

Despite the demands of my day job (12 hours a day doing webpages for a firm in Tokyo), work on the new version of Clayworks is well underway. All of the modeling tools are there, the selection mechanism and interface is 90% complete. The materials editor is also up and running with full realtime object preview as shown here.

The rendering engine is all there and looking pretty cool; It's 16bit at the moment but I am going to write a 32bit renderer as well as supporting openGL as a hardware rasterizer.

I've also implemented the metaball code; although I haven't sorted out the interface to Clayworks yet and I have some optimizing to do, this looks very cool and is great fun to play with :)

Skins are now supported for the interface but this needs some finalization; As I want it to be as flexible as possible, a scripting language is needed and I want to get this right. At the moment, I'm concentrating on the modeling tools; I shall finish off the skins system soon and I've already designed some rather groovy ones. The scripting language will allow all kinds of placement for window border icons, menu backgrounds and so on. It will allow tiling and streching of window borders for different effects; alpha blending and transparency are also on the cards although I'm uncertain how these will translate to existing windowing systems.

if you want to visit my homepage to view my artwork, download my other programs, follow my useful links or sign my guestbook then please go here: http://members.aol.com/luther2000