You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 10 Next »


Sample Render using the custom Voronoi 3D Texture Node.

The following package contains all the material described in this tutorial: Custom_Hypershade_Nodes.zip


This tutorial explains how to create your own 
HyperShade node. Shader development in 3Delight for Maya is very easy. As examples, we explain how to develop a simple voronoi noise as a Maya 3D Texture and a simple Lambert shader.

Content:

Main Components

To create a single node only compiled OSL shader is needed. Optionally, it is possible to add icons to have a better visual representation of the node inside Hyerpshade and the Outliner.

The following table shows where each component should be installed for a Maya 2015 package.

ComponentInstallation Environment VariableDefault Location
Compiled OSL shader path_3DFM_USER_OSL_PATH 
IconsXBMLANGPATHC:\Program Files\3Delight\maya\2015\icons

Creating a Custom 3D Texture Node

After correctly providing the compiled OSL shader path, you will be able to render using the new texture as with any other Maya 3D Texture.

The Voronoi node viewed in the Create menu of the HyperShade

The Voronoi node viewed in the Node Editor. Note how  place3dTexture node is automatically supported.

 

Voronoi noise connected to the 3Delight Material.

The OSL Source Code 

The Voronoi texture looks like a standard Open Shading Language function but with some optional metadata:

string maya_name

string maya_label

string maya_type

string maya_group

float maya_min

float maya_max

int maya_hidden

The source code for our voronoi texture follows. To use it as Maya HyperShade node, the shader should be compiled using oslc utility from the OSL package.

OSL Shader Source (OSLVoronoi.osl)
#include "texture3d.h"
#include "utils.h"

surface OSLVoronoi(
		float i_jitter = 1.0 [[
			string maya_name = "jitter",
			string maya_label = "Jitter",
			float maya_min = 0.0,
			float maya_max = 1.0,
			string maya_group = "3Delight Voronoi" ]],
		float i_scale = 0.1 [[
			string maya_name = "scale",
			string maya_label = "Scale",
			float maya_min = 0.001,
			float maya_max = 2.0,
			string maya_group = "3Delight Voronoi" ]],
		float i_seed = 1.0 [[
			string maya_name = "seed",
			string maya_label = "Seed",
			float maya_min = 0.0,
			float maya_max = 2.0,
			string maya_group = "3Delight Voronoi" ]],
		float i_uvCoord[2] = {GetS() / i_scale, GetT() / i_scale} [[
			string maya_name = "uvCoord",
			int maya_hidden = 1,
			int skip_init = 1 ]],
		output color outColor = 0.0 [[
			int maya_hidden = 1 ]],
		output float outDistance = 0.0 [[
			int maya_hidden = 1 ]] )
{
	float edgeDist;
	float outside;
	point pp = point(i_uvCoord[0], i_uvCoord[1], i_seed);

	point position;

	point thiscell = point( floor(pp[0])+.5, floor(pp[1])+.5, floor(pp[2])+.5);
	float f1 = 1000;
	for (int i = -1;  i <= 1;  i += 1)
	{
		for (int j = -1;  j <= 1;  j += 1)
		{
			for (int k = -1;  k <= 1;  k += 1)
			{
				point testcell = thiscell + vector(i,j,k);
				point pos = testcell + i_jitter * ((vector)cellnoise(testcell) - 0.5);
				vector offset = pos - pp;
				float dist = dot(offset, offset); /* actually dist^2 */
				if (dist < f1)
				{
					f1 = dist;
					position = pos;
				}
			}
		}
	}

	outDistance = sqrt(1 - f1);
	outColor = outDistance;
}
 

Adding Icons for the Outliner and Hypershade

You can add icons to both the Outliner and Hypershade (this applies to both texture nodes and shader nodes). The table below details the convention for creating the icons for our Voronoi Noise.

 

Outliner

HyperShade - Node Lister

HyperShade - Work Area

Icon Resolution20 x 20 pixels32 x 32 pixels128 x 128 pixels (up to 512 x 512 pixels)
FormatTransparent 24 bits PNGTransparent 24 bits PNGTransparent 24 bits PNG
Naming
Convention
"out_" + <node_type> + ".png"

"render_" + <node_type> + ".png"

<node_type> + ".png"
Example

out_3DelightVoronoi.png

render_3DelightVoronoi.png

Note the transparent corners of the icon matching Maya
built-in 3D Textures.

render_3DelightVoronoi.png

  • No labels