๐Ÿ“˜ Direct3D Tutorial3

https://docs.microsoft.com/en-us/previous-versions//ff729720(v=vs.85)?redirectedfrom=MSDN

์œ„ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•˜์—ฌ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

Tutorial3 :

1) ๊ทธ๋ž˜ํ”ฝ ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ์‚ผ๊ฐํ˜•์„ ๊ทธ๋ฆฌ๋Š” ๊ณผ์ • ์•Œ์•„๋ณด๊ธฐ

2) ์…ฐ์ด๋”


๐Ÿ“Œ Shaders (์…ฐ์ด๋”)

Direct3D 11์€ ์ •์  ์…ฐ์ด๋”, ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ ์…ฐ์ด๋”, ํ”ฝ์…€ ์…ฐ์ด๋”๋ฅผ ์ง€์›ํ•œ๋‹ค.
์ •์  ์…ฐ์ด๋”๋Š” ์ •์ ์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„ ์ •์  ๋ฒ„ํผ๋ฅผ ํ†ตํ•ด GPU๋กœ ์ „๋‹ฌ๋˜๋Š” ๋ชจ๋“  ์ •์ ์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ์”ฉ ์‹คํ–‰๋œ๋‹ค.
์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ ์…ฐ์ด๋”๋Š” ์ , ์„ , ์‚ผ๊ฐํ˜• ๋“ฑ์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„ ๊ฐ๊ฐ ํ•œ ๋ฒˆ์”ฉ ์‹คํ–‰๋œ๋‹ค.
ํ”ฝ์…€ ์…ฐ์ด๋”๋Š” ๋ Œ๋”๋งํ•˜๊ณ ์ž ํ•˜๋Š” ํ”ฝ์…€๋งˆ๋‹ค ํ•œ ๋ฒˆ์”ฉ ์‹คํ–‰๋œ๋‹ค.

์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ ์…ฐ์ด๋”๋Š” ์„ ํƒ์‚ฌํ•ญ์ด๋‹ค.

์‹คํ–‰ ์ˆœ์„œ : ์ •์  ์…ฐ์ด๋” -> (์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ ์…ฐ์ด๋”) -> ๋ ˆ์Šคํ„ฐ๋ผ์ด์ € -> ํ”ฝ์…€ ์…ฐ์ด๋”


๐Ÿ“Œ Vertex Shaders (์ •์  ์…ฐ์ด๋”)

GPU๋Š” ์ •์  ๋ฒ„ํผ๋ฅผ ๋ฐ›์•„์„œ ๊ฐ ์ •์ ๋“ค์„ ํ™œ์„ฑํ™” ์‹œํ‚จ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ •์  ์…ฐ์ด๋”์—๊ฒŒ ์ž…๋ ฅ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ •์  ๋ฐ์ดํ„ฐ๋“ค์„ ์ „๋‹ฌํ•œ๋‹ค.

์ •์  ์…ฐ์ด๋”์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์—ญํ• ์€ ๋ณ€ํ™˜(transformation)์ด๋‹ค. ์ด๋Š” ๋ฒกํ„ฐ๋ฅผ ํ•œ ์ขŒํ‘œ๊ณ„์—์„œ ๋‹ค๋ฅธ ์ขŒํ‘œ๊ณ„๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ์‚ผ๊ฐํ˜•์ด 2D ํ…์Šค์ฒ˜ ๋ฒ„ํผ์— ๊ทธ๋ ค์งˆ ๋•Œ GPU๋Š” ๊ผญ์ง“์ ์ด ๊ทธ๋ ค์งˆ ๋ฒ„ํผ ์ƒ์˜ ์ ์˜ 2D ์ขŒํ‘œ๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค.
์šฐ์„  ์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ๋ณ€ํ™˜์„ ์ง„ํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.

Direct3D 11 ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ์…ฐ์ด๋”๋ฅผ HLSL(High-Level Shading Language)๋กœ ์ž‘์„ฑํ•˜์˜€๋‹ค.

์ •์  ์…ฐ์ด๋”๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.


๐Ÿ”Ž ์ •์  ์…ฐ์ด๋”

    float4 VS( float4 Pos : POSITION ) : SV_POSITION
    {
        return Pos;
    }

VS : ์ •์  ์…ฐ์ด๋”์˜ ์˜๋ฏธ
POSITION(์ž…๋ ฅ๋ณ€์ˆ˜) : ์ด์ „์— ์„ค์ •ํ•œ ์ •์ ์˜ ์œ„์น˜๋ฅผ ํฌํ•จํ•˜๋Š” semantic
SV_POSITION : ์ด๋ฏธ ์ •์˜๋˜์–ด ์žˆ๋Š” semantic. clip-space ์œ„์น˜๋ฅผ ์ •์˜ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊ทธ๋ž˜ํ”ฝ ํŒŒ์ดํ”„๋ผ์ธ์— ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• 


๐Ÿ“Œ Pixel Shaders (ํ”ฝ์…€ ์…ฐ์ด๋”)

๋ชจ๋‹ˆํ„ฐ๋Š” ํ”ฝ์…€๋“ค์˜ 2์ฐจ์› ๊ฒฉ์ž์ด๊ณ , ๊ฐ๊ฐ์˜ ํ”ฝ์…€๋“ค์€ ๋…๋ฆฝ์ ์ธ ์ƒ‰๊น”์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๊ฐ€ ๋ณด๋Š” ์‚ผ๊ฐํ˜•์€ ์‹ค์ œ๋กœ๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ ์˜ค๋ฅธ์ชฝ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ์ด๋‹ค.

์„ธ ๊ฐœ์˜ ์ •์ ์œผ๋กœ ์ •์˜๋œ ์‚ผ๊ฐํ˜•์„ ํ”ฝ์…€ ๋ชจ์Œ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๋ ˆ์Šคํ„ฐ๋ผ์ด์ฆˆ๋ผ๊ณ  ํ•œ๋‹ค. GPU๋Š” ๋จผ์ € ๋ Œ๋”๋ง๋˜๋Š” ์‚ผ๊ฐํ˜•์— ํฌํ•จ๋˜๋Š” ํ”ฝ์…€์„ ๊ฒฐ์ •ํ•œ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฐ ํ”ฝ์…€์— ๋Œ€ํ•ด ํ™œ์„ฑ ํ”ฝ์…€ ์…ฐ์ด๋”๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
ํ”ฝ์…ธ ์…ฐ์ด๋”์˜ ์ฃผ๋œ ๋ชฉ์ ์€ ์ •์  ์…ฐ์ด๋”๋‚˜ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ถ€ํ„ฐ ์ž…๋ ฅ์„ ์–ป์–ด์„œ ๊ฐ ํ”ฝ์…€์˜ ์ƒ‰๊น”์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์ด ์ƒ‰์ƒ์„ ๊ณ„์‚ฐํ•œ ๋‹ค์Œ ๋‹ค์‹œ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๋ณด๋‚ธ๋‹ค.

์œ„์—์„œ ๋งŒ๋“  ์ •์  ์…ฐ์ด๋”๋Š” SV_POSITION ์ด๋ผ๋Š” 4๊ฐœ์˜ float์ด ํ”ฝ์…€ ์…ฐ์ด๋”์˜ ์ž…๋ ฅ์ด ๋œ๋‹ค. ํ”ฝ์…€ ์…ฐ์ด๋”์˜ outputํ˜•์‹ ์—ญ์‹œ float4์ด๋‹ค.

๐Ÿ”Ž ํ”ฝ์…€ ์…ฐ์ด๋”

    float4 PS( float4 Pos : SV_POSITION ) : SV_Target
    {
        return float4( 1.0f, 1.0f, 0.0f, 1.0f );    // Yellow, with Alpha = 1
    }

SV_Target : ๋ Œ๋” ํƒ€๊ฒŸ ํ˜•์‹์œผ๋กœ์˜ ์ถœ๋ ฅ์„ ์˜๋ฏธ


๐Ÿ“Œ Creating the Shaders (์…ฐ์ด๋” ๋งŒ๋“ค๊ธฐ)

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์—์„œ ์ •์  ์…ฐ์ด๋”์™€ ํ”ฝ์…ธ ์…ฐ์ด๋” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. D3DX11CompileFromFile()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”Ž ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์—์„œ ์…ฐ์ด๋” ๋งŒ๋“ค๊ธฐ

    // Create the vertex shader
    if( FAILED( D3DX11CompileFromFile( "Tutorial03.fx", NULL, NULL, "VS", "vs_4_0", D3DCOMPILE_ENABLE_STRICTNESS, NULL, NULL, &pVSBlob, &pErrorBlob, NULL ) ) )
        return FALSE;

    // Create the pixel shader
    if( FAILED( D3DX11CompileFromFile( "Tutorial03.fx", NULL, NULL, "PS", "ps_4_0", D3DCOMPILE_ENABLE_STRICTNESS, NULL, NULL, &pPSBlob, &pErrorBlob, NULL ) ) )
        return FALSE;

๐Ÿ“Œ Putting It Together

์ตœ์ข…์ ์œผ๋กœ ํ•„์š”ํ•œ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1๋‹จ๊ณ„ : Tutorial2์—์„œ์ฒ˜๋Ÿผ ์ •์  ๋ฐ์ดํ„ฐ์— ์†Œ์Šค ๋ฐ์ดํ„ฐ ๋งŒ๋“ค๊ธฐ
2๋‹จ๊ณ„ : Tutorial3์—์„œ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€ํ™˜(transform)ํ•˜๋Š” ์…ฐ์ด๋” ๋งŒ๋“ค๊ธฐ

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ