ããã¯ç°ç«¯ãããããŸããããç§ã¯ããã«ã¢ã€ãã¢ãæãããã人ã ã«è¡ãŸã¿ãã®æ®ºäººãå«ã°ããŸã...ãªããžã§ã¯ãããŒã¹ã§ã¯ãªãé åããŒã¹ã®è¡åã§æšæºåããå¯èœæ§ãèããããšããããŸããïŒ WebGLã¯ãã»ãšãã©ã®é ç¹/ãã¯ã¹ãã£/ãã®ä»ã®APIã«é åãæ³å®ããŠããŸãã ãã¬ãŒã³ãªå€ãé åãŸãã¯ãã€ãã£ãé åãæšæºåããæ¢åã®ãšã³ã·ã¹ãã ã¢ãžã¥ãŒã«ããããããããŸãïŒäŸïŒhttpsïŒ//github.com/toji/gl-matrixïŒãå€ãã®ãã©ãŠã¶ãŒããã©ã°ã®èåŸã§ããŒããŠã§ã¢SIMDããµããŒãããŠããããšãèãããšãgl-matrixã¯çŽ æŽãããã§ãããã ãããã³éããªãå©çšå¯èœã«ãªãäºå®ã§ãïŒå®éãgl-matrixã¯çŸåšãããå éšçã«ãµããŒãããŠããŸãïŒã
ããã¯pixiã®å€§èŠæš¡ãªãã©ãã€ã ã·ããã§ãããäžäœäºææ§ãå®å šã«å£ãããšã«ãªããšæããŸã...ããã§ãããããæšãŠãŠã人ã ãã©ãæããããããŠåœŒãããã®ã¢ã€ãã¢ãã©ãã ã/å°ãå«ãããèŠããã£ãã®ã§ã;ïŒ
1ïŒSIMDã¯æ»ãã§ããŸãã https://github.com/rwaldron/tc39-notes/blob/a66df6740eec3358d5e24f81817db99d6ee41401/es8/2017-03/mar-21.md#10if -simdjs-status-update
2ïŒåçŽãª6ã€ã®ãã£ãŒã«ããaãbãcãdãtxãtyãã¯ãFloat32ArrayïŒ9ïŒè¡åãããã¯ããã«åªããããã©ãŒãã³ã¹ãçºæ®ããŸãã ã«ã³ãã¯ãã¹ããžã®ãªã³ã¯ãæäŸããŸãããç§ãš@GoodBoyDigitalã®äž¡æ¹ããã§ã«ãããçµ±åããããšããŸããã
3ïŒJSã¯å粟床ãå®è¡ããŸããããã¯ã倧ããªåº§æšã§åäœããã¢ããªã«ãšã£ãŠéèŠã§ãã ã°ã©ãã£ãã¯ã¹ãšã¹ãã©ã€ãã®ããããžã§ã¯ã·ã§ã³xãã©ã³ã¹ãã©ãŒã ãã¯ãJSåŽã«é 眮ããããšããå§ãããŸãã
ç§ã¯v5ã§Float32ArrayïŒ9ïŒã䜿çšããŠããŸããããã¯ãjsperfãã¹ãã§ã¯ãåãããã©ãŒãã³ã¹ã§ã¯ãªãã«ããŠãé¡äŒŒããŠãããtoArrayã転眮æäœãè¡ãå¿ èŠããããŸããã
gl-matrix
ã¯SIMDïŒIvanãè¿°ã¹ãããã«ãããã¹ããã¯ã§ãïŒãæã£ãŠããã®ã§æçã§ããããããã®å®è£
ã«ãæ¬ ç¹ããããŸãã 3x3è¡åïŒ Float32Array(9)
ïŒãGPUã«ãããããããã®ã§ãããèšç®æéãç¯çŽããããã«ã2Dè¡åã§ãããã®ããã«æäœãå®è¡ããŸãã gl-matrix
ã¯ããã®ããã®é©åãªã¡ã«ããºã ããããŸããã
v5ããŒãžã§ã³ã¯ãGPUã«çŽæ¥ã¢ããããŒãã§ããã¹ãã¬ãŒãžã䜿çšããã ãã§ãªããé¢å¿ã®ãã2DããŒãã§ã®ã¿åäœããŸãã ãŸããSharedArrayBuffersããã®ä»ã®æé©åã䜿çšã§ããããã«èšå®ãããŠãããããWebã¯ãŒã«ãŒã«ããå€ãã®äœæ¥ãè¡ãããšãã§ããŸãã ããã§ã©ããŸã§å°éã§ããããèŠãŠãããŸãã
@englercjäžè²«æ§ãä¿ã€ããã«ãå€ãã®å Žæã§Math.froundã䜿çšããå¿ èŠãããã®ã§ã¯ãªãããšæããŸãã perfFloat64Arrayãè©ŠããŠãã ããã
Float64Arrayã«ããããšãã§ããŸãããã¢ããããŒãããã«ã¯å粟床ã«ããŠã³ãµã€ãºããå¿ èŠããããŸãã GPUã«ã¢ããããŒããããšãã¯ãçŸåšfloat32ã䜿çšããŠããããšã«ã泚æããŠãã ããã ãããã£ãŠãèšç®ã2åå®è¡ããŠããã1åã«åãæšãŠãŸãã ããã¯ããã¹ãŠã1ã€ã§è¡ããããæ£ç¢ºãããããŸããããã¢ããããŒãããããŒã¿åãšäžè²«æ§ãä¿ã€ããã«åªããããšæããŸãã æ®å¿µãªãããããã¯GL 4.0ãŸã§ã¯å粟床ãæå³ããWebGL2ã¯GLES3.0ã®ã¿ã§ã:(
ãããªãã¯ã¹ã®ã¢ããããŒããããã«ããã¯ã«ãªãããšã¯ãããŸããã§ããããããã®å Žæã§ã¯ãuniform3fvãã䜿çšããŸããããã¯ç°¡åãªæäœã§ã¯ãªãããã®åŸã«drawCallãç¶ããã»ãšãã©ã®å Žåã倧ããªãããã¡ãŒã®ã¢ããããŒããç¶ããŸãã éãpixiã¢ããªã¯ããã¬ãŒã ããšã«çŽ400åã®ãããŒã³ãŒã«ããå®è¡ããŠããŸããã
倧ããªåº§æšã§ãŠãŒã¶ãŒã®åé¡ã«ééããåŸãã¢ããããŒããããŸã§ãã¹ãŠãå粟床ã§ä¿åããããšã奜ã¿ãŸãã
ãŸãããaãbãcãdãtxãtyãè¡šèšã¯ãã0,1,3,4,6,7ããããæžã蟌ã¿ãšèªã¿åããç°¡åã§ãã èæ€ã§ã䜿çšããããã®äžã«éåžžã«æŽç·Žãããå€æããããŸãã ãããªãã¯ã¹ã«åãæ¿ãããšãåŸã§ã³ãŒãããã§ãã¯ããã®ã¯ããã»ã©ç°¡åã§ã¯ãããŸããã è¡åæŒç®ãæ³åããã®ãé£ãã人ãããŸãããç§ã¯ããããç°¡åã«èªã¿ãŸãã
UPDã ãŸããããã¯è¡åã®å€æ以äžã«åœ¹ç«ã€ãšæããŸãïŒ https ïŒ
UPD2ã ãããã3Då€æã®å ŽåãFloat32ArrayïŒ16ïŒã®æ¹ãåªããŠããã®ã§ãå察ããã€ããã¯ãããŸããã
ç§ã®æ祚ã¯ãæé«ã®ããã©ãŒãã³ã¹ãæäŸãããã®ã«è¡ããŸãã æåŸã«ãé åäžã®ãªããžã§ã¯ãã䜿çšããŠãã§ãã¯ããæ¹ãé«éã§ããã ããããŸã æ¬åœãã©ããã¯100ïŒ ããããŸããããããã¯ããããå€ãã£ããããããŸããïŒ
3Dã®å Žåãäž»ã«GPUã«å€§éã«ã¢ããããŒãããããããgl-matrixã¹ã¿ã€ã«ã奜ãã§ãã Pixiã§ã¯ãããã¯äžè¬çã«ã¯åœãŠã¯ãŸããŸããã ã»ãšãã©ã®æäœã¯jsã©ã³ãã§è¡ãããŸãïŒäŸïŒã¹ãã©ã€ããããã£ãŒïŒã
https://jsperf.com/obj-vs-array-view-access/1
ãããç§ãè¡ã£ããã¹ãã§ãã ãªããžã§ã¯ãã¯ãæ¹æ³é
ãéåžžã®é
åãããã©ã¡ãããFloat32Arrayãããé
ãã§ãuniform3fv
ã¯éåžžã®Array
ãªããžã§ã¯ããåãå
¥ããã®ã§ãããã«åãæ¿ããå¿
èŠããããŸãã
ç·šéïŒ Array
çµæã¯ãŸããã ã£ãããã§ãããåçŸã§ããŸãããïŒ
ç§ã®æ祚ã¯ãæé«ã®ããã©ãŒãã³ã¹ãæäŸãããã®ã«è¡ããŸãã
æåŸã«ãé åäžã®ãªããžã§ã¯ãã䜿çšããŠãã§ãã¯ããæ¹ãé«éã§ããã
ããã¯ãšãŠãèå³æ·±ãã§ãã åºã«ãªãvmã¯ããªããžã§ã¯ãã®ã»ãã³ãã£ã¯ã¹ãå€§å¹ ã«åé€ãããå¯èœæ§ãããããšãç¥ã£ãŠãããããå€ãã®æé©åãå®è¡ã§ããã¯ããªã®ã§ããªããžã§ã¯ããçŽç²ãªæ°å€é åãããé«éã§ãããšããã®ã¯çŽæã«åããŠããããã§ãã _ãªã_ãªããžã§ã¯ãã®æ¹ãéãã®ããäœãã¢ã€ãã¢ãããã°ç¥ãããã®ã§ããã
ç§ã®ã³ã³ãïŒi7ãWindows 10ïŒããã®é¢é£ããçµæïŒ
Chrome 59ïŒ
Firefox 54.0.1ïŒ32ãããïŒïŒ
Microsoft Edge 40.15063.0.0ïŒ
Array
æ¹ãéããšããç§ã®ã¯ãã ã®çµæã¯ãŸããã ã£ãããã§ãããããäœã§ãã£ããã¯ããããŸããããä»ã¯åçŸã§ããŸããã çŽ5,000äžops / sã§ããã以åã«è¡ã£ã1åã®å®è¡ã§ã¯5åops / sã§ããã å€...
ãããã«ãããFloat32Arrayã¡ã³ããŒã¯ããã¹ãŠã®ãã©ãŠã¶ãŒã§ãªããžã§ã¯ããšåãé床ãŸãã¯ãªããžã§ã¯ããããäžè²«ããŠé«éã§ãã ãããç§ããããåãæ¿ããçç±ã§ããããã¯ä»¥åãšåãé床ïŒãŸãã¯ããéãïŒã§ãããä»ã§ã¯ã¢ããããŒãã®ããã«é åã転眮ããŠåããããšãé¿ããŠããŸãã
Float64ã§ãåãããšãã§ããŸããïŒ :)
ç§ã¯ãdrawcallããšã«çŽ1ã€ä»¥äžã®è¡åæŒç®ãããã³ãŒãå質ã«é¢å¿ããããŸãã
ãŸããå転ã¯ããŸã䜿çšããŸããã updateTransformïŒïŒãåé¡ã§ãã
ç§ã¯ãdrawcallããšã«çŽ1ã€ä»¥äžã®è¡åæŒç®ãããã³ãŒãå質ã«é¢å¿ããããŸãã
Float64Arrayã®ã³ãŒãå質ã¯ã©ã®ããã«é«ããªã£ãŠããŸããïŒ ç²ŸåºŠãäžããããšã¯ç解ããŠããŸããããšã«ããå粟床ã«æžããããšãèãããšããªããããããã»ã©éèŠãªã®ããç解ã§ããŸããã
ãŸããå転ã¯ããŸã䜿çšããŸããã updateTransformïŒïŒãåé¡ã§ãã
ããã¯ãããŒã¿ã¹ãã¬ãŒãžã®èªã¿åã/æžã蟌ã¿ã®ãã³ãããŒã¯ã§ããããã®éã®å€ã«å¯ŸããŠå®è¡ãããæäœã¯ç¡é¢ä¿ã§ãã
ç§ã¯ãdrawcallããšã«çŽ1ã€ä»¥äžã®è¡åæŒç®ãããã³ãŒãå質ã«é¢å¿ããããŸãã
ç§ãããã«åæããŸãã é åããŒã¹ã®è¡åãç¹ããã¯ãã«ã®ãæšæºåãã¯ãå®éã«ã¯ããã©ãŒãã³ã¹ãããã³ãŒãå質ã®åäžã«ã€ãªããå¯èœæ§ãããããšãèæ ®ããŠãã ãã...人æ°ã®ããjsè¡å/ãã¯ãã«ã©ã€ãã©ãªã®åå©çšãšã人æ°ã®ããã¬ã³ããªã³ã°ã¢ãžã¥ãŒã«ãšã®çžäºéçšæ§ã®åäžãæ€èšããŸã倧ããªã³ãŒãå質ã®åå©ã«ãªãããã«ã
ããã¯ãããŒã¿ã¹ãã¬ãŒãžã®èªã¿åã/æžã蟌ã¿ã®ãã³ãããŒã¯ã§ãã
é¢ä¿ã®ãªãäžéã®å€ã«å¯ŸããŠå®è¡ãããæäœã
ç§ã¯ããªããäž¡æ¹ãšãæ£ãããšæããŸãã ããã¯ãããŒã¿ã¹ãã¬ãŒãžã®èªã¿åã/æžã蟌ã¿ã®äžè¬çãªãã³ãããŒã¯ã§ãã ããããIvanã«ã¯æ¬åœã«è¯ãç¹ããããŸãã updateTransform()
ãå§åçãªæäœã§ããå Žåãããã確èªããããšã¯èª¬åŸåããããŸãã
ç§ã¯äžè¬çã«ãã€ã¯ããã³ãããŒã¯ã«ã€ããŠå¿é ããŠããŸãã ãããã®éçããŒã¿ã»ããã䜿çšãããšããããã®ãã¹ãã§javascriptvmsã®ã³ã³ãã€ã©æé©åã誀ã£ãŠå©çšããŠããŸãã®ã§ã¯ãªãããšæããŸãã å®éã®ãã¹ããå®è¡ããããšã¯ãã¯ããã«åçºçã§ãïŒã»ããã¢ããã«ã¯ããã«å€ãã®äœæ¥ãå¿ èŠã«ãªããšããç ç²ãæã£ãŠïŒã
ç§ãããã«åæããŸãã é åããŒã¹ã®è¡åãç¹ããã¯ãã«ã®ãæšæºåãã¯ãå®éã«ã¯ããã©ãŒãã³ã¹ãããã³ãŒãå質ã®åäžã«ã€ãªããå¯èœæ§ãããããšãèæ ®ããŠãã ãã...人æ°ã®ããjsè¡å/ãã¯ãã«ã©ã€ãã©ãªã®åå©çšãšã人æ°ã®ããã¬ã³ããªã³ã°ã¢ãžã¥ãŒã«ãšã®çžäºéçšæ§ã®åäžãæ€èšããŸã倧ããªã³ãŒãå質ã®åå©ã«ãªãããã«ã
ç§ã¯ "ïŒaãbïŒãïŒcãdïŒãïŒtxãtyïŒ"å粟床è¡åã䜿çšããŠãããã¢ããããŒãçšã«float32arrayã«å€æããã "posXãposYãpivotXãpivotYãscaleXãscaleYã ShearXãshearYãrotZ "ã ãšã«ãããã©ãŒã¯ã§äœ¿çšããŸããããã¹ã¿ãŒpixiã§ãè¡åé åãæ±ããããªãã§ãã ãããç§ã®æšæºã§ãã
ãŸããjsã®vecæ°åŠã«1ã€ãŸãã¯2ã€ã®æšæºã䜿çšãããããšãå¯èœãã©ãããçåã§ãã
Float64Arrayã®ã³ãŒãå質ã¯ã©ã®ããã«é«ããªã£ãŠããŸããïŒ ç²ŸåºŠãäžããããšã¯ç解ããŠããŸããããšã«ããå粟床ã«æžããããšãèãããšããªããããããã»ã©éèŠãªã®ããç解ã§ããŸããã
updateTransformã§ã¯ãã«ã¡ã©å€æã«ã¹ãã©ã€ãå€æïŒã¹ã¯ããŒã«çšïŒãæããŸãã çµæã¯å°ããå Žåã«ã®ã¿ç»é¢ã«åãŸããããæçµçã«ã¯æ°å€ã¯å°ãããªããŸãããã¹ãã©ã€ãã®äœçœ®ãšã«ã¡ã©ã®äœçœ®ã®äž¡æ¹ã倧ãããªãå¯èœæ§ããããŸãã ãŠãŒã¶ãŒåŽã®ãœãªã¥ãŒã·ã§ã³ïŒ
1ïŒåœŒã®åŽã§ãã¹ãŠãèšç®ããŸãã PIXIã¯æ¯èŒçå°ããªåº§æšã®ã¿ãæ±ããŸãã
2ïŒäžçã倧ããªåº§æšãæã€ãã£ã³ã¯ã«åå²ããŸããã¹ãã©ã€ãã«ã¯æ¯èŒçå°ããªåº§æšããããŸããããµããã¯ã»ã«ã«ã¡ã©ã§ã¯æ©èœããŸãã=>ã«ã¡ã©ã«ã¯å€§ããªåº§æšãšå°ããªåº§æšãå¿
èŠã§ãã
倧ããªãããžã§ã¯ãã®å Žåã¯ãŠãŒã¶ãŒã«èªåã®åŽã§ããã匷å¶ããããšã¯åé¡ãããŸããããå°ããªãããžã§ã¯ãã®å Žåã¯ãã1ã€é çãããŸãã
ãŸããjsã®vecæ°åŠã«1ã€ãŸãã¯2ã€ã®æšæºã䜿çšãããããšãå¯èœãã©ãããçåã§ãã
æå³ãããããŸãããã詳ããæããŠããã ããŸããïŒ
æå³ãããããŸãããã詳ããæããŠããã ããŸããïŒ
ç§ã«ã¯ã§ããŸãããããã¯ç§ã«ã¯å€ãããŸãã
äœã¬ãã«ã®æé©åã®äž¡æ¹ã§ç°ãªãçµéšãæã€äººã ãããŸãã ããã³èšèªæ§é ãDSL-sã ããã¬ãã«ã§ç§ãã¡å šå¡ãæºè¶³ãããæšæºãå¿ èŠã§ãã
éå»2幎éã§ãç°ãªãå€æã䜿çšããŠpixiã®2ã€ã®ãã©ãŒã¯ïŒv3ãšv4çšïŒãäœæããŸãããç¬èªã®é«åºŠãªå€æãåãããpixi-spineããæ±ã£ãŠããã3çªç®ã®ãã©ãŒã¯ãäœæããŠããŸãã ãéå»ã®ivanãã®èŠ³ç¹ããã¯ãé åã¯æãåçŽãªåœ¢åŒã§ããããgl-matrixãããããããæé©ã§ãã
64ããããç¶æããããšãéèŠã§ãããšãã@ivanpopelyshevã«åæããŸãã ãã¬ãŒã ããšã«ãããã¡ãäœæããã³ã³ããŒããã«ããããå¹ççã«è¡ãæ¹æ³ãç解ããããšããŠããŸãã
ãã¶ããããFloat64ArrayãšããŠä¿åããã¢ããããŒããããšãã«Float32Arrayã«ã³ããŒããŸãã ããã«ãããå°ãªããšããåä»ãé åãã¹ãã¬ãŒãžãããã³ã°ãšããŠäœ¿çšã§ããããã«ãªããŸããããã«ãããWebworkerãšã®éã§ç°¡åã«ã³ããŒã§ããããã«ãªããŸãã
Float64Arrayã¯ãïŒ0,1ïŒãïŒ3,4ïŒãïŒ6,7ïŒãXãYãtranslateãšããŠäœ¿çšããããšãèŠããŠããå¿ èŠããããŸãã
ãã¹ãŠã®èå³æ·±ãã¹ã¿ãããç§ã¯ç§ãã¡ãææ¡ãããœãªã¥ãŒã·ã§ã³ãå®éã®pixiã·ããªãªïŒãããŒããŒã¯ã®ãããªãã®ïŒã§ãã³ãããŒã¯ããããšãåæããŠããŸãã
ãã®åéã§ã®ç§ã®çµéšã§ã¯ãç§ãš@ivanpopelyshevãæåŸã«ãããŒããŒã¯ã®gl-matrixã«åãæ¿ãããšããå®è¡é床ãå€§å¹ ã«é ããªã£ãŠããããšãããããŸããïŒ3åã®1é ãããã«ïŒïŒ
ããã¯å°ãåã®ããšã§ããããç§ã¯ããã§ééã£ãŠããããšãæ¬åœã«æãã§ããŸãïŒ
é床差ãç¡èŠã§ããããã«ãªã£ãå Žåãäžèšã®ææ¡ãããã«ãŒãã¯ãšãŒã¹ã«ãªããšæããŸãã
Pixiã¯é«éã§ãïŒPãœãªã¥ãŒã·ã§ã³ã«å®å šã«ã³ãããããåã«ããã¹ãã確èªããŸãããã
Float64Arrayã®ãã³ãããŒã¯ã¯ãŸã å¿ èŠã§ãã ãã®å®è£ ã¯ç§ã«ã¯åãå ¥ããããŸãããå人çã«ã¯ãã©ãŒã¯ã§å€ããããªãã¯ã¹ã䜿çšããŸãã ãŸããäºææ§ã®ããã ãã«ããããã£ãè¿œå ããããšãå¿ããªãã§ãã ããã
ããäžã€ã¯ïŒ@mreinsteinãç§ã¯èŠããŠããªãstandartsã®äžã€ã¯PaperScriptãpaper.jsã®ããã«ãã®èšèªã®ç¹å¥ã§ãèšèªã«çŽæ¥å°æ°ç¹æŒç®ãè¿œå ããŸãã JSã«ã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ãŒããã£ãšããå Žåã¯ããã®ãããªãã®ã䜿çšããŸãã
reïŒãã®æŽæ°ããããããŒããŒã¯ã«ã€ããŠç§ãæå©ãã§ããããšã¯ãããŸããïŒ ããã§æéãå¯ä»ã§ããŠããããã§ãã
ããã§èµ·ãã£ãŠããããã©ãŒãã³ã¹ãšäžç·ã«ãã©ããŒããããšã«éåžžã«èå³ããããŸãã çµæã«é¢ä¿ãªãã é åããŒã¹ã®ãã®ããŸã ããªãé ãããšã«ãªã£ãå Žåãç§ã¯ãã®èåŸã«ãã_çç±_ã«ã€ããŠæ¬åœã«èå³ããããŸãã
泚æãã¹ãç¹ïŒããã©ãŒãã³ã¹ãã¹ã... chromeã®v8ã¯æè¿ïŒv59ã§ïŒã¿ãŒããã¡ã³ãšåŒã°ããv8ãžã®ããªãåçãªå€æŽããªãªãŒã¹ããŸããã ãããããããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŠããŸãã
https://v8project.blogspot.com/2017/05/launching-ignition-and-turbofan.html
ã¿ãŒããã¡ã³ãååšããåã®ããŒãžã§ã³ãšçŸåšã®ããŒãžã§ã³ã§æŽæ°ããããããŒããŒã¯ãå®è¡ããã®ã¯èå³æ·±ããããããŸããã
@GoodBoyDigitalãã³ããæŽæ°ããŠ
https://jsperf.com/obj-vs-array-view-access/1
ãšããžäžã§ã®ã¿ããªããžã§ã¯ãã®é床ã¯Float64ArrayãšäžèŽ/è¶ éããå®éã«æ¥è¿ããŠããŸãã
ç§ã¯èªåã®ç°å¢ã§ããããã¹ãããŸããããåæ§ã®çµæãåŸãããŸãã...äžäœäœã§ããïŒïŒ Float64é åã®èªã¿åã/æžã蟌ã¿ãåçã®Float32é åæäœãããå€§å¹ ã«é«éãªã®ã¯ãªãã§ããïŒ é ã«æµ®ãã¶å¯äžã®ããšã¯ã64ãããã®ãããŒããåèªã®å¢çã«æŽåããããšã§ãã ç§ã¯åœæããŠããŸãã
@mreinsteinã®ãªãã¡ãŒã
æè¯ã®æ¹æ³ã¯ã pixiããã©ãŒã¯ããŠãããå€æãgl-matrixãŸãã¯
次ã«ã埮調æŽãããããŒãžã§ã³ãã§ããããããã§ããã©ãŒãã³ã¹ããã¹ãã§ããŸãïŒ https ïŒ
ããŸããŸãªé
åã¿ã€ãããããããšãã§ããŸãã
@englercjããã¯çŽ æŽãããç·ã§ãïŒ ãããã®çµæã確å®ã«èŠãããšã¯å±ã¿ã«ãªããŸãã v5ããŒãžã§ã³ã¯ãããŒããŒã¯ãå転ãããããšãã§ããç¶æ ã«è¿ãã§ããïŒ
@mreinsteinã¯ãã ã®äºæã§ãã64ããã-> 32ãããããã®å€æã«é¢ä¿ããŠããã®ã§ã¯ãªãããšæããŸã
jsã®æ°å€ã¯64ââãããã§ãããïŒ
@GoodBoyDigitalå€åããªããæ£ãããšæããŸãã ç§ã®å人倫人ã«é Œãã ã°ãŒã°ã«ãç§ã¯ããã«åºããããŸããïŒ
https://stackoverflow.com/questions/15823021/when-to-use-float32array-instead-of-array-in-javascript
æé«è©äŸ¡ã®åçïŒçŸåš44祚ïŒã¯åççã§é¢é£æ§ãããããã§ãã
ããªããããã€ãã®ããã©ãŒãã³ã¹ãã¹ãã§ç§ãã¡ãå©ããããšãã§ããã°
äºè§£ããŸãããåãã§ãæäŒããããŠããã ããŸãã :)
æåã®æ¹æ³ã¯ãã©ãŒã¯ãã¯ã·ã§ã
@GoodBoyDigital @englercjãã®æç¹ã§ãã©ãŒã¯ããã®ã«æé©ãªãã©ã³ãã¯äœã§ããïŒ
次ã«ãå€æãgl-matrixãŸãã¯@englercjè¡åã¯ã©ã¹ã«çœ®ãæããŸãã
ãã®å Žåããšã³ãžã³å šäœã§ã¯ãªããã¹ãã©ã€ãããããæ©èœãããå¿ èŠããããŸãã
ããã«ã€ããŠããå°ã詳ãã説æããŠããã ããŸããïŒ ããã©ãŒãã³ã¹ãã³ããå®è¡ããããã ãã«ãšã³ãžã³å šäœãgl-matrixã«å€æããããããŸãã... httpsïŒ//github.com/pixijs/bunny-markã«ã¹ãã©ã€ããããã®ãã®ããããŸãããããŒãè¿œå ãããã«ãŒãèŠçŽ ãšããŠã®PIXI.Containerã pixi.containerãpixi.spriteããå§ããŠãããããäŸåé¢ä¿ããªãŒãéæ¹åã«ç§»åããŠãå€æèŠçŽ ã眮ãæããå¿ èŠããããã¹ãŠã®å ŽæãèŠã€ããå¿ èŠããããšèšã£ãŠããŸããïŒ åæããªããšèšã£ãŠããã®ã§ã¯ãªããäžèŠãªäœæ¥ãæå°éã«æããããã®æŠç¥ãæ£ããããšã確èªãããã ãã§ãã
updateTransformã«ã¯ã次ã®2ã€ã®è¡åæŒç®ããããŸãã
Float64Arrayã«è£æã¡ãããå€ããaãbãcãdãtxãtyãããããã§è¡åã¯ã©ã¹ãäœæããupdateTransformãæžãçŽãããšããå§ãããŸãã ãŸãã @ mreinsteinã¯ã³ã¢ã«ãªãã®ã«ååãªãã®ãäœæããŸããã圌ãè¿œå ããããšããå§ãããŸããããããã°ã圌ã¯ãã©ã³ãã«ã¢ã¯ã»ã¹ããŠãã¡ãŒã ãæ§ç¯ã§ããŸãã
ã ãã圌ã¯æã«ã¢ã¯ã»ã¹ããŠèŸ²å Žã建ãŠãããšãã§ããŸãã
誰ããããã«ã¢ã¯ã»ã¹ã§ããfork + PRããã¹ãŠãè¡ããŸãã
ãããŒããŒã¯ã§ã©ã®ãããªçµæãåŸãããã®ãèå³ããããŸããããã©ã«ãã®100kãããŒã§ChromeããããŸããŸãªãã©ã³ãïŒéçºããªãªãŒã¹ããã®ä»ïŒãè©ŠããŠã¿ããšãäžè²«ããŠ10ã16fpsãåŸãããŸãã 8.75ç§ãè¶ ããŠå®è¡ãããŠããã³ãŒãã§ããã©ãŒãã³ã¹åæãå®è¡ããïŒ
ã»ãšãã©ãã¹ãŠã®æéã¯javascriptã®åŒã³åºãã«è²»ããããŸãã
javascriptã«è²»ãããããã®æéã®ãã¡ãæéã®å€§éšåã¯å®éã«ã¯Sprite.calculateVertices()
ã«è²»ããããŠããŸãã TransformStatic.updateTransform()
è²»ããããããã4åå€ã
Firefoxã§ã¯ããã¬ãŒã ã¬ãŒããçŽ2åã«ãªããŸãããè²»ãããæéã®å
èš³ã¯äŒŒãŠããŸãã calculateVertices()
ã¯ãäž¡æ¹ã®ãã©ãŠã¶ã§å€§éšåã®æéãå ããŸãã ããã¯äºæ³ãããŸããïŒ ãããŒããŒã¯ã®å®è¡ã§ãåæ§ã®çµæãåŸãããŠããŸããïŒ
ããã¯ãããŒã«æåŸ ãããŠããŸãã ãããŠãç§ãã¡ã話ããŠããè¡åæŒç®ã¯ãä¹ç®çšã®upateTransformïŒïŒãšcALLããšã«1åã®flushïŒïŒã®2ã€ã®å Žæã§å®è¡ãããŸãã 倧èŠæš¡ã§ã¯åé¡ãããŸããã
ããããããŸããã :(ãã®ãã³ãããŒã¯ã®ããã©ãŒãã³ã¹ãã©ã®ããã«ç¥ãããšãã§ããŸããïŒããã¯äž»ã«éæãããçŽç²ãªfpsã«åºã¥ããŠãããšããå°è±¡ãåããŸããããããæ¬åœãªããç§ã®ãã¬ãŒã ã¬ãŒãã¯é ç¹ã®èšç®ã«ãã£ãŠ_å³ãã_æå¶ãããŠããŸãã貌ãä»ããæåã®å³ãèŠãŠãã ãããäžèšã§ã¯ãã¬ã³ããªã³ã°ã¯åèšãã¬ãŒã æéã®ããäžéšã§ããé ç¹ãšå€æã®æŽæ°ã¯åèšãã¬ãŒã æéãå§åããŠããŸãã
ããã誀ãã§ãããfpsãç§ã®pixiãã«ãã®ããã©ãŒãã³ã¹ã®æž¬å®å€ã§ã¯ãªãå Žåãç¹å®ã®ãã«ãã枬å®ããããã«ã©ã®ãããªåºæºã䜿çšããŸããïŒ
CPUãŸãã¯GPUåŽã®ããããã§ã¹ãããã«ã§ããŸãïŒå³ã«ã¯ç€ºãããŠããŸããïŒã
FPSã60ãã¯ããã«äžåã£ãŠãããããã¢ã€ãã«ãã倧ããå Žåãã€ãŸãGPUã§ãã
ã¢ã€ãã«ç¶æ ãå°ããå Žåã¯ããã®CPUã
computeVerticesã«ã¯ãå éšã«è¡åæŒç®ããããŸãã4ã€ã®ã³ãŒããŒã«è¡åãä¹ç®ããã ãã§ãã
TSãã©ãŒã¯ã®ã»ãã®å°ããªã¢ã€ãã¢ïŒè¡åã¿ã€ãã®ããããã£ãã€ã³ã©ã€ã³åããå€æãè¿œå ããŸãã TSã«ã¯ãŸã ãã®ãããªå€æããªãã®ã¯æ®å¿µã§ã:(
è¡åå€æ°ã«æ³šéãä»ããæ¹æ³ãèŠã€ããã°ãbabelã§ãå®è¡ã§ãããšæããŸãã
ããäœãèµ·ãã£ãŠããã®ãç解ã§ããŸããã
èŠããŠããã¹ãããšïŒãããããã®ãã³ãããŒã¯ã®ç®æšã¯ããªããžã§ã¯ããšgl-matrixã®äœ¿çšããäºæ³ã©ãããããã©ãŒãã³ã¹ã«å€§ããªææãäžãããã©ããã確èªããããšã§ããã ãã³ãããŒã¯çµæã®éãã«é¢ä¿ãªãããªããžã§ã¯ãã®ããã©ãŒãã³ã¹ã¯ã»ãšãã©ã®é åã®å Žåãããæªããªãããšãäžè²«ããŠç€ºããŠããããã§ãã
ãŸãããããŒããŒã¯ã®ãããã¡ã€ã«ãäœæããã®ã§ãããã§ã¯äžè¬çãªpixiã«é¢ããããã©ãŒãã³ã¹ã®çµè«ãåŒãåºãããšã¯é¿ããããšæããŸãã Chromeã§ã¯ãããã°ã©ã ã®åèšæéã®50ïŒ
以äžãSprite.calculateVertices()
ïŒ40ïŒ
ishïŒã«è²»ããããç¶ããŠTransformStatic.updateTransform()
ïŒ11ïŒ
ishïŒFirefoxã®å®è¡é床ã¯2åã«ãªããŸããããã®æ¯çã¯ãããã®2ã€ã®æ©èœã«è²»ããããæéã®å²åã¯äŸç¶ãšããŠäžè²«ããŠããŸãã
ãããã¯ããé¢ããããªãããã«ãããã®ã§ããããã®ãããŒããŒã¯ãããã¡ã€ãªã³ã°ãè¡ãéã«ães5ã²ãã¿ãŒ/ã»ãã¿ãŒã®äœ¿çšãã¯ãã ã®ããã©ãŒãã³ã¹äœäžãšé¢ä¿ãããã®ã§ã¯ãªãããšèãå§ããŠããŸãïŒ httpsïŒ //jsperf.com/es5-getters-setters-versus-getter-setter-methods/10
ããã§ããã¿ã«ã¶ãã¶ãããŠãã人ã¯ããŸããïŒ ããã§ã¡ãã»ãŒãžãæž¡ãããããåãªã¢ã«ã¿ã€ã ã§ãã£ããããæ¹ãç°¡åã ãšæããŸãã
@mreinsteinã«äœãã¡ãŒã«ããŸããïŒ ããã¿ã«ããªããæåŸ ããŸãð
@englercjã®çºèšã«åºã¥ããšãæããã«ããã¯è¡ã£ãŠããŸããã ééã
ã»ãã®å°ããªæŽæ°ïŒFloat64Arrayã«åºã¥ããŠã httpsïŒ//github.com/pixijs/pixi-projection/blob/master/src/Matrix2d.tsã«3x2ã§ã¯ãªã3x3ãããªãã¯ã¹ããã
ãã®ã¹ã¬ããã¯ãéããããåŸã«æè¿ã®ã¢ã¯ãã£ããã£ããªããããèªåçã«ããã¯ãããŠããŸãã é¢é£ãããã°ã«ã€ããŠã¯ãæ°ããåé¡ãéããŠãã ããã
æãåèã«ãªãã³ã¡ã³ã
@GoodBoyDigitalå€åããªããæ£ãããšæããŸãã ç§ã®å人倫人ã«é Œãã ã°ãŒã°ã«ãç§ã¯ããã«åºããããŸããïŒ
https://stackoverflow.com/questions/15823021/when-to-use-float32array-instead-of-array-in-javascript
æé«è©äŸ¡ã®åçïŒçŸåš44祚ïŒã¯åççã§é¢é£æ§ãããããã§ãã