Hmmm. Long time no update. Oh well, here's things i've been thinking about and trying out. The Lastest Test Engine I started a new engine a few weeks ago to act as testbed for some new effects I would like to try out. Things are slow though as classes are in session and I'm involved in a play at my college theater right now. Anyway it's hybrid portal/bsp. The portals are used for lighting and determining which leaves are visible for any given frame. The bsp then draws those leaves in back to front order. I also setup my engine to have renderers pluginable in a dll as that is the oh so fashionable thing to do right now. Actually it will be nice to be able to write dll's for ogl, glide, and d3d without changing the engine base code. (or so I hope) This is also the first engine that I've done that is very much OOP. At some point I think the way I have it setup involves too many function calls to get things drawn, so I may inline alot of the code manually. Not as clean but perhaps faster. Non-Lightmap Dynamic Lighting with Correct Shadows Lightmaps are nice, but I want to be different. So here are my thoughts. It requires a lot more polys to get drawn but hey, 3D cards and computers are getting faster all the time. For each light in the scene, I use the portals in the level data to cast light volumes into each cell. I then clip all the polygons to these volumes. I then have a set of faces that represent the places light falls. I then assign texture coordinates and color values to these faces based on distance away from the light source and color of the light. The texture map is just a 256x256 texture that's a circle with high intensity at the middle and no intenisity at the edges. Any face that has all texture coordinates outside the bounds of the texture is dropped as it would be totally black. Since most lights are static, this can be done as a preprocess so for moving lights it won't be to slow. When it comes to renderering I draw the cells/leaves of the the level in back to front order. I draw the light faces additively onto the screen, so where they overlap it becomes brighter. I also turn off texture clamping so for those faces that span the edge of the texture map, the face if just black. I then draw the faces of the cell using a multiplcation function with whats on the screen. It sounds good in theory, but it's not done yet so I don't know how good it's going to look. Or how fast all the additive and multiplcative texturing will be. Hopefully not too slow. some other thoughts about this idea: For moving objects casting correct shadows, I could do anti-portals/faces, and remove parts of light faces at runtime that are blocked by objects. For effects such as flickering lights, and pulsing lights, it would be easy just to modify the rgb values of the light faces to get this effect. The recursion for casting a dynamic light wouldn't be too bad as you don't need to recurse into the level data farther than the light can possibly cast. Reflections on Transparency Example: Lets say there is this pool of water. Lets also say the surface of the water is transparent. Let us further assume that the water reflects whats above it. I have never seen this done in any engine. Is it because it would slow the engine down? Or just to complex to render with any amount of speed? Anyway I would like to try this and see how it looks. It may turn out that it looks confusing but I think it would be a cool effect. The "I didn't finish and started over syndrome" Yes I suffer from this. The last project I took all the way to completion was my junior year in highschool. (4 years ago!) I tend to take my 3D engines to the point where i've learned something new or seen that an idea i had worked or didn't work. I stopped working on my last engine a few weeks after I wrote my last tech-file. Hmm. Maybe if I had a real game programming job.....
|