// スムースシェーダ // ver 1.4 2020/12/02 // by yarunashi@dooon // xs_begin // author : 'yarunashi@dooon' // arg : { id = '0' name = 'rate' value = '0.4' range = '0.0 1.0' step = '0.1' decimal = '1' } // arg : { id = '1' name = 'range' value = '2' range = '1 3' step = '1' decimal = '0' } // xs_end float rate = (iArgs[0] == 0) ? 0.4 : iArgs[0] ; float range = (iArgs[1] == 0) ? 2.0 : iArgs[1] ; float weight(vec3 v, float range){ float cnt = 0.0; float sum = 0.0; if (range == 1.0) { for(int z = -1; z <= 1; z++) for(int y = -1; y <= 1; y++) for(int x = -1; x <= 1; x++) { if (voxel(vec3(v.x + x, v.y + y, v.z + float(z))) >= 1.0) sum++; cnt++; } } else if (range == 2.0) { for(int z = -2; z <= 2; z++) for(int y = -2; y <= 2; y++) for(int x = -2; x <= 2; x++) { if (voxel(vec3(v.x + x, v.y + y, v.z + float(z))) >= 1.0) sum++; cnt++; } } else { for(int z = -3; z <= 3; z++) for(int y = -3; y <= 3; y++) for(int x = -3; x <= 3; x++) { if (voxel(vec3(v.x + x, v.y + y, v.z + float(z))) >= 1.0) sum++; cnt++; } } /* float K = range; for(float z = -K; z <= K; z++) for(float y = -K; y <= K; y++) for(float x = -K; x <= K; x++) { if (voxel(vec3(v.x + x, v.y + y, v.z + z)) >= 1.0) sum++; cnt++; } */ return sum / cnt; } float map(vec3 v) { //削除 if (weight(v, range) < rate) return 0.0; //追加 if (voxel(v) >= 1.0) return voxel(v); return iColorIndex; }