ç§ã¯godotã®ã³ãŒãã確èªããŠããŸããããã³ã¢ããŒã¿æ§é ã«è³ããŸã§ãããããçš®é¡ã®CPUåŽã®ããã©ãŒãã³ã¹ãå®å šã«ç¡èŠããŠããããšãããããŸããã ãªã³ã¯ãªã¹ããææ°ã®PCã§äœ¿çšã§ããæãé ãããŒã¿æ§é ã§ããå Žåãã©ãã§ããªã¹ãã䜿çšããŸãã ç¹ã«å°ããªãµã€ãºã®æ§é ã§ã¯ãä»ã®ã»ãšãã©ãã¹ãŠã®ããŒã¿æ§é ãé«éã«ãªããŸãã ã©ã€ããªã¹ããã¬ã³ãã©ãã«ã®ãªãã¬ã¯ã·ã§ã³ãã£ããã£ãªã©ãæ倧8ã€ã®ã©ã€ãã®ã¹ã¿ãã¯é åãäžããã®ã§ã¯ãªããæ¯å3ã€ã®ãã€ã³ã¿ãæ ŒçŽãããšããç¹ã§ãç¹ã«ã²ã©ããã®ã§ãããã以äžã
RID_Ownerãããã·ã¥ããããŸãã¯ã¹ããããããã§ããå¯èœæ§ãããããªãŒã§ããå Žåãåãã§ãã ãŸããã«ãªã³ã°ã®Octreeå®è£ ã«ããŸã£ããåãåé¡ããããŸãã
ãªã³ã¯ãªã¹ãã®å®å šãã€çµ¶å¯Ÿçãªä¹±çšã®èåŸã«ããèšèšæå³ãšãã³ãŒãå ã®ããããšããã«ããæãããããã©ãŒãã³ã¹ãã€ã³ã¿ã®éãããŒã¿æ§é ã«ã€ããŠãèãããããšæããŸãã ããã¯ç¹å®ã®çç±ã«ãããã®ã§ããïŒ ã»ãšãã©ã®å Žåãé åã®ãªã³ã¯ãªã¹ããå®è¡ããããã£ã³ã¯ããªã³ã¯ãªã¹ãã¯ãåãã³ãŒãã§ããã©ãŒãã³ã¹ãèªåçã«åäžãããŸãã
ãããã®ããŒã¿æ§é ã䜿çšãããšãã³ãŒãã®é©åãªãã£ã³ã¯ã§ã®ããããçš®é¡ã®ãç°¡åãªã䞊ååŠçãé²æ¢ããããã£ãã·ã¥ãå®å šã«ç Žæ£ãããŸãã
ããè¯ãããŒã¿æ§é ã䜿çšããããã«ãå éšã®äžéšããªãã¡ã¯ã¿ãªã³ã°ããæŠå¿µå®èšŒã®å®è£ ã«åãââçµãã§ããŸãã çŸåšãçŸåšã®octreeããã€ãã¹ãããªãã·ã§ã³ã®äžŠååŠçãåãããã©ããé åã䜿çšããã«ãªã³ã°ã³ãŒãã®æžãçŽãã«åãçµãã§ããŸãã tps-demoããã³ãããŒã¯ãšããŠäœ¿çšããçµæãè¿ããŸããå®éããã®å «åæšã§25ã¬ãã«æ·±ããªãããã«ãã³ãããŒã¯ããŸãã...
ãã1ã€ã®å¬ããããšã«ãç§ã¯ã³ãŒãã¹ã¿ã€ã«ã®å質ã«éåžžã«æéãåããŠããããã¹ãŠããããããããéåžžã«ããã³ã¡ã³ããããŠããŸãã
誰ãããã©ãŒãã³ã¹ãå¿ èŠãšããŸããïŒ ïŒãã€é¡ïŒ
ããªããäœã枬å®ããã®ãç¥ãããã§ãã
ããã§ãããã¯ãGodotã®åçŽãªLight2DããŒããã³ã³ãã¥ãŒã¿ãŒãçŒãä»ããããšãã§ããçç±ã説æã§ããŸããïŒ
@Ranollerããã¯æããŸããã æªãã©ã€ãã£ã³ã°ããã©ãŒãã³ã¹ã¯ãGodotãçŸæç¹ã§2Dã©ã€ãã£ã³ã°ãå®è¡ããæ¹æ³ã«é¢é£ããŠããå¯èœæ§ããããŸãããã¹ãŠã®ã¹ãã©ã€ããnåã¬ã³ããªã³ã°ããŸãïŒnã¯ããã«åœ±é¿ãäžããã©ã€ãã®æ°ã§ãïŒã
ç·šéïŒïŒ23593ãåç §
æ確ã«ããããã«ãããã¯ã³ãŒãå šäœã®CPUåŽã®éå¹çæ§ã«é¢ãããã®ã§ãã ããã¯ãgodotæ©èœãgodotGPUã¬ã³ããªã³ã°èªäœãšã¯äœã®é¢ä¿ããããŸããã
@ vblanco20-1ã¡ãã£ãšããæ¥ç·ã§ãããªããšç§ã¯ã代ããã«ECSãšã³ãã£ãã£ãšããŠã¢ãã«åãããŠããããŒãã«ã€ããŠè©±ããŸããã ããªãã¯ã¯ãããªãŒãšåŸã ã«äžŠè¡ããŠæ©èœããæ°ããentã¢ãžã¥ãŒã«ã䜿çšããŠgodotã®æ©èœãã©ã³ããå®è¡ããããšã§ãããã©ããçåã«æããŸãã get_treeïŒïŒãget_registryïŒïŒã®ããã«ã entã¢ãžã¥ãŒã«ã¯ããããããªãŒ/ã·ãŒã³ã®æ©èœã®80ïŒ ãèŠéããŸããããã¹ãããããšããŠãç¹ã«å€æ°ã®ãªããžã§ã¯ããå«ã倧ããªéçã¬ãã«ã®äœæïŒã«ãªã³ã°ãã¹ããªãŒãã³ã°ããããã¬ã³ããªã³ã°ïŒãªã©ã«åœ¹ç«ã€å¯èœæ§ããããŸãã æ©èœæ§ãšæè»æ§ãäœäžããŸãããããã©ãŒãã³ã¹ã¯åäžããŸãã
å®å šãªECSã«é²ãåã«ïŒç§ã¯ãããããããããŸãããïŒãå®éšãšããŠããã€ãã®ã¶ãäžãã£ãŠããæç©ã«åãçµã¿ãããšæããŸãã åŸã§å®å šãªããŒã¿æåã«ããããšãããããããŸããã
ãããã£ãŠãæåã®æŽæ°ïŒ
update_dirty_instancesïŒ0.2ã0.25ããªç§ãã0.1ããªç§
octree_cullïŒã¡ã€ã³ãã¥ãŒïŒïŒ0.35ããªç§ãã0.1ããªç§
楜ããéšåã¯ïŒ octree cullã®ä»£ããã«ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³æ§é ã䜿çšããããã¹ãŠã®AABBãå«ããã é åãå埩åŠçããã ãã§ãã
ããã«é¢çœãéšåã¯ïŒ æ°ããã«ãªã³ã°ã¯10è¡ã®ã³ãŒãã§ãã ç§ããããå¹³è¡ã«ãããã®ãªããããã¯ã©ã€ã³ãžã®åäžã®å€æŽã§ãããã
ã©ã€ãã䜿çšããŠæ°ããã«ãªã³ã°ãå®è£ ãç¶ããã¹ããŒãã¢ãããã©ãã ãèç©ããããã確èªããŸãã
ããããããã¹ã¿ãŒãã©ã³ãã«ãGoogleãã³ãããŒã¯ãã£ã¬ã¯ããªãé 眮ããå¿ èŠããããŸãã ããã¯æ€èšŒã«åœ¹ç«ã€ãããããªãã®ã§ã人ã ã¯ããã«ã€ããŠè°è«ããå¿ èŠã¯ãããŸããã
godotengine / godot-testsãªããžããªããããŸããããŸã å€ãã®äººãããã䜿çšããŠããŸããã
æ°ããã¢ããããŒãïŒ
Iveã¯ã2ã€ã®ã¬ãã«ã§ãããªã銬鹿ãã空éå éæ§é ãå®è£ ããŸããã ãã¬ãŒã ããšã«çæããã ãã§ããããã«æ¹åãããšãåäœæããã®ã§ã¯ãªããæ¹åããŠåçã«æŽæ°ããããšãã§ããŸãã
ç»åã§ã¯ãç°ãªãè¡ã¯ç°ãªãã¹ã³ãŒãã§ãããè²ä»ãã®ãããã¯ã¯ããããã¿ã¹ã¯/ã³ãŒãã®ãã£ã³ã¯ã§ãã ãã®ãã£ããã£ã§ã¯ãå «åæšã«ãªã³ã°ãšç§ã®ã«ãªã³ã°ã®äž¡æ¹ã䞊ã¹ãŠè¡ã£ãŠãçŽæ¥æ¯èŒããŸã
ããã¯ãå éæ§é å
šäœãåäœæããæ¹ããåäžã®å€ãå
«åæšã«ãªã³ã°ãããé«éã§ããããšã瀺ããŠããŸãã
ãŸãããã以äžã®ã«ãªã³ã°ã¯ãçŸåšã®å
«åæšã®çŽååãã3åã®1ã«ãªãåŸåããããŸãã
ç§ã®ãã æ§é ãçŸåšã®å «åæšãããé ããšããã±ãŒã¹ã¯ãæåã®äœæã®ã³ã¹ããé€ããŠã1ã€ãèŠã€ãããŸããã§ããã
ãã1ã€ã®å©ç¹ã¯ãéåžžã«ãã«ãã¹ã¬ããã«å¯Ÿå¿ããŠããã䞊ååŠçã䜿çšããã ãã§ãå¿ èŠãªã³ã¢æ°ã«æ¡åŒµã§ããããšã§ãã
ãŸããã¡ã¢ãªãå®å šã«é£ç¶ããŠãã§ãã¯ããã®ã§ãããã»ã©é¢åãªããšãªãSIMDãå®è¡ã§ããã¯ãã§ãã
ãã1ã€ã®éèŠãªè©³çŽ°ã¯ãçŸåšã®octreeãããã¯ããã«åçŽã§ãã³ãŒãè¡ãã¯ããã«å°ãªãããšã§ãã
ããªãã¯ã²ãŒã ã»ãªãã»ã¹ããŒã³ãºã®çµãããããå€ãã®èªå€§å®£äŒãåŒãèµ·ãããŠããŸã...
ã¢ã«ãŽãªãºã ãå°ãå€æŽããŠãC ++ 17䞊åã¢ã«ãŽãªãºã ã䜿çšã§ããããã«ããŸãããããã«ãããããã°ã©ããŒã¯ã䞊åãŸãã¯äžŠåãœãŒããå®è¡ããããã«æ瀺ããããšãã§ããŸãã
ã¡ã€ã³ã®éå°ã«ãªã³ã°ã§çŽx2ã®ã¹ããŒãã¢ããããããŸãããã©ã€ãã®å Žåã¯ä»¥åãšã»ãŒåãé床ã§ãã
ç§ã®ã«ã©ãŒã¯ãã¡ã€ã³ãã¥ãŒã®godotoctreeããã10åé«éã«ãªããŸããã
å€æŽç¹ã確èªãããå Žåãäž»ãªéèŠäºé
ã¯æ¬¡ã®ãšããã§ãã
https://github.com/vblanco20-1/godot/blob/4ab733200faa20e0dadc9306e7cc93230ebc120a/servers/visual/visual_server_scene.cpp#L387
ãããæ°ããã«ãªã³ã°æ©èœã§ãã å éæ§é ã¯ãã®ããäžã®æ©èœã«ãããŸãã
ããã¯VS2015ã§ã³ã³ãã€ã«ããå¿ èŠããããŸããïŒ ã³ã³ãœãŒã«ã¯ãentt \å ã®ãã¡ã€ã«ã«é¢ããäžé£ã®ãšã©ãŒãã¹ããŒããŸã
@Ranollerã¯c ++ 17ãªã®ã§ãæ°ããã³ã³ãã€ã©ã䜿çšããŠããããšã確èªããŠãã ãã
ãããšãGodotã¯ãŸã c ++ 17ã«ç§»è¡ããŠããªãã£ããšæããŸããïŒ å°ãªããšãç§ã¯ãã®ãããã¯ã«é¢ããããã€ãã®è°è«ãæãåºããŸããïŒ
Godotã¯C ++ 03ã§ãããã®åãã¯ç©è°ãéžãã§ãããã @ vblanco20-1ãäŒæ¥ãçµãããããã¢ã³ãšè©±ãããšããå§ãããŸã...ãã®æé©åã¯çŽ æŽããããã®ã§ãããããã«ãããã¯æ±ºããŠèµ·ãããªãTMããæãã§ããŸããã
@ vblanco20-1
octree_cullïŒã¡ã€ã³ãã¥ãŒïŒïŒ0.35ããªç§ãã0.1ããªç§
ãªããžã§ã¯ãã¯ããã€ã§ããïŒ
@ nem0
@ vblanco20-1
octree_cullïŒã¡ã€ã³ãã¥ãŒïŒïŒ0.35ããªç§ãã0.1ããªç§
ãªããžã§ã¯ãã¯ããã€ã§ããïŒ
2200幎é ããã§ãã¯ãéåžžã«å°ããå Žåãgodot octreeã¯æ©æã«çµäºãããããããã©ãŒãã³ã¹ãåäžããŸãã ã¯ãšãªã倧ããã»ã©ãgodotoctreeã¯ç§ã®ãœãªã¥ãŒã·ã§ã³ãšæ¯èŒããŠé ããªããŸãã godot octreeãã·ãŒã³ã®90ïŒ ãæ©æã«åŠçã§ããªãå Žåããªããžã§ã¯ãããšã«ãªã³ã¯ãªã¹ããæ¬è³ªçã«å埩ãããããéåžžã«é ããªããŸãããç§ã®ã·ã¹ãã ã¯ãåãã£ãã·ã¥ã©ã€ã³ã倧éã®AABBãä¿æããé åã®æ§é ã§ãããå€§å¹ ã«åæžãããŸãããã£ãã·ã¥ãã¹ã
ç§ã®ã·ã¹ãã ã¯ã2ã€ã®ã¬ãã«ã®AABBãã€ãŸããããã¯ã®é åãæã€ããšã§æ©èœãããã¹ãŠã®ãããã¯ã128ã®ã€ã³ã¹ã¿ã³ã¹ãä¿æã§ããŸãã
ãããã¬ãã«ã¯ãã»ãšãã©ãAABBã®é å+ãããã¯ã®é åã§ãã AABBãã§ãã¯ã«åæ Œããå Žåã¯ããããã¯ãç¹°ãè¿ããŸãã ãããã¯ã¯ãAABBããã¹ã¯ãããã³ã€ã³ã¹ã¿ã³ã¹ãžã®ãã€ã³ã¿ãŒã®æ§é ã®é åã§ãã ãã®ããã«ãã¹ãŠãfaaaaastã§ãã
çŸåšããããã¬ãã«ã®ããŒã¿æ§é ã®çæã¯éåžžã«éŠ¬é¹¿ããæ¹æ³ã§è¡ãããŠããŸãã ããé©åã«çæãããå Žåããã®ããã©ãŒãã³ã¹ã¯ã¯ããã«å€§ãããªãå¯èœæ§ããããŸãã 128以å€ã®ç°ãªããããã¯ãµã€ãºã§ããã€ãã®å®éšãå®è¡ããŠããŸãã
ç§ã¯ããŸããŸãªæ°ããã§ãã¯ããŸãããããããã¯ããã128ã¯ãã©ãããããããŸã ã¹ã€ãŒãã¹ãããã®ããã§ãã
ã¢ã«ãŽãªãºã ãå€æŽããŠã倧ããªããªããžã§ã¯ããå°ããªãªããžã§ã¯ãããåé¢ããããšã«ãããiveã¯ãäž»ã«ãããã®äžå¿ã調ã¹ãŠããªãå Žåã«ãããã«30ïŒ ã®é床ã¢ããã°ã¬ãŒããåŸãããšãã§ããŸããã ããã¯ã倧ããªãªããžã§ã¯ããå°ããªãªããžã§ã¯ããå«ããããã¯AABBãè¥å€§åãããªãããã«æ©èœããŸãã ãããã3ã€ã®ãµã€ãºãæé©ã ãšæããŸãã
ãããã¯çæã¯ãŸã ãŸã£ããæé©ã§ã¯ãããŸããã 倧ããªãããã¯ã¯ãäžå€®ãèŠããšã€ã³ã¹ã¿ã³ã¹ã®çŽ10ã20ïŒ ããããã®å€åŽãèŠããšæ倧50ïŒ ããã«ãªã³ã°ããªããããå¿ èŠä»¥äžã«å€ãã®è¿œå ã®AABBãã§ãã¯ãå®è¡ããŸãã
ãããããçŸåšã®å «åæšãåå©çšããããããããå¹³åŠåãããããšã§æ¹åããããšæããŸãã
䞊åå®è¡ããªããŠããç§ã®ã¢ã«ãŽãªãºã ãçŸåšã®octreeãšçãããããããæªãã±ãŒã¹ã¯1ã€ããããŸããã
@ vblanco20-1 release
ã¢ãŒãïŒ -O3
ïŒã§ã³ã³ãã€ã«ãããgodotãšã®æ¯èŒãè¡ã£ãŠãããéåžžã®ãšãã£ã¿ãŒãã«ãã€ã³ãããã°ïŒæé©åããªããããã©ã«ãïŒã§ã¯ãªããšæããŸãã ïŒ
ã°ããã質åãªãç³ãèš³ãããŸããããã¹ã¬ããã«ã¯ãã®ããšã«ã€ããŠã®èšåã¯ãããŸããã
ãšã«ããããä»äº:)
@Falessãã®release_debugã¯ãããã€ãã®æé©åãè¿œå ããŸãã ã²ãŒã ãéãããšãã§ããªããããå®å šãªããªãªãŒã¹ãããã¹ãã§ããŸããã§ããïŒã²ãŒã ããã«ãããå¿ èŠããããŸããïŒïŒ
ã«ãªã³ã°ãããã«æ¹åãããã¹ãŠã®ãã¬ãŒã ãåçæããå¿ èŠããªãããããè¯ã空éæé©åãäœæããæ¹æ³ã«ã€ããŠã®ã¢ã€ãã¢ããããŸããã ç§ãäœãè©Šãããšãã§ãããããããŸãã çè«çã«ã¯ããã®ãããªãã®ã¯åçãåé€ããã¡ã€ã³ã«ãªã³ã°ã®ããã©ãŒãã³ã¹ãå°ãæ¹åããã«ãªã³ã°ã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããããã€ã³ãã©ã€ãçšã®ç¹å®ã®ã¢ãŒããåããŠãããããã³ã¹ãã¯ã»ãŒãŒãã«ãªããŸãã ãååŸå ã®ãªããžã§ã¯ãããååŸããããã®å®äŸ¡ãªOïŒ1ïŒã«å€ãããŸãã
ããã¯ãç§ã®å®éšã®1ã€ãã©ã®ããã«æ©èœãããã«è§ŠçºãããŸãããããã§ã¯ã400.000ã®ç©çãªããžã§ã¯ããäºãã«è·³ãè¿ã£ãŠããŸãã
æ°ããã«ãªã³ã°ãå®è£
ãããŸããã ãããã¯çæãã¯ããã«ã¹ããŒãã«ãªããããé«éãªã«ãªã³ã°ãå¯èœã«ãªããŸããã ã©ã€ãã®ç¹æ®ãªã±ãŒã¹ã¯ãŸã å®è£
ãããŠããŸããã
ç§ã¯ãããç§ã®ãã©ãŒã¯ã«ã³ãããããŸãã
çŸåšã®ãã¹ã¿ãŒãã©ã³ãããã®ãã«ãã§ãã®ãã³ãããŒã¯ããŒã«ïŒã¹ã¯ãªãŒã³ã·ã§ããã®ãã®ïŒãå®è¡ããŠãå®è£
ãçŸåšã®å®è£
ã«å¯ŸããŠã©ãã ãã®ããã©ãŒãã³ã¹ãæäŸããŠãããã«ã€ããŠã®åç
§ãã€ã³ããæäŸã§ãããã©ããç¥ãããã§ãã ç§ã¯ãããŒã§ãããããŒã
@ LikeLakers2ã¹ã¯ãªãŒã³ã·ã§ããã§çŸåšã®å®è£ ãšåœŒã®å®è£ ã®äž¡æ¹ãèŠãããšãã§ããŸãã
圌ã¯ããããã¹ã¿ãŒãã©ãŒã¯ã§èµ°ãããŸãã
2018幎12æ12æ¥ïŒæ°Žææ¥ïŒã«ã¯ãMichiRecRoom [email protected]
æžããŸããïŒ
@neikeq https://github.com/neikeq説æããŸããïŒ ã¹ã¯ãªãŒã³ã·ã§ããã ãšæããŸãã
æçš¿ããããã®ã¯ãæçš¿ãã©ã®ããã«è¡ãããããèãããšã圌ã®å®è£ ã®ã¿ã§ãã
ã¹ã¯ãªãŒã³ã·ã§ããä»ãã¯ãããŸã§ã®ãšããèšèã§è¡šçŸãããŠããŸããâ
ããªããã³ã¡ã³ãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/godotengine/godot/issues/23998#issuecomment-446831151 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/ADLZ9pRh9Lksse9KBfWV0z5GmHRXf5P2ks5u4crCgaJpZM4YziJp
ã
ãã®ãããã¯ã«é¢ãããã¥ãŒã¹ã¯ãããŸããïŒ
ãã®ãããã¯ã«é¢ãããã¥ãŒã¹ã¯ãããŸããïŒ
ç§ã¯reduzãšè©±ããŸããã ãããžã§ã¯ãã«é©åããªããããããŒãžãããããšã¯ãããŸããã 代ããã«ä»ã®å®éšããã«è¡ããŸããã ãã¶ãç§ã¯åŸã§ã«ãªã³ã°ã4.0ã«ã¢ããã°ã¬ãŒãããŸã
ãããæ¬åœã«ææã«èŠããããšãèãããšãããã¯æ®å¿µã§ãã ããŸãããã°ããããã®åé¡ã¯æéå ã«åãçµãã§ãããã
ããããããã¯4.0ãã€ã«ã¹ããŒã³ãäžããããã¹ãã§ããïŒ Reduzã¯Vulkanfor 4.0ã§ã®äœæ¥ãèšç»ããŠããããããã®ãããã¯ã¯ããã©ãŒãã³ã¹ã«ã€ããŠã§ãããã¬ã³ããªã³ã°ã«çŠç¹ãåœãŠãŠããŸããå°ãªããšãOPã¯ããã§ãã
@ vblanco20-1圌ã¯ãããã©ã®ããã«é©åããªãããèšããŸãããïŒ c ++ 17ãžã®ç§»è¡ã®ããã ãšæããŸããïŒ
ãã ãããã€ã«ã¹ããŒã³ã«ã¯ä»ã«ãé¢é£ããåé¡ããããŸãïŒïŒ25013
ããªãã¯èå³ããããããããŸããã ç§ã¯ããªãé·ãé掟æãªãã©ãŒã¯ã«åãçµãã§ããŸããã çŸåšã®çµæã¯æ¬¡ã®ãšããã§ãã
4ã³ã¢ã®IntelCPUãšGTX1070ãæèŒãã倧åã²ãŒãã³ã°ããŒãããœã³ã³ã§ãã£ããã£
éåžžã®godot
https://github.com/vblanco20-1/godot/tree/ECS_Refactorã®ç§ã®ãã©ãŒã¯
ã©ã¡ãã®ãããã¡ã€ã«ã§ããèµ€ã¯æ¬è³ªçã«ãGPUãåŸ ã€ããã®ã§ãã openglã§ã®ãããŒã³ãŒã«ãå€ããããããçŸåšããã«ããã¯ã«ãªã£ãŠããŸãã ãã«ã«ã³ãã¬ã³ãã©ãŒå šäœãæžãçŽãããšãªããã«ã³ãã¯æ¬åœã«è§£æ±ºãããŸãã
CPUåŽã§ã¯ã13ããªç§ãã¬ãŒã ãã5ããªç§ãã¬ãŒã ã«ãªããŸãã ãé«éããã¬ãŒã ã¯5.5ããªç§ãã2.5ããªç§ã«ãªããŸã
ãããŒã¿ã«ãã¬ãŒã ãåŽã§ã¯ã13ããªç§ãã8ã9ããªç§ã«ãªããŸã
ã75 FPSãã115 FPS
ããå°ãªãCPUæé=ã²ãŒã ãã¬ã€ã«ããå€ãã®æéãè²»ããããšãã§ããŸãã çŸåšã®godotã¯CPUã§ããã«ããã¯ã«ãªã£ãŠãããããã²ãŒã ãã¬ã€ã«è²»ããæéãé·ããªããšFPSãäœããªããŸããããã©ãŒã¯ã¯GPUã«ãã€ã³ããããŠãããããCPUã¯ãç¡æãã§ãããããFPSãå€æŽããã«ã²ãŒã ãã¬ã€ããžãã¯ãããã«è¿œå ã§ããŸããããªãé·ãéãã¹ãŠã®ãã¬ãŒã ã
godotãææ°ã®C ++ããµããŒãããéåžžã«å®äŸ¡ãªãå°ããªãã¿ã¹ã¯ãå¯èœã«ãããã«ãã¹ã¬ããã·ã¹ãã ãåããŠããã°ããããã®æ¹åç¹ã®å€ãã¯godotã«ããŒãžå¯èœã§ãã
æ倧ã®å©ç¹ã¯ãåçãªããžã§ã¯ãïŒ25013ã§ãã«ãã¹ã¬ããã·ã£ããŠãšãã«ãã¹ã¬ããã©ã€ããããã®èªã¿åããå®è¡ããããšã«ãã£ãŠè¡ãããŸãã ãããã¯äž¡æ¹ãšãåãããã«æ©èœããŸãã ã¬ã³ãã©ãŒã®ä»ã®å€ãã®éšåããã«ãã¹ã¬ããåãããŠããŸãã
ä»ã®å©ç¹ã¯ãgodotããã10åãã20åéãOctreeã§ãããã«ãªã³ã°ãªã¹ããç¹°ãè¿ã代ããã«ã深床ããªãã¹ãšããŒãã«ãã¹ã®äž¡æ¹ã®ã¬ã³ããªã³ã°ãªã¹ããäžåºŠã«èšé²ãããªã©ãã¬ã³ããªã³ã°ã®ãããŒã®äžéšãæ¹åãããŠããŸã2ãæéãããã³ã©ã€ã->ã¡ãã·ã¥æ¥ç¶ã®åäœæ¹æ³ã®å€§å¹
ãªå€æŽïŒãªã³ã¯ãªã¹ããªãïŒïŒ
çŸåšãTPSãã¢ä»¥å€ã®ãã¹ãããããæ¢ããŠããã®ã§ãä»ã®ã¿ã€ãã®ãããã§ããå€ãã®ã¡ããªãã¯ã䜿çšã§ããŸãã ãŸããããããã¹ãŠãã©ã®ããã«æ©èœãããã詳现ã«èª¬æããäžé£ã®èšäºãæžãã€ããã§ãã
@ vblanco20-1ããã¯å®å šã«çŽ æŽãããã§ãã å ±æããŠãããŠããããšãïŒ
ãŸããVulkanã¯ãã£ãããã§ãããGLES3ã®ããã©ãŒãã³ã¹ãé©åã§ããã°ãGodotã«ãšã£ãŠçµ¶å¯Ÿçãªåå©ã«ãªãããšã«ãåæããŸãã GLES3ã«ããããé©çšããããšã¯ãããã«ãã人ã ãä»å®å šã«å®è¡å¯èœã§ããããšã蚌æãããŠããéãå®å šãªVulkanãµããŒãã¯ããã«ã¯çéžããªãå¯èœæ§ããããŸãã
ããã«ãŸããŸã泚ç®ãéããããã®ç§ã®å·šå€§ãª+1ã Reduzãã³ãã¥ããã£ã«GLES3ã®æ¹åãèš±å¯ããããšã«åæããå Žåãç§ã¯å°çäžã§æã幞ããªäººã«ãªãã§ãããã ç§ãã¡ã¯Godotã§éåžžã«æ·±å»ãª3Dãããžã§ã¯ãã1ã5幎éè¡ã£ãŠãããGodotïŒå¯ä»ãå«ãïŒã«å¯ŸããŠéåžžã«ååçã§ããã60 FPSããã£ããããŠããªããšãç§ãã¡ã¯æ¬åœã«æ欲ã倱ãããã¹ãŠã®åªåã倧ããªãªã¹ã¯ã«ããããŸãã
ãããååãªã¯ã¬ãžãããååŸããŠããªãã®ã¯æ¬åœã«æ®å¿µã§ãã çŸåšã®ïŒ3Dã«é¢ããŠã¯éåžžã«åçŽãªïŒãããžã§ã¯ãã§ä»åŸæ°ãæ以å ã«60 FPSãåŸãããªãå Žåããã¬ã€å¯èœãªã²ãŒã ãæäŸã§ããããã¹ãŠã®åŽåãç¡é§ã«ãªããŸãã ïŒ/
@ vblanco20-1æ£çŽãªãšãããç§ã¯ããªãã®ãã©ãŒã¯ãæ¬çªç°å¢ã®ã²ãŒã ã®ããŒã¹ãšããŠäœ¿çšããããšãæ€èšããŠããŸãã
PSããã€ãã®èãïŒæåŸã®æ段ãšããŠãããšãã°ã2ã€ã®GLES3ã©ã¹ã¿ãŒã©ã€ã¶ãŒïŒGLES3ãšGLES3-ã³ãã¥ããã£ïŒãæã€ããšããå®å šã«å¯èœã ãšæããŸãã
PSããã€ãã®èãïŒæåŸã®æ段ãšããŠãããšãã°ã2ã€ã®GLES3ã©ã¹ã¿ãŒã©ã€ã¶ãŒïŒGLES3ãšGLES3-ã³ãã¥ããã£ïŒãæã€ããšããå®å šã«å¯èœã ãšæããŸãã
ããã¯ç§ã«ã¯æå³ããããŸããã ä¿®æ£ãšããã©ãŒãã³ã¹ã®æ¹åãGLES3ããã³GLES2ã¬ã³ãã©ãŒã«çŽæ¥ååŸããããšããå§ãããŸãïŒæ¢åã®ãããžã§ã¯ãã§äž»èŠãªæ¹æ³ã§ã¬ã³ããªã³ã°ãäžæãããªãéãïŒã
ä»ã®å©ç¹ã¯ãgodotããã10åãã20åéãOctreeã§ãããã«ãªã³ã°ãªã¹ããç¹°ãè¿ã代ããã«ã深床ããªãã¹ãšããŒãã«ãã¹ã®äž¡æ¹ã®ã¬ã³ããªã³ã°ãªã¹ããäžåºŠã«èšé²ãããªã©ãã¬ã³ããªã³ã°ã®ãããŒã®äžéšãæ¹åãããŠããŸã2ãæéãããã³ã©ã€ã->ã¡ãã·ã¥æ¥ç¶ã®åäœæ¹æ³ã®å€§å¹ ãªå€æŽïŒãªã³ã¯ãªã¹ããªãïŒïŒ
@ vblanco20-1 C ++ 03ã䜿çšãããŸãŸã深床ããªãã¹ãæé©åããããšã¯å¯èœã§ããããïŒ
@Calinou深床ããªãã¹ã®ãã®ã¯ãäœãå¿ èŠãšãããéåžžã«ç°¡åã«ããŒãžã§ãããã®ã®1ã€ã§ãã ãã®äž»ãªæ¬ ç¹ã¯ãã¬ã³ãã©ãŒãè¿œå ã®ã¡ã¢ãªã䜿çšããå¿ èŠãããããšã§ãã 1ã€ã ãã§ã¯ãªã2ã€ã®RenderListãå¿ èŠã«ãªãããã§ãã äœåãªã¡ã¢ãªãé€ããŠããã€ãã¹é¢ã¯ã»ãšãã©ãããŸããã 1ãã¹ãŸãã¯2ãã¹ã®ã¬ã³ããŒãªã¹ããäœæããã³ã¹ãã¯CPUãã£ãã·ã³ã°ã®ãããã§ã»ãŒåãã§ãããããããªãã¹fill_listïŒïŒã®ã³ã¹ããã»ãŒå®å šã«æé€ããŸãã
@ vblanco20-1æ£çŽãªãšãããç§ã¯ããªãã®ãã©ãŒã¯ãæ¬çªç°å¢ã®ã²ãŒã ã®ããŒã¹ãšããŠäœ¿çšããããšãæ€èšããŠããŸãã
@ and3rsonã¯ããªãã§ãã ããã ãã®ãã©ãŒã¯ã¯çŽç²ã«ç 究ãããžã§ã¯ãã§ãããå®å šã«å®å®ããŠããããã§ããããŸããã å®éã䞊åSTLã䜿çšããŠãããããäžéšã®éåžžã«ç¹æ®ãªã³ã³ãã€ã©ãŒã®å€éšã§ã³ã³ãã€ã«ããããšããã§ããŸããã ãã©ãŒã¯ã¯äž»ã«ã©ã³ãã ãªæé©åã®ã¢ã€ãã¢ãšå®è·µã®ãã¹ããããã§ãã
Godotã®ãããã¡ã€ã«ãäœæããããã«äœ¿çšããŠããããŒã«ã¯äœã§ããïŒ ãããã®ãµã³ãã«ãçæããããã«ãgodotãœãŒã¹ã«Profiler.Beginãã©ã°ãšProfiler.Endãã©ã°ãè¿œå ããå¿ èŠããããŸãããïŒ
Godotã®ãããã¡ã€ã«ãäœæããããã«äœ¿çšããŠããããŒã«ã¯äœã§ããïŒ ãããã®ãµã³ãã«ãçæããããã«ãgodotãœãŒã¹ã«Profiler.Beginãã©ã°ãšProfiler.Endãã©ã°ãè¿œå ããå¿ èŠããããŸãããïŒ
Tracyãããã¡ã€ã©ãŒã䜿çšããŠãããããã§äœ¿çšããããŸããŸãªã¿ã€ãã®ã¹ã³ãŒããããã¡ã€ã«ããŒã¯ããããŸãã ããšãã°ãZoneScopedNCïŒ "Fill List"ã0x123abcïŒã¯ããã®ååãšå¿ èŠãª16é²è²ã®ãããã¡ã€ã«ããŒã¯ãè¿œå ããŸãã
@ vblanco20-1-ãããã®ããã©ãŒãã³ã¹ã®æ¹åã®ããã€ããgodotã¡ã€ã³ãã©ã³ãã«ããããããã®ãèŠãŸããïŒ
@ vblanco20-1-ãããã®ããã©ãŒãã³ã¹ã®æ¹åã®ããã€ããgodotã¡ã€ã³ãã©ã³ãã«ããããããã®ãèŠãŸããïŒ
ãã¶ãC ++ 11ããµããŒããããŠãããšãã ããããreduzã¯ãvulkanãçºçããåã«ã¬ã³ãã©ãŒã§ãã以äžã®äœæ¥ãæãã§ããªãããã決ããŠãããªããªãå¯èœæ§ããããŸãã æé©åäœæ¥ã®çµæã®ããã€ãã¯ã4.0ã¬ã³ãã©ãŒã«åœ¹ç«ã€å¯èœæ§ããããŸãã
@ vblanco20-1ãã©ã³ãã®ã³ã³ãã€ã©ãšç°å¢ã®è©³çŽ°ãå ±æããããšãå¿ãããŠããŸããç§ã¯ããã®ã»ãšãã©ãç解ã§ãããšæããŸãããå¿ èŠããªããã°åé¡ãç解ããã®ã«æéãç¡é§ã«ããªãã§ãã ããã
ãŸããAABBã®å€æŽãGodotã¡ã€ã³ã«è¿œå ããããšã¯ã§ããŸãããïŒ
@ vblanco20-1ãã©ã³ãã®ã³ã³ãã€ã©ãšç°å¢ã®è©³çŽ°ãå ±æããããšãå¿ãããŠããŸããç§ã¯ããã®ã»ãšãã©ãç解ã§ãããšæããŸãããå¿ èŠããªããã°åé¡ãç解ããã®ã«æéãç¡é§ã«ããªãã§ãã ããã
ãŸããAABBã®å€æŽãGodotã¡ã€ã³ã«è¿œå ããããšã¯ã§ããŸãããïŒ
@swarnimarun Visual Studio 17ãŸãã¯19ã¯ãåŸã®æŽæ°ã®1ã€ã§ãããæ£åžžã«æ©èœããŸãã ïŒãŠã£ã³ããŠãºïŒ
sconsã¹ã¯ãªããã¯ãcpp17ãã©ã°ãè¿œå ããããã«å€æŽãããŸããã ãŸããçŸåšããšãã£ã¿ãŒã®èµ·åãå£ããŠããŸãã ç§ã¯ããã埩å
ã§ãããã©ããã確èªããããã«åãçµãã§ããŸãã
æ²ããããšã«ãAABBã®å€æŽã¯æ倧ã®ãã®ã®1ã€ã§ãã Godot octreeã¯ãããžã¥ã¢ã«ãµãŒããŒå ã®å€ãã®ãã®ãšçµ¡ã¿åã£ãŠããŸãã ã«ãªã³ã°ã®ããã«ãªããžã§ã¯ãã远跡ããã ãã§ãªãããªããžã§ã¯ãããã¢ãªã³ã°ããããã®ç¬èªã®ã·ã¹ãã ã䜿çšããŠããªããžã§ã¯ããã©ã€ã/åå°ãããŒãã«æ¥ç¶ããŸãã ãããã®ãã¢ã¯ãoctreeã®ãªã³ã¯ãªã¹ãæ§é ã«ãäŸåããŠãããããããžã¥ã¢ã«ãµãŒããŒãå€§å¹ ã«å€æŽããã«ãçŸåšã®octreeãããé«éã«é©å¿ãããããšã¯ã»ãšãã©äžå¯èœã§ãã å®éãç§ã¯ãŸã ããã€ãã®ãªããžã§ã¯ãã¿ã€ãã®ãã©ãŒã¯ã§éåžžã®godotå «åæšãåãé€ãããšãã§ããŸããã§ããã
@ vblanco20-1 Patreonã¯ãããŸããïŒ ç§ã¯ããã©ãŒãã³ã¹ã«çŠç¹ãåããããã©ãŒã¯ã«ããããã®ãéããããŸãããããŠããã¯ããèªäœãå€ä»£ã®C ++ã«å¶éããŸããããããŠããããç§ã ãã§ã¯ãããŸããã 3Dãããžã§ã¯ãã®ããã«Godotãããã£ãŠã¿ããã®ã§ãããã³ã¢ããŒã ãžã®ããã©ãŒãã³ã¹ãšäœ¿ãããããžã®ã¢ãããŒãã蚌æããæŠå¿µã®å·šå€§ãªèšŒæ ããªããã°ãGodotãå®è¡å¯èœã«ãªããšããåžæã倱ã£ãŠããŸãã
@mixedCaseGodotã®ããããçš®é¡ã®ãã©ãŒã¯ããµããŒãããããšãéåžžã«èºèºããŸãã ãã©ãŒã¯ãšæçåã¯ãå€ãã®å ŽåããªãŒãã³ãœãŒã¹ãããžã§ã¯ãã®æ»ã§ãã
ããè¯ãã·ããªãªããããŠæ°ããC ++ãå€§å¹ ãªæé©åãå¯èœã«ããããšãå®èšŒãããä»ã§ã¯ãGodotãC ++ã®æ°ããããŒãžã§ã³ã«æ£åŒã«ã¢ããã°ã¬ãŒãããããšã§ãã ããã¯Godot4.0ã§çºçãã3.2ã§ã®ç Žæã®ãªã¹ã¯ãæå°éã«æããGodot4.0ã«Vulkanãè¿œå ãããŠæ°ããC ++æ©èœãå©çšãããã®ã«éã«åããšæããŸãã ãŸããreduzãGLES 3ã¬ã³ãã©ãŒãåé€ãããã®ã§ãGLES3ã¬ã³ãã©ãŒã«å€§ããªå€æŽãå ããããããšã¯ãªããšæããŸãã
ïŒããããç§ã¯Godotã®éçºè ã®ããã«è©±ããŸãããããã¯ç§ã®æšæž¬ã§ãïŒ
@aaronfrankeåæããŸããããŒããã³ããã©ãŒã¯ã¯çæ³çã§ã¯ãªããšæããŸãã ãããã圌ã®èšã£ãããšããç§ãéãããã®ïŒç§ãééã£ãŠããå Žåã¯èšæ£ããŠãã ããïŒã¯ã @ reduzã¯ããããã®æ°ããæ©èœã¯æŠå¿µãåŠã¶äŸ¡å€ã®ããéèŠãªãã®ããããããªãããã䜿çšãã¹ãã§ã¯ãªããšä¿¡ããŠãããšããããšã§ãããããã®ããã€ããã³ãŒãããèªããªãããã®ãšããŠèªèããŸãïŒå°ãªããšããC ++ãã»ãŒ10幎åã«ãã£ããæ¡åŒµCãã«æ £ããŠããéçºè ã«ãšã£ãŠã¯ïŒã
ãã¢ã³ã¯éåžžã«å®çšçãªäººç©ã ãšæããŸãããã®ãããææ°ã®æœè±¡åãšããå¹ççãªããŒã¿æ§é ã䜿çšããŠããšã³ãžãã¢ãªã³ã°ã®ãã¬ãŒããªãã«äŸ¡å€ãããããšã圌ã«çŽåŸãããããšã®å©ç¹ã瀺ã倧ããªæŠå¿µå®èšŒãå¿ èŠã«ãªãã§ãããã @ vblanco20-1ã¯ãããŸã§çŽ æŽãããä»äºãããŠããã®ã§ã圌ããã®ãããªããšããããã®ãªããç§ã¯å人çã«æ¯æããããã®ãéã圌ã«åããŠçœ®ãããšãèºèºããŸããã
Godotã®éçºè ããåªããã¢ã€ãã¢ãããã©ãŒãã³ã¹ãé²æ©ã«ã¢ã¬ã«ã®ãŒãããããã«æ¯ãèãããšã«ãç§ã¯çµ¶ããé©ããŠããŸãã ãããåŒã蟌ãŸããªãã£ãã®ã¯æ®å¿µã§ãã
ããã¯ãæé©åã«ã€ããŠãæ£ç¢ºã«ã¯ããŒã¿æ§é ã®äœ¿çšæ³ã«ã€ããŠåãçµãã§ããäžé£ã®èšäºã®äžéšã§ãã
Godotã¯STLã³ã³ãããšãã®C ++ 03ãçŠæ¢ããŠããŸãã ããã¯ãã³ã³ããã«ç§»åæŒç®åããªããã³ã³ãããSTLã³ã³ããèªäœãããæªãåŸåãããããšãæå³ããŸãã ããã«ãgodotããŒã¿æ§é ã®æŠèŠãšãããã®åé¡ããããŸãã
äºåã«å²ãåœãŠãããC ++é
åã ãšã³ãžã³å
šäœã§éåžžã«äžè¬çã§ãã ãã®ãµã€ãºã¯ãããã€ãã®æ§æãªãã·ã§ã³ã«ãã£ãŠèšå®ãããåŸåããããŸãã ããã¯ã¬ã³ãã©ãŒã§ã¯éåžžã«äžè¬çã§ãããé©åãªåçé
åã¯ã©ã¹ãããã§ããŸãæ©èœããŸãã
誀çšã®äŸïŒ https ïŒ
ãã®é
åã¯ãæ£åœãªçç±ããªãã¡ã¢ãªã浪費ããŠããŸããåçé
åã䜿çšãããšãã³ã³ãã€ã«å®æ°ã«ããæ倧ãµã€ãºã§ã¯ãªããå¿
èŠãªãµã€ãºã®ã¿ã«ãªããããããã§ã¯éåžžã«åªãããªãã·ã§ã³ã«ãªããŸãã MAX_INSTANCE_CULLã䜿çšããåInstance *ã¢ã¬ã€ã¯ã0.5ã¡ã¬ãã€ãã®ã¡ã¢ãªã䜿çšããŠããŸã
VectorïŒvector.hïŒ std :: vectoråçé
åãšåçã§ãããæ·±ãæ¬ é¥ããããŸãã
ãã¯ãã«ã¯ãã³ããŒãªã³ã©ã€ãã®å®è£
ã§ã¢ãããã¯ã«åã«ãŠã³ããããŸãã ããªãããããšã
ãã¯ãã«a = build_vectorïŒïŒ;
ãã¯ãã«b = a;
refcountã¯2ã«ç§»åããŸããBãšAã¯ã¡ã¢ãªå ã®åãå Žæãæããç·šéãè¡ããããšé åãã³ããŒããŸãã ãã¯ãã«AãŸãã¯Bãå€æŽãããšããã¯ãã«ã³ããŒãããªã¬ãŒãããŸãã
ãã¯ãã«ã«æžã蟌ããã³ã«ãã¢ãããã¯refcountããã§ãã¯ããå¿ èŠãããããã¯ãã«å ã®ãã¹ãŠã®æžã蟌ã¿æäœãé ããªããŸãã godotVectorã¯å°ãªããšãstd :: vectorãã5åé ããšæšå®ãããŠããŸãã ãã1ã€ã®åé¡ã¯ããã¯ã¿ãŒããã¢ã€ãã ãåé€ãããšããã¯ã¿ãŒãèªåçã«åé 眮ãããå¶åŸ¡äžèœãªããã©ãŒãã³ã¹ã®åé¡ãçºçããããšã§ãã
PoolVectorïŒpool_vector.hïŒã ãã¯ãã«ãšã»ãŒåãã§ããã代ããã«ããŒã«ãšããŠäœ¿çšããŸãã Vectorãšåãèœãšãç©Žããããçç±ããªãã³ããŒãªã³ã©ã€ããšèªåããŠã³ãµã€ãžã³ã°ããããŸãã
ãªã¹ãïŒlist.hïŒstd :: listãšåçã ãªã¹ãã«ã¯ã2ã€ã®ãã€ã³ã¿ãŒïŒæåãšæåŸïŒ+èŠçŽ ã«ãŠã³ãå€æ°ããããŸãã ãªã¹ãå ã®ãã¹ãŠã®ããŒãã¯äºéã«ãªã³ã¯ãããŠãããããã«ãªã¹ãã³ã³ããèªäœãžã®è¿œå ã®ãã€ã³ã¿ããããŸãã ãªã¹ãã®ãã¹ãŠã®ããŒãã®ã¡ã¢ãªãªãŒããŒãããã¯24ãã€ãã§ãã ãã¯ã¿ãŒã¯äžè¬çã«ããŸãè¯ããªããããgodotã§ã¯ã²ã©ãé ·äœ¿ãããŠããŸãã ãšã³ãžã³å šäœã§ã²ã©ã誀çšãããŸããã
倧ããªèª€çšã®äŸïŒ
https://github.com/godotengine/godot/blob/master/servers/visual/visual_server_scene.h#L129
ããããªã¹ãã§ããçç±ã¯äœããããŸããããã¯ãã«ã§ããã¹ãã§ã
https://github.com/godotengine/godot/blob/master/servers/visual/visual_server_scene.h#L242
ãã®ã±ãŒã¹ã®ãã¹ãŠãééã£ãŠããŸãã ç¹°ãè¿ããŸãããããã¯ãã¯ãã«ãŸãã¯é¡äŒŒã®ãã®ã§ãªããã°ãªããŸããã ããã¯å®éã«ããã©ãŒãã³ã¹ã®åé¡ãåŒãèµ·ããå¯èœæ§ããããŸãã
æ倧ã®ééãã¯ãã«ãªã³ã°ã«äœ¿çšãããå
«åæšã§ãªã¹ãã䜿çšããããšã§ãã ãã®ã¹ã¬ããã§ã¯ãgodotoctreeã«ã€ããŠãã§ã«è©³ãã説æããŸããã
SelfListïŒself_list.hïŒã¯ãboost :: intrusive_listã«äŒŒã䟵å
¥åãªã¹ãã§ãã ããã¯ãèªåèªèº«ãæããããããŒãããšã«åžžã«32ãã€ãã®ãªãŒããŒããããæ ŒçŽããŸãã ãšã³ãžã³å
šäœã§ã²ã©ã誀çšãããŸããã
äŸïŒ
https://github.com/godotengine/godot/blob/master/servers/visual/visual_server_scene.h#L159
ããã¯ç¹ã«æªãã§ãã ãšã³ãžã³å
šäœã§ææªã®1ã€ã ããã¯ãçç±ããªãããšã³ãžã³å
ã®ãã¹ãŠã®ã¬ã³ããªã³ã°å¯èœãªãªããžã§ã¯ãã«8ã€ã®å€ªãã®ãã€ã³ã¿ãŒãè¿œå ããŸãã ããããªã¹ãã§ããå¿
èŠã¯ãããŸããã ç¹°ãè¿ãã«ãªããŸãããã¹ãããããããŸãã¯ãã¯ã¿ãŒã«ããããšãã§ããããã眮ãæããŸããã
MapïŒmap.hïŒèµ€é»æšã ã»ãšãã©ãã¹ãŠã®çšéã§ããã·ã¥ããããšããŠèª€çšãããŠããŸãã 䜿çšæ³ã«å¿ããŠãOAHashmapãŸãã¯Hashmapãåªå
ããŠããšã³ãžã³ããåé€ããå¿
èŠããããŸãã
ç§ãèŠããããã®ãã¹ãŠã®äœ¿çšã¯ééã£ãŠããŸããã æå³ã®ããå Žæã§äœ¿çšãããŠãããããã®äŸãèŠã€ãããŸããã
ããã·ã¥ãããïŒhash_map.hïŒã¯ããªã³ã¯ãªã¹ããã±ããã«åºã¥ãã¯ããŒãºã
OAHashMapïŒoa_hash_map.hïŒæ°ããäœæãããé«éãªãŒãã³
CommandQueueMTïŒcommand_queue_mt.hïŒããžã¥ã¢ã«ãµãŒããŒãªã©ã®ããŸããŸãªãµãŒããŒãšã®éä¿¡ã«äœ¿çšãããã³ãã³ããã¥ãŒã ããã¯ãããŒãã³ãŒãããã250 kbé åãã¢ãã±ãŒã¿ãŒããŒã«ãšããŠæ©èœãããããšã§æ©èœãããã¹ãŠã®ã³ãã³ããä»®æ³callïŒïŒããã³postïŒïŒé¢æ°ã䜿çšããŠãªããžã§ã¯ããšããŠå²ãåœãŠãŸãã ãã¥ãŒããã¯ã¹ã䜿çšããŠãããã·ã¥/ãããæäœãä¿è·ããŸãã ãã¥ãŒããã¯ã¹ã®ããã¯ã¯éåžžã«ã³ã¹ãããããããã代ããã«moodycamelãã¥ãŒã䜿çšããããšããå§ãããŸããããã¯ãæ¡éãã«é«éã§ããå¿ èŠããããŸãã ããã¯ãå€ãã®ç§»åãªããžã§ã¯ãã®ããã«ãããžã¥ã¢ã«ãµãŒããŒã§å€ãã®æäœãå®è¡ããã²ãŒã ã®ããã«ããã¯ã«ãªãå¯èœæ§ããããŸãã
ãããã¯ãgodotã®ããŒã¿æ§é ã®ã³ã¢ã»ããã§ãã é©åãªstd :: vectorã«çžåœãããã®ã¯ãããŸããã ãåçé åãããŒã¿æ§é ãå¿ èŠãªå Žåã¯ãVectorã«æ©ãŸãããæžã蟌ã¿æã®ã³ããŒãšããŠã³ãµã€ãžã³ã°ã«æ¬ ç¹ããããŸãã DynamicArrayããŒã¿æ§é ã¯ãgodotãä»æãå¿ èŠãšããŠãããã®ã ãšæããŸãã
ç§ã®ãã©ãŒã¯ã«ã¯ãå€éšã©ã€ãã©ãªã®STLããã®ä»ã®ã³ã³ããã䜿çšããŠããŸãã 2ã€ã®ããã·ã¥ããããé€ããŠãããã©ãŒãã³ã¹ã®ç¹ã§STLãããæªããããgodotã³ã³ãããŒã¯é¿ããŠããŸãã
4.0ã®vulkanå®è£ ã§èŠã€ãã£ãåé¡ã ç§ã¯ãã®äœæ¥ãé²è¡äžã§ããããšãç¥ã£ãŠããã®ã§ããããä¿®æ£ããæéã¯ãŸã ãããŸãã
ã¬ã³ããªã³ã°APIã§ã®Mapã®äœ¿çšã https://github.com/godotengine/godot/blob/vulkan/drivers/vulkan/rendering_device_vulkan.h#L350
ç§ãã³ã¡ã³ãããããã«ããããã®é©åãªäœ¿çšæ³ã¯ãªããããããååšããçç±ããããŸããã ãã®ãããªå Žåã¯ããã·ã¥ãããã«ããå¿
èŠããããŸãã
é
åãªã©ã ãã§ãªãããªã³ã¯ãªã¹ãã®ä¹±çšã
https://github.com/godotengine/godot/blob/vulkan/drivers/vulkan/rendering_device_vulkan.h#L680
幞ããªããšã«ãããã¯é«éã«ãŒãã§ã¯ãªãå¯èœæ§ããããŸãããããã§ãã䜿çšãã¹ãã§ãªãå Žæã§ãªã¹ãã䜿çšããäŸã§ãã
ã¬ã³ããªã³ã°APIã§PoolVectorãšVectorã䜿çšããŸãã https://github.com/godotengine/godot/blob/vulkan/drivers/vulkan/rendering_device_vulkan.h#L747
ã¬ã³ããªã³ã°APIã®æœè±¡åã®äžéšãšããŠãããã2ã€ã®æ¬ é¥ã®ããæ§é ã䜿çšããæ¬åœã®çç±ã¯ãããŸããã ãããã䜿çšããããšã«ããããŠãŒã¶ãŒã¯ä»ã®ããŒã¿æ§é ã䜿çšãã代ããã«ãæ¬ ç¹ã䌎ã£ãŠããã2ã䜿çšããããšãäœåãªããããŸãã ãããã®å Žåã¯ãã€ã³ã¿+ãµã€ãºã䜿çšããå¿
èŠã«å¿ããŠãã¯ãã«ãåãåãé¢æ°ã®ããŒãžã§ã³ã䜿çšããããšããå§ãããŸãã
ãã®APIããŠãŒã¶ãŒã«å®³ãåãŒãå®éã®äŸã¯ãé ç¹ãããã¡ãŒã®äœæé¢æ°ã§ãã GLTF圢åŒã§ã¯ãé ç¹ãããã¡ãŒã¯ãã€ããªãã¡ã€ã«ã«ããã¯ãããŸãã ãã®APIã䜿çšãããšããŠãŒã¶ãŒã¯GLTFãã€ããªãããã¡ãŒãã¡ã¢ãªã«ããŒãããåãããã¡ãŒã®ããŒã¿ãã³ããŒããŠãã®æ§é ãäœæããŠãããAPIã䜿çšããå¿
èŠããããŸãã
APIããã€ã³ã¿+ãµã€ãºããŸãã¯Span <>æ§é äœã䜿çšããå ŽåããŠãŒã¶ãŒã¯å€æãå®è¡ããã«ãããŒãããããã€ããªãããã¡ããAPIã«é ç¹ããŒã¿ãçŽæ¥ããŒãã§ããŸãã
ããã¯ããã¯ã»ã«ãšã³ãžã³ã®ããã«ãæç¶ãåé ç¹ããŒã¿ãæ±ã人ã ã«ãšã£ãŠç¹ã«éèŠã§ãã ãã®APIã䜿çšãããšãéçºè ã¯ãéçºè ã䜿çšããå éšæ§é ããçŽæ¥é ç¹ããŒã¿ãããŒãããã®ã§ã¯ãªããé ç¹ããŒã¿ã«Vectorã䜿çšããå¿ èŠããããããã©ãŒãã³ã¹ã«å€å€§ãªã³ã¹ãããããããããŒã¿ãVectorã«ã³ããŒããå¿ èŠããããŸãã
ãã®ãããã¯ã«ã€ããŠãã£ãšç¥ãããå Žåãç§ãç¥ã£ãŠããæé«ã®è©±ã¯CppConããã®ããã§ãã https://www.youtube.com/watch?v=fHNmRkzxHWs
ä»ã®çŽ æŽãããè¬æŒã¯ããã§ãïŒ https ïŒ
Godotã«ã¯ããã©ãŒãã³ã¹ã®å€§ããªåé¡ããããŸã... godotããŒã ãžã®è¯ãã¢ããã€ã¹ã«ãªãã§ãããããããèæ ®ããŠãã ããïŒ
è²¢ç®ãããå©ãããããæ£ããæ¹æ³ã§ã¯ãªããšæãã®ã§ããã®ã¹ã¬ãããéããŸãã
@ vblanco20-1ç¹°ãè¿ãã«ãªããŸãããããªããåæãæã£ãŠããããšãæ¬åœã«æè¬ããŠããŸããããšã³ãžã³ã®å éšåäœããã®èåŸã«ããå²åŠãç解ããŠããŸããã ããªãã®ã³ã¡ã³ãã®ã»ãšãã©ã¯ãããããã©ã®ããã«äœ¿çšãããŠããããããããããã©ãŒãã³ã¹ã«ãšã£ãŠã©ãã»ã©éèŠã§ãããããŸãã¯ãããã®åªå é äœãäžè¬çã«äœã§ããããæ¬åœã«ç解ããŠããªãããšã«åããããŠããŸãã
ããªãã®å£èª¿ãäžå¿ èŠã«æ»æçã§ãã äœãããããªãã®ãããªãäœããç¹å®ã®æ¹æ³ã§è¡ãããã®ããå°ãã代ããã«ãããªãã¯ãã å²æ ¢ã«ãªããŸãã ããã¯ããã®ã³ãã¥ããã£ã«ãšã£ãŠæ£ããæ 床ã§ã¯ãããŸããã
æé©åã«é¢ããŠããªããèšåããŠããããšã®ã»ãšãã©ã¯ãGodot 4.0ã§æé©åãèšç»ããã¢ã€ãã ã®éã®ããããããªè¡šé¢ã«ãããŸããïŒç§ã®ãªã¹ãã«ã¯ãã£ãšããããã®ãã®ããããŸãïŒã ããã¯æ°ã¶æåããäœåºŠãæžãçŽãããã ãããšç§ã¯ãã§ã«èšããŸããã ç§ãä¿¡ããªãã®ãªã倧äžå€«ã§ãããããã§èªåã®æéãç¡é§ã«ããæçœãªçç±ããªãå€ãã®äººãæ··ä¹±ãããŠããããã«æããŸãã
ä»äºãçµãã£ããããã£ãŒãããã¯ãæè¿ããŸãããä»ããŠããã®ã¯æ»ãã 銬ãåãããšã ããªã®ã§ããã°ããå·ãããŠãã ããã
ç¹°ãè¿ãã«ãªããŸãããGodot 4.0ã®ã¢ã«ãã¡çãå ¬éããããïŒã§ããã°ä»å¹Žã®çµãããŸã§ã«ïŒããã¹ãŠã®æ°ããã³ãŒãã®ãããã¡ã€ã«ãäœæãããããããã«æé©åããæ¹æ³ã«ã€ããŠãã£ãŒãããã¯ãæäŸããŠãã ããã ç§ãã¡ã¯çãæ©æµãåãããšç¢ºä¿¡ããŠããŸãã ä»ã®ãšãããæ¢åã®ã³ãŒãã¯4.0ã§å»æ¢ããã3.xãã©ã³ãã§ã¯äœãããŒãžãããªããããããã§ä»ã®ããšãè°è«ããæå³ã¯ããŸããããŸããããã®æç¹ã§ã¯ãæé©åãããå®å®æ§ãéèŠã§ãã
å€ãã®äººãæè¡çãªè©³çŽ°ã«èå³ããããããããªãã®ã§ïŒ
ç¹°ãè¿ãã«ãªããŸãããäžæ£ã«ãªã£ãŠæå¥ãèšã代ããã«ããã€ã§ãèšç»ãèšèšã«ã€ããŠè³ªåããããšãã§ããŸããããã¯ãããžã§ã¯ããæ¯æŽããæåã®æ¹æ³ã§ã¯ãããŸããã
ãŸãããã®ã¹ã¬ãããèªãã§ããå€ãã®äººãããªã空éã€ã³ãã¯ãµãŒãæåããé ãã®ãçåã«æã£ãŠãããšæããŸãã ãã®çç±ã¯ãããããããªãã¯Godotã«äžæ £ããªã®ãããããŸããããããæè¿ãŸã§3Dãšã³ãžã³ã¯10幎以äžåã®ãã®ã§ãããéåžžã«æ代é ãã§ããã OpenGL ES 3.0ã§ãããææ°åããããã®äœæ¥ãè¡ãããŸããããOpenGLã§èŠã€ãã£ãåé¡ãšãVulkanã§éæšå¥šã«ãªã£ãïŒãããŠAppleããããæŸæ£ããïŒãšããäºå®ã®ããã«ããããªããã°ãªããŸããã§ããã
ããã«å ããŠãGodotã¯ããã»ã©æã®PSPã®ãããªããã€ã¹ã§å®è¡ãããŠããŸããïŒãšã³ãžã³ãšã²ãŒã ã®äž¡æ¹ã§äœ¿çšã§ããã¡ã¢ãªã¯24 MBãããªããããå€ãã®ã³ã¢ã³ãŒãã¯ã¡ã¢ãªå²ãåœãŠã«é¢ããŠéåžžã«ä¿å®çã§ãïŒã çŸåšããŒããŠã§ã¢ã倧ããç°ãªã£ãŠãããããããã¯ããæé©ã§ããå€ãã®ã¡ã¢ãªã䜿çšããã³ãŒãã«å€æŽãããŠããŸããããã®äœæ¥ãè¡ãå¿ èŠããªãå Žåã¯ç¡æå³ã§ãããããã©ãŒãã³ã¹ãåäžããå€ãã®å Žæã§äœ¿çšããããªã¹ãã衚瀺ãããã®ã¯åé¡ãããŸãããåé¡ã«ãªããªãã
ãŸããGodotãC ++ 11ïŒã€ã³ã©ã€ã³ã¢ãããã¯ã®ãµããŒããã¯ããã«åªããŠããããµããŒããããŠããªãïŒã«ç§»è¡ã§ããããã«ãªããŸã§ãå®è¡ãããå€ãã®æé©åïŒãã¥ãŒããã¯ã¹ã³ãŒãã®å€ããã¢ãããã¯ã«ç§»åããŠããã©ãŒãã³ã¹ãåäžãããïŒãä¿çããå¿ èŠããããŸãããåå空éå šäœãæ±æããwindowsããããŒãå«ããå¿ èŠããããŸãïŒãããã¯ãå®å®ãããã©ã³ãã§ã¯å®è¡ã§ããŸããã§ããã C ++ 11ãžã®ç§»è¡ã¯ãGodot 3.2ãåå²ããŠæ©èœãããªãŒãºããåŸã«è¡ãããŸããããããªããšãVulkanãã¹ã¿ãŒãã©ã³ãã®åæãç¶æããã®ãéåžžã«å°é£ã«ãªããŸãã çŸåšãVulkanèªäœã«çŠç¹ãåœãŠãããŠãããããæ¥ãã§ããããšã¯ããŸããããŸããã
ç³ãèš³ãããŸããããæéãããããŸãããæ¥ãããããã¡ããšãã£ãŠããããšããå§ãããŸãã ããã¯é·æçã«ã¯ããè¯ãçµæããããããŸãã çŸåšããã¹ãŠã®ããã©ãŒãã³ã¹ã®æé©åã«åãçµãã§ãããããã«æºåãæŽãã¯ãã§ãïŒVulkanãã©ã³ãããã¹ãããå Žåã2Dãšã³ãžã³ã¯ä»¥åãããã¯ããã«é«éã§ãïŒã
ããã«ã¡ã¯reduzã
ç§ã¯ããªãã®ãã€ã³ããæå¹ã§ãããšã»ãšãã©èŠãŠããŸãããç§ãåæããªã2ã€ã«ã€ããŠã³ã¡ã³ãããããšæããŸãã
- ãªã¹ãã¯æçåã®ãªã¹ã¯ããŒãã§å°ããªæéå²ãåœãŠãè¡ãããããªã¹ãã䜿çšã§ããå Žåã¯é åã䜿çšããŸããã å Žåã«ãã£ãŠã¯ãåžžã«æ¡å€§ããçž®å°ããªãïŒRID_Allocatorã2Dãšã³ãžã³ã®Vulkanãã©ã³ãã®æ°ããCanvasItemã®ããã«ãã¢ã€ãã ãåæç»ã§ããããã«ãªã£ãïŒã»ã¯ã·ã§ã³åãããé åïŒããŒãžã«æãããããããæçåã0ã«ãªãïŒãå²ãåœãŠãããšã奜ã¿ãŸããå€ãã®ã³ãã³ããéåžžã«å¹ççã«äœ¿çšããŸãïŒããããã«ã¯ããã©ãŒãã³ã¹äžã®çç±ãå¿ èŠã§ãã Godotã§ãªã¹ãã䜿çšããå Žåãããã©ãŒãã³ã¹ãããå°ããªå²ãåœãŠãåªå ãããããã§ãïŒå®éããªã¹ãã䜿çšãããšãã³ãŒãã®æå³ãä»ã®äººã«ãããããããªããŸãïŒã
ãªã³ã¯ãªã¹ãããææ°é¢æ°çã«å¢å ããåçé
åããããé床ãã¡ã¢ãªå¹çãªã©ãå
šäœçãªããã©ãŒãã³ã¹ãåäžãããã©ããã¯éåžžã«çãããã§ãã åŸè
ã¯å®éã«äœ¿çšããã¹ããŒã¹ã®æ倧2åãå ããããšãä¿èšŒãããŠããŸããã List<some pointer>
ã¯æ£ç¢ºã«3åã®ã¹ãã¬ãŒãžïŒå®éã®ã³ã³ãã³ãã次ã®ãã€ã³ã¿ãŒãåã®ãã€ã³ã¿ãŒïŒã䜿çšããŸãã ã»ã¯ã·ã§ã³åãããé
åã®å Žåãç¶æ³ã¯ããã«è¯ãèŠããŸãã
é©åã«ã©ãããããŠããå ŽåïŒãããŠãgodotã³ãŒãã«ã€ããŠãã§ã«èŠããã®ãããããéãïŒãããã°ã©ããŒã«ã¯ã»ãšãã©åãããã«èŠããã®ã§ãããããã®[ãªã¹ã]ã³ãŒãã®æå³ãããæ確ã«ããŸããã
ç§èŠããªã¹ãã¯æ¬¡ã®2ã€ã®æ¡ä»¶ã§æ£ç¢ºã«æå¹ã§ãã
- Map <>ã¯ã倧éã®èŠçŽ ã«å¯ŸããŠåçŽã§äœ¿ãããããæçåãåŒãèµ·ããæ¥æé·/éãã«ã€ããŠå¿é ããå¿ èŠã¯ãããŸããã ããã©ãŒãã³ã¹ãå¿ èŠãªå Žåã¯ã代ããã«HashMapã䜿çšãããŸãïŒããã¯æ¬åœã§ãããããããOAHashMapããã£ãšäœ¿çšããå¿ èŠããããŸãããããã¯æ°ããããŠããããè¡ãæéããããŸããã§ããïŒã äžè¬çãªå²åŠãšããŠãããã©ãŒãã³ã¹ãåªå ãããªãå Žåããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã¡ã¢ãªã¢ãã±ãŒã¿ãå°ããªç©ŽãèŠã€ããŠããããå ¥ããã®ãç°¡åã§ãããããå°ããªå²ãåœãŠãåžžã«å€§ããªå²ãåœãŠãããåªå ãããŸãïŒããã¯ã»ãšãã©èšèšãããŠããŸãïŒ ãå¹æçã«å°ãªãããŒããæ¶è²»ããŸãã
libc-allocatorã¯éåžžéåžžã«ã¹ããŒãã§ãããOAHashMapïŒãŸãã¯std :: unordered_mapïŒã¯ã¹ãã¬ãŒãžãæã åå²ãåœãŠããããïŒäžå®æéã§ååŽïŒãã¢ãã±ãŒã¿ãŒã¯éåžžãã¡ã¢ãªãããã¯ãã³ã³ãã¯ãã«ä¿ã€ââããšãã§ããŸãã OAHashMapã¯ãMapã®ãããªåçŽãªãã€ããªããªãŒããããããå€ãã®ããŒããå¹æçã«æ¶è²»ããªããšç¢ºä¿¡ããŠããŸãã 代ããã«ãMapã®åèŠçŽ ã®å·šå€§ãªãã€ã³ã¿ãŒãªãŒããŒãããã¯ãå®éã«ã¯OAHashmapïŒãŸãã¯std :: unordered_mapïŒã®ããŒããã©ã°ã¡ã³ããŒã·ã§ã³ãããå€ãã®ã¡ã¢ãªãæ¶è²»ãããšç¢ºä¿¡ããŠããŸãã
çµå±ã®ãšããããããã®çš®é¡ã®è°è«ãæŽçããããã®æè¯ã®æ¹æ³ã¯ãããããã³ãããŒã¯ããããšã ãšæããŸãã 確ãã«ãããã¯Godot 4.0ã«ãšã£ãŠã¯ããã«æçšã§ãããªããªããããªããèšã£ãããã«ãããã§ã¯å€ãã®ããã©ãŒãã³ã¹ã®æé©åãè¡ããããšã«ãã4.0ã§å®å šã«æžãçŽãããå¯èœæ§ã®ããã³ãŒããã¹ãæ¹åããããšã¯ããŸã䜿çšãããªãããã§ãã
ããã@reduzãããªãã¯@ vblanco20-1ãïŒ3.1ãå€åä»ã§ãïŒã瀺åããŠããããšããã¹ãŠã®ãããã®å€æŽããã³ãããŒã¯ãã©ãæããŸããã @ vblanco20-1ïŒãŸãã¯ä»ã®èª°ãïŒããã®ãããªãã³ãããŒã¯ã¹ã€ãŒãã®äœæã«æéãè²»ãããvblancoã®å€æŽã«å¯ŸããGodot3.1ã®ããã©ãŒãã³ã¹ïŒé床ãšãæçåãèæ ®ããããŒãæ¶è²»ãã®äž¡æ¹ã®èŠ³ç¹ããïŒãè©äŸ¡ããææãããå Žåã¯ã©ãã§ããããã å®éã®4.0ã®å€æŽã«ã€ããŠè²Žéãªãã³ããåŸãããå¯èœæ§ããããŸãã
ãã®ãããªæ¹æ³è«ã¯ãããªãã®ãæ¥ãã®ã§ã¯ãªããé©åã«è¡ããããããšã«ããåã£ãŠãããšæããŸãã
@ vblanco20-1ïŒå®éãç§ã¯ããªãã®ä»äºã«æè¬ããŸãã ããªãã®å€æŽãå®éã®ããã©ãŒãã³ã¹ã®æ¹åã§ãããã©ãããå®éã«æž¬å®ã§ããããã«ããã®ãããªãã³ãããŒã¯ãäœæããããã«åæ©ä»ããããŸããïŒ ãšãŠãèå³ããããŸãã
@Windfischããã€ãã®ããšãèªã¿ééããã誀解ãããããã®ã§ãäžèšã®ç§ã®æçš¿ã
ãããã«ãããç§ã¯ãã¯ã¿ãŒã«ã€ã³ããã¯ã¹ã³ãŒãããã©ã°ã€ã³ã§ãããšçŽæããã®ã§ãæçµçã«ã¯ã²ãŒã ã®çš®é¡ããšã«ç°ãªãã¢ã«ãŽãªãºã ãå®è£ ããããšãã§ããŸãã
Godotã¯ãªãŒãã³ãœãŒã¹ã§ããã圌ã®ãã©ãŒã¯ããªãŒãã³ãœãŒã¹ã§ãã ç§ãã¡ã¯çããã§ãªãŒãã³ã§å ±æããŠããŸããããªãããããå¿ èŠãšãããªãã°ãããªãã圌ã®äœåã䜿ãã®ã劚ãããã®ã¯äœããããŸããã
ãã®æé©åã¯gdscriptãã¬ã³ããªã³ã°ããŸãã¯ãåé³ãã®åé¡ã«åœ±é¿ãäžããªãããã§ããã人ã
ãäžå¹³ãèšãããšãããã®ã§ïŒç§ãå«ãïŒãããããæé©åã人ã
ã幞ãã«ããããšãéæãããšïŒç§ãå«ãïŒ...å¿
èŠãããŸããã«ã¢ãžããé床..ã
ãã³ããŒãªã³ã©ã€ããã§ã®äœæ¥ã¯ãç§ã®ãã©ã°ã€ã³ã§ã®éåžžã«å€§ããªããã©ãŒãã³ã¹ã®æé©åã§ããïŒã¹ã¯ãªãã解æã®25ç§ãã7000è¡ã®ã¹ã¯ãªããã®ããã1ç§ãŸã§ïŒ...ãã®çš®ã®æé©åã¯ç§ãã¡ãgdscriptã§ãã¬ã³ããªã³ã°ã§ãåé³ã®åé¡ãéæããå¿
èŠããããŸã...ããã ãã§ãã
ã説æããã ãããããšãããããŸã@reduz ã ããã¯ç¢ºãã«ããªãã®ãã€ã³ãã以åã®æçš¿ãããæ確ã«ããŸããã
空éã€ã³ããã¯ã¹ã³ãŒãããã©ã°ã€ã³å¯èœã§ããã®ã¯è¯ãããšã§ãããªããªããéåžžã«ç°ãªãã¹ã±ãŒã«ã§å€ãã®ãªããžã§ã¯ããåŠçãããšãã«ãå®éã«åã«è¶³ãèžã¿å ¥ããããã§ãã 4.0ã楜ãã¿ã«ããŠããŸãã
ç§ãããã«ã€ããŠèããŠããŸããã空éã€ã³ããã¯ã¹ã®æé©åã«é¢ããã¢ã€ãã¢ãå ±æããã¥ã¡ã³ãã«å ¥ããŠãããå€ãã®è²¢ç®è ãããã«ã€ããŠåŠã³ãã¢ã€ãã¢ãæããããå®è£ ãããã§ããããã«ããã®ã¯è¯ãèããããããŸããã äœãããå¿ èŠããããã«ã€ããŠã¯éåžžã«è¯ãèãããããŸãããããã«ã¯ããã«æé©åãè¡ããèå³æ·±ãã¢ã«ãŽãªãºã ãèãåºãäœå°ããããããããšç¢ºä¿¡ããŠããŸãã
ã¢ã«ãŽãªãºã ãæºãããªããã°ãªããªãããšãããã£ãŠããéåžžã«æ確ãªèŠä»¶ãèšå®ã§ããŸãïŒããšãã°ãäžçãµã€ãºã®å¹³åçãªèŠçŽ ã«å¯ŸããŠãŠãŒã¶ãŒãå¯èœãªéã埮調æŽããå¿ èŠã¯ãªããå¯èœã§ããã°ã¹ã¬ãããç·åœããæ»æããå¿ èŠã¯ãããŸãã-ãããã¯ç¡æã§ã¯ãããŸãããä»ã®éšåãšã³ãžã³ãç©çåŠãã¢ãã¡ãŒã·ã§ã³ã®ããã«ããããå¿ èŠãšããã¢ãã€ã«ã§ããå€ãã®ããããªãŒãæ¶è²»ããŸã-åæ圱ããŒã¹ã®ãªã¯ã«ãŒãžã§ã³ã«ãªã³ã°ãšã®äºææ§-ãããã£ãŠãäœããã®åœ¢ã®éå±€ãå¿ èŠãªå ŽåããããŸããããã«ãŒããã©ãŒã¹ã«å¯ŸããŠããã¹ãããå¿ èŠããããŸã-ãã¹ããŒãã§ããã·ã£ããŠãããã¡ã®æŽæ°ã«ã€ããŠ-äœãå€æŽãããŠããªãå Žåã¯æŽæ°ããªã-ãæ¹åæ§ã·ã£ããŠã®åæ圱ããŒã¹ã®ãªã¯ã«ãŒãžã§ã³ã«ãªã³ã°ãªã©ã®æé©åãæ€èšããŸãïŒã ããã€ãã®ãã³ãããŒã¯ãã¹ãã®äœæã«ã€ããŠã説æã§ããŸãïŒTPSãã¢ã«ã¯ãªããžã§ã¯ãããªã¯ã«ãŒãžã§ã³ãå°ãªããããè¯ããã³ãããŒã¯ã§ã¯ãªããšæããŸãïŒã @ vblanco20-1ã³ãŒãã£ã³ã°/èšèªã®ã¹ã¿ã€ã«ãšå²åŠã«åŸãããšæã£ãŠãããªãããã¡ãã倧æè¿ã§ãã
æ®ãã®ã¬ã³ããªã³ã°ã³ãŒãïŒRenderingDeviceã䜿çšããå®éã®ã¬ã³ããªã³ã°ïŒã¯å€ããå°ãªããç°¡åã§ããããããè¡ãæ¹æ³ã¯å€ããããŸããããã€ã³ããã¯ã¹äœæã¯æé©åã®ããã«è§£æ±ºããããã®ããèå³æ·±ãåé¡ã®ããã§ãã
空éã€ã³ããã¯ã¹ã®åç
§çšã®@reduz ã å
ã®ã¿ã€ã«ããŒã¹ã®ã«ãªã³ã°ã¯åé€ããããã®ã¹ã¬ããã®çŽååã§ãªã¯ããªãŒã«çœ®ãæããããŸããã ç§ãããã«æã£ãŠããå
«åæšã¯WIPã§ãïŒããã€ãã®åãã£ããæ©èœããããŸããïŒããçµæã¯ãããã¿ã€ãã«ãšã£ãŠããªãè¯ãã§ãã ãã®ã³ãŒãã¯ãããã¿ã€ãã®æ§è³ªããã¯ããã»ã©è¯ããªãã®ã§ããã®çš®ã®octreeãtps-demoãªã©ã®è€éãªã·ãŒã³ã§ã©ã®ããã«æ©èœãããã確èªããããã«ã®ã¿åœ¹ç«ã¡ãŸãã
ããã¯ãéçŸå®çãªãšã³ãžã³ã®å
«åæšãã©ã®ããã«æ©èœãããã«è§ŠçºãããŠããŸããããã©ãããªå埩ã®å¯èœæ§ãªã©ãããã€ãã®å€æŽãå ããããŠããŸãã
äž»ãªã¢ã€ãã¢ã¯ããªã¯ãããªãŒã®ãªãŒãã®ã¿ããªããžã§ã¯ããä¿æãããããã®ãªããžã§ã¯ãã¯ãµã€ãº64ã®é åã«ä¿æããããšããããšã§ãïŒã³ã³ãã€ã«æã®ãµã€ãºã¯ç°ãªãå ŽåããããŸãïŒã å «åæšã®èã¯ã65åã®èŠçŽ ã«ããªãŒããŒãããŒããããšãã«ã®ã¿åå²ãããŸãã ãªããžã§ã¯ããåé€ãããšãã«ã芪ããŒãã®åãªãŒãã64ãµã€ãºã®é åã«åãŸãå Žåã¯ããªãŒããããŒãžããŠèŠªããŒãã«æ»ããŸããããããªãŒãã«ãªããŸãã
ããããããšã§ãå «åæšãæ·±ããªããããªããããããŒãã§ã®ãã¹ãæéãæå°éã«æããããšãã§ããŸãã
ç§ããã£ãŠãããã1ã€ã®è¯ãç¹ã¯ããªãŒãããŒãããã©ããé åã«æ ŒçŽãããŠããããšã§ããããã«ãããã«ãªã³ã°ã§ã®äžŠååŠçãå¯èœã«ãªããŸãã ãã®ããã«ããŠããã€ã³ãã·ã£ããŠã®ã«ãªã³ã°ããã®ä»ã®ãå°ããªãæäœãè¡ããšãã«éå±€çã«ãªã³ã°ã䜿çšã§ããã¡ã€ã³ãã¥ãŒã«ãã©ãããªå¹³è¡ã«ãªã³ã°ã䜿çšã§ããŸãã ãã¡ããããã¹ãŠã«éå±€ã䜿çšããããšãã§ããŸãããé床ãé ããªãã䞊ååã§ããªãå¯èœæ§ããããŸãã
ãããã¯æ§é ã¯å°ãã®ã¡ã¢ãªã浪費ããŸãããææªã®ã·ããªãªã§ããããŒããéãäžåããšããŒãžãããããã倧éã®ã¡ã¢ãªã浪費ãããšã¯æããŸããã ãŸããããŒããšãªãŒãã®äž¡æ¹ãäžå®ã®ãµã€ãºã«ãªãå Žåã¯ãããŒã«ã¢ãã±ãŒã¿ã䜿çšã§ããŸãã
ãŸãããã©ãŒã¯ã«ã¯è€æ°ã®å «åæšããããããã€ãã®ãã®ãæé©åããããã«äœ¿çšãããŸãã ããšãã°ãã·ã£ããŠãã£ã¹ã¿ãŒãªããžã§ã¯ãå°çšã®ãªã¯ãããªãŒããããŸããããã«ãããã·ã£ããŠããããã«ãªã³ã°ãããšãã«ãã·ã£ããŠããã£ã¹ãã§ãããã«é¢é£ãããã¹ãŠã®ããžãã¯ãã¹ãããã§ããŸãã
ã¬ã³ããªã³ã°APIã«é¢ããVectorããã®ä»ã®æžå¿µã«ã€ããŠããã®åé¡ã¯ç§ãæžå¿µããŠããããšã説æããŠããŸãã https://github.com/godotengine/godot/issues/24731
ã©ã€ãã©ãªãšãã©ãŒã¯ã®C ++ 17ã®ãã®ã«ã€ããŠ..ããã¯äžèŠã§ãã ã©ã€ãã©ãªã®äžéšãå¿ èŠã ã£ãããããã©ãŒã¯ã¯å€ãã®ã©ã€ãã©ãªã䜿ããããŠããŸãã æ¬åœã«å¿ èŠã§ãgodotãå¿ èŠã ãšæãã®ã¯ãæ¥çã§åŒ·åãªäžŠåãã¥ãŒã ãã§ããç§ã¯ããã«ã ãŒãã£ãã£ã¡ã«ãã¥ãŒã䜿çšããŸããã
ã©ã ãã§ã¯ããããã®äœ¿çšæ³ã¯äž»ã«ã«ãªã³ã°ã«äœ¿çšããããã§ãã¯ã«åæ Œãããªããžã§ã¯ããåºåé åã«ä¿åããã ãã§ããããã倧éã®ã¡ã¢ãªãç¯çŽããããã«äœ¿çšãããŸãã å¥ã®æ¹æ³ã¯ãã€ãã¬ãŒã¿ãªããžã§ã¯ããå®è¡ããããšã§ãïŒããã¯ãUnreal Engineãoctreeã§å®è¡ããããšã§ãïŒããæçµçã«ã¯ã³ãŒããæªããªããèšè¿°ãéåžžã«å°é£ã«ãªããŸãã
ç§ã®æå³ã¯ãäžæ£ã«ãªããããšã§ã¯ãªããããã¢çšã®ãã©ãŒã¯ãèªç±ã«äœæã§ããããšããé »ç¹ãªã³ã¡ã³ãã«çããããšã§ãããããã¯ãŸãã«iveãè¡ã£ãããšã§ãã ã¹ã¬ããã®æåã®ã¡ãã»ãŒãžã¯å°ãèŠæå¿ã匷ããããŸãæ£ãããããŸããã ç§ã®å¯äžã®ç®æšã¯æã人æ°ã®ãããªãŒãã³ãœãŒã¹ã²ãŒã ãšã³ãžã³ãæ¯æŽããããšãªã®ã§ã倱瀌ã«æãããå Žåã¯ç³ãèš³ãããŸããã
@ vblanco20-1ããã¯çŽ æŽãããã§ããããããŠããªããå «åæšãæ©èœããããšãèšãæ¹æ³ã¯éåžžã«çã«ããªã£ãŠããŸãã ç§ã¯æ£çŽã«äžŠåãã¥ãŒãå®è£ ããããšãæ°ã«ããŸããïŒå€éšäŸåé¢ä¿ãå¿ èŠãšããªãã»ã©åçŽã§ããããããé©åã«è¡ãã«ã¯C ++ 11ãå¿ èŠãªã®ã§ãVulkanãã©ã³ãã§ã®ã¿çºçãããšæããŸãïŒã ãããã³ãããããŠããå Žåã¯ããã²èŠãŠã¿ãããšæããŸãã®ã§ãVulkanãã©ã³ãã§ã®ã€ã³ãã¯ãµãŒã®æžãæãã®åºç€ãšããŠäœ¿çšã§ããŸãïŒã»ãšãã©ã®ãã®ãæžãæããŠããã ããªã®ã§ããšã«ããæžãæããå¿ èŠããããŸãïŒ ïŒã ãã¡ãããå®è£ ãæ¯æŽãããå ŽåïŒãããããæ°ããAPIã§ããã«å€ãã®ããšãè¡ãããŠããå ŽåïŒãããã¯å€§æè¿ã§ãã
ãã©ããåãããé åã䜿çšãã䞊åããŒãžã§ã³ã®äœ¿çšã¯èå³æ·±ãã§ãããããã«ã€ããŠã®ç§ã®èŠè§£ã¯ããªã¯ã«ãŒãžã§ã³ã«ãªã³ã°ã«ã¯ããã»ã©æçšã§ã¯ãªããéåžžã®ãªã¯ãããªãŒã«ãªã³ã°ãããã©ãã ãæ¹åãããŠãããã枬å®ããããšã¯èå³æ·±ãã§ãããã䜿çšãããã³ã¢ã®äœåãªéãèæ ®ããŸãã ïŒç©çåŠã®ããã«ïŒããå¹ççã«ïŒãã«ãŒããã©ãŒã¹ãå°ãªãïŒäœ¿çšã§ããè€æ°ã®ã¹ã¬ããã䜿çšããŠããå¯èœæ§ã®ããä»ã®å€ãã®é åãããããšã«æ³šæããŠãã ããããããã£ãŠããã®ã¢ãããŒãã§æ¯èŒçããããªæ¹åãåŸããããšããŠããå¿ ããããããšã¯éããŸããã CPUã®äœ¿çšããä»ã®é åã飢ããããå¯èœæ§ããããããæåã®å©çã«ãªããŸãã å€åããã¯ãªãã·ã§ã³ãããããŸããã
ãŸããBullet 3ã®dbvtã®å®è£ ã¯éåžžã«èå³æ·±ããã®ã§ãããã€ã³ã¯ãªã¡ã³ã¿ã«ã»ã«ããã©ã³ã·ã³ã°ãšç·åœ¢å²ãåœãŠãå®è¡ããŸããããã¯ç§ããã£ãšèª¿æ»ãããã£ãããšã®1ã€ã§ãïŒãã®ã¢ãããŒããç¬èªã®ãšã³ãžã³ã«å®è£ ãããŠããã®ãèŠãããšããããŸãïŒPïŒãã¢ã«ãŽãªãºã çã«ã¯ããã©ã³ã¹äºåæšã¯èšèšäžãå «åæšãããã¯ããã«åé·æ§ãäœãããã¢ãªã³ã°ãã¹ããšãªã¯ã«ãŒãžã§ã³ãã¹ãã®äž¡æ¹ã§ããŸãæ©èœããå¯èœæ§ããããããé©åãªæçšæ§ãæäŸããããšãèãããšããã©ã°å¯èœãªãããŒããã§ãŒãº/ã«ãªã³ã°ã¢ãããŒãã¯å®éã«ã¯è¯ãèããããããŸãããã³ãããŒã¯ã·ãŒã³ã
ãããã«ãããããªãã¯éåžžã«é ãè¯ããäžç·ã«åãçµãããšãã§ããã°çŽ æŽãããã®ã§ãããç§ãã¡ãæã£ãŠããæ¢åã®ãã¶ã€ã³å²åŠã®å€ããç解ããå°éããŠãã ããã ã ãããžã§ã¯ãã¯å·šå€§ã§ãæ £æ§åã倧ããã奜ã¿ã®ããã«ç©äºãå€ããã®ã¯è¯ãèãã§ã¯ãããŸããã 䜿ãããããšãæ£ããæ©èœãããããšã¯åžžã«èšèšã«é¢ãããªã¹ãã®æåã§ãããã³ãŒãã®åçŽããšèªã¿ãããã¯éåžžãå¹çãããåªå ãããŸãïŒã€ãŸããé åãéèŠã§ã¯ãªãããã«å¹çãç®æšã§ã¯ãªãå ŽåïŒã åå話ãåã£ããšããããªãã¯ã»ãšãã©ãã¹ãŠãå€ããããšæã£ãŠããŠãæšè«ã«è³ãåŸããããå®éã®åé¡ã«çŠç¹ãåããããããããããŸããã§ãããããã¯ç§ãã¡ãéåžžã³ãã¥ããã£ãè²¢ç®è ãšååããæ¹æ³ã§ã¯ãããŸãããããæå³ãããŠããŸãã
誰ãããã©ãŒãã³ã¹ãå¿ èŠãšããŸããïŒ ïŒãã€é¡ïŒ
ããã©ãŒãã³ã¹ãšãœãŒã¹ã¢ãã«ããGodotãç¶æããŠããçç±ã§ãã
ç·šéïŒç³ãèš³ãããŸããããç§ã¯å°ããªããããã¯ãããããŸãããããªãŒãã³ãœãŒã¹ã®å©ç¹ãæ確ã«ããããšæããŸããã
@mixedCaseGodotã®ããããçš®é¡ã®ãã©ãŒã¯ããµããŒãããããšãéåžžã«èºèºããŸãã ãã©ãŒã¯ãšæçåã¯ãå€ãã®å ŽåããªãŒãã³ãœãŒã¹ãããžã§ã¯ãã®æ»ã§ãã
ããã¯æããŸããã ãªãŒãã³ãœãŒã¹ã®æ§è³ªã¯ãã³ãŒããèªç±ã«äœ¿çšããã³åå©çšã§ããããšã§ãã ãããã£ãŠãããã§äžéšã®ãããžã§ã¯ãã¯çµäºããã®ã§ã¯ãªãããŠãŒã¶ãŒã«ãšã£ãŠããå€ãã®ãªãã·ã§ã³ãæäŸãããŸãã
ããªããèšãããšã¯ç¬å ã§ãããããã¯ãªãŒãã³ãœãŒã¹ãæè·ãããã®ã§ã¯ãããŸããã äœããå®å
šã«å¶åŸ¡ããæ¹ãè¯ããšããªãã«èŠãããããµããããŠããäŒç€Ÿã«ã ãŸãããŠã¯ãããŸããã å°ãªããšããªãŒãã³ãœãŒã¹ã®äžçã§ã¯ãããã¯åã§ããä»ã®èª°ããã³ãŒããæã£ãŠããå Žåãããªããã³ãŒããæã£ãŠããããã§ãã 圌ããããªããã°ãªããªãããšã¯ãã³ãã¥ããã£ãã©ã®ããã«æ±ããããŸãã¯ããã§å€§äžå€«ã«ãªãæ¹æ³ãäžè©±ããããšã§ãã
ãšã«ãããå ã®éçºè ã¯ãã©ãŒã¯ããã®æ¹åãããŒãžããããšãã§ããŸãã 圌ãã¯ãã€ã§ããããèªç±ã«è¡ãããšãã§ããŸãã ããããªãŒãã³ãœãŒã¹ã®äžçã®ããäžã€ã®æ§è³ªã§ãã
ãããŠææªã®å Žåããã©ãŒã¯ã¯å ã®ãã©ãŒã¯ãããåªããŠãããå€ãã®è²¢ç®è ãããã«è¡ããŸãã 誰ãè² ããããã¹ãŠåã¡ãŸããã ããããã¿ãŸãããäŒç€Ÿãå ã®äŒç€Ÿã«é ãããšã£ãŠããå Žåããããã圌ãã¯å€±ã£ãã§ãããïŒãŸãã¯åœŒãã¯ãã©ãŒã¯ããã®æ¹åãããŒãžããããšãã§ããŸãïŒã
æãåèã«ãªãã³ã¡ã³ã
ããªãã¯èå³ããããããããŸããã ç§ã¯ããªãé·ãé掟æãªãã©ãŒã¯ã«åãçµãã§ããŸããã çŸåšã®çµæã¯æ¬¡ã®ãšããã§ãã
4ã³ã¢ã®IntelCPUãšGTX1070ãæèŒãã倧åã²ãŒãã³ã°ããŒãããœã³ã³ã§ãã£ããã£
éåžžã®godot
https://github.com/vblanco20-1/godot/tree/ECS_Refactorã®ç§ã®ãã©ãŒã¯
ã©ã¡ãã®ãããã¡ã€ã«ã§ããèµ€ã¯æ¬è³ªçã«ãGPUãåŸ ã€ããã®ã§ãã openglã§ã®ãããŒã³ãŒã«ãå€ããããããçŸåšããã«ããã¯ã«ãªã£ãŠããŸãã ãã«ã«ã³ãã¬ã³ãã©ãŒå šäœãæžãçŽãããšãªããã«ã³ãã¯æ¬åœã«è§£æ±ºãããŸãã
CPUåŽã§ã¯ã13ããªç§ãã¬ãŒã ãã5ããªç§ãã¬ãŒã ã«ãªããŸãã ãé«éããã¬ãŒã ã¯5.5ããªç§ãã2.5ããªç§ã«ãªããŸã
ãããŒã¿ã«ãã¬ãŒã ãåŽã§ã¯ã13ããªç§ãã8ã9ããªç§ã«ãªããŸã
ã75 FPSãã115 FPS
ããå°ãªãCPUæé=ã²ãŒã ãã¬ã€ã«ããå€ãã®æéãè²»ããããšãã§ããŸãã çŸåšã®godotã¯CPUã§ããã«ããã¯ã«ãªã£ãŠãããããã²ãŒã ãã¬ã€ã«è²»ããæéãé·ããªããšFPSãäœããªããŸããããã©ãŒã¯ã¯GPUã«ãã€ã³ããããŠãããããCPUã¯ãç¡æãã§ãããããFPSãå€æŽããã«ã²ãŒã ãã¬ã€ããžãã¯ãããã«è¿œå ã§ããŸããããªãé·ãéãã¹ãŠã®ãã¬ãŒã ã
godotãææ°ã®C ++ããµããŒãããéåžžã«å®äŸ¡ãªãå°ããªãã¿ã¹ã¯ãå¯èœã«ãããã«ãã¹ã¬ããã·ã¹ãã ãåããŠããã°ããããã®æ¹åç¹ã®å€ãã¯godotã«ããŒãžå¯èœã§ãã
æ倧ã®å©ç¹ã¯ãåçãªããžã§ã¯ãïŒ25013ã§ãã«ãã¹ã¬ããã·ã£ããŠãšãã«ãã¹ã¬ããã©ã€ããããã®èªã¿åããå®è¡ããããšã«ãã£ãŠè¡ãããŸãã ãããã¯äž¡æ¹ãšãåãããã«æ©èœããŸãã ã¬ã³ãã©ãŒã®ä»ã®å€ãã®éšåããã«ãã¹ã¬ããåãããŠããŸãã
ä»ã®å©ç¹ã¯ãgodotããã10åãã20åéãOctreeã§ãããã«ãªã³ã°ãªã¹ããç¹°ãè¿ã代ããã«ã深床ããªãã¹ãšããŒãã«ãã¹ã®äž¡æ¹ã®ã¬ã³ããªã³ã°ãªã¹ããäžåºŠã«èšé²ãããªã©ãã¬ã³ããªã³ã°ã®ãããŒã®äžéšãæ¹åãããŠããŸã2ãæéãããã³ã©ã€ã->ã¡ãã·ã¥æ¥ç¶ã®åäœæ¹æ³ã®å€§å¹ ãªå€æŽïŒãªã³ã¯ãªã¹ããªãïŒïŒ
çŸåšãTPSãã¢ä»¥å€ã®ãã¹ãããããæ¢ããŠããã®ã§ãä»ã®ã¿ã€ãã®ãããã§ããå€ãã®ã¡ããªãã¯ã䜿çšã§ããŸãã ãŸããããããã¹ãŠãã©ã®ããã«æ©èœãããã詳现ã«èª¬æããäžé£ã®èšäºãæžãã€ããã§ãã