Today new trailer has been released. It presents tech demo which will be available for download (as always with source code) on 1st April 2009. Here is the link to the youtube movie. It shows many features of nGENE Tech and improvements since 0.1 version release.
Some time ago (1 April) new techdemo has been released. It can be downloaded here. I'm currently working on the performance so probably soon new version will be available.
Great Demo :-)
I have tested the demo on both my computers ( desktop is a Core2Duo 2,6GHz, 4GB ram and 9800GTX+ and my laptop is an Asus N10Jc which has an Atom 1,6Ghz, 2GB ram and a Nvidia 9300GS).
On the desktop it was pretty smooth with no problems, stable and fast.
On my laptop the demo was pretty slow, and from what I've seen I believe that the bottleneck was the processor ( although it has Hyper-Threading…supposely ).
What are you improving in terms of performance wtoman?
Actually the bottleneck is fill-rate as nGENE is pretty loaded with post-processing effects. I'm improving much everything regarding shaders, scene loading, instancing and so on. I want to make the demo run smoothly at high resolutions on GeForce 7xxx up. And as for now on my GeForce 8800 GTS I have ~30 fps in 1680x1050. Much better than in the demo released. However, currently the loss in quality might be noticable in some cases so I'm investigating different possibilities.
I've been reading the Roadmap sections and I came up with a doubt about the world editor. Do you have anything planned in terms of languages/technology that you'll use? ( I mean, are you going to stick with C++ or encapsulate the renderer inside a dll and use C# for it, etc etc )
You can read article on nGENE water rendering on gamedev.net - http://www.gamedev.net/reference/programming/features/ppWaterRender/
You can download early version of toolset finally: see tools section for download.
Tried out 'nGene Tooset.exe' but it keeps crashing. I get the following:
"
Unhandled exception has occurred in your application. If you click Continue, the application will ignore this error and attempt to continue. If you click Quit, the application will close immediately. The device is not ready.
"
In the output window it displays the following:
"See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
**** Exception Text ****
System.IO.IOException: The device is not ready.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.Directory.InternalGetFileDirectoryNames(String path, String userPathOriginal, String searchPattern, Boolean includeFiles, Boolean includeDirs, SearchOption searchOption)
at System.IO.DirectoryInfo.GetFiles(String searchPattern, SearchOption searchOption)
at nGENEToolset.frmSolutionExplorer.processTree(String dir, TreeNode node)
at nGENEToolset.frmSolutionExplorer..ctor()
at nGENEToolset.frmMain.frmMain_Load(Object sender, EventArgs e)
at System.Windows.Forms.Form.OnLoad(EventArgs e)
at System.Windows.Forms.Form.OnCreateControl()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.WmShowWindow(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ContainerControl.WndProc(Message& m)
at System.Windows.Forms.Form.WmShowWindow(Message& m)
at System.Windows.Forms.Form.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
**** Loaded Assemblies ****
mscorlib
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3082 (QFE.050727-3000)
CodeBase: file:///c:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
nGENE Toolset
Assembly Version: 1.0.3451.24545
Win32 Version:
CodeBase: file:///C:/Temp/nGene/nGENE_Toolset/release/nGENE%20Toolset.exe
msvcm80
Assembly Version: 8.0.50727.3053
Win32 Version: 8.00.50727.3053
CodeBase: file:///C:/WINDOWS/WinSxS/x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.3053_x-ww_b80fa8ca/msvcm80.dll
System.Windows.Forms
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
System
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
System.Drawing
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
WeifenLuo.WinFormsUI.Docking
Assembly Version: 2.2.2864.18696
Win32 Version: 2.2.0.0
CodeBase: file:///C:/Temp/nGene/nGENE_Toolset/release/WeifenLuo.WinFormsUI.Docking.DLL
**** JIT Debugging ****
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
"
I click on 'Continue' and the GUI comes up but when I click on "New Project" I get the same error. When I click on some other choices I either get the error or nothing happens.
OK I finally made a promised commit. From now on they'll be much more frequent (even on a daily basis) because I completely reconfigured my working environment so it'll be easier for me to make them (up to now I had several repositories which I had to update separately… it was painful). If there were any problems (especially for VS 2008 users) let me know. With so many files I could just forget to add something.
The update includes many improvements, bugs fixes and so on.
OK, I admit - there were some serious bugs regarding nGENE shadows. So I spent a few hours on fixing them in the last few days. Here are the list of changes:
- shadows work correctly for all supported types of shadows now
- blurring of PCF shadows resulted in colour bleeding artifacts - blurring was dropped
- to make up for the lack of blurring possibility of changing shadow quality (by means of resolution was added) - just call Light::setShadowResolution(uint _value) to change resolution for the specified light object or uint Light::getShadowResolution() to retrieve it
- BUFFER_TYPE enum was renamed to CLEAR_BUFFER_TYPE and its members now have names beginning with CB_ instead of BUFFER_
- I also added some missing comments and got rid of spelling mistakes in other
I've fixed some more bugs. And now light shafts are almost working. You can see them here:
And here is how to use them:
NodeVolumetric* pVolume = new NodeVolumetric(pLight); pVolume->setCreator(sm); pVolume->init(); pLight->addChild(L"Shaft", pVolume);
Where pLight is some spot light. Light-shafts can be found in NodeVolumetric.h file and this file needs to be included to the project if you want to use them.
I almost forgot… now it is possible to change shadow density (how dark it is) for individual light. Just call NodeLight::setShadowDensity(float density) to change it. The value should range 0 to 1 and the higher it is the lighter the shadow is.
Great changes!
I'm looking forward to work again on the engine. Unfortunately it's just not possible at the moment. Too much other projects. :( Maybe I can start again in october.
Today changes include addition of wrapper classes for PhysX joints. Creation of joints is pretty easy and straightforward:
JOINT_DESC desc; desc.actor1 = pActor; desc.actor2 = NULL; Joint* pJoint = pWorld->createJoint(L"Hinge", desc); Vector3 vecPos(0.0f, 15.0f, 15.0f); pJoint->setPosition(vecPos); pJoint->setDirection(Vector3::UNIT_Z);
This snippet creates a "Hinge" joint provided pWorld is a pointer to a valid PhysicsWorld object and pActor is a pointer to a valid rigid body object. Other types of joints you can create are:
- "Cylinder"
- "Distance"
- "Fixed"
- "PointInPlane"
- "PointOnLine"
- "Prism"
- "Pulley"
- "Sphere"
They should work the same way their counterparts in PhysX do. After creating Joint you may want to downcast the pointer to get access to specific class methods. Also for some joint classes you have to use their specific descriptor structure instead of JOINT_DESC when creating them. These classes are:
- JointDistance ("Distance")
- JointPulley ("Pulley")
- JointSphere ("Sphere")
See source code for more details.
More details will be provided by the end of the week with a new tutorial focusing on joints.
Further changes to shadow rendering. You can now specify that light's shadows are static:
void NodeLight::setStaticShadow(bool)
To make shadow static pass true as an argument. Such shadow will be updated only for the first time. To update it in the future call NodeLight::requestShadowUpdate(true).
There are also numerous other changes, e.g. grass rendering has been improved - both performance and quality. Therefore I updated tech demo a bit.
New update. Apart from minor fixes there is code for tutorial 2.5 (joints) and also sample application presenting light-shafts (god rays). Hope you like it. Also movie from this app is available:
Not many updates in the last few days… but here is something what will reward this I hope. nGENE has now its own virtual file system what means that instead of many small files you can redistribute a few larger ones. This vfs supports compression (using Burrows-Wheeler Transform + Move to Front + Run-Length Encoding + Huffman Coding) and is almost transparent for the programmer. The only thing you have to do is to open the archive. Here is an example of loading data from the archive (see VFS example for full source code):
FileManager& mgr = FileManager::getSingleton(); FileArchive* pArchive = mgr.openArchive(L"Default", L"VFS.nfs", OPEN_READ | OPEN_BINARY); mgr.changeDir("VFS.nfs"); MaterialManager::getSingleton().createLibraryFromFile(L"vfs_demo.lib", L"default"); mgr.closeFile(pArchive->getFileName()); // Restore previous directory mgr.changeDir(".");
To create archives I provided a command line tool named ArchiveBuilder.exe which has following usage:
Usage: archivebuilder.exe <directory name> <target archive name> [-c OPTIONAL compression]
Note that archivebuilder saves directory structure so you will have to them take into account when passing file names (as you would do without resource file).
Another change is that some of the important materials have been moved to the new library (core.lib). The VFS example shows that now loading default.lib library is no more necessary.





