// xs_begin // arg : { var = 'm_radius' name = 'Radius' value = '3' range = '1 128' step = '1' precision = '0' } // xs_end //===== built-in args ===== // uniform vec3 i_volume_size; // volume size [1-256] // uniform float i_color_index; // current color index [0-255] // uniform int i_num_color_sels; // number of color selections [1-255] //===== built-in functions ===== // float voxel( vec3 v ); // get voxel color index // float color_sel( float k ); // get kth selected color index // vec4 palette( float index ); // get palette color // generate a new voxel color index [0, 255] at position v ( v is at the center of voxel, such as vec3( 1.5, 2.5, 4.5 ) ) float map(vec3 v) { vec3 center = i_volume_size * 0.5; vec3 p = ( v - center ); if( length( vec2( length(p.xy) - min(center.x,center.y) + m_radius, p.z)) - m_radius > 0.5 ) { return 0.0; } float s = i_volume_size.x / float( i_num_color_sels ); return color_sel( v.x / s ); }