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: