Cody Robson
CS 682
Narrative
· Lighting was working quickly, for both spheres and calenders, as well as camera-aligned collision, but depth was not, nor would it ever be.
· The next couple weeks were spent emailing the author of the QuteMol paper to figure out what was wrong with my depth calculation. I tried a lot of different things but never managed to get the depth right.
· After a couple weeks I had the tangent plane drawing and projection working and a visual comparison with a 'straight' projection of neighbor vertices into the tangent plane.
· A week later I had actual images being applied to the surface with the texture coordinates from the decaling implementation. At this stage it was quite dirty looking.
· The following week I had the clipping-shader implemented so the basic task of putting square textures onto arbitrary mesh surfaces was complete (albeit slow).
· Imposter rendering wasn't making significant and was really given up on at this point.
· The first two weeks of the spring semester I had gotten text rendered on a texture decal, in a straight line, supporting a small number of characters.
· The following week I had my decal composer window working with fixed-width fonts along a cubic-bspline curve. A change of font libraries made the letters go from bad to passable. Residue regions were being drawn as vertices on the canvas so someone could have a reference point when aligning their text.
· The next week or so I was putting different images on the decal composer canvas, like the normal information or the borders of the residues.
· The texture residues had to be 'grown' to close the gaps between residues, as they were defined per-vertex leaving faces that didn't belong to a residue. My first implementation of this had some problems, but I re-wrote it a few weeks later and am convinced it's problem-free.
· When it became apparent a lot of regions were not going to survive the 2D projection process well, I started writing out images that showed distortions from original edge-lengths in the residue. Later, this was changed to information about overlapping triangle faces, as they were more telling of problem areas.
· I made a residue-creation method for meshes without protein residues. At first it automatically created regions by spherical coordinates to create lattitude/longitude divided regions. A few weeks later, I would use vertex color information from another mesh to allow someone to color regions on a mesh in blender. This worked well with a 1-jump neighbor voting algorithm because, in blender at least, its very hard to get a bunch of vertices to be exactly the same color when it would blend colors at the edge of the paint brush. This limited the user to 8 colors, but the problem of 8-coloring a surface isn't a very hard one to do, even for someone with little 3D art experience such as myself. Disconnected regions of the same color would be separate residues thanks to the same code that would separate disconnected protein residues implemented earlier.
· Residue region-alignment was implemented in a few greedy ways, none of which worked really well, but the problem is one that's really outside the scope of the project. They all started with aligning one or all the regions with the world-up vector (which especially didn't work for residues that wrapped around a region of the surface that faced upwards) and then linearly-blending each residue's orientation with its most confident neighbors (measured by how perpendicular a regions normal vector was).
· Texture compression was added at the end to cut down the memory usage of molecules with hundreds of regions (which it did reduce it to about 25% of its original amount), luckily this was quick and easy, and looked pretty good (but was definitely lossy).
· In the last couple weeks I revisited my mesh smoothing code from the summer and gave it a bit of a cleaning up. The advantages of the feature-preserving smoothing really didn't outweigh its runtime on molecules as they didn't have sharp 'features' to preserve in the first place. LM smoothing was clearly good enough and quite a bit faster.