2018年2月7日水曜日

VuforiaのVuMarkでのビット(Element)数について

VurMarkを使おうと思ったけど、会社ではイラレ無い。でも、サンプルのSVGみてXML編集すれば、普通にマーカ作れるじゃん!そこまではいいんだけど、マーカのビット(Element)数を計算するのにイラレがやっぱり必要という落ちで、年休の暇を見ておうちのマシンで検証してみた。
https://library.vuforia.com/articles/Training/VuMark-Design-Guide

結論としてはかなり変わっている。例えば文字列9文字入れるのと10文字入れるので大きくビット数が変わるのでデザインに気を遣うので要注意です。

Stringの場合

 エクセル風にかけば「=7*[文字数] + 7*MAX(MIN(20,INT(( [文字数] -10)/10)*2+4),4)」でエレメント数が得られます。若干9以下と100ちょうどに気持ち悪い処理が入ってる感じがするけどとりあえずmax,minで対応してます。

Binaryの場合

 Stringが7bitなのに対して8bitになっただけかと思いきや、maxの所の引数が違うので注意です。
「 =8*[byte数] +8* MAX(MIN(16,INT((F2-10)/10)*2+4),4)」

byteにしても文字列にしても、20以上では10単位余計なおまけコードが追加されるので20文字ちょうどや!ってなった時は頑張って19文字に押さえるとドット数を減らせます。逆に19文字で白黒の偏りが大きくて気持ち悪いなって時はダミーで1文字足せば白黒の偏りが減ります。

Numericの場合

 規則性が謎でした。
 2^2(=4)以下では必要ビット数+16
2^3(=8)以上では必要ビット数+25
2^19(=1048576)以上では必要ビット数+31
2^50(=1125899906842620)でいったん必要ビット数+30になるけど
2^51で必要ビット数+31に戻ったので・・・・怪しい領域です。

最大値は2^49以下で使うのが無難でしょう

ちなみに以下のように<g id="VuMark-Description">の中に書くのだけれども、IDlengthはダミーで、MaxIDはGUIでの設定値の+1の値をMaxIDに入れるようです。なので編集途中のイラレやSVGにはいってるMaxIDと登録する時のSVGのmaxIDは違いマス。
    <g id="VuMark:test_original"></g>
    <g id="IDtype:numeric"></g>
    <g id="IDlength:1"></g>
    <g id="MaxID:32"></g>
    <g id="Elements:29"></g>

参考まで、サンプルをのsvgをできるだけシンプルにしたmaxID=32のnumericマーカーの例です。
https://gist.github.com/akirayou/32d4e8ae7a666a54f18f7e5d408af475


補足

elementのIDは重要です、ちゃんと桁数まで合わせて連番である必要があります。グループ化されてると1要素としてカウントされるらしいですが・・・細かい所は自信ありません。
 中身が空っぽのグループもないとfailします。(DOMに各要素があることを前提としてアクセスしてるみたい?)
 cleaSpaceだとかボーダーからエレメントまでの隙間など最大辺比5%はあけとけとの事です。
あと、各elementの最小サイズは最大片比で3%です。