David, Though I can tell you've experienced this a lot closer than I have, I think I agree with you. I think there is a tendency within the gaming community (of which I don't count myself a member) to consider techniques to be intellectual property, and many of the state-of-the-art effects are created by people who have little interest in sharing them, let alone publishing them through something like siggraph.
I would like to think that Java (and Java 3D) is an opportunity to change this. Just as Java code is comparatively "open" compared to C/C++ code I would like to idealistically believe that through Java 3D and this forum we can demystify many of these real-world implementation issues. Personally, I plan to release all the code accompanying my book, as well as an update to J3dTree and the particle system I am building under the GPL license. Along with some of the code already on www.j3d.org, the SUN examples (including Fly-Through) I think we will start to build a critical mass that new developers can reuse and draw on. Longer term I am also interested in building a larger showcase example/game for Java 3D (under GPL). I haven't decided yet what this will be but I would like it to act as a catalyst to convince the growing numbers of game developers considering Java/Java 3D to take the plunge. The particle system is the first tentative phase of this effort. Shawn and the guys at Fullsail made a good start at this with there first-person shooter, but it would be more interesting to have something that was also open source. Keep up the good work David -- I think you are on the cutting edge, and that is never easy. Sincerely, Daniel Selman -----Original Message----- From: Discussion list for Java 3D API [mailto:[EMAIL PROTECTED]]On Behalf Of David Yazel Sent: Thursday, January 03, 2002 6:33 PM To: [EMAIL PROTECTED] Subject: Re-inventing the wheel Justin posted a response to my e-mail that struck a fairly emotional chord in me. He pointed out that the techniques I am going to attempt for doing large scale forests and vegetation could be considered "tried and trusted techniques". (and BTW way thanks for the link Justin, I will check it out). I do know some of these techniques have been used before to great effect, although I have not read about combining multiple images into composite textures. I have also not read about anyone implementing weeds and ground cover using what amounts to an adapted particle system. In general I have found many techniques discussed in white papers or on flipcode or gamedev or opengl.org to not very usable within the context of a scenegraph architecture. Trying to apply articles on radiosity, lightmapping, BSP, shadow volumes, skin and bones, collision detection and bump mapping to the Java3d framework can quickly lead to premature grey heads. I spend about 20 percent of my Cosm development time reading and adapting techniques found in various places. It is my hopes that we don't reinvent the wheel any more than we need to. I, nor anyone on the Cosm team, have any prior 3d programming experience. This has resulted in a lot of hard lessons, dead ends and wasted time. I know there are a lot of people out there that take their knowledge for granted and forget that we all had to start somewhere. I think that simultaneously learning 3d concepts and the java3d API was perhaps a mistake :) Personally I have found that there is a large gap between techniques and practical applications. The other thing I have found is that sometimes you discovery new ways of doing things by *not* taking someone else algorthms or using "standard methods". I remember when we worked on the sky stuff I read everything at vterrain.org and every single paper I could find on rendering skies. Our final solution has some unique elements which may not have been there had we implemented something from a book. I am hoping before all of us collectively are finished with our various projects we will have assembled enough information and examples to save the next generation java3d programmers from similar experiences. And now on to the rant... There is something I have learned a lot over the last 20 months of working on Cosm. The knowledge on *how* to build a full implementation of a first/third person 3d game is rare to non-existant. I think there are probably a handful of people in the world that know how to do all of the following things: 1. Net lag tolerant code 2. Client side prediction on for N objects moving with orientation, mass and velocity. 3. Collision detection 4. 3d skeletal deformation and texturing 5. Texture and geometry caching, paging, loading and lots of other resource management 6. Advanced 3d: lighting, shadowing, occlusion culling, portals, line-of-sight 7. particle systems 8. sky-domes, clouds, sun/moon/stars, rain, snow 9. asset management for project (textures, animations, models, sounds) 10. 3d gui development 11. terrain/landscapes 12. level of detail management 13. water 14. building effective tools for world management, importing/converting models, etc. Well the list goes on and on. We started out with zero knowledge and have slowely implemented most of the above and more without any code except our own. The knowledge on *how* to do it was a combination of reading books, the internet and electronic lists. one of the reasons we spend so much time helping other groups and other developers via e-mail, icq and the e-lists is beause we know the frustration of trying to figure out stuff you just *know* someone has already figured out. Take any topic... say how do you create clouds and animate them realistically.. well you do this: 1. you search the archives of all the gamedev boards (flipcode, gamedev, etc). You will find some *hints* but nothing which really explains it. 2. Search google. and you will find several good white papers. very obtuse. You will go to vterrain.org and get a little more help. 3. You will try some things out and write some very slow code which does not work in real time. 4. ask some questions on the e-lists and get very broad advice like "build a skybox and scroll your clouds by animating the texture coordinates". You will try this and determine that the two techniques can be mutually exlusive, since the sky boxes need a perspective correction. so then you read about sky domes and you get that to work. So then you say, well I want to fade at the horizon and you want to layer for effect. Days later you finnally figure out how to blend with nesting sky domes... but then it is too slow... so days later you figure out how to use a special blending mode and use a polygon offset to adjust z-buffer values for fast belnding... then you realize the sky needs to stay in the background while you move... so you start out by transforming the sky meshes on every frame to keep you centered, until you realize that is wasting even more time... so you realize you can draw the whole thing as within a unit perspective and disable z-buffer writes... and it goes on and on and on. sorry for the long winded example. but the point is that the knowledge is hard fought and....guarded by people that either dont have the time to lay it out for you, or who are jelously gaurding the information. Even many people who know all the things I listed above only *think they know*, for I would maintain that until you have to actually build it and make a product does the knowledge cease being theoretical and start being practical. Even Sun, who should be helping use thier own tools, don't *really* help, but instead offer broad advice most of the time. They might answer a very specific question, but don't really give you enough information to solve the *real* problem. One sun engineer once said to me "I implemented a quake syle occlusion culling and visiblily detection using a combination of switchnodes and alternate appearances" but thats just enough information to run with... for a month. There are a lot of questions posted to this group that would benefit from a 2 paragraph answer from Sun. I know that is not their job. Their job is the creation and support of Java3d. But I for one just know that they know how to do all the things we are all trying to figure out. I have followed the work of Kelvin in particular and consider him one of the the most knowlegable people on the planet when it comes to 3d programming. It is too bad that Sun only has time to comment on the technical use of their API and does not have time to lead us in the proper direction for actually using the API to solve our very real problems. I have gotten to know the various Java3d experts over time, and some now consider me to be such an expert... but there is almost ZERO code sharing. Only one person has ever sent me a truely useful piece of java3d technology (Thanks John White). And another person said.. well it will cost you to use our animation code... and when I ask the cost and offered several 100 bucks, he said that was too little and we dropped the conversation. We could have bought the net-immerse engine for some 20-70k, and no doubt our time spent implementing the exact same thing will far, far exceed that cost in the long run.. (Actually we are closer to $600K at this point in sheer programming hours) but fact is most groups wanting to build a game can't afford that. This means only a very few dedicated and talanted groups can ever build a fully working 3d game all the way to production status, and a few rich companies can do it. Because it is sooo hard, and requires so much time and talant people who *have* done it either want a lot of money, or they lack the time to get their code generic enough that it can be used by others.... so everyone keeps doing it on their own, occasioanlly dropping a few vague (but often helpful hints) to the people beginniing their journey of exploration. There is also a certain attitude... the attitude is "well I spent years figuring this out, why shouldn't you figure this out too?" This attitude is *very* prevalent and I run into it (unspoken) all the time. The other issue is that much of the knowledge cannot be just handed to someone. If you hand them something so easy to use that it only requires a plug-it-in-any-monky-can-use-it knowledge, than as soon as they step outside the implementation box they have no idea how to improve it, because to improve it would require a deep understanding of the workings of all the sub-systems and underlying theory... and if you already have that then why not write it yourself exactly to the spec yout need? So the problem of re-inventing the wheel continues to re-inforce itself. Maybe Sun will release a library someday that has all these things needed to build a game from a "glue" perspective. (And I know there is a project to do just that) Maybe this will facilitate game making and you will see a bunch of games spring up... I am sure this will be good for people who want to build games, and see the tools as a means to the end. But without the underlying knowledge there will be a limit to how innovative their games can be, and frankly they *will* be benefitting from the hard earned knowledge of the few people who sacrificed to do it. The java3d list as a whole does not suffer this disease to the same degree as other places. Most people here are sincerely interested in sharing knowledge (Justin Couch, Daniel Selman and Fred Klingener being prime examples). But there are also a lot of people on this list that are clearly 3D experts with deep knowledge of 3D concepts both practical and theoretical. I can tell by the types of questions they ask. When someone shows up on the list and their first question is an issue with dot combiners and multi-texturing then you know they are no novice. I hope that as we help solve their API issues they can in turn help educate us on the the concepts behind the API, and help us evolve our understanding on the practical usage of the various techniques. /rant off Dave =========================================================================== To unsubscribe, send email to [EMAIL PROTECTED] and include in the body of the message "signoff JAVA3D-INTEREST". For general help, send email to [EMAIL PROTECTED] and include in the body of the message "help". =========================================================================== To unsubscribe, send email to [EMAIL PROTECTED] and include in the body of the message "signoff JAVA3D-INTEREST". For general help, send email to [EMAIL PROTECTED] and include in the body of the message "help".
