// Copyright (c) 2023 Lachlan McDonald // This work is licensed under the MIT License (MIT) // https://github.com/lachlanmcdonald/magicavoxel-shaders // // xs brush/tiles [Width] [Height] [Depth] [Offset X] [Offset Y] [Offset Z] // // xs_begin // author : '@lmcdx.bsky.social' // arg : { name = 'Width' var = 'm_width' range = '1 256' value = '2' step = '1' precision = '0' } // arg : { name = 'Height' var = 'm_height' range = '1 256' value = '2' step = '1' precision = '0' } // arg : { name = 'Depth' var = 'm_depth' range = '1 256' value = '2' step = '1' precision = '0' } // arg : { name = 'Offset X' var = 'm_offset_x' range = '0 256' value = '0' step = '1' precision = '0' } // arg : { name = 'Offset Y' var = 'm_offset_y' range = '0 256' value = '0' step = '1' precision = '0' } // arg : { name = 'Offset Z' var = 'm_offset_z' range = '0 256' value = '0' step = '1' precision = '0' } // xs_end vec3 dim = vec3(m_width, m_height, m_depth); vec3 offset = vec3(m_offset_x, m_offset_y, m_offset_z); float pal(float p) { float f = floor(mix(0.0, float(i_num_color_sels), p)); return color_sel(f); } float map(vec3 v) { if (mod(v.x + offset.x, dim.x * 2.0) < dim.x) { if (mod(v.y + offset.y, dim.y * 2.0) < dim.y) { if (mod(v.z + offset.z, dim.z * 2.0) < dim.z) { return pal(0.0); } else { return pal(1.0); } } else { if (mod(v.z + offset.z, dim.z * 2.0) < dim.z) { return pal(1.0); } else { return pal(0.0); } } } else { if (mod(v.y + offset.y, dim.y * 2.0) < dim.y) { if (mod(v.z + offset.z, dim.z * 2.0) < dim.z) { return pal(1.0); } else { return pal(0.0); } } else { if (mod(v.z + offset.z, dim.z * 2.0) < dim.z) { return pal(0.0); } else { return pal(1.0); } } } }