ð¡GLSLå ¥éãéåžžã«ç°¡åãªã¯ã³ã©ã€ããŒãsigné¢æ°ã®äœ¿ãæ¹ãgl_FragCoordã®ä»æ§
ã¯ããã¹å£äœã®ä»æ§èª¬æãã·ã³ãã«ãããããsigné¢æ°ã¯x ã 0.0 ããå°ããå Žå㯠-1.0ãx ã 0.0 ã«çããå Žå㯠0.0ãx ã 0.0 ãã倧ããå Žå㯠+1.0 ãè¿ãããšããããšã®ããã ããããå ã«ãåã圢æããããšã«ãªãäžã®ã³ãŒããååé åçµåããŠããã
ãŸãå å ¥èŠ³ããšã£ã±ããããã«gl_FragCoordã®ä»æ§ãã¿ãŠã¿ã
æåŸã«ç¹çŸ€ã®è²ã決ããã®ããgl_FragColor
äžèŠãªæ å ±ãèªã¿é£ã°ããŠãªããšãç解ãããäžæ¹ã§ãæåŸã«ç¹çŸ€ã®è²ã決ããã®ããgl_FragColorã ããããä»æ§ãã¿ãŠãããã
glDrawBuffersãšããäžã«ããèšè¿°ãåºãŠããããããããgl_FragColorã®å®çŸ©ãããã®ãã ãã ãäžå®ã«ãªã£ãŠããã
glDrawBuffersãå®äžçã§èŠãããšããªãããã©ãã®äžŠè¡äžçã®äœè ãªã®ããããããªãããç¥ãå¿ èŠããªããç¥ã£ãŠã人ã¯ç¥ã£ãŠããã°ããããä»ã€ãã£ãŠãåŠçç³»ã§ã®åœ¹å²ãšããã¡ãµããŸããã gl_FragColorã¯ãåºåå€æ°ã§ãããšããã®ã¯ãå®çŸ©ããç解åºæ¥ãã
æ¬åœã¯ä»æ§ãã¿ããã£ãããã¿ã€ãããªãã®ã§ãæããããããæŠå¿µå³ã«ãªããšæãã
GLSLã¯äžåæžããã¡ã€ã³ãCoordåã ãåæã«GPUãåŠçãããŠæç»ããã
`gl_FragCoord`ãš`gl_FragColor`ã¯ãOpenGLã®ã·ã§ãŒãã£ã³ã°èšèªã§ããGLSLïŒOpenGL Shading LanguageïŒã§äœ¿ãããçµã¿èŸŒã¿å€æ°ã§ãããããã¯ãã©ã°ã¡ã³ãã·ã§ãŒããŒå ã§äœ¿çšããããã¯ã»ã«ïŒãã©ã°ã¡ã³ãïŒã®ã¬ã³ããªã³ã°ã«é¢ããæ å ±ãæäŸããŸãã
gl_FragCoord:
`gl_FragCoord`ã¯ãã¬ã³ããªã³ã°ããããã©ã°ã¡ã³ãã®ç»é¢äžã®åº§æšãè¡šããã¯ãã«ã§ãããã®å€æ°ã¯`vec4`åã§ããã®æåã¯ïŒx, y, z, wïŒã§ããããã§xãšyã¯ãŠã£ã³ããŠã®çžå¯Ÿåº§æšãzã¯æ·±åºŠå€ãwã¯åžžã«1.0ã§ãããã®åº§æšã¯ãã¯ã»ã«äžå¿ãåºæºãšããŠããŠãéåžžã¯ãã¯ã»ã«ã®å·Šäžãåç¹ã§ãããããã¯èšå®ã«ãã£ãŠå€ããå ŽåããããŸãã
gl_FragColor:
`gl_FragColor`ã¯ããã©ã°ã¡ã³ãã·ã§ãŒããŒããã®åºåè²ãè¡šãå€æ°ã§ã`vec4`åã§ãããã®å€æ°ã®æåã¯ïŒr, g, b, aïŒã§ãããããèµ€ãç·ãéãã¢ã«ãã¡ïŒéæ床ïŒãè¡šããŸãããã©ã°ã¡ã³ãã·ã§ãŒããŒã®æåŸã«ãã®å€æ°ã«è²ãèšå®ããããšã§ããã®è²ããã©ã°ã¡ã³ãã®æçµçãªåºåè²ãšãªããŸãã
ãã ããOpenGLã®æ°ããããŒãžã§ã³ã§ã¯`gl_FragColor`ã¯å»æ¢ããã代ããã«ãŠãŒã¶ãŒãå®çŸ©ããåºåå€æ°ã䜿çšããããšãæšå¥šãããŠããŸããããã«ãããããæè»ã§è€æ°ã®åºåãæ±ããããã«ãªããŸããäŸãã°ã以äžã®ããã«åºåå€æ°ãå®çŸ©ããŠäœ¿çšããããšãã§ããŸãã
out vec4 outputColor;
ãããŠããã©ã°ã¡ã³ãã·ã§ãŒããŒã®äžã§ãã®å€æ°ã«è²ãèšå®ããŸãã
outputColor = vec4(1.0, 0.0, 0.0, 1.0); // èµ€è²
ãããã®å€æ°ã¯ããã©ã°ã¡ã³ãã·ã§ãŒããŒã®äžæ žçãªæ©èœãæ ã£ãŠãããç»é¢äžã§ã©ã®ããã«ãã¯ã»ã«ã衚瀺ãããããå¶åŸ¡ããããã«éèŠã§ãã
glDrawBuffersãšããå éšå€æ°ããããŸããïŒ
`glDrawBuffers`ã¯å éšå€æ°ã§ã¯ãªããOpenGLã®é¢æ°ã§ãããã®é¢æ°ã¯ããã©ã°ã¡ã³ãã·ã§ãŒãããåºåãããè²ããŒã¿ãè€æ°ã®ã«ã©ãŒãããã¡ã«ã«ãŒãã£ã³ã°ããããã«äœ¿çšãããŸããããã«ãããäžåºŠã®æç»åŒã³åºãã§è€æ°ã®åºåãç°ãªãã¬ã³ããŒã¿ãŒã²ããã«åæã«æžã蟌ãããšãå¯èœã«ãªããŸããããã¯ç¹ã«è€éãªã¬ã³ããªã³ã°ã¿ã¹ã¯ããã¹ãããã»ãã·ã³ã°ãšãã§ã¯ãã«ãããŠæå¹ã§ãã
åäœåç
`glDrawBuffers`é¢æ°ã¯ãã«ã©ãŒåºåã®é åãæå®ããããšã§ãã©ã®åºåãã©ã®ã«ã©ãŒãããã¡ã«ãããã³ã°ãããããå®çŸ©ããŸããããã¯äŸãã°ããã«ãã¿ãŒã²ããã¬ã³ããªã³ã°ã«ãããŠéèŠãªåœ¹å²ãæãããŸãã
䜿çšäŸ
OpenGLã§`glDrawBuffers`ã䜿ãåºæ¬çãªäœ¿ãæ¹ã¯ä»¥äžã®éãã§ãïŒ
GLenum buffers[] = {GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1};
glDrawBuffers(2, buffers);
ãã®äŸã§ã¯ããã©ã°ã¡ã³ãã·ã§ãŒããŒããã®æåã®åºåã`GL_COLOR_ATTACHMENT0`ã«ãäºçªç®ã®åºåã`GL_COLOR_ATTACHMENT1`ã«ãããããããã³ã°ãããŸããããã«ããããã©ã°ã¡ã³ãã·ã§ãŒããŒãè€æ°ã®åºåå€æ°ãæã€å Žåãããããã®åºåãç°ãªãã«ã©ãŒãããã¡ã«å²ãåœãŠãããšãã§ããŸãã
çšé
`glDrawBuffers`ã¯ããã¬ãŒã ãããã¡ãªããžã§ã¯ãïŒFBOïŒãšãšãã«äœ¿çšãããããšãå€ããäŸãã°ãã£ãã¡ãŒãã·ã§ãŒãã£ã³ã°ãHDRã¬ã³ããªã³ã°ãªã©ãé«åºŠãªããžã¥ã¢ã«ãšãã§ã¯ãã®å®è£ ã«ãããŠéèŠãªåœ¹å²ãæãããŸããããããã®ã«ã©ãŒãããã¡ã¯ç°ãªãçš®é¡ã®ããŒã¿ïŒäŸãã°ãã¢ã«ãããæ³ç·ã深床ãªã©ïŒãä¿æããããšãã§ããããã«ããã·ã§ãŒããŒã¯ããå¹ççã«ã·ãŒã³ãåŠçã§ããããã«ãªããŸãã
ãé¡ãèŽããŸã