![èŠåºãç»å](https://assets.st-note.com/production/uploads/images/94855397/rectangle_large_type_2_f1239c39d8aa16cece12c7a636f930dd.png?width=1200)
ð¡GLSLå ¥éãéåžžã«ç°¡åãªã¯ã³ã©ã€ããŒãsigné¢æ°ã®äœ¿ãæ¹ãgl_FragCoordã®ä»æ§
![](https://assets.st-note.com/img/1659432810582-JU6KIi7LzG.png?width=1200)
extract the sign of the parameter ãã©ã¡ãŒã¿ã®ç¬Šå·ãæœåºããŸã
ã¯ããã¹å£äœã®ä»æ§èª¬æãã·ã³ãã«ãããããsigné¢æ°ã¯x ã 0.0 ããå°ããå Žå㯠-1.0ãx ã 0.0 ã«çããå Žå㯠0.0ãx ã 0.0 ãã倧ããå Žå㯠+1.0 ãè¿ãããšããããšã®ããã ããããå ã«ãåã圢æããããšã«ãªãäžã®ã³ãŒããååé åçµåããŠããã
![](https://assets.st-note.com/img/1659483973798-taY605X4Jv.png?width=1200)
ãŸãå å ¥èŠ³ããšã£ã±ããããã«gl_FragCoordã®ä»æ§ãã¿ãŠã¿ã
gl_FragCoord - çŸåšã®ãã©ã°ã¡ã³ãã®ãŠã£ã³ããŠçžå¯Ÿåº§æšãæ ŒçŽãããŸãïŒ
ãã©ã°ã¡ã³ãèšèªã§ã®ã¿å©çšå¯èœãª gl_FragCoord ã¯ããã©ã°ã¡ã³ãã®ãŠã£ã³ããŠçžå¯Ÿåº§æš (x, y, z, 1/w) å€ãæ ŒçŽããå ¥åå€æ°ã§ããzæåã¯ãã·ã§ãŒããgl_FragDepthãžã®æžã蟌ã¿ãäžåå«ãŸãªãå Žåããã©ã°ã¡ã³ãã®æ·±åºŠãšããŠäœ¿çšããã深床å€ã§ãã
ããã©ã«ãã§ã¯ãgl_FragCoord ã¯ããŠã£ã³ããŠåº§æšã®å·Šäžåç¹ãä»®å®ãããã¯ã»ã«ã»ã³ã¿ãŒãããŒããã¯ã»ã«ã»ã³ã¿ãŒã«äœçœ®ããããšãä»®å®ããŸããäŸãã°ããŠã£ã³ããŠã®å·Šäžç«¯ã®ãã¯ã»ã«ã«å¯ŸããŠã(x, y) ã®äœçœ® (0.5, 0.5) ãè¿ãããŸããgl_FragCoordã®åç¹ã¯ãgl_FragCoordãorigin_upper_leftèå¥åã§å宣èšããããšã«ãã£ãŠå€æŽããããšãã§ããŸãããã¯ã»ã«ãæŽæ°ãã¯ã»ã«ã®ãªãã»ããã®äžå¿ã«ããããã«èŠããããã«ãè¿ãããå€ã¯ãpixel_center_integerã«ãã£ãŠxãšyã®äž¡æ¹ã§ååãã¯ã»ã«ã ãã·ãããããããšãã§ããŸããããã¯ãããã©ã«ã㧠(0.5, 0.5) ã® gl_FragCoord ãè¿ã (x, y) å€ã pixel_center_integer 㧠(0.0, 0.0) ã«ç§»åãããŸãã
ããã°ã©ã äžã®ããããã®ãã©ã°ã¡ã³ãã·ã§ãŒã㧠gl_FragCoord ãå宣èšãããå Žåããã®ããã°ã©ã äžã® gl_FragCoord ãéçã«äœ¿çšãããã¹ãŠã®ãã©ã°ã¡ã³ãã·ã§ãŒãã§å宣èšãããªããã°ãªããŸãããã©ã¹ã¿ã©ã€ãºãå€æããŸã㯠OpenGL ãã€ãã©ã€ã³ãèšèªæ©èœã®ä»ã®éšåã«ã¯åœ±é¿ã㟠ããã
æåŸã«ç¹çŸ€ã®è²ã決ããã®ããgl_FragColor
äžèŠãªæ å ±ãèªã¿é£ã°ããŠãªããšãç解ãããäžæ¹ã§ãæåŸã«ç¹çŸ€ã®è²ã決ããã®ããgl_FragColorã ããããä»æ§ãã¿ãŠãããã
![](https://assets.st-note.com/img/1659485371858-urNrnJv4d7.png?width=1200)
glDrawBuffersãšããäžã«ããèšè¿°ãåºãŠããããããããgl_FragColorã®å®çŸ©ãããã®ãã ãã ãäžå®ã«ãªã£ãŠããã
glDrawBuffers ã¯ããã©ã°ã¡ã³ãã«ã©ãŒå€ããã©ã°ã¡ã³ãããŒã¿ãæžã蟌ãŸãããããã¡ã®é åãå®çŸ©ããŸãããã©ã°ã¡ã³ãã·ã§ãŒããã¢ã¯ãã£ãã§ãªãå Žåãã¬ã³ããªã³ã°æäœã¯ãã©ã°ã¡ã³ãããšã«1ã€ã®ãã©ã°ã¡ã³ãã«ã©ãŒã ããçæããããã¯bufsã§æå®ããããããã¡ã®ããããã«æžã蟌ãŸããŸãããã©ã°ã¡ã³ãã·ã§ãŒããã¢ã¯ãã£ãã§ãåºåå€æ° gl_FragColor ã«å€ãæžã蟌ãå Žåããã®å€ã¯ bufs ã§æå®ãããåãããã¡ã«æžã蟌ãŸããŸãã
glDrawBuffersãå®äžçã§èŠãããšããªãããã©ãã®äžŠè¡äžçã®äœè ãªã®ããããããªãããç¥ãå¿ èŠããªããç¥ã£ãŠã人ã¯ç¥ã£ãŠããã°ããããä»ã€ãã£ãŠãåŠçç³»ã§ã®åœ¹å²ãšããã¡ãµããŸããã gl_FragColorã¯ãåºåå€æ°ã§ãããšããã®ã¯ãå®çŸ©ããç解åºæ¥ãã
æçµçãªãã¯ã»ã«ã®è²ã¯ãäºçŽèªãšããŠç¢ºä¿ãããã°ããŒãã«å€æ°ãgl_FragColorã«å²ãåœãŠãããŸãã
æ¬åœã¯ä»æ§ãã¿ããã£ãããã¿ã€ãããªãã®ã§ãæããããããæŠå¿µå³ã«ãªããšæãã
![](https://assets.st-note.com/img/1659548179025-hMtiMBlZsv.png)
GLSLã¯äžåæžããã¡ã€ã³ãCoordåã ãåæã«GPUãåŠçãããŠæç»ããã
![](https://assets.st-note.com/img/1659548341527-WlE95Nsby1.png?width=1200)
![](https://assets.st-note.com/img/1659548493907-4bxutMX2AO.png?width=1200)
![](https://assets.st-note.com/img/1659548660901-btBjV37J2y.png?width=1200)
![](https://assets.st-note.com/img/1659610851302-QIRKwxJv4n.png?width=1200)
![](https://assets.st-note.com/img/1663630791796-oaEHYzO04G.png)
`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ã¬ã³ããªã³ã°ãªã©ãé«åºŠãªããžã¥ã¢ã«ãšãã§ã¯ãã®å®è£ ã«ãããŠéèŠãªåœ¹å²ãæãããŸããããããã®ã«ã©ãŒãããã¡ã¯ç°ãªãçš®é¡ã®ããŒã¿ïŒäŸãã°ãã¢ã«ãããæ³ç·ã深床ãªã©ïŒãä¿æããããšãã§ããããã«ããã·ã§ãŒããŒã¯ããå¹ççã«ã·ãŒã³ãåŠçã§ããããã«ãªããŸãã
ãããªãšæã£ããå¿æŽãããïŒ
![ããã垳簿](https://assets.st-note.com/production/uploads/images/146045306/profile_76a0adfc7bd4b4908ef76d29ad61ae98.png?width=600&crop=1:1,smart)