From BlenderWiki

Jump to: navigation, search
Note: This is an archived version of the Blender Developer Wiki. The current and active wiki is available on wiki.blender.org.

Project Status

This project was rejected for mid-term, but it will be developed further, the proposal can be found here: http://wiki.blender.org/index.php/User:Svbrand/NodeLogicProject

May 27th

This week

I had a meeting with Benoit, we decided to approach the node engine for the Game Engine as a programming language design, I am studying about programming language design and contrasting that with the current node engine design proposal. The idea of the programming language approach was from a meeting I had last week with the professor that will guide my thesis. I also formalized the subject as my thesis so you will be seeing me for more than a Google Summer.

Next week

Benoit and me will contrast technical work and design made by him two years ago and the theory design of the programming language, I will start the language design and definitions.

Problems

The time it will take to design of the programming language and do a prototype will require more attention than originally expected, but should affect in a good way the second part of the work.


June 3rd

This week

Benoit did some notes to better understand the code he has done. We have defined the most important concepts and some problems and questions the language should approach. I analized what Benoit has done and his design from a programming language design and most of his work is perfect for the approach so we've decided to continue his effort and not restart.

Next week:

I will make the formal design of the language, make a comparison between some examples made with the current system and how they would work and be made with the new system.

June 10th

This week:

We had a problem were we had two possible base designs for our language, an Object Oriented and and an Entity System based language.

We decided for the Entity oriented approach, as it automatically makes the node graphs portable between objects and make importing them easier.

The Entity approach is to have each Entity in the game labelled with thing like alive and destructible for example and having independent behaviour graph that give each Entity, with a defined label, that behaviour.

The idea is to be also able to define new labels to entities.

Next week:

There are some question that have to be answered and a formal design document must be made to finish the language design. This week I'll write the first draft of a document doing the above.


June 17th

This week:

The formal language design is almost done. The approach of an entity system defined the language as a Component Oriented Visual Programming Language.

The questions left are more about details and examples of the language than the language itself and of course the technical implementation. The document was read by Benoit and he agrees that the base design of the language follows the requirements of the node engine he proposed. This document has also a small explanation of how the term entity system is used and advantages of this approach apart from the language base design. The best advantage of this approach is that re-usability, in many levels, is inherent of the system and the language.

Document WIP! link: http://wiki.blender.org/uploads/b/bf/Paper0.4.doc

Next week:

The document must be finished and polished to be able to share it. There are some design question that must be solved with coded examples, which will be made this week.

June 25th

This week:

A formal language design is done, it has to be approved by Benoit or corrections must be made. More examples have been made, specially with the proposed syntax. Design had to be changed to better adapt to Benoit's original design, as it solves many important problems. Also the states of graphs will be implemented as current states in the Game Engine. The current document has enough information about the design, functionality and elements of the language to make a little proof of concept engine. Examples have already shown how re usability will be easy to implement in the new system. Added a Wiki page to follow the project progress.

I had less time to work this week as the hard drive of my computer failed and I had to rescue my work and install my development environment again, all which took me more than I expected.

Document WIP! link: http://wiki.blender.org/uploads/c/c2/Paper0.5.pdf

Next week:

It was the plan to do some coded examples this week, but they will be made next week. The design document will have a first version to share next week, but it will not be the final document, as after the implementation of the Node Engine is done, another document must be done explaining how it is done and how it must be used. Benoit's corrections to the document will be integrated to share the document.

Problems

A disk failure of my computer affected the plans for this week, as I had to install a new development environment and had to recover the data from the old disk, next week should be better and things originally planed for this week be made.

July 1st

This week:

A small proof of concept was started, this proof of concept is made on top of the current engine, it is still a work in progress, but allows to better understand how the engine could work and the advantages of a component oriented approach. A very extensive and detailed explanation is found in the proof of concept's blend file.

Also some work was made on the Language Design Document, but at Benoit's request, effort was put on a technical design document and the proof of concept.

Benoit did not approve the Language Design Document, he felt it was lacking in the technical side, and asked for effort be put in technical design of the engine itself. The Language Design Document will only be about how the user experience will be using the proposed node engine's interface to make logic routines and the Technical Document will be technical solutions to implement the proposed solution.

I'd like to point out that a language design document is usually not directly related to the technology to implement it, for this reason a new document has been started to make detailed technical design requested by Benoit.

During the week we had a good discussion on concrete technical solutions I proposed to Benoit based on my work on the language design, this are reflected on the technical design document.

The technical document was based on Benoit's previous effort but many changes have been made because of the following new design decisions:

* Graphs will be part of a Component.
* A Component will work on a list of Entities
* An Entity can have reference to a Game Object, a Group of Game Objects and/or a Scene
* Component will apply a graph to a list of Entities
* Pulse between nodes will carry an Entities list
* Entities can be related to Component through labeling, which can occur in runtime

There's still much work to do in the two documents and the proof of concept.

Documents and proof of concept can be found here: http://wiki.blender.org/index.php/User:Svbrand/GSoC-2011-DesignDoc

Next week:

The technical document has much to be worked on, as Benoit wants for all technical questions to be answered in paper before starting the implementation or to have a good reason for not answering a certain question.

Time will be given to the Language Design Document, to at least have an understandable cohesive version that is in line with the proof of concept and the Technical Design Document.

The proof of concept will be worked on for it to also reflect an abstraction of the nodes and be easier to understand and see it's advantages.

As part of the proof of concept effort, a small game will be made showing the advantages it would have to make it with the proposed node engine instead of the current engine.

Problems

Benoit did not approve the progress of the Language Design Document as he feels it's more important to answer technical questions directly, there were also some miscommunication problems as we have a 6 hours difference and he has little time some days of the week to give to the project.

July 8th

This week:

I made a small game that makes more complex actions than the proof of concept and made a version completely without Python code using the current logic bricks and a version that extends the Component-Entity-Labelling idea using Python. The python version allows:

- Access of Sensor and Actuators Bricks through a set of boolean properties by running a special labelling script on labelled Game Objects
- Some Dynamic labelling functions
- Some multiple labelled "Entities"

What the examples show is that common logic in the old system without the use of python is very hard to reuse, even within the project. It is also evident that the proposed node engine's component oriented nature would encourage to make reusable logic and make team work easier.

We discussed the technical document with Benoit and during this week Benoit finally gave me green light to start coding, I'm starting to code, but it's been a slow start working on top of Benoit's code, but I expect to be full on coding next week and having some low levels result.

Both examples, an updated proof of concept and the current documents can be found here: http://wiki.blender.org/index.php/User:Svbrand/GSoC-2011-DesignDoc

Next week:

Coding some of the main critical elements of the engine, including:

- retrieval of node requirement for local data in node class definition
- definition of component property
- allocation of component and node private data in entities when a component is attached to an entity
- deallocation of the private data when the component is removed from the entity
- initialization of nodes when a component is attached to an entity
- execution of nodes: the component will call the node function for each entity waiting on the push input
- retrieval of the private data when a node executes on a specific entity
- state system: switching from graphs to graphs as state is switched for an entity. This implies calling activation/deactivation function for each node to allow them to deactivate sensors, reset internal state, etc.

Small work on Documents will be done.

Problems

There are some social movements in the country which took away some of my working time and getting back into coding has been slower than expected, but this situation should change next week as I get more into coding.

July 15th

This week:

A more finished Language Design Document was uploaded, it has more graphs and many improvements, it elaborates upon the proof of concepts done last week.

http://wiki.blender.org/index.php/File:Dev-GSoC2011NodeEngineLanguageDesignPaper-V0.8.pdf

I have been studying a lot of CPython, as it is essential to the project to have a good handle of the technology and I didn't have previous knowledge of python C or C++ binding. I originally planed to expand on Benoit's previous work, but it proved to be too difficult without a solid base of knowledge as the previous work is not in a running stage yet to be able to see the code running. I worked on some functionalities, but scratched the work to change to an iterative prototype approach for the project, planning to use what I learned during the week to do a standalone prototype that allows the base functionalities of the language to run (without a graphical interface, but with the elements correctly represented).

Next week:

It is unclear, the plan would be to start prototyping the proposed Language Design and changing the design upon testing the prototype's functionality.

Problems

Working somewhat blindly with a technology I don't handle proved to be too difficult, this made me change the approach of working on top of previous work and start working apart from blender's code base to do implementations.