Current stable version: 0.1.1

Material nodes and nodes editor

Personal Information:

Idea to implement:

  • Synopsis and Goals:
    The main goal of this project is to provide the Yafaray's end user an easy means of creating complex materials, The end user will be presented a graphical interface allowing him to create, edit and share a Nodes network representation of the materials.
    • So what is material node: A material node is a visualization of a specific function. It can be viewed as a kind of black box, doing something with it's input, or just producing an constant or variable output. So there would be nodes to do many different task like mixing or blending different textures or color values, nodes that would generate color ramps, nodes allowing some math operations and so on.
    • How the materials are constructed: The final look of the material is determined by the steps taken to produce it, like for example getting some textures, mixing it together, doing some color manipulation of the result... If we consider any taken action to produce a final output as a separate function realized by a node, as described above, then a connected structure of those nodes will visualize the steps taken to produce an output. An example nodes network realizing a simple material is pictured below.
  • Detailed description:

    The development will be split into programing the backend and frontend.
    Backend part will include writing new material plugins allowing for node based workflow. This will include a material system plugin, that will be prepared to take a node based input, nodes plugins, and providing an API allowing to write new shader nodes.
    Each node will be characterized by it's name, input and output sockets definition and a control interface.

    This will provide a simple means to visualize the node in the frontend and to control if the input/output is correct, as well as allow to manipulate the nodes materials using different frontends (for instance using nodes editors integrated in graphics packages).

    The frontend part will be a GUI program, strongly connected to the new functionality provided by the backend. The manipulation of the nodes will be done through the XML interface. Doing it by XML will allow to store the node network and for instance share it between users. The GUI will be programmed using QT library, as it is portable and will allow to be run on all the platforms supported by Yafaray. The nodes would be rendered by a new widgets prepared especially for this editor and utilizing vector graphics.
  • Workflow and Usability: I am already studying several nodes editors, like those that could be found in major graphics packages like XSI, or standalone ones like Sler or Shaderman, and I will combine the best practices used in those editors in my project.
    The editor will be able to render preview on almost any node, witch will provide the user to interactively see the result of modifying the certain value.
    There will be possibility import Yafaray scene in XML format and directly manipulate on the scene object materials, tweak settings and render final or preview images.
    What I consider a strong point of this project, is that the nodes editor should provide an easy way for storing whole networks or parts of them in a form of the digital asset that could be easily shared between Yafaray users. Such digital asset would have an specific control interface provided by author, witch will for example allow to show only certain parameters to the user and to give them specific names.
    There are many minor things to be considered like the ability to theme the app so it could reassemble the interface that the user is used to (since it would be stand alone editor not related to any graphics package).
  • Temptative schedule:
    26.04 - 24.05 Familiarizing with the project codebase, discussing the proposal with mentoring organization
    24.05 - 10.07 Work on the backend part of the project
    10.07 - 16.07 Documenting and testing the backend part
    16.07 - 9.08 Work on the front end part
    9.08 - 16.08 Testing and documenting the frontend part of the project

Bio:

My name is Piotr Chrzczonowicz, I am sophomore of Computer Science at the Wrocław University of Technology in Poland.
I like playing guitar, brewing beer and am very keen on CG. I used to spend much time with 3d packages, including 3d Studio Max, Maya, XSI and Sidefx's Houdini, back in primary and highschool. During this semester i got interested in raytracing from the technical, not artistic, side and started coding a simple ray tracer in java as a project for my Computer Graphics classes. Currently i spend some time googling for different raytracing oriented research papers and am looking forward into designing and coding an efficient GI raytracer in C++. I wanted to take part in google's summer of code program, so I can contribute to the Open Source community, and Yafaray is the best choice for me, because coding for Yafaray will not only be my contribution to the community but also a great chance to learn even more about raytracing.

Comments

quick review

Hello Piotr

In your proposal you describes well what is going to be implemented, more or less what is a node editor, your abilities and why you are interested in doing the project.

This is basically what is required for a good proposal, but you put everything condensed in a few paragraphs which are not properly organized. So let me give you a suggestion on how you can organize that:

 

  • Start by describing what is the node editor, it's main benefits and, if possible, give some examples. We know what a material node editor is, but by having this in your proposal it becomes clear for us that you also know that.
  • In the detailed description, try to specify the scope of your work, trying to be as detailed as possible regarding the features you want to implement. If you are able to provide some screen mockups (using drawings, or qt designer, or whatever you prefer), it would help too.
  • The schedule doesn't need to be very precise, but try to organize the ideas in your mind to set the order in which things would be implemented. We all know schedules are meant not to be followed, but this organization will help you implementing everything in a reasonable way and it will greatly increase your chances of success shall you be accepted.
  • For the biography, try to split it in three parts: the first part showing your educational and professional experience, the second part can contain things about your involvement with yafaray (it can be as a user or as a developer, you can also say here that you are already in contact with the project developers). In the third part, you should tell us why you are the one we should choose to implement the task. 
I guess those hints can help on improving your proposal a lot. I'm looking forward to see the next draft and do one more review.
Good luck!
Boiko