2013幎ã«ãªãªãŒã¹ãããã²ãŒã Tiny ThiefããªãªãŒã¹ãããŸãããããã¯ãã¢ãã¡ãŒã·ã§ã³ã¢ãã©ã¹ãªã©ãå«ããã«ãã§ã®ããããããã°ã©ãã£ãã¯ã¹ã®æåŠã«ãããã¢ãã€ã«FlashïŒAIRïŒéçºç°å¢ã«å€§ããªãã€ãºããããããŸããã ã
ããã«ãããç¬èªã®ã³ã³ãã³ãã倧éã«äœ¿çšããã€ã³ã¹ããŒã«ãã¡ã€ã«ã®ãµã€ãºãæ倧70ã¡ã¬ãã€ãïŒ* Google Playã®.apkãã¡ã€ã«ïŒãŸã§ä¿åã§ããŸããã æè¿ãã¢ãã€ã«ããã€ã¹ã§ã®ãã¯ã¿ãŒã°ã©ãã£ãã¯ã¹ã®ã¬ã³ããªã³ã°ã®ãããã¯ïŒããã³äžè¬ã«ããŒããŠã§ã¢ãµããŒãã䜿çšãããã¯ã¿ãŒã®ã¬ã³ããªã³ã°ã®ãããã¯ïŒã«å¯Ÿããé¢å¿ãåã³é«ãŸãããã®ãããã¯ã«é¢ããããšã³ããªã¬ãã«ãã¬ãã«ã®æ
å ±ã®æ¬ åŠã«é©ããŸããã ããã¯ããã¯ãã«ãšæ¢åã®ãœãªã¥ãŒã·ã§ã³ãæç»ããæ¹æ³ãããã³ãããã®ããšãèªåã§è¡ãæ¹æ³ã«é¢ãããªãã¡ã¬ã³ã¹èšäºã§ãã
ã¡ã€ã³ãŠã§ã€
ãã¯ãã«ãæç»ããæãäžè¬çãªæ¹æ³ã¯ããã¹ãŠã®åœ¢ç¶ãæ²ç·ãªã©ãååŸããäžè§åœ¢åã¢ã«ãŽãªãºã ïŒéãã茪éãäžè§åœ¢ã«åå²ïŒã§ããããééããåãå¡ãã€ã¶ããããªããžã§ã¯ãã§ããŸããŸãªã¹ãããŒã¯ãšç·ãååŸããèšè¿°ãããæ°åŠçãªè¿äŒŒè¡šçŸãååŸããããšã§ãå³ã®åŒã
ã€ãŸãããã®æ¹æ³ã§æããããã¯ãã«åã¯ãå®éã«ã¯ããªãŽã³ã«ãªããŸãã ãã®å Žåã®å質åºæºã¯ãçµæãšããŠåŸãããäžè§åœ¢ã®æ°ãšãµã€ãºã«ãªããŸãã
å·Šããå³ãž-
- Inkscapeã®ãœãŒã¹ã³ãŒãã
- å°æ°ã®äžè§åœ¢ã§äžè§æž¬éããçµæã
- çµæã®äžè§åœ¢
ãã®ãããªåé¿çã®çç±ã¯ç°¡åã§ããã°ã©ãã£ãã¯ã«ãŒãã¯ãé ç¹ãäžè§åœ¢ããã¯ã»ã«ã§ã®ã¿å¹ççã«æ©èœããŸãïŒGPGPUã¯å°ãç°ãªã話ã§ããããã®æèã§ã¯ãèšåãã䟡å€ãããã ãã§ãïŒã CPUã䜿çšããŠæ°åŠçã«æ£ããã¢ãã«ã®è¡šçŸãæç»ããå Žåãããã«ã¯ããã«æéãããããŸãã ãããã£ãŠããã®ãŸãŸçã§ã¬ã³ããªã³ã°ããã°ã©ãã£ãã¯ã«ãŒããäžè§æž¬éããŠéä¿¡ããŸãã
èœãšãç©Ž
äžè§åœ¢ã®ãã®ãããªç²ãã¬ã³ããªã³ã°ã¯ããšã€ãªã¢ã·ã³ã°å¹æã®åºçŸã«ã€ãªãããŸã-ç»åã®ãšããžã®ã°ã©ããŒã·ã§ã³ïŒããã¯äžã®ã¹ã¯ãªãŒã³ã·ã§ããã§ã¯ã£ãããšèŠããŸãïŒã ãã®åé¡ã¯ãäžè§åœ¢ãšããŠè¡šãããäžéæãªãžãªã¡ããªã«åºæã®ãã®ã§ãã
Tiny Thiefã®ã¹ã¯ãªãŒã³ã·ã§ãããèŠããšãã²ãŒã ã«ãã®æ¬ ç¹ããªãããšãããã«ããããŸãããªããžã§ã¯ãã®ç«¯ã¯çŸããæ»ããã§ãã
çŸå°èª¿æ»
Adreno ProfilerãNVIDIA PerfHUD ESãããã³Unityã䜿çšããŠã以äžã§èª¬æãããã¹ãŠã®ããšããã¹ãããŸããïŒææ¡ããããœãªã¥ãŒã·ã§ã³ã®æ©èœã確èªããŸãïŒã
ã«ã©ãŒã°ãªããã¢ãŒããæå¹ã«ãããšãAdreno Profilerã«è¡šç€ºãããå
容ã¯æ¬¡ã®ãšããã§ãã
ã€ãŸããäžè§åœ¢åå²ã®åãæ¹æ³ã§ã¬ã³ããªã³ã°ããŸãã é ç¹ã¯ããã¯ã¹ãã£ïŒé ç¹ã®ã«ã©ãŒãã©ã¡ãŒã¿ïŒãªãã§çŽæ¥ãã€ã³ããããŸãã
ã¢ã«ãã¡ãããã¡ã®å
容ã¯æ¬¡ã®ãšããã§ãïŒæããã«ãAdreno GPUã«ã¯ãã¢ã«ãã¡ãããã¡ããªã©ããããŸãïŒã
ãªããžã§ã¯ãã®ãšããžã«æ²¿ã£ãŠãèãåäžãã¯ã»ã«ã®ã¹ããªããã èå³æ·±ãããšã«ãã¢ã«ãã¡ãã£ãã«ã¯é£æ¥ãããªããžã§ã¯ãéã®ãšããžã§ãçœãã§ãïŒçœãèæ¯ã¯è²ä»ãã®æåã§ãïŒãã€ãŸããããŽå
šäœã1ã€ã®ãã¹ã§æç»ããããã®ãããªãªããžã§ã¯ãå
ã®ã¹ã ãŒãžã³ã°ã¯ââãããã«ç°ãªãæ¹æ³ã§å®è£
ãããŸãã
ã·ã§ãŒããŒïŒ
{ lowp vec4 fcolor;
ã¹ã ãŒãžã³ã°ã®æ¬è³ªã¯å€ããå°ãªããæ確ã§ã-äžè§åœ¢åãããšãããªããžã§ã¯ãã®ãšããžã«æ²¿ã£ãŠçŽ°ãäžè§åœ¢ã®ã»ãããè¿œå ããŸãã
ã©ããªã«åçãè¿ã¥ããããšããŠãããããã®ããã现ãäžè§åœ¢ãèŠã€ããããšã¯ã§ããŸããã§ããã ãããã幞ããªããšã«ãAdfno Profilerã¯PerfHUDãšã¯ç°ãªãããžãªã¡ããªãããã¹ã圢åŒã§ãšã¯ã¹ããŒãã§ããŸãã
åå²çµç«
åçŽãªããŒãµãŒãäœæããåŸãUnityã§å
ã®ã¡ãã·ã¥ã埩å
ããããšãå€æããŸããã ããããå¥åŠãªåçãåŸ
ã£ãŠããŸããã
ã¹ã ãŒãžã³ã°ã®ãªããã¬ãŒã ã ã°ãªãããã¥ãŒã¢ãŒãã§ã¯ãå¡ãã€ã¶ãã®äžè§åœ¢ã衚瀺ãããŸããã
é·ãéãäœãåé¡ãªã®ãç解ã§ããŸããã§ããã å¡ãã€ã¶ãäžè§åœ¢ãå察æ¹åã«å転ããŠããããšãããããŸããã ããã¯ãå察åŽããããŽãèŠããšæããã«ãªããŸãã
ãŸããããŽã®èŠçŽ ã®éã«ã¯ãã°ã©ããŒã·ã§ã³ã§å¡ãã€ã¶ããã空ã®ç·ãããïŒã°ã©ããŒã·ã§ã³ã¯é ç¹ã察å¿ããè²ã§ãã€ã³ãããããšã«ãã£ãŠäœæãããŸãïŒãã¹ã ãŒãžã³ã°ããããŸããã
ã·ã§ãŒããŒã§ããã¯ãã§ãŒã¹ã«ãªã³ã°ãåé€ãããšãçµæãšããŠåŸãããã®ãåŸãããŸãã
ããããèå³æ·±ãæ©èœãçºçããŸã-ãã®ãªããžã§ã¯ããã«ã¡ã©ã«è¿ã¥ãããšãã¹ã ãŒãžã³ã°ãç®ç«ã¡ããããªãããã©ãŒã®ããã«èŠããŸãã
ã€ãŸããç»é¢ã®ãµã€ãºã«å¿ããŠãæå®ã®å Žæã§æ¯åäžè§æž¬éãè¡ããããã®ãªããžã§ã¯ãã®ãµã€ãºã®å€æŽãæå³ããŸããã äžè§åœ¢ã®ãµã€ãºã¯ãåèšå¹
ã1ç»é¢ãã¯ã»ã«ä»¥äžã«ãªãããã«èšç®ãããŸãã
ç»é¢äžã®ã»ãšãã©ãã¹ãŠã®ãªããžã§ã¯ãã¯åãæ¹æ³ã§æç»ãããŸãã äŸå€ã¯èæ¯ã§ããããã¯ã¹ãã£ã§äžåºŠã¬ã³ããªã³ã°ãããŸãã
çµ±èš
ãã£ã©ã¯ã¿ãŒã®ã¬ã³ããªã³ã°ã«é¢ããèŠçŽæ
å ±ãèŠãã®ã¯ååã«èå³æ·±ããã®ã§ããå¹³åããŠãäžè§åœ¢ã®åœ¢ã®åããŒããŒïŒã¬ãŒããæç人ïŒã¯çŽ3ã4000åã®äžè§åœ¢ã§ãã è¯è³ªã®äœããª3Dã¢ãã«ã®ãããªãã®ã§ãã ã°ãªããã¯éåžžã«å¯éããŠããããããªããžã§ã¯ãã¯ãã¯ã¹ãã£ã§æç»ãããŠããããã§ãã
ããŽã¯ã»ãŒ9000ã®äžè§åœ¢ãå ããŠããŸãã æç»åŒã³åºãã®åèšæ°ã¯å¹³åã§çŽ100ã§ãïŒèæ¯ããã¯ã¹ãã£ãšããŠæç»ãããªãå Žåã¯ã¯ããã«å€§ãããªããŸãïŒããFPSã¯å€ãZTE V811ïŒBeeline smart 2ïŒã§ãå®å®ããŠæ倧ã§ãã
äžè¬ã«ããã¯ã¿ãŒã°ã©ãã£ãã¯ã¹ã貯éç®±ã«æç»ããæåã®ïŒãããŠäž»èŠãªïŒæ¹æ³ãåããŸãã
ãã¯ãã«ç»åãäžè§åœ¢åå²ãããžã§ã€ã³ãã«æ²¿ã£ãŠäžéè²ã§çŽ°ãå¢çç·ãäœæãããšããžã«æ²¿ã£ãŠèãåéæã®ã¹ããªãããäœæããŸãã
éããŸ
SDF
ãã¯ãã«ç»åã®è²ã®æ°ã«å¶éãèšå®ãããšããŸã£ããç°ãªãæ¹æ³ã䜿çšã§ããŸãã åçŽãªãã¯ãã«ã¢ãã¯ãã¢ã€ã³ã³ããããšããŸãã
笊å·ä»ãè·é¢ãã£ãŒã«ãã䜿çšãããšãå質ãã»ãšãã©æãªãããšãªããå§çž®ãã§ããŸãã äžçªäžã®è¡ã¯ããã¯ã¹ãã£èªäœãä¿åããã®ã§ã¯ãªããã¢ã€ã³ã³ã®å¢çãŸã§ã®ãã¯ã»ã«ã®è·é¢ã«é¢ããæ
å ±ãä¿åãããšããããšã§ãã éåžžãå¢çã®å€ã¯0.5ã«çãããšèŠãªãããŸãã ã¢ã€ã³ã³ã®ãå
åŽãã«ãããšèãããããã®ãã¹ãŠã å°ãªãã®ã¯ãå€åŽãã§ãã å®éãã©ã¡ãã®æ¹æ³ã§å¢çç·ãäžåããã¯åé¡ã§ã¯ãããŸãããå
åŽã0.5æªæºãå€åŽã0.5以äžã«ããããšãã§ããå ŽåããããŸãã ããããããããããïŒçœãèæ¯ã«é»ãã¢ã€ã³ã³ïŒããã®ãããªãªãã·ã§ã³ã®ã¿ã瀺ããŸãã
ãã®ããã«å¡ãã€ã¶ããããµã€ã³ãã¯æ¬¡ã®ããã«ãªããŸãã
éåžžã®ãŒãããšã®éãã¯ãçŸåšã®ãã¯ã»ã«ãšå¢çç·ã®éã®æå°è·é¢ãèŠã€ããããšã§ãããããã®å Žåããæ³ç·ã«æ²¿ã£ãè·é¢ãèšç®ããŸãïŒãã€ã³ãããã©ã€ã³ãŸã§ã®æå°è·é¢ã¯åžžã«åç·ã«ãã£ãŠæ±ºãŸããŸãïŒã ã€ãŸãããã¯ã¹ãã£ã®ã°ã©ããŒã·ã§ã³ã¯ãæãè¿ãå¢çç·ã®æ³ç·ã®æ¹åãè¡šããŸãã
ã€ã³ã¿ãŒããããç¹ã«ããã«ã¯ãSDFã«é¢ããå€ãã®èšäºããããŸããèšäºã®æåŸã«ããããæ²èŒããŸãã
ãã®åçã¯ãéåžžã®ãã¯ã¹ãã£ãšSDFã®2ã€ã®ãªãã·ã§ã³ã®å質ã®éããæ確ã«ç€ºããŠããŸãã éåžžã®ç»åãæ¡å€§ãããšããŒãããã¯ã£ãããšèŠããããã«ãªããŸãã ãããã«ãããSDFãã¯ã¹ãã£ãå¢ããããšã«ãããã·ã£ãŒããªå¢çãåŸãããŸãã ããã«ããã¯ã¹ãã£ãµã€ãºãååã«çž®å°ããŠããã¢ãŒãã£ãã¡ã¯ãã®ååšã¯ã»ãšãã©èŠããªããŸãŸã§ãïŒçã®SDFãã¯ã¹ãã£ã®å質ãåäžãããããšã«ã€ããŠå¥ã®èšäºãæžãããšãã§ããŸãïŒã ã¢ãŒãã£ãã¡ã¯ãã¯ãéåžžã®ãã¯ã¹ãã£ãšã¯å¯Ÿç
§çã«ãã¢ã€ã³ã³ã®æãã®ç«¯ã«æ»ãããªã¯ãããšããŠè¡šç€ºãããŸãã ããã¯ããã¯ã»ã«ãæ£ç¢ºã«æ°Žå¹³ããã³åçŽã«ç§»åãããšããäºå®ã«ãããã®ã§ãããç»åãµã€ãºãçž®å°ããããšã2ã€ã®åçŽãªçŽç·ã®å©ããåããŠæãã®çŽç·ãè¿äŒŒãã粟床ãäœäžããŸãïŒæ³ç·ãã¯ãã«ãå¢çã«è¿äŒŒããããšãæãåºãããŠãã ããïŒã
ã¬ã³ããªã³ã°çšã®ã·ã§ãŒããŒã¯ããã¯ã¹ãã£ãèªã¿åããããå°ãè€éã«ãªããŸãã å®éšã§ã¯ã次ã®ãããªå€ãã®ç°ãªããªãã·ã§ã³ãè©ŠããŸããã ãŸããèšäº[2]ã®å€åœ¢ã§ãäžè¬çã«ã¯æ¬¡ã®ããã«ãªããŸãã
float4 frag (v2fSDF f) : SV_Target { float2 uv = f.uv; half4 texColor = tex2D(_MainTex, uv); // - half distance = texColor.a; // half smoothing = _Smoothing; // - _Dilate = 0.5 half2 range = half2(_Dilate - smoothing, _Dilate + smoothing); // ( - ) half totalSmoothing = smoothstep(range.x, range.y, distance); half3 rgb = f.color.rgb; return float4(rgb, totalSmoothing); }
ãã®å Žåããã¯ã¹ãã£ã®RBGãã£ãã«ãæåºãããèšç®ã«é¢äžããªãããšã«æ³šæããŠãã ããïŒããã«ã€ããŠã¯åŸã§èª¬æããŸãïŒã _ ã¹ã ãŒãžã³ã°ãç»é¢äžã®çŸåšã®ãã¯ã¹ãã£ãµã€ãºã«æåã§èšå®ã§ããŸãïŒãã ããã¡ãã·ã¥ãä»ããã¬ã³ããªã³ã°ã®å Žåãšåãããã«ãå¢å ã«ã¯åãåé¡ããããŸãïŒããŸãã¯cgé¢æ°fwidthã䜿çšããŸãã ãç»é¢äžã®ã¢ã€ã³ã³ã®çžå¯Ÿçãªãµã€ãºã«åãããŸãã
SDFã¡ãœããã®äž»ãªå¶éã¯ãœãŒã¹ã·ã³ãã«ã®ããã€ããªãïŒ1è²ïŒæ§ã®å¿
èŠæ§ã§ãããããããã¹ããã¬ã³ããªã³ã°ãããšãã«æããã䜿çšãããŸããåãSDFãã¯ã¹ãã£ã®åŠçãªãã·ã§ã³ã調æŽããã³å€æŽããããšã«ãããã¹ãããŒã¯ãã·ã£ããŠããã©ãŒãªã©ãäœæã§ããŸã [1]ã SDFã䜿çšããããŸãäžè¬çã§ã¯ãªãæ¹æ³ã¯ãã¢ãã¯ãã®ã¢ã€ã³ã³ãæãããšã§ãïŒãµã€ã³ãã®å Žåã®ããã«ïŒããã»ãšãã©ã®å Žåãããã¯ããã¹ãã·ã³ãã«ã®ç¹å¥ãªå Žåã§ãã
ãã®ã¢ãããŒãã®å¥ã®æ¬ ç¹ã¯ãéããšããžãšè§åºŠã倱ãããããšã§ãã
å·ŠåŽã¯å
ã®ãã¯ã¹ãã£ã§ãã å³-çž®å°ãµã€ãºã®SDF
ãŸããèšäº[3]ã®ããã¹ãã䜿çšããå¥ã®äŸïŒ
å©çšå¯èœã«ãªã£ãåé¡ã解決ãã
éè§ãä¿æããåæ§ã®ã¢ã«ãŽãªãºã ã®å®è£
äŸããããŸã[4] [5]ïŒ
ã¢ã«ãŽãªãºã ã®æŠèŠã¯æ¬¡ã®ãšããã§ãã
çã®SDFã¯è§ãäžžããªããŸãããã¯ã»ã«ãé ããªãã»ã©äžžããªãããã§ãã ããã¯ãè§ã«åçŽãæãããšãã§ããªãããã«çºçããŸãïŒé¢æ°ã®å°é¢æ°ã¯ãã®ç¹ã«ã¯ååšããŸããïŒ-å€ãã®ãã¯ã»ã«ã¯ãäžå¿ãè§åºŠã§ããåã®ååŸã«æ²¿ã£ãè·é¢ãèæ
®ããŸãã ããã¯ãæ»ããã«èµ°ãæ²ç·ã®åãç®ããã§ãã¯ããŠãã·ã³ãã«ã®ãã¹ãŠã®ã³ãŒããŒã远跡ããããšã§åé¿ã§ããŸãã 次ã«ãççå€è¡šã䜿çšããŠãè§åºŠã®è±¡éãå¡ãã€ã¶ããã©ããã決å®ããŸãã ã€ãŸããéåžžãã³ãŒããŒã¯ç°ãªããã£ãã«ã«èšé²ããã亀差ããSDFã«ãŒãã«ãã£ãŠå¡ãã€ã¶ãããæçµçãªãã¯ã»ã«å€ã¯3ã€ã®ãã£ãã«ããã®ãã¯ãã«ã®äžå€®å€ã«ãã£ãŠèšç®ãããŸãã
ãã¡ãããèšäºå
šäœã1ã€ã®æ®µèœã®90ããŒãžã«åããããšã¯ã§ããŸããããã®ãããå®å
šã«åç
§ããããšããå§ãããŸã[5]ã
ãã£ãã«ã«æ£åšããããŸããŸãªãã£ãŒã«ãã®äº€å·®ç¹ã§åæ§ã®ããšãããããšãã以åã®è©Šã¿ããããŸããããäžéšã®ãªãã·ã§ã³ã¯ã説æããäŸãšã¯ç°ãªããå®éã«ããã«æ®ã£ãŠããªãããã圱ãè¿œå ããããã¹ãããŒã¯ã倪ãããããã·ã³ãã«ã®å€ªããå¢ããããããããšãæå³ããŸããè·é¢ãã£ãŒã«ãèªäœïŒã
å°ãªããã£ã³ãã«-ããé«ã粟床
Twitterã«ã¯ãããã¯ãŸãã¯è©æ¬ºåž«ã«ãã£ãŠäŒŒããããªããšãããŠãããã1ã€ã®ãã£ãã«ãæã€å人ãããŸãã
圌ã®twitterã®ããŸããŸãªãªã³ã¯ãèŠããšãããã€ãã®å®è£
ãªãã·ã§ã³ãèŠã€ããããšãã§ããŸãã ç§ãç解ããŠããããã«ãã¢ãããŒãã¯æšæºã®SDFãšã¯ç°ãªããå®éã®å¢çãŸã§ã®è·é¢ã䜿çšããïŒã³ãŒããŒäžå¿ã®åšãã®äžžããåé¿ããããïŒããããã«å解éãããå³ã䜿çšãããã®ã³ãŒããŒã¯ããã«ç¶ããŸãã ããã«ãããè§ã®äžžã¿ãããã€ãã®ãã£ã³ãã«ãåãé€ããã·ã§ãŒããŒãç°¡çŽ åãããã®ãããªå³ã衚瀺ããããã«å¿
èŠãªæ
å ±ã®ç·éãæžããããšãã§ããŸãã
ãã®ã³ã³ãããªã³ã«ã¯ãGPUã®ããžã§æ²ç·ã®è·é¢ãã£ãŒã«ãããªã¢ã«ã¿ã€ã ã§èæ
®ããã·ã§ãŒããŒããããŸããã1ã€ã®æ²ç·ïŒãã©ã¡ãŒã¿ãŒã§èšå®ããããã®åŒã¯ãã·ã§ãŒããŒã«çŽæ¥ãããïŒã§ããã¹ã¯ãããã³ã³ãã¥ãŒãã£ã³ã°ãã¯ãŒãå¿
èŠã§ãã èšå®ãšã³ãŒããã²ãããšããã€ã³ããå€èª¿ãªãã§è·é¢ãã£ãŒã«ãèªäœãèŠãããšãã§ããŸãã
ãããã®æ¹æ³ã®å
±éã®æ¬è³ªã¯ããã£ã©ã¯ã¿ãŒã®å¢çãå®çŸ©ããæ²ç·ãåæããããšã§ãã
åºæ¬ã«æ»ã
3çªç®ã®æ¹æ³-ã·ã³ãã«ã«é¢ããã©ã¹ã¿æ
å ±ãä¿åããã®ã§ã¯ãªããããã°ãã¹ããŒããããæç»ãã-æ²ç·ã®ãã¯ãã«è¡šçŸããçŽæ¥æç»ããããšãã§ããŸãã åé¡ã¯ãããã©ãŒãã³ã¹ãæãªãããšãªãæ²ç·æ
å ±ãã°ã©ãã£ãã¯ã«ãŒãã«è»¢éããããšãæ¯èŒçé£ããããšã§ãã åæ§ã®æ¹æ³ã説æããèšäºãããã€ããããŸãã
ãã¯ã¿ãŒãã¯ã¹ãã£ã䜿çšããGPUããã¹ãã¬ã³ããªã³ã° [3]ãMicrosoftã«ãç¹èš±ããããŸãã
èŠããã«ãäžçªäžã®è¡ã¯æ¬¡ã®ãšããã§ãã
ã·ã³ãã«ãã»ã«ã«åå²ããã»ã«ããšã«ãç°ãªãè§åºŠã§çºå°ããããã®ã»ã«ãšäº€å·®ããå
ç·ãšæ²ç·ã®äº€å·®ç¹ã®ããããäœæããŸãã 亀差ç¹ã®æ°ãšããããã®äº€å·®ç¹ãçºçããè·é¢ã調ã¹ãŸãã æ²ç·ããŒã¿ã¯ãããžãšæ²ç·ã®åº§æšãèšå®ããããããã¡ãã®ãã¯ã¹ãã£ãšããŠä¿åãããŸãã 1ã€ã®ããžã§æ²ç·ã¯ããã®æ²ç·ã®æ¬¡æ°ã«å¿ããŠ3ãŸãã¯4ãã©ã¡ãŒã¿ãŒã§ãã 4çªç®ã®ãã©ã¡ãŒã¿ãŒãè¶
ãããšãéåžžãæ²ç·ã¯ååŸãããŸããã ã·ã§ãŒããŒã¯ãçŸåšã®ã¬ã³ããªã³ã°ãããã»ã«ãšãã®ã»ã«ã«ååšãããã¯ã¹ãã£ãã©ã¡ãŒã¿ãŒã«å¿ããŠãåç
§ãã¯ã¹ãã£ããå¿
èŠãªãã¯ã»ã«ãèªã¿åãããããã䜿çšããŠGPUã®æ²ç·ã®åæ圢åŒã埩å
ããŸãã
ãã¹ãŠããã©è²ã§ã¯ãããŸããã
ãã®ãããªã¢ãããŒãã®æ¬ ç¹ã¯ãæ¯èŒçå€æ°ã®ãã¯ã¹ãã£èªã¿åãæäœã䜿çšããããšã§ãã ã¢ãã€ã«ããã€ã¹ã§ã¿ãããŒãããã©ãŒã䜿çšããã·ã£ããŠã®ãªã¢ã«ã¿ã€ã ã¬ã³ããªã³ã°ãäœããã®æ¹æ³ã§åŠçããŸããããDependent Texture ReadsïŒDTS-ãã·ã¢èªã§äžè¬ã«åãå
¥ããããŠããã¢ããã°ã¯èŠã€ãããŸããã§ããïŒã¯ããã©ãŒãã³ã¹ã倧å¹
ã«äœäžãããŸããã éåžžã«ç²éãªå Žå-DTSã¯ããã¯ã¹ãã£ã®èªã¿åã座æšããã©ã°ã¡ã³ãã·ã§ãŒããŒã§ã®ã¿èªèãããããã«ãªããšãã€ãŸããã¯ã»ã«ãçŽæ¥ã¬ã³ããªã³ã°ãããšãã«çºçããŸãã éåžžããã©ã°ã¡ã³ãã·ã§ãŒããŒã§ã®ãã¯ã¹ãã£ã®é«éèªã¿åãã¯ãé ç¹ã·ã§ãŒããŒã®å®è¡çŽåŸã«ãã¯ã»ã«ã®ç¹å®ã®è£éããããã¯ã¹ãã£åº§æšãå€æãããšããäºå®ã«ãã£ãŠæ±ºãŸããŸããã€ãŸãããããªã«ãŒãã¯äºåã«ç®çã®ãã¯ã¹ãã£ãã¯ã»ã«ãèªã¿åãããã¯ã»ã«å€ããç¡æãã§æäŸããŸãã ã¢ã«ãŽãªãºã ãåäœãããã³äœæ¥ã®çšåºŠã¯ãäž»ã«ãããã®ã·ã§ãŒããŒãå®è¡ãããã¢ã€ãã³ã«ãã£ãŠæ±ºãŸããŸãã OpenGL ES 3.0+ã§ã¯ãDTSã®ããã©ãŒãã³ã¹ã®åé¡ã®å€§éšåã¯è§£æ±ºãããŠããããã§ãããçŸæç¹ã§ã¯ã¢ãã€ã«ããã€ã¹ã®çŽååãOpenGL ES 2.0ã§åäœãããããçŸæç¹ã§ã¯åªããããŒããŠã§ã¢ãæåŸ
ãã䟡å€ã¯ãããŸããã
ïŒ ãœãŒã¹2017幎2æ6æ¥ ïŒ
ç¹èš±ãååŸãããã€ã¯ããœããã®ã¢ãããŒãã§ã¯ã4ã€ã®ãã£ãã«ã䜿çšããŠã»ã«å
ã®ãã¯ã»ã«ã®è²ããšã³ã³ãŒãã§ããããšã¯æ³šç®ã«å€ããŸãã ãããŠãæåã«èå³ãæã£ãã®ã¯ããŸãã«ã«ã©ãŒãã¯ãã«ç»åã®ã¬ã³ããªã³ã°ã§ããã
ããã«çããæ¹æ³
äžèšã®æ¹æ³ã«ã¯ã次ã®æ¬ ç¹ããããŸãã
- ã¡ãã·ã¥äžè§åœ¢åå²æ³ã䜿çšããç»åã®å質ã¯ãäžè§åœ¢ã®æ°ã«å€§ããäŸåããŸããããã«ãããå²ãåœãŠãããã¡ã¢ãªãšãããªã«ãŒãã®è² è·ãå¢å ããŸãïŒå°ãããªãããé«å¯åºŠã®ã°ãªããã¯ãã¯ã¯ããã«æãããåããµã€ãºã®ãã¯ã¹ãã£ãããGPUã«è² è·ãããããŸãïŒã
- SDFãã®ãã®ã¯ããã«ãã«ã©ãŒèŠçŽ ãã¬ã³ããªã³ã°ããèœåãæå³ãããã®ã§ã¯ãããŸããã æ¡ä»¶ã®1ã€ã¯ãããã€ããªããœãŒã¹ã€ã¡ãŒãžã§ãã
- ããŸããŸãªãã¯ãã«ãã©ã¡ãŒã¿ãå®çŸ©ãããã¯ã»ã«ãžã®ãã©ã³ãã ã¢ã¯ã»ã¹ãã®æ¹æ³ã¯ãGPUåŽã§å€ãã®åŠçèœåãå¿
èŠãšããŸããç¹ã«ãè¿œå ã®ãã¯ã¹ãã£èªã¿åãã«å€ãã®æéãè²»ããããŸãã
ãããã£ãŠãç§ã¯åãSDFã®åçã«åºã¥ããŠããã«ãã«ã©ãŒã®ãã¯ãã«ã°ã©ãã£ãã¯ã¹ãã¬ã³ããªã³ã°ããããã®ãããã«ç°ãªãæ¹æ³ãæäŸããããšèããŠããŸããã
SDFã®Second Life
SDFã¯ãããã¹ãæåã®åè²ã¬ã³ããªã³ã°ãšå矩èªã«ãªããŸããã ãã ãããã¯ã¿ãŒç»åãã¢ãã¯ãã¬ã€ã€ãŒã®ã»ãããšããŠè¡šçŸããåãSDFãã¯ã¹ãã£ã䜿çšãããšãä»»æã®è€éããšè²ã®ãã¯ã¿ãŒç»åãæç»ã§ããŸãã ã€ãŸããåæã€ã¡ãŒãžãäžé£ã®ã¢ãã¯ãã¬ã€ã€ãŒã«åçŽã«åå²ããŸãã
äŸ-ã¬ã€ã€ãŒã«ã«ãããããã±ããŒã®äººæ°ã»ããã®ããã¯ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
ããã¯ãSVGãã¡ã€ã«ã®å€èŠ³ã§ãã ã¬ã€ã€ãŒã¯äºãã«éãªãåã£ãŠããªãããäºãã«ãçµåãããŠããããšã«æ°ä»ããããããŸããã Inkscapeã䜿çšããŠãã®ãããªãã¯ã¿ãŒç»åã衚瀺ãããšããããã®ã¬ã€ã€ãŒã®åæ§ã®ãããã³ã°ã«åºæã®ã¢ãŒãã£ãã¡ã¯ããæ確ã«è¡šç€ºãããŸãã
ã¢ãŒãã£ãã¡ã¯ãã®ååšã¯ããã¯ã¿ãŒã°ã©ãã£ãã¯ã¹ã®äœææ¹æ³ã«ãã£ãŠç°ãªããŸãããããã§ã¯ããã®ãªãã·ã§ã³ã䜿çšããŠã¿ãŸãããã
è¡åãã
ã¬ã€ã€ãŒããšã«ãç¬èªã®SDFãã¯ã¹ãã£ãäœæããSVGãã¡ã€ã«ã§ã®é åºãšåãé åºã§ã¬ã€ã€ãŒãéããŠã¿ãŸãããã
å·Šããå³-ã¢ã³ããšã€ãªã¢ã·ã³ã°ãæå¹ã«ããSVGã€ã³ããŒã¿ãŒããã¬ã€ã€ãŒããSDFãåæãã¯ã¹ãã£ãŒã®å¢å ã SVG Importerã¯InkscapeããSVGãé©åã«è§£æã§ããŸããã§ããããããã¯ãã€ã³ãã§ã¯ãããŸããã
äž¡æ¹ã®ãªããžã§ã¯ããéåžžã«è¿ãå Žåãéãã¯æ¬¡ã®ããã«ãªããŸãã
äžè§æž¬éïŒ
- äžè§åœ¢ã®æ°ïŒ-ïŒã«ãã£ãŠå¶éããããã£ã¬ããã®ç®ç«ã€ã°ã©ããŒã·ã§ã³
- åãçç±ã§ãžã§ã€ã³ãã«äºè£ãçºçããå¯èœæ§ããããŸãïŒ-ïŒ
- ã·ã£ãŒãã·ã£ãŒãã¢ã³ã°ã«ïŒ+ïŒ
- æå°éã®ãªãŒããŒãããŒïŒäºãã«éãªãåãåéæã®ãžãªã¡ããªïŒïŒ+ïŒ
- äžè§åœ¢ã®ç·äœç©-568
- å²ãåœãŠãããã¡ã¢ãª-44 Kb
ããSDFïŒ
- å€å
žçãªã¢ãããŒãã®çŽæ¥çãªæ¬ ç¹ã¯ãéãè§ã®æ倱ã§ãïŒ-ïŒ
- 倧å¹
ãªãªãŒããŒãããŒïŒ-ïŒ
- äžè§åœ¢ã®ç·æ°ã¯26ã§ãïŒãã¯ã¹ãã£ã¯åè§åœ¢ã«ã¯æãããŸããããã¢ã«ãã¡ã§ãã¯ã¹ãã£ãå²ãèªåçæãããã¡ãã·ã¥äžã«ãããŸããããåçŽãªãªãã·ã§ã³ãšããŠãåçŽã«ã¬ã€ã€ãŒã®æ°ã«2ãã€ãŸã10ã®äžè§åœ¢ãæããããšãã§ããŸãïŒïŒ+ïŒ
- ETC4ã䜿çšããŠå§çž®ããã256x128ã®3ãã£ãã«ãã¯ã¹ãã£ã ã¬ã€ã€ãŒã¯ãã£ãã«ã«æ²¿ã£ãŠæ£ãã°ã£ãŠããŸããã¬ã€ã€ãŒã®ãµã€ãºã¯128x128ã§ããã€ãŸããå¥ã®ãã£ãã«ã®ã¢ãã©ã¹ã®å·ŠåŽã«3ã€ã®ã¬ã€ã€ãŒãã¢ãã©ã¹ã®å³åŽã«2ã€ã®ã¬ã€ã€ãŒããããŸãã å²ãåœãŠãããã¡ã¢ãª-16 KbïŒ+ïŒ
ä»ã®ãã¹ãŠã®æ¹æ³ãšæ¯èŒããå Žåã®ãã®æ¹æ³ã®äž»ãªæ¬ ç¹ã¯ã倧å¹
ãªãªãŒããŒãããŒã§ãã ãã®ããã¯ã¹ãæç»ããã«ã¯ã4ã€ã®ãã«ãµã€ãºã¬ã€ã€ãŒãéããŠé
眮ããããã«5çªç®ã®ã¬ã€ã€ãŒã«å°ããªåè§åœ¢ïŒå°ããªããã·ã¥ïŒãé
眮ããå¿
èŠããããŸãã ææªã®å ŽåããªãŒããŒãããŒã¯ãã¯ãã«ç»åã®ã¬ã€ã€ãŒæ°ã«æ£æ¯äŸããŸãã ããã€ã¹ã®è§£å床ãé«ãã»ã©ãã¬ã³ããªã³ã°ãé
ããªããŸãã
ãã ããSVGãã¡ã€ã«ãã¡ãã·ã¥ã«è§£æããããã®ã»ãšãã©ã®ããã±ãŒãžãšã¯ç°ãªããäºåã«æºåããããã¯ã¹ãã£ã¯ããªãå°ãªãã¹ããŒã¹ãå æããŸãã ãã®ç¹ã§ãScaleformã¯ããã«é²åããŸãããã·ãŒã³ãããŒããããšãã«ãäºåã«äœæããããã¡ã€ã«ã§ã¢ããªã±ãŒã·ã§ã³ã¢ãŒã«ã€ããè©°ãŸãããããšãªãããã¹ãŠã®ã¡ãã·ã¥ããã®å Žã§çæããŸããã æ¯èŒã®ããã«ãåæããã¯ã¹ãµã€ãºã¯4 Kbã®ããã¹ãã§ããã€ãŸãããã¯ãã«ç»åã®ã¹ã ãŒãžã³ã°ã§äºåã«çµã¿ç«ãŠãããã¡ãã·ã¥ã¯ããã®ãã¯ãã«åœ¢ç¶ãèšè¿°ããçã®ããã¹ãã®11åã®ã¹ããŒã¹ãå æããŸãã
ãªãã·ã§ã³ã¯äœåããããŸã
ç§ã¯ãŸããã«ã©ãŒç»åãSDFãã¥ãŒã«å€æããå¥ã®æ¹æ³ãèŠã€ããŸããã [6]äžçªäžã®è¡ã¯ãè²ã«ããããã¬ãŒã³ã䜿çšããããšã§ãã ãããã«ãŒãã¯ãè²ã®æããããããåäœã§ã¬ã€ã¢ãŠãããŸãã
ã€ãŸããèŒåºŠããããé çªã«ååŸãããåå¥ã®ãã€ããªãã¯ã¹ãã£ã«å
¥ããããŸãã 8ã€ã®ãã¯ã¹ãã£ãå¿
èŠãªç»åãã£ã³ãã«ã¯1ã€ã ãã§ãã ã€ãŸããéæ床ã®ãªãã«ã©ãŒç»åããšã«24ã®ãã¯ã¹ãã£ã§ãã
ããã«é²ãã§ãããããã®ãã€ããªãã¯ã¹ãã£ã8ãããSDFãã¯ã¹ãã£ãšããŠæ瀺ãããšãåæç»åãå®å
šã«è¡šçŸããã«ã¯ã24åã®8ããããã¯ã¹ãã£ãå¿
èŠã§ããããšãããããŸãïŒ24åã®ã·ã³ã°ã«ããããã¯ã¹ãã£ã§ã¯ãªãããããã«ãŒãã«å解ããçŽåŸã«ååŸãããŸãïŒã
SDFåŠçããããããã«ãŒãããåæã«ã©ãŒç»åã埩å
ããããã»ã¹ã¯æ¬¡ã®ãšããã§ãã
- åãã£ãã«ã®åããããããã«ã€ããŠãçŸåšã®SDFãã¯ã»ã«å€ããã§ãã¯ãããŸãã
- 0.5æªæºã®å Žåãå
ã®ãããã¯1ã§ããã0ãã倧ããå ŽåïŒãã®å Žåã®0.5ã¯æœè±¡å€ã§ããã8ãããæŽæ°ã127ã®å€ãšæ¯èŒãããŸãïŒ
- ãã¹ãŠã®ãããã®ãã¹ãŠã®å€ãé çªã«åéãããåãã£ãã«ãåå¥ã«åŸ©å
ãããŸãã ããšãã°ãèµ€ãã£ãã«ã®çŸåšã®ãã¯ã»ã«ã®ãããå€ã01110011ã§ããå Žåãèµ€ãã£ãã«ã®èŒåºŠã¯115ã§ãã
- åãæ¹æ³ã§çŸåšã®ãã¯ã»ã«ã®ãã¹ãŠã®ãã£ãã«ãééããŸãã
- 3ã€ã®ãã£ãã«ã§è²ã®å€ã埩å
ããŸãã
ãã®ã¢ã«ãŽãªãºã ã¯éåžžã«æ³šæãå¿
èŠã§ãããå®éãå質ã¯è¯ããããŸããã
ã¢ãŒãã£ãã¡ã¯ãã¯ãã«ã©ãŒãã£ã³ãã«ããããåäœã®ã³ã³ããŒãã³ãã«ã«ããããããšã§ãSDFãã¯ã¹ãã£ã®çž®å°ã³ããŒã®ä¿åäžã®ç²ŸåºŠäœäžã®åé¡ãæªåãããšããäºå®ã«ãã衚瀺ãããŸãã ç§ã®æèŠã§ã¯ããã®æ¹æ³ã¯ãã®çç±ã®ããã«ç¹ã«é©çšãããŸããã ãããããã1ã€ã®æ¬ ç¹ã¯ã1ã€ã®ãªãªãžãã«ã«ã©ãŒç»åã«24åã®8ãããSDFãã¯ã¹ãã£ãä¿åããå¿
èŠãããããšã§ãã
ãŸãšã
ããã«äœ¿çšã§ããæ°ãããœãªã¥ãŒã·ã§ã³ãæäŸããããšã¯ã§ããŸãããããã¹ããŒãã³ã°ã®ãã¬ããã䜿çšããŠSDFãšã³ã³ãŒãã£ã³ã°ãäœæããããã®ã¢ã€ãã¢ãšè©Šã¿ããããŸããããã«ãããããŸããŸãªãã£ãã«ã®å€æ°ã®ç°ãªããã¯ã¹ãã£ãä¿åãããªãŒããŒãããŒãæžããããšãã§ããŸã
èšäºã¯ãã§ã«éåžžã«å€§èŠæš¡ã§ããããšãå€æãããããã³ã³ãã³ãã倧å¹
ã«åæžããå¿
èŠããããŸããã ç§ãèšããªãã£ãããšããïŒ
- Signed Distance Field
- UTF-8 SDF
- GPU text rendering with vector textures
- Sharp Corners with Signed Distance Fields Fonts
- Shape Decomposition for Multi-channel
Distance Fields - Signed Distance Field rendering of color bit planes