์˜ค๋Š˜์€ ๋“œ๋””์–ด ์…ฐ์ด๋”์—์„œ ์•Œ์งœ๋ฐฐ๊ธฐ ์ •๋ณด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” Fragment ์…ฐ์ด๋”์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณผ๊บผ์•ผ.

์ค‘์š”ํ•˜๊ณ  ์—ฌ๋Ÿฌ๊ฐ€์ง€๋กœ ์“ฐ์ผ ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ ๊ฒœ์Šค ์“ธ๊บผ๋ฉด ๊ผญ ํ•œ๋ฒˆ ์ฝ์–ด๋ด์ค˜

๊ทธ๋ฆฌ๊ณ  ์ฝ์œผ๋ฉด ๋Œ“๊ธ€์ข€ ๋‹ฌ์•„์ฃผ๋ผ... ์ฝ์—ˆ๋Š”์ง€ ์•ˆ์ฝ์—ˆ๋Š”์ง€๋ฅผ ๋ชจ๋ฅด๊ฒƒ์Œ


1. Fragment ์…ฐ์ด๋”๋ž€ ๋ฌด์—‡์ธ๊ฐ€?ย 


Fragment ์…ฐ์ด๋”์˜ ๊ธฐ๋ณธ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์•„.


//

// Simple passthrough fragment shader

//

varying vec2 v_vTexcoord;

varying vec4 v_vColour;


void main()

{

ย  ย  gl_FragColor = v_vColour * texture2D( gm_BaseTexture, v_vTexcoord );

}


Fragment ์…ฐ์ด๋”๊ฐ€ ํ•˜๋Š” ์ง“์€,ย ์›๋ž˜ ์ฃผ์–ด์ง€๋Š” Draw์˜ ๊ทธ๋ฆผ์—์„œ v_vTexcoord์— ๊ทธ๋ฆด ์ •๋ณด์˜ ๊ฐ’(r,g,b,a)์„ ๊ฐ€์ ธ์˜ค๋Š”๊ฑฐ์•ผ.
์กฐ๊ธˆ์ด๋‚˜๋งˆ ๋„์›€๋˜๋ผ๊ณ  ๊ทธ๋ฆผ์„ ๊ทธ๋ ค๋ดค์–ด... ๊ทธ์•Œ๋ชป์ด๋ผ ๋ด๋„ ์ดํ•ด ๋ชปํ• ์ˆ˜๋„์žˆ์Œ

viewimage.php?id=2abcdd23dad63db0&no=29bcc427b38477a16fb3dab004c86b6fd0548bb7fdb3d15e4d497483ceabfeab097499a39093ef2caf9bafa37770915117a7562d02cb2069d998

๊ทธ๋Ÿฌ๋ฉด ์ด๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋‚˜?ย 

1. ๊ทธ๋ฆผ์˜ ์ƒ‰์„ ์กฐ๊ธˆ์”ฉ ๋ฐ”๊พธ๊ณ  ์‹ถ์„๋•Œ

2. ๊ทธ๋ฆผ์˜ ๋ชจ์–‘์„ ๋ณ€ํ˜•์‹œํ‚ค๊ณ  ์‹ถ์„ ๋•Œ


์›๋ž˜ 2๋ฒˆ์€ vertex ์…ฐ์ด๋”๋กœ ํ•˜๋Š”๊ฑด๊ฐ€ ์‹ถ์—ˆ๋Š”๋ฐ ์ €๋ฒˆ์— ๋งํ–ˆ๋‹ค์‹œํ”ผ surface ์จ์„œํ•˜๋‹ˆ๊นŒ 2๋ฒˆ์—์„œ ๋ฐœ์ƒํ•˜๋˜ ๋ฌธ์ œ๊ฐ€ ์—†์–ด์ง€๋”๋ผ๊ณ  ใ…Žใ…Ž


๊ทธ๋Ÿผ 1๋ฒˆ๋ถ€ํ„ฐ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ž.


2. Fragment ์…ฐ์ด๋”๋ฅผ ์ด์šฉํ•œ ์ƒ‰์˜ ๋ณ€ํ˜•


์šฐ์„  ์•Œ์•„์•ผ ํ• ๊ฒŒ, ๊ฒœ์Šค์—์„œ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ Fragment ์…ฐ์ด๋”๋Š” ์ƒ‰์„ 0~255๊นŒ์ง€ ์“ฐ๋Š”๊ฒŒ ์•„๋‹ˆ๊ณ  0~1๊นŒ์ง€๋ฅผ ์จ.ย 

์˜ˆ์ œ๋ฅผ ํ•˜๋‚˜ ๋ณด์—ฌ์ค„๊ป˜,ย 

//

// Simple passthrough fragment shader

//

varying vec2 v_vTexcoord;

varying vec4 v_vColour;

uniform vec2 uv;

uniform vec2 pq;

void main()

{

ย  ย  gl_FragColor = v_vColour * texture2D( gm_BaseTexture, v_vTexcoord);

ย  ย  gl_FragColor -= vec4(1.0,0.0,0.0,0.0);

}


viewimage.php?id=2abcdd23dad63db0&no=29bcc427b38477a16fb3dab004c86b6fd0548bb7fdb3d15e4d497483ceabfeab097499a39093ef2caf9bafa377709307b0108f1b436bafbf2a90

์ขŒ. ๊ธฐ๋ณธ ๋ชจ์–‘ย ย ย ย ย ย ย ย ย ย ย ย ย  ย  ์šฐ. ์…ฐ์ด๋” ์ ์šฉ ๋ชจ์Šต


์ด๊ฑด ์ƒ‰์˜ r, ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๋นจ๊ฐ• ์„ฑ๋ถ„์„ ๋ชจ๋‘ ๋บ€ ๋ชจ์Šต์ด์•ผ. ํฐ์ƒ‰์€ ๋นจ๊ฐ•์ด ๋น ์กŒ์œผ๋‹ˆ g,b๊ฐ€ ์„ž์ธ ์ƒ‰์ด๋˜๊ณ  ๋นจ๊ฐ•์€ ๊ฒ€์ •์ด, ๋นจ๊ฐ•๊ณผ ์ดˆ๋ก์ด ์„ž์—ฌ์žˆ๋˜ ๋…ธ๋ž‘์€ ๊ทธ๋ƒฅ ์ดˆ๋ก์ƒ‰์ด ๋˜์—ˆ์–ด.ย 

๋งŒ์•ฝ ์บ๋ฆญํ„ฐ๊ฐ€ ๋ฐค์ด ๋˜์–ด ์•ฝ๊ฐ„ ํ‘ธ๋ฅด์Šค๋ฆ„ํ•˜๊ณ  ์–ด๋‘์šด ๋ชจ์Šต์„ ์ฃผ๊ณ ์‹ถ๋‹ค๋ฉด ๋นจ๊ฐ•์กฐ๊ธˆ ๋นผ๊ณ , ์ดˆ๋ก์กฐ๊ธˆ ๋นผ๊ณ , ํŒŒ๋ž‘ ์กฐ๊ธˆ ๋นผ๋ฉด ๋˜๊ฒ ์ง€?ย 


๋ฉ”์ธ์ฝ”๋“œ ๋‘˜์งธ์ค„ vec4๋ฅผ 0.5,0.5,0.3,0.0์œผ๋กœ ํ•˜๋ฉด ์•„๋ž˜์™€๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™€.


viewimage.php?id=2abcdd23dad63db0&no=29bcc427b38477a16fb3dab004c86b6fd0548bb7fdb3d15e4d497483ceabfeab097499a39093ef2caf9bafa37770cd51765e8bf7097fe2a7a725


์•ฝ๊ฐ„ ์–ด๋‘์›Œ์ง„๊ฑฐ ๊ฐ™์ง€? ๋‚ด๊ฐ€ ์ƒ‰๊ณ ์ž๋ผ ์ •ํ™•ํ•œ ์ƒ‰๊ฐ์€ ๋ชป์ฃผ๊ฒ ๋Š”๋ฐ ์•Œ์•„์„œ ์ž˜ ๋งž์ถฐ์„œ ์จ. ๋ฐ˜๋Œ€๋กœ ์•ฝ๊ฐ„ ๋ฐ์•„์ง€๊ณ  ๋”ฐ์Šคํ•œ ๋А๋‚Œ์„ ์ฃผ๊ณ ์‹ถ์œผ๋ฉด ์ƒ‰์„ ์กฐ๊ธˆ์”ฉ ๋”ํ•ด์ฃผ๋ฉด ๋˜๊ฒ ์ง€?


viewimage.php?id=2abcdd23dad63db0&no=29bcc427b38477a16fb3dab004c86b6fd0548bb7fdb3d15e4d497483ceabfeab097499a39093ef2caf9bafa37770cc00d93b30bcd4f9ed61e4e1


์ด๊ฑด 0.25,0.05,0.05,0.0์œผ๋กœ ํ•œ๊ฑฐ์•ผ. ์—ญ์‹œ ์•Œ์•„์„œ ๋ง˜์—๋“œ๋Š”๊ฑธ๋ฃจ ์จ


3. Fragment ์…ฐ์ด๋”๋ฅผ ์ด์šฉํ•œ ๋ชจ์Šต์˜ ๋ณ€ํ˜•



์ด๊ฑด ์•ฝ๊ฐ„ ์–ด๋ ค์šด๋ฐ, vertex์…ฐ์ด๋”๊ฐ€ ์›๋ž˜ ๋ชจ์Šต์„ ๋‹ค๋ฅธ๊ณณ์— ์ถœ๋ ฅํ•˜๋Š”๊ฑฐ์˜€์ž–์•„?ย 

๊ทธ๋Ÿฐ๋ฐ Fragment ์…ฐ์ด๋”๋Š” ํ•œ ์œ„์น˜์—์„œ ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฐ›์•„์˜ค๋Š”๊ฑฐ์•ผ.

์›๋ณธ ์ฝ”๋“œ์— v_vTexcoord ์žˆ์ž–์•„? ์ด๊ฒŒ ์›๋ž˜ vec2(v_vTexcoord.x,v_vTexcoord.y)๋ฅผ ์ค„์ธ๊ฑฐ๊ฑฐ๋“ ?

์ด๊ฒŒ ๋‚˜์˜ค๋Š”๊ฑธ ์‹์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด Xt = f(Xt), Yt=f(Yt)๊ฐ€ ๋ผ.ย 

๊ฑ ์ค„์ด๋ฉด ์‹ ๋„ฃ์€๋Œ€๋กœ ๋‚˜์˜ค๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด๋จ...๋‚˜๋„ ๋ชจ๋ฅด๊ฒ ์–ด ์“ฐ๋‹ค๋ณด๋‹ˆ ํ—ท๊ฐˆ๋ฆผ.

๊ทธ๋Ÿฐ๋ฐ ์ด๊ฑธ ๋ณ€ํ˜•์‹œํ‚ค๋ฉด? ์˜ˆ๋ฅผ ๋“ค์–ด์„œ Xt์— ๊ทธ๋ฆด๊ฐ’์„ Xt๋Œ€์‹  Yt๋กœ ๋„ฃ์–ด๋ณด์ž.

๊ทธ๋Ÿฌ๋ฉด ์ด๋ ‡๊ฒŒย ์ขŒ์ƒ ์šฐํ•˜๊ฐ€ ๋’ค์ง‘ํžŒ๊ฑธ ์ƒ๊ฐํ–ˆ๊ฒ ์ง€๋งŒย ์ด์ƒํ•˜๊ฒŒ ๋‚˜์™€!ย 



viewimage.php?id=2abcdd23dad63db0&no=29bcc427b38477a16fb3dab004c86b6fd0548bb7fdb3d15e4d497483ceabfeab097499a39093ef2caf9bafa3777090556a9ee12de68bbe17b86e

์™œ๋ƒ๊ณ ? vec2์•ˆ์— ์žˆ๋Š” ๊ฐ’์ด ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๋‹จ์ˆœํ•œ ์œ„์น˜๊ฐ€ ์•„๋‹ˆ๋ผ ์ฃผ์†Œ์ด๊ธฐ ๋•Œ๋ฌธ์ด์ง€. C๊ณต๋ถ€์ข€ ํ–ˆ์œผ๋ฉด ํฌ์ธํ„ฐ์— ๋Œ€ํ•ด ์•Œ๊ป€๋ฐ, ํฌ์ธํ„ฐ์—๋‹ค๊ฐ€ ์ •์ˆ˜๋ฅผ ์ถ”๊ฐ€์‹œํ‚ค๋ฉด ๊ฐ’์ด ์—„์ฒญ ์ด์ƒํ•ด์ง€๋ฉด์„œ ๊ฐ’์ด ์ด์ƒํ•˜๊ฒŒ๋‚˜์˜ค์ž–์•„? ๊ทธ๋Ÿฐ๊ฑฐ์•ผ.ย 

์•„ ๊ทธ๋ฆฌ๊ณ  ์ค‘์š”ํ•œ๊ฒŒ ์ด๊ฒŒ ์ฃผ์†Œ๋ฅผ ์“ฐ๋‹ค ๋ณด๋‹ˆ ๋‘๊ฐ€์ง€ ๋ฌธ์ œ์ ์ด ์žˆ์–ด... ๋ฐ‘์—์„œ ๋‹ค๋ฃฐ๊ฒŒ

์ž ์ด์ œ ์ด๋†ˆ์ด ์ฃผ์†Œ๋ฅผ ์จ์„œ ๊ทธ๋ฆฐ๋‹ค๋Š”๊ฒƒ์€ ์•Œ์•˜์„๊บผ์•ผ. ๊ทผ๋ฐ ์ฃผ์†Œ๋ผ๋Š”๊ฒŒ ๊ทธ๋ ‡๋“ฏ 1์ฐจ์ด๋กœ ๋˜๊ฒŒ ์ฐจ์ด๊ฐ€ ๋งŽ์ด ๋‚˜๋”๋ผ๊ตฌ... ๊ทธ๋ž˜์„œ ์ฃผ์˜ํ• ๊ฒŒ v_vTexcoord ๋ฅผ ๋ณ€ํ˜•์‹œํ‚ฌ๋•Œ ๋’ค์— ์ถ”๊ฐ€์‹œํ‚ค๋Š”๊ฑด ์™ ๋งŒํ•˜๋ฉด 0๊ณผ 1์‚ฌ์ด ์ˆซ์ž๋กœ ํ•ด์•ผ ํ•˜๋“œ๋ผ๊ณ ... ๊ทธ๋Ÿด ๋•Œ ์ข‹์€๊ฒŒ sin, cos์ด์ž–์•„? ์•„๋‹ˆ๋ฉด ํŠน๋ณ„ํžˆ ์›ํ•˜๋Š” ์ •๋„๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ๋งŒํผ ํ•ด๋„ ๋˜๊ณ .

์ž ๊ทธ๋Ÿผ sin์„ ์จ์„œ ์ด๋†ˆ์„ ๊ธฐ์šธ์–ด์ง€๊ฒŒ ํ•ด๋ณด์ž.ย 

์“ฐ๋‹ค๊ฐ€ ์•Œ๊ฒŒ๋œ๊ฑด๋ฐ, ์š”๋†ˆ์€ ์„ ํ˜•์œผ๋กœ ๊ธฐ์šธ์–ด์ง€๊ฒŒ ํ•˜๋Š”๊ฑด ํ•˜๊ธฐ๊ฐ€ ์ข€ ํž˜๋“ค๋”๋ผ๊ตฌ... ๊ทธ๋ƒฅ ์„ ํ˜•์œผ๋กœ ์›€์ง์ด๋Š”๊ฑด vertex์“ฐ๋Š”๊ฒŒ ๋‚˜์„๋“ฏ... ์ œ๋Œ€๋กœ ํ•ด์„œ ๋‹ค์‹œํ• ๊ฒŒ vertex๋„...


ํ ํ ... ๊ทธ๊ฑด ๊ทธ๊ฑฐ๊ณ  ์จ‹๋“ , sin์„ ์ด์šฉํ•ด์„œ ๋ฌผ๊ฒฐ๋ฌด๋Šฌ๋ฅผ ์ค˜๋ณด๋„๋ก ํ•˜์ž

ย  ย  gl_FragColor = v_vColour * texture2D( gm_BaseTexture, vec2(v_vTexcoord.x +sin(10.0*v_vTexcoord.y)/10.0 ,v_vTexcoord.y));


viewimage.php?id=2abcdd23dad63db0&no=29bcc427b38477a16fb3dab004c86b6fd0548bb7fdb3d15e4d497483ceabfeab097499a39093ef2caf9bafa37770c454c30e1d694d849779b574

๋น ๋ฐค. ์™œ์ด๋ ‡๊ฒŒ ๋˜๋ƒ๊ณ ?ย 

์ด๊ฒŒ ๋ฐ”๋กœ ์ฒซ๋ฒˆ์งธ ๋ฌธ์ œ์•ผ... ๊ทธ๋ฆด๋ ค๊ณ  ํ•˜๋Š” ๊ณต๊ฐ„์€ ๋ฐ”๋€Œ๋Š”๋ฐย ๊ทธ๋ฆด ๊ณต๊ฐ„์€ ๋˜‘๊ฐ™์•„์„œ, ๋ฐ–์œผ๋กœ ์‚์ ธ๋‚˜์˜จ๊ฑด ์•ˆ๊ทธ๋ ค์ง„๋‹ค๋Š”๊ฑฐ์ง€

๊ทธ๋Ÿผ ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๋А๋ƒ? ์ €๋ฒˆ์— ๋งํ•ด์คฌ๋‹ค์‹œํ”ผ surface๊ธฐ๋Šฅ์„ ์“ฐ๋ฉด ์‰ฌ์›Œ. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ, ์ € ๋ชจ์Šต์„ ๋ฐ”๋กœ ์…ฐ์ด๋”์— ๋„ฃ๋Š”๊ฒŒ ์•„๋‹ˆ๊ณ , surface๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ ๊ฑฐ๊ธฐ์—๋‹ค๊ฐ€ ์Šคํ”„๋ผ์ดํŠธ๋ฅผ ๊ทธ๋ฆฌ๊ณ  ๊ทธ surface ์—๋‹ค๊ฐ€ ์…ฐ์ด๋”๋ฅผ ์ ์šฉ์‹œํ‚ค๋Š”๊ฑฐ์ง€!



viewimage.php?id=2abcdd23dad63db0&no=29bcc427b38477a16fb3dab004c86b6fd0548bb7fdb3d15e4d497483ceabfeab097499a39093ef2caf9bafa37770c00f59993946b7c43ec15adc


๊ทธ๋Ÿฌ๋ฉด ์ด๋ ‡๊ฒŒ ๋‚˜์™€! ์ ์šฉ์‹œํ‚จ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์•„.

//Creation

surf=surface_create(200,200);


//Draw


surface_set_target(surf);

draw_sprite_ext(sprite_index,image_index,30,30,image_xscale,image_yscale,image_angle,c_white,1);

surface_reset_target();


shader_set(shader0);

draw_surface(surf,x-30,y-30);

shader_reset();


draw_sprite_ext์•ˆ์— 30ํ•˜๊ณ  draw_surface์•ˆ์˜ 30์€ ๊ฐ™์€ ์ˆซ์ž์•ผ๋˜๊ณ , surface_create ์•ˆ์˜ 200์€ ์ ๋‹นํžˆ ํฐ ์ˆซ์ž์ด๋ฉด ๋ผ.


์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€ํ• ๊ฒŒ. ์ด์ •๋„ ์•Œ์•˜์œผ๋ฉด ์…ฐ์ด๋”๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘์šฉ๋˜๋Š”์ง€ ๊ฐ ์žก์„์ˆ˜ ์žˆ์„๊บผ์•ผ.