

ã°ããŒãã«ã«ãã¬ããžãªãã§ã·ãŒã³ãã¬ã³ããªã³ã°ããVCTã䜿çšããŸãã
ãŸã第äžã«ãç°å¢ãããïŒPMREM / IBLïŒã䜿çšããã°ããŒãã«ç §æã®å®è£ ã¯ãVCTãããå®äŸ¡ã§ãããšèšã䟡å€ããããŸãã ããšãã°ãããUE4éçºè ã®1人ãããããã£ã¹ã ïŒ1:34:05-1:37:50ïŒã§ãVCTã䜿çšããŠããç°å¢ãããã䜿çšããŠãã¢ãã¬ã³ããªã³ã°ãããšè©±ããŸããããç»åã¯ã»ãŒåãã§ããã ãã ãããã®ã¢ãããŒãã®æ çµã¿å ã§ç 究ãé²è¡äžã§ãã ããšãã°ãNvidiaã®ææ°ã®VXGIã¯åœŒã®ã¢ã€ãã¢ã«åºã¥ããŠããŸãã
äœæ¥äžãèšäºã®æåŸã«ããå€ãã®ãœãŒã¹ã«äŸåããŠããŸããã
ã¿ã¹ã¯ãç°¡çŽ åããããã«ãå®è£ ã§ã¯æ¡æ£ç §æïŒLabmertã®ã¢ãã«ïŒã®ã¿ãèæ ®ãããŸããããã®ã¢ã«ãŽãªãºã ã¯ä»ã®å€ãã®BRDFã«é©ããŠãããšäž»åŒµãããŠããŸãã ãŸããå®è£ ã¯ã·ãŒã³ã®åçãªããžã§ã¯ããèæ ®ããŸããã
DirectXã®èŠ³ç¹ããå®è£ ã説æããŸããããã®ãããªã¢ã«ãŽãªãºã ã¯OpenGLã§ãå®è£ ã§ããŸãã äžéšã®DX 11.1ãããã¯äœæ¥ã§äœ¿çšãããŸããïŒããšãã°ãé ç¹ã·ã§ãŒããŒã§UAVã䜿çšïŒããããã䜿çšããã«å®è¡ã§ããããããã®ã¢ã«ãŽãªãºã ã®æå°ã·ã¹ãã èŠä»¶ãäœããªããŸãã
ã¢ã«ãŽãªãºã ã®åäœãããããç解ããããã«ããã®äžè¬çãªæ®µéã説æãã次ã«ãããã®ããããã«ã€ããŠè©³ãã説æããŸãã ã¢ã«ãŽãªãºã ã®æãäžè¬çãªéšåïŒ
- ã·ãŒã³ã®ãã¯ã»ã«å ã ãããªã¢ã«ããããã£ïŒè²ãªã©ïŒãšãµãŒãã§ã¹æ³ç·ãå«ããã¯ã»ã«ã®ã»ããã«ã·ãŒã³ãã©ã¹ã¿ã©ã€ãºããŸãã
- åå°ç
§æããŒã¹ã ã ãã¯ã»ã«ã®å Žåãå
æºããã®å
¥åãŸãã¯åºåæŸå°ãèšç®ãããçµæã3Dãã¯ã¹ãã£ã«èšé²ãããŸãã
- ãã¬ãŒã¹ã³ãŒã³ ã è¡šé¢ã®èšç®ããããã¯ã»ã«ããšã«ãåéã®ã°ã«ãŒããäœæãããŸãã ã³ãŒã³ã¯ãããŸããŸãªã¿ã€ãã®3Dã©ã€ãã£ã³ã°ãã¯ã¹ãã£ããæŸå°ããã£ããã£ããããã«æŸåºãããã¬ã€ã®ã°ã«ãŒããæš¡å£ããæœè±¡åã§ãã æçµçµæã¯å éå¹³åãããã¡ã€ã³ç
§æãšå ç®ãããŸãã
ãããã®ã¹ããŒãžã«ã¯ãå®è£ ã®ããã®ã€ããªãã®ãŒãªãã·ã§ã³ãããã€ãããããè¿œå ã®æé©åãå«ãŸããŸãã ãããã©ã®ããã«è¡ãããäžè¬çãªæ¹æ³ã§ç€ºããããšæããŸãã
ãŸãããã¯ã»ã«åãããã·ãŒã³ã®ã¹ãã¬ãŒãžæ§é ã決å®ããŸãããã ãã¹ãŠã®ãªããžã§ã¯ãã3Dãã¯ã¹ãã£ã«ãã¯ã»ã«åã§ããŸãã ãã®ãœãªã¥ãŒã·ã§ã³ã®æ¬ ç¹ã¯ãã»ãšãã©ã®ã·ãŒã³ã空ã®ã¹ããŒã¹ã§ãããããã¡ã¢ãªæ¶è²»ãæé©åãããªãããšã§ãã R8G8B8A8圢åŒã®è§£å床256x256x256ã®ãã¯ã»ã«åã§ã¯ããã®ãããªãã¯ã¹ãã£ã¯64 MBãå æããããã¯ããããèæ ®ããã«è¡ãããŸãã ãã®ãããªãã¯ã¹ãã£ã¯ãè²ãšè¡šé¢ã®æ³ç·ãããã³ãã€ã¯ãã©ã€ãã£ã³ã°ã«å¿ èŠã§ãã
ã¡ã¢ãªæ¶è²»ãæé©åããããã«ãããŒã¿ãããã³ã°ã¢ã«ãŽãªãºã ã䜿çšãããŸãã å®è£ ã§ã¯ãå ã®èšäºãšåæ§ã«ãã¹ããŒã¹ãã¯ã»ã«ãªã¯ããªãŒïŒSVOïŒã䜿çšããŸãã ããããä»ã®ã¢ã«ãŽãªãºã ãããšãã°3D Clipmap [S4552]ããããŸãã
SVOã¯ãã·ãŒã³ã®ãŸã°ããªå «åæšã§ãã ãã®ãããªããªãŒã®åããŒãã¯ãã·ãŒã³ã®éšå空éã8ã€ã®çããéšåã«åå²ããŸãã ã¹ããŒã¹ããªãŒã«ã¯ãäœãå æãããŠããªãã¹ããŒã¹ã«é¢ããæ å ±ã¯ä¿åãããŸããã ãã®æ§é ã䜿çšããŠã空éå ã®åº§æšã«ãã£ãŠãã¯ã»ã«ãæ€çŽ¢ãããã€ã¯åŠçãããç §æããµã³ããªã³ã°ããŸãã ãã€ã¯åŠçãããç §æã¯ãç¹å¥ãª3Dãã¯ã¹ãã£ïŒãããã¯ãããã¡ïŒã«ä¿åãããŸããããã«ã€ããŠã¯ã以äžã§èª¬æããŸãã
ã¢ã«ãŽãªãºã ã®å段éãåå¥ã«æ€èšããŸãã
ãã¯ã»ã«åã·ãŒã³

ãã¯ã»ã«åãããã·ãŒã³ããã¯ã»ã«ã®é åãšããŠä¿åããŸãã GPUã§ã¯ããã®é åã¯StructuredBuffer / RWStructuredBufferãéããŠå®è£ ãããŸãã ãã¯ã»ã«ã®æ§é ã¯æ¬¡ã®ãšããã§ãã
struct Voxel { uint position; uint color; uint normal; uint pad; // 128 bits aligment };
ã·ãŒã³ãã³ã³ãã¯ãã«ä¿åããã«ã¯ãSVOã䜿çšããŸãã ããªãŒã¯ãR32_UINT圢åŒã®2Dãã¯ã¹ãã£ã«ä¿åãããŸãã ããªãŒããŒãæ§é ïŒ

SVOããŒãã®æŠç¥å³[DP]
æåŸã®ã¬ãã«ã§ã¯ãSVOãªãŒãã¯ãã®é åãã察å¿ãããã¯ã»ã«ã®ã€ã³ããã¯ã¹ãä¿åããŸãã
ã·ãŒã³ã®è§£å床ã256x256x256ã§ãå®å šã«å¡ãã€ã¶ãããããªãŒãä¿åããã«ã¯ããµã€ãº6185x6185ïŒ145.9 MbïŒã®ãã¯ã¹ãã£ãå¿ èŠã ãšããŸãããã ãã ããå®å šãªããªãŒãä¿åããã€ããã¯ãããŸããã ç§ã®èŠ³å¯ã«ãããšããã®ãããªã·ãŒã³ã®è§£å床ãæã€ã¹ãã³ã¶ã·ãŒã³ã®å Žåãã¹ããŒã¹ããªãŒã¯2080x2080ïŒ16.6 MbïŒã®ãã¯ã¹ãã£ã«é 眮ãããŸãã
ãã¯ã»ã«ã®é åãäœæãã
ãã¯ã»ã«ã®é åãäœæããã«ã¯ãã·ãŒã³å ã®ãã¹ãŠã®ãªããžã§ã¯ãããã¯ã»ã«åããå¿ èŠããããŸãã é¢é£ããOctreeããŒã¹ã®ã¹ããŒã¹ãã¯ã»ã«åã®èšäºããã®åçŽãªãã¯ã»ã«åã掻çšããŸãããã ãã®ææ³ã¯å®è£ ãç°¡åã§ã1ã€ã®GPUãã¹ã§æ©èœããŸãã

ãã€ãã©ã€ã³ãã¯ã»ã«åæ©èœ[SV]
ã·ãŒã³ã®å¢çããã¯ã¹ãèšç®ããŸãã ãã¥ãŒããŒããèšå®ããŠããã¯ã»ã«åãããã·ãŒã³ã解決ããŸãïŒããšãã°ã256x256ïŒã å¢çãã¥ãŒãã«åãããã«ãæ£å°æ圱ã«ã¡ã©ãã¹ããŒãžäžã«é 眮ããŸãã æ€èšããåã·ãŒã³ãªããžã§ã¯ããã¬ã³ããªã³ã°ããŸãã
ãžãªã¡ããªã·ã§ãŒããŒã§ã¯ããªããžã§ã¯ãã®äžè§åœ¢ãåŠçããŸãã äžè§åœ¢ã®æ³ç·ã䜿çšããŠããã®äžè§åœ¢ã®æ圱é¢ç©ãæ倧ã«ãªãæ¹åã«è»žãéžæãããŸãã 軞ã«å¿ããŠãã©ã¹ã¿ã©ã€ã¶ãŒãžã®æ圱ãæ倧ã®äžè§åœ¢ãå転ãããŸããããã«ããããã¯ã»ã«ãå¢ããŸãã
ãã¯ã»ã«ã·ã§ãŒããŒã§ã¯ãåãã©ã°ã¡ã³ãã¯ãã¯ã»ã«ã«ãªããŸãã 座æšãè²ãæ³ç·ã䜿çšããŠãã¯ã»ã«æ§é ãäœæãããã¯ã»ã«é åã«è¿œå ããŸãã
ãã®æ®µéã§ã¯ããªããžã§ã¯ãã®äœããªLODïŒLODïŒã䜿çšããŠããã¯ã»ã«ã®æ¬ èœãé£æ¥ããäžè§åœ¢ã®ãã¯ã»ã«ã®ããŒãžã«åé¡ããªãããã«ããããšãæãŸããã§ãïŒãã®ãããªã±ãŒã¹ã¯[SV]ã§èª¬æããŸãïŒã



ãã¯ã»ã«åã¢ãŒãã£ãã¡ã¯ã-ãã¹ãŠã®äžè§åœ¢ãã©ã¹ã¿ã©ã€ãºãããããã§ã¯ãããŸããã äœããªãŽã³ããŒããŸãã¯ã¹ãã¬ãããã©ã€ã¢ã³ã°ã«ãããã«äœ¿çšããŸãã
ãã¯ã»ã«ãªã¹ãã§ãªã¯ããªãŒãäœæãã
ã·ãŒã³å šäœããã¯ã»ã«åããããšã座æšãæã€ãã¯ã»ã«ã®é åãã§ããŸãã ãã®é åãããSVOãæ§ç¯ã§ããŸããSVOã䜿çšããŠã空éã§ãã¯ã»ã«ãèŠã€ããããšãã§ããŸãã æåã«ãSVOã䜿çšãããã¯ã¹ãã£ã®åãã¯ã»ã«ã¯0xffffffffã«åæåãããŸãã ã·ã§ãŒããŒãä»ããŠããªãŒããŒããèšè¿°ããããã«ãSVOãã¯ã¹ãã£ã¯UAVãªãœãŒã¹ïŒRWTexture2DïŒãšããŠè¡šãããŸãã ããªãŒãæäœããã«ã¯ãã¢ãããã¯ããŒãã«ãŠã³ã¿ãŒïŒD3D11_BUFFER_UAV_FLAG_COUNTERïŒãéå§ããŸãã
octreeãäœæããã¢ã«ãŽãªãºã ã段éçã«èª¬æããŸãã SVOã®ããŒãã¢ãã¬ã¹ã®äžã§ãããŒãã®ã€ã³ããã¯ã¹ãããã«æå³ãããã¯ã¹ãã£ã®2D座æšã«å€æãããŸãã ããã«ãããŒãã®å²ãåœãŠãšã¯ã次ã®äžé£ã®ã¢ã¯ã·ã§ã³ãæå³ããŸãã
- ããŒãã«ãŠã³ã¿ã®çŸåšã®å€ã䜿çšããŠãå²ãåœãŠãããããŒãã®åããŒããé 眮ãããã¢ãã¬ã¹ãèšç®ãããŸãã
- ããŒãã«ãŠã³ã¿ãŒã¯ãåããŒãã®æ°ã ãå¢å ããŸãïŒ8ïŒã
- åããŒãã®ã¢ãã¬ã¹ã¯ãçŸåšã®ããŒãã®ãã£ãŒã«ãã«èšé²ãããŸãã
- çŸåšã®ããŒãã®ãã©ã°ãã£ãŒã«ãã«ã¯ãå²ãåœãŠãããŠããããšãèšé²ãããŸãã
- çŸåšã®ããŒãã®ã¢ãã¬ã¹ã¯ãåããŒãã®èŠªãã£ãŒã«ãã«èšé²ãããŸãã

octreeã®æŠç¥å³ãšãã¯ã¹ãã£å ã®ãã®è¡šçŸ[SV]
é«ãNã®å «åæšãäœæããã¢ã«ãŽãªãºã ã¯æ¬¡ã®ãšããã§ãã
- ã«ãŒãããŒããå²ãåœãŠãŸã ã çŸåšã®ããªãŒã¬ãã«=1ãããŒãã«ãŠã³ã¿ãŒ= 1ã
- ãã¯ã»ã«ãæŽçããŸãã ãã¯ã»ã«ããšã«ããããå±ããããªãŒã®çŸåšã®ã¬ãã«ã§ããŒãïŒãµãã¹ããŒã¹ïŒãèŠã€ããŸãã ãã®ãããªããŒãã«ã¯ãå²ãåœãŠãå¿ èŠã§ããããšã瀺ããã©ã°ãä»ããŸãã ãã®ã¹ãããã¯ããã¯ã»ã«æ°ãšSV_VertexIDå±æ§ã®ã¿ã䜿çšããŠãã¯ã»ã«é åãã¢ãã¬ã¹æå®ããããšã§ããããã¡ãŒãªãã®Input-Assemblerã䜿çšããŠé ç¹ã·ã§ãŒããŒã§äžŠååã§ããŸãã
- çŸåšã®ããªãŒã¬ãã«ã®ããŒãããšã«ããã©ã°ã確èªããŸã ã å¿ èŠã«å¿ããŠãããŒããå²ãåœãŠãŸãã ãã®ã¹ããŒãžã¯ãé ç¹ã·ã§ãŒããŒã§äžŠååããããšãã§ããŸãã
- çŸåšã®ããªãŒã¬ãã«ã®ããŒãããšã«ãåããŒãã«é£æ¥ããŒãã®ã¢ãã¬ã¹ãæžã蟌ã¿ãŸã ã
- çŸåšã®ããªãŒã¬ãã«ã¯++ã§ãã çŸåšã®ããªãŒã¬ãã«ã<Nã«ãªããŸã§ãæé 2ã5ãç¹°ãè¿ããŸãã
- æåŸã®ã¬ãã«ã§ã¯ãçŸåšã®ããŒããå²ãåœãŠã代ããã«ããã¯ã»ã«é åã«ãã¯ã»ã«ã€ã³ããã¯ã¹ãæžã蟌ã¿ãŸã ã ãããã£ãŠãæåŸã®ã¬ãã«ã®ããŒãã«ã¯æ倧8ã€ã®ã€ã³ããã¯ã¹ãå«ãŸããŸãã
ãã®ãããªå «åæšãæ§ç¯ãããšãSVOãäžã空éã®åº§æšã«ãã£ãŠã·ãŒã³ã®ãã¯ã»ã«ãç°¡åã«èŠã€ããããšãã§ããŸãã
octreeãããã¯ãããã¡ãŒã®äœæ
ãã¯ã»ã«åãããã·ãŒã³ã®å «åæšãæ§ç¯ããã®ã§ããã®æ å ±ã䜿çšããŠãå æºããã®ãã¯ã»ã«ã«ãã£ãŠåå°ãããç §æãä¿åã§ããŸãã ç §æã¯ãR8G8B8A8圢åŒã®3Dãã¯ã¹ãã£ã§ä¿åãããŸãã ããã«ããããã¯ã¹ãã£ã®ãµã³ããªã³ã°æã«GPUã®ãã©ã€ãªãã¢è£éã䜿çšã§ããããã«ãªãããã®çµæãããæ»ãããªæçµç»åãåŸãããŸãã ãã®ãã¯ã¹ãã£ã¯ãSVOã«åŸã£ãŠé 眮ããããããã¯ã§æ§æãããŠãããããããªãã¯ãããã¡ãšåŒã°ããŸãã ãããã¯ã¯ã空éå ã®ãã¯ã»ã«ã®ã°ã«ãŒãã®å¥ã®è¡šçŸã§ãã
SVOã®èã«ã€ã³ããã¯ã¹ãé 眮ãããŠãã2x2x2ãã¯ã»ã«ã®ã°ã«ãŒãã¯ã3Dãã¯ã¹ãã£ããã®3x3x3ãã¯ã»ã«ãããã¯ã«è¡šç€ºãããŸãã

ãã¯ã»ã«ã®ã°ã«ãŒãããã¯ã»ã«ã®ãããã¯ã«ãããã³ã°ãã[DP]
ã·ãŒã³å ã§é£ãåã£ãŠé 眮ããããã¯ã»ã«ã®ã°ã«ãŒãã¯ããã¯ã¹ãã£ã«æ£åšããããšããããŸãïŒãã¯ã¹ãã£ã¯SVOã«åºã¥ããŠããããïŒã ãããã£ãŠããã¯ã»ã«ã®é£æ¥ã°ã«ãŒãéã®æ£ããè£éã®ããã«ãé£æ¥ãããã¯éã®å€ãå¹³ååããè¿œå ã®äœæ¥ãè¡ãå¿ èŠããããŸãã

é£æ¥ãããã¯ã®å¢çã®å¹³åå
ãããã¯ããã®ãã¯ã»ã«ã¯ããã¯ã»ã«ã®æåã®ã°ã«ãŒãã®è§ãšãããã®éã«ãããŸãã ãããã£ãŠããããã¯ã¯ãå ã®ãã¯ã»ã«ãããå€ãã®ã¹ããŒã¹ãå æããŸãã ãã ãããããã¯å ã®ãµã³ããªã³ã°ã¯ãå ã®ãã¯ã»ã«ã®å¢çã«æ²¿ã£ãŠå®è¡ãããŸãã ãã®ããããã¯ã»ã«ã®ååã®å¹ ã®åºåãæåã䌌ãŠããŸãããããã¯æ±ºããŠäœ¿çšãããŸããã
SVOãªãŒãã«åŸã£ãŠé 眮ããããããã¯ã¯ãå ã®ãã¯ã»ã«ã®è¡šç€ºã§ãã octreeã®ç¹å®ã®ã¬ãã«ã«ããä»ã®SVOããŒãã«åŸã£ãŠé 眮ããããããã¯ã¯ããããã¯ãããã¡ãŒã®MIPã¬ãã«ã§ãã

octreeã®æŠç¥å³ããã¯ã¹ãã£å ã®ãã®è¡šçŸããããã¯ãããã¡ãžã®ãããã³ã°[SV]
ãã®å Žåããããã¯ã¯3x3x3ã§ããå¿ èŠã¯ãªãã2x2x2ãããã³5x5x5ã«ããããšãã§ããŸã-ããã¯è¡šç€ºã®ç²ŸåºŠã®åé¡ã§ãã 2x2x2ãããã¯ã¯ã¡ã¢ãªãç¯çŽãããã1ã€ã®è¯ãæ¹æ³ã§ããããã®ãããªã¢ãããŒããèŠãããšã¯ãããŸããã

4ã€ã®é£æ¥ãããã¯ã»ã«ããµã³ããªã³ã°ãããšãã®è£éã®æ¯èŒïŒãããã¯ãããã¡ãŒãªãã3x3x3ã®ãããã¯ãããã¡ãŒãããã³5x5x5ã®ãããã¯ã®ãããã¡ãŒãã
ãã®ãããªãããã¯ãããã¡ã®äœæã¯ãããªãæéãããããŸãã ã·ãŒã³ã®éæ床ãä¿åãããããšç §æãä¿åããããã®2ã€ã®ãããã¡ãäœæããŸãã
ãããã¯ãããã¡ãŒãäœæããæé
æåã®ã¹ãããã¯ãoctreeã®èãšäžèŽãããããã¯ã®ãã¯ã»ã«ãå¡ãã€ã¶ãããšã§ãã ç¹å®ã®SVOãã¯ã»ã«ã§åå°å ãèšç®ãããšããŸãã ãããã®å€ã¯ããããã¯ãããã¡ãŒã®å¯Ÿå¿ããè§åºŠãã¯ã»ã«ã«è¡šç€ºãããŸãã

çºä¿¡ç §æã®èšç®ãå®äºãããããããã¯ããšã«æ®ãã®ãã¯ã»ã«ãšãããã¯å ã®é£æ¥ãããã¯ã»ã«ã®å¹³åå€ãè¿œå ããŸãã

次ã«ãé£æ¥ãããããã¯éã®å€ãå¹³åããŸãã ãã®ããã空éå ã®é£æ¥ããŒãã¯ããªãŒã®ããŒãã«ä¿åãããŸãã

ãããã¯ãããã¡ãå¹³ååããããã®ãªãã·ã§ã³ã®1ã€ã¯ã3ã€ã®ãã¹ã§å軞ã«æ²¿ã£ããã®ã§ãã ãã®å¹³ååã§çºçããå¯èœæ§ã®ããã¢ãŒãã£ãã¡ã¯ãã¯ãèµ€ãé·æ¹åœ¢ã§ããŒã¯ãããŠããŸã[DP]
ãã®ãããªãããã¡ã®MIPã¬ãã«ãäœæããŸãã SVOã®äžäœã¬ãã«ã®ããŒãã¯ãåºç€ãšãªãã¬ãã«ããã®å¹³åå€ãå«ããããã¯ã§è¡šç€ºãããŸãã ããªãŒã®æäžäœã®ããŒãã«å¯Ÿå¿ããåãããã¯ã«ã¯ã察å¿ããåå«ã®ãããã¯ããã®æ å ±ãå«ãŸããŸãã ãŸããããªãŒå ã®åããŒãã ãã§ãªããé£æ¥ããŒãã«ãçŽæ¥å¯Ÿå¿ãããããã¯ã«ããããšãã§ããŸãïŒäžå³ãåç §ïŒã

å·ŠåŽ-ãããã¯ã«ã¯ãåãããã¯ãšãã®é£æ¥ãããã¯ããã®æ å ±ãå«ãŸããŸãã æ£ãã-ãããã¯ã«ã¯åãããã¯ããã®æ å ±ã®ã¿ãå«ãŸããŸã[DP]
ã¡ã¢ãªã¢ã¯ã»ã¹ã®åæ°ãæžããããã«ãèšç®ãããåãããã¯ã«åãããã¯ã®ãã¯ã»ã«ã®ã¿ã䜿çšãããŸãïŒå³å³ïŒã ãã®åŸãåè¿°ã®ããã«ãé£æ¥ãããããã¯éã®å€ãå¹³ååãããŸãã ãããŠãSVOã®ã«ãŒãããŒãã«å°éãããŸã§MIPã¬ãã«ãäœæããŸãã
2ã€ã®ãããã¡ãäœæããŠã¿ãŸããã-ã·ãŒã³ã®éæãããã¯ã®ãããã¡ãšåå°å ãããã¯ã®ãããã¡ã
éæãããã¯ã®ãããã¡ã¯ãã·ãŒã³ã®ãã¯ã»ã«åããããžãªã¡ããªã«åºã¥ããŠäºåã«äœæãããŸãã æåæ§ãã¯ã»ã«ã®éæ床ãç¶æããŸãã ãããè¡ãã«ã¯ããã¯ã»ã«ã®éæ床ã«åŸã£ãŠãããã¯ã®ãã¯ã»ã«ã®RGBå€ãå ¥åããŸããèšç®ãããåãã¯ã»ã«ã®ãããã¯ã®MIPã¬ãã«ãäœæããå ŽåãXYZ軞ã«æ²¿ã£ãå¹³åæ倧éæ床å€ãéžæãã察å¿ããRGBãã¯ã¹ãã£å€ã«ä¿åããŸãã ãã®ãœãªã¥ãŒã·ã§ã³ã¯ãç¹å®ã®æ¹åã®ç©ºéã§ã®å ã®é®æãèæ ®ããã®ã«åœ¹ç«ã¡ãŸãã

åæ¹åã§ãéæ床ã®å€ã®æ倧å€ãéžæãããŸãïŒã€ãŸãã1.0ã¯å®å šã«äžéæãªãªããžã§ã¯ãã§ããããã®å€ã¯æ倧ã«ãªããŸãïŒã ããã«ãMIPã¬ãã«ãæ§ç¯ãããšãã«ãããŒã¿ãŒãããã¯ã®XYZ軞ã«æ²¿ã£ãæ倧å€ãå¹³ååãããRGBã³ã³ããŒãã³ãã«è¿œå ãããŸãã [DP]
åå°ããŒãã³ã°
ãã¯ã»ã«ã«ãã£ãŠåå°ãããç §æã¯ãèšç®ãããå æºããã·ã£ããŠããããåŠçããããšã«ãã£ãŠèšç®ãããŸãã ãã®ãããã䜿çšããŠã空éå ã®ãªããžã§ã¯ãã®åº§æšãååŸããSVOã䜿çšããŠãç §ãããããã¯ã»ã«ã®ã€ã³ããã¯ã¹ã«å€æã§ããŸãã
éåžžãã·ã£ããŠãããã®è§£å床ã¯ãoctreeã®è§£å床ãããé«ããªããŸãã å ã®èšäºã§ã¯ãã·ã£ããŠãããã®åãã¯ã»ã«ãæ¡ä»¶ä»ãå åãšèŠãªãããã¢ãããŒãã«ã€ããŠèª¬æããŠããŸãã ãããã£ãŠãå åã®æ°ã«å¿ããŠãç §æãžã®ç°ãªãå¯äžããããŸãã ç§ã®å®è£ ã§ã¯ããã®æ®µéãç°¡ç¥åããã·ã£ããŠãããã«èœã¡ããã¯ã»ã«ããšã«ç §æã1åã ãã«ãŠã³ãããŸããã
ç¹°ãè¿ãèšç®ãåé¿ããããã«ãåå°ç §æããã§ã«èšç®ãããŠããåãã¯ã»ã«ã«å¯ŸããŠããã¯ã»ã«ãžã®ãã€ã³ã¿ãæ ŒçŽãããªã¯ããªãŒããŒãã®ãã©ã°ãããã䜿çšããŸãã ãŸããã·ã£ããŠããããåŠçãããšããåããã¯ã»ã«ã«å«ãŸãããã¯ã»ã«ã®ãã¡ãèšç®ã®ããã«å·Šäžã®ãã¯ã»ã«ã®ã¿ãéžæã§ããŸãã


ã·ã£ããŠãããã®æçïŒå·ŠïŒã å³åŽ-åããã¯ã»ã«ã®äžéšã§ããå·Šäžã®ãã¯ã»ã«ãèµ€ã§è¡šç€ºãããŸãã
åå°ç §æãèšç®ããã«ã¯ãæšæºã®ã¢ã«ãã* lightColor *ãããïŒnãlïŒã䜿çšãããŸãããäžè¬çãªå Žåã¯BRDFã«äŸåããŸãã èšç®ãããç §æã¯ãç §æãŠãããã®ãããã¡ã«èšé²ãããŸãã ã·ã£ããŠãããã®åŠçåŸããããã¯ãããã¡ãåå å¡«ãããäžèšã®ããã«MIPã¬ãã«ãäœæãããŸãã
ã¢ã«ãŽãªãºã ã¯éåžžã«é«äŸ¡ã§ãã ç §æã®å€æŽããšã«ç §æãŠãããã®ãããã¡ãåèšç®ããå¿ èŠããããŸãã å¯èœãªæé©åæ¹æ³ã®1ã€ã¯ã ãã¬ãŒã ã«ãããããã¡æŽæ°ãå¡ãã€ã¶ãããšã§ãã
G-Bufferã®äœæ
ç¹å®ã®ãã¯ã»ã«ã®åéã«ãã¯ã»ã«ãã¬ãŒã¹ãé©çšããã«ã¯ã空éå ã®ãã¯ã»ã«ã®æ³ç·ãšäœçœ®ãç¥ãå¿ èŠããããŸãã ãããã®å±æ§ã¯ãSVOããã€ãã¹ããŠç §æãããã¯ãããã¡ãŒããµã³ããªã³ã°ããããã«äœ¿çšãããŸãã ãããã®å±æ§ã¯G-bufferããååŸã§ããŸãã
Gãããã¡ã䜿çšãããšããã¥ãŒããŒããããäœã解å床ã§åå°å ãèšç®ããããšãã§ããããã©ãŒãã³ã¹ãåäžããŸãã
åéã§ãã¯ã»ã«ããã¬ãŒã¹ãã
ç §æãããã¯ã®ãããã¡ãèšç®ããããšãã·ãŒã³ãããã¬ãŒã å ã®ãªããžã§ã¯ãã«åå°ãããç §æãã€ãŸãã°ããŒãã«ç §æã®èšç®ã«é²ãããšãã§ããŸãã ãããè¡ãã«ã¯ãåéã§ãã¯ã»ã«ããã¬ãŒã¹ããŸãã
åãã¯ã»ã«ã«å¯ŸããŠãBRDFã«åŸã£ãŠããã€ãã®ã³ãŒã³ãæŸåºãããŸãã Lambertã©ã€ãã£ã³ã°ã¢ãã«ã®å Žåãã³ãŒã³ã¯Gãããã¡ãŒãã掟çããæ³ç·ã䜿çšããŠæ¹åä»ããããåçã«åäžã«æŸå°ãããŸãã

å ¥å°å ãèšç®ãããè¡šé¢ããåéãæŸå°ãã[VCT]
èšç®ã§ã¯ããã¯ã»ã«ã®æ¹åã®è¡šé¢äžã®ç¹ããåŸãããç §æã¯ãç¹å®ã®èŠçã®åéã®è¡šé¢ã«åãã£ãŠãã¯ã»ã«ããæŸå°ãããç §æãšåãã«ãªããšä»®å®ããŸãã

[VCT]
ãã¬ãŒã¹ã¯æ®µéçã«è¡ãããŸãã åã¹ãããã§ãç §æãããã¯ã®ãããã¡ã¯ãæäœå€ããæé«å€ãŸã§ãoctreeããªãŒã®ã¬ãã«ïŒã€ãŸããäœæãããMIPã¬ãã«ïŒã«åŸã£ãŠãµã³ããªã³ã°ãããŸãã

SVO [DP]ã¬ãã«ã«åŸã£ãŠã³ãŒã³ã䜿çšããŠãããã¯ãããã¡ãŒããµã³ããªã³ã°ãã
ã³ãŒã³ã䜿çšãããã¬ãŒã¹ã¯ãããªã¥ãŒã ãªããžã§ã¯ãã®ã¬ã³ããªã³ã°ã«äŒŒãŠããŸã[A]ã ã€ãŸã ã¢ã«ãã¡ããã³ãããŒããã¯ã¢ãã«ã䜿çšãããŸãããã®ã¢ãã«ã§ã¯ãã³ãŒã³ã«æ²¿ã£ã次ã®åã¹ãããã§ãè²ãšéæ床ã次ã®ããã«èšç®ãããŸãã
' = ' + ( 1 â ' ) * ' = ' + ( 1 â ' ) *
ããã§ãaã¯éæ床ãcã¯éæ床ïŒäºåä¹ç®ãããã¢ã«ãã¡ïŒãââä¹ç®ããç §æãããã¯ã®ãããã¡ãŒããååŸããå€ã§ãã
éæ床å€ã¯ãéæãããã¯ãããã¡ã䜿çšããŠèšç®ãããŸãã
opacityXYZ = opacityBrickBuffer.Sample( linearSampler, brickSamplePos ).rgb; alpha = dot( abs( normalize( coneDir ) * opacityXYZ ), 1.0f.xxx );
ã€ãŸããéæ床ã¯ç¹å®ã®ãã€ã³ãã§åéã®æ¹åã«èªã¿åãããŸãã ãããå¯äžã®ã¢ãããŒãã§ã¯ãããŸããã ããšãã°ãã©ã€ãã£ã³ã°ãããã¯ãããã¡ã®ã¢ã«ãã¡ãã£ãã«ã«éæ床ãä¿åã§ããŸãã ãã ããåå°å ã®æ¹åã¯å€±ãããŸãã ãŸããç §æãŠãããã®6ã€ã®ãããã¡ãŒïŒå軞ã«2ã€ïŒã«æåæ§ç §æãä¿åããããšããŸãã-ç®ã«èŠããå©ç¹ãããã³ã¹ããããããŸãã
ã³ãŒã³ã®æçµçµæã¯ãã³ãŒã³ã®è§åºŠã«å¿ããŠéã¿ä»ããããŠèŠçŽãããŸãã ãã¹ãŠã®ã³ãŒã³ãåãå Žåãééã¯åçã«åå²ãããŸãã åéã®æ°ãšè§£ã®è§åºŠã®ãµã€ãºã®éžæã¯ãé床ãšå質ã®æ¯çã®åé¡ã§ãã ç§ã®å®è£ ã§ã¯ã60床ã®5ã€ã®ã³ãŒã³ïŒäžå€®ã«1ã€ãåŽé¢ã«4ã€ïŒã
äžã®å³ã¯ãåéã®è»žã«æ²¿ã£ããµã³ããªã³ã°ãã€ã³ããæš¡åŒçã«ç€ºããŠããŸãã ãµã³ãã«ã®å ŽæãéžæããŠã察å¿ããã¬ãã«ã®å «åæšããŒããåéã«åãŸãããã«ããããšããå§ãããŸãã ãŸãã¯ã察å¿ããçäœ[SB]ã«çœ®ãæããããšãã§ããŸãã ãããããã®åŸãã·ã£ãŒããªãã¯ã»ã«å¢çã衚瀺ãããå Žåãããããããµã³ãã«ã®äœçœ®ã調æŽãããŸãã ç§ã®å®è£ ã§ã¯ããµã³ãã«ãäºãã«è¿ã¥ããã ãã§ãã
åå°å ã«å¯ŸããããŒãã¹ãšããŠã ã¢ã³ããšã³ããªã¯ã«ãŒãžã§ã³ã·ã§ãŒãã£ã³ã°ãååŸããŸããããã¯ããã¬ãŒã¹ããååŸããã¢ã«ãã¡å€ã«åºã¥ããŠèšç®ãããŸãã ãŸããåéã®è»žã«æ²¿ã£ãåã¹ãããã§AOãèšç®ããå Žåãè·é¢
1 / (1 + lambda * distance)
ã«å¿ããŠè£æ£ãè¡ãããŸããããã§ãã©ã ãã¯ãã£ãªãã¬ãŒã·ã§ã³ãã©ã¡ãŒã¿ã§ãã
çµæã¯ãRGBAãã¯ã¹ãã£ïŒç §æçšã®RGBãšAOçšã®AïŒã«ä¿åãããŸãã ããæ»ãããªçµæãåŸãããã«ããã¯ã¹ãã£ã«ãŒãããé©çšã§ããŸãã æçµçµæã¯BRDFã«äŸåããŸãã ç§ã®å Žåãèšç®ãããåå°ã¯æåã«Gãããã¡ããååŸããè¡šé¢ã¢ã«ããã§ä¹ç®ããã次ã«ãªãã·ã§ã³ã§AOã§ä¹ç®ãããæåŸã«ã¡ã€ã³ã©ã€ãã£ã³ã°ã«è¿œå ãããŸãã
äžè¬ã«ãç¹å®ã®èª¿æŽãšæ¹åãè¡ã£ãåŸã®å³ã¯ãèšäºã®çµæã«äŒŒãŠããŸãã



çµæã®æ¯èŒ-å·ŠåŽã¯Mental Rayã§ã¬ã³ããªã³ã°ãããã·ãŒã³ãå³åŽã¯å ã®èšäºã®ãã¯ã»ã«ã³ãŒã³ãã¬ãŒã¹ãäžå€®ã¯ç§ã®å®è£ ã§ãã
èœãšãç©Ž
èªå·±çºå ã®åé¡ ã ã»ãšãã©ã®å Žåãè¡šé¢ã¯ããèªäœã®ãã¯ã»ã«ã«ç©ççã«é 眮ãããŠãããããäœããã®æ¹æ³ã§èªå·±çºå ã«å¯ŸåŠããå¿ èŠããããŸãã 1ã€ã®è§£æ±ºçã¯ãæ³ç·ã®æ¹åã«åéã®å§ãŸããæŒãããšã§ãã ãŸããç §æã®æ¹åååžããã¯ã»ã«ã«ä¿åãããŠããå Žåããã®åé¡ã¯çè«çã«åé¿ã§ããŸãã
ããã©ãŒãã³ã¹ã®åé¡ ã ã¢ã«ãŽãªãºã ã¯éåžžã«è€éã§ãããGPUã«å¹æçã«å®è£ ããã«ã¯å€ãã®æéãããããŸãã ããªãæçœãªæé©åã䜿çšããŠãå®è£ ããæ£é¢ãããæžããŸããããè² è·ãé«ããªããŸããã åæã«ãããªãŒå ã®ãã¯ã»ã«ãæ€çŽ¢ãããšãã«æé©åãããã¢ã«ãŽãªãºã ã§ããSVOãã¯ã¹ãã£ã®å€ãã®äŸåãµã³ãã«ãå¿ èŠã«ãªããŸãã
ç§ã®å®è£ ã§ã¯ã5ã€ã®ã³ãŒã³ãæŸåºãã256x256x256ã®4ã€ã®æåŸãã2çªç®ã®ãªã¯ãããªãŒã¬ãã«ã®ãããã¯ãããã¡ãŒããµã³ããªã³ã°ããŸãã Intel GPAã«ãããšãçžå¯Ÿçãªããã©ãŒãã³ã¹ååžã¯æ¬¡ã®ãšããã§ãã

ããã©ãŒãã³ã¹ååžã äºåã«å·åŽããããšãªãGãããã¡ãŒãšã·ã£ããŠãããã
å ã®èšäºã§ã¯ãSVOå šäœã§512x512ãã¯ã¹ãã£äžã«3ã€ã®æ¡æ£ã³ãŒã³ã䜿çšããŠããŸãïŒ512x512x512-9ã¬ãã«ïŒã çŽæ¥ç §æãšçµã¿åããããšã512x512ã®ãã¬ãŒã æéã®çŽ45ïŒ ãããããŸãã åªåããããšããããããããŸãã ãŸããã©ã€ãã£ã³ã°ãããã¡ã®æŽæ°ã®æé©åã«ã泚æãæãå¿ èŠããããŸãã
ã¢ã«ãŽãªãºã ã®å¥ã®åé¡ã¯ã ãªããžã§ã¯ãããã®å æŒãã§ã ã ããã¯ãéæãããã¯ãããã¡ã«ãããã«å¯äžãã现ããªããžã§ã¯ãã§çºçããŸãã ãŸããSVOã®äœã¬ãã«ã®ç §ãããããã¯ã»ã«ã®è¿ãã«ããå¹³é¢ã¯ããã®çŸè±¡ã®åœ±é¿ãåããŸãã


å æŒãïŒå·ŠåŽ-VCTã¢ã«ãŽãªãºã ã䜿çšããŠããå Žåãå³åŽ-å®éã«ã ãã®åœ±é¿ã¯AOã§è»œæžã§ããŸãã
äžèšãããå¥ã®çµæãç¶ããŸãïŒè¯ãåçãåŸãããã«ã¢ã«ãŽãªãºã ã調æŽããããšã¯ããã»ã©ç°¡åã§ã¯ãããŸãã-ããã€ã®ã³ãŒã³ãåãããSVOã¬ãã«ã®æ°ãã©ã®ä¿æ°ã§ããªã©ã
ã·ãŒã³å ã®éçãªããžã§ã¯ãã®ã¿ã調ã¹ãŸããã åçãªããžã§ã¯ããä¿åããã«ã¯ãSVOãšå¯Ÿå¿ãããããã¡ãŒãå€æŽããå¿ èŠããããŸãã ååãšããŠããã®å ŽåãéçããŒããšåçããŒããå¥ã ã«æ ŒçŽããããšãææ¡ãããŠããŸãã
èŠçŽãããšãååãªæéãå¿èã匷ãããªããã°ããã®ææ³ã¯ãå§ãããŸããã ããããããã¯ãã£ãšããããã¢ã³ããšã³ãç §æãéæããã®ã«åœ¹ç«ã¡ãŸãã
ãã€ããã¯ã¹ã®ãã¢ïŒ
ã¢ããªã±ãŒã·ã§ã³ãªã³ã¯ïŒ https : //github.com/Darkxiv/VoxelConeTracing ïŒbin / VCT.exeïŒ
ãã¯ã»ã«ã³ãŒã³ãã¬ãŒã¹ã®å®è£ ã«åœ¹ç«ã€ãœãŒã¹ãšãªãœãŒã¹ã®ãªã¹ãïŒ
- [VCT]ãªãªãžãã«èšäºïŒ http : //research.nvidia.com/sites/default/files/publications/GIVoxels-pg2011-authors.pdf
- [SV] , SVO: https://www.seas.upenn.edu/~pcozzi/OpenGLInsights/OpenGLInsights-SparseVoxelization.pdf
- [S4552] NVIDIA: http://on-demand.gputechconf.com/gtc/2014/presentations/S4552-rt-voxel-based-global-illumination-gpus.pdf
- [A] alpha front-to-back: http://developer.download.nvidia.com/books/HTML/gpugems/gpugems_ch39.html
- [DP] , : http://dcgi.felk.cvut.cz/theses/2013/drinotom
- [SB] VCT: http://simonstechblog.blogspot.ru/2013/01/implementing-voxel-cone-tracing.html
- UE4: https://www.yumpu.com/en/document/view/4694219/the-technology-behind-the-elemental-demo-unreal-engine
- ambient : http://www.valvesoftware.com/publications/2006/SIGGRAPH06_Course_ShadingInValvesSourceEngine.pdf
- sparse octree NVIDIA https://developer.nvidia.com/gvdb