-
Notifications
You must be signed in to change notification settings - Fork 4
CH05 OpenGL ES Shading Language
์ด์ ์ฅ์์ ์ดํด๋ณธ ๊ฒ์ฒ๋ผ ์ ฐ์ด๋๋ OpenGL ES 3.0 API์ ํต์ฌ์ ์๋ ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋๋ค. ๋ชจ๋ OpenGL ES 3.0 ํ๋ก๊ทธ๋จ์๋ ์๋ฏธ ์๋ ๊ทธ๋ฆผ์ ๋ ๋๋งํ๊ธฐ ์ํด ๋ฒํ ์ค ์ ฐ์ด๋์ ํ๋๊ทธ๋จผํธ ์ ฐ์ด๋๊ฐ ๋ชจ๋ ํ์ํฉ๋๋ค. ์ ฐ์ด๋ ๊ฐ๋ ์ด API์์ ์ฐจ์งํ๋ ์ค์์ฑ์ ๊ณ ๋ คํ ๋ ๊ทธ๋ํฝ์ค API์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ดํด๋ณด๊ธฐ ์ ์ ์ ฐ์ด๋ ์์ฑ์ ๊ธฐ๋ณธ ์ฌํญ์ ์์งํ๊ณ ์๋์ง ํ์ธํ๊ณ ์ ํฉ๋๋ค.
์ด ์ฅ์ ๋ชฉํ๋ ๋ค์ ๊ฐ๋ ์ ์ดํดํ๋ ๊ฒ์ ๋๋ค:
- ๋ณ์ ๋ฐ ๋ณ์ ์ ํ
- ๋ฒกํฐ ๋ฐ ํ๋ ฌ ๊ตฌ์ฑ ๋ฐ ์ ํ
- ์์
- ๊ตฌ์กฐ์ฒด์ ๋ฐฐ์ด
- ์ฐ์ฐ์, ์ ์ด ํ๋ฆ ๋ฐ ํจ์
- ์ ๋ ฅ/์ถ๋ ฅ ๋ณ์, ์ ๋ํผ, ์ ๋ํผ ๋ธ๋ก, ๋ ์ด์์
- ์ ์ฒ๋ฆฌ๊ธฐ ๋ฐ ์ง์์ด
- ์ ๋ํผ ๋ฐ ๋ณด๊ฐ๊ธฐ ํจํน
- ์ ๋ฐ ํ์ ์ ๋ฐ ๋ถ๋ณ์ฑ
์ ฐ์ด๋์ ๊ตฌ๋ฌธ์ c์ธ์ด์ ์ ์ฌํฉ๋๋ค. c์ฝ๋๋ฅผ ์ดํดํ ์ ์๋ค๋ฉด ์ ฐ์ด๋์ ์ฝ๋๋ฅผ ์ดํดํ๋๋ฐ ํฐ ์ด๋ ค์์ด ์์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ฒ์ ์ฌ์๊ณผ ์ง์๋๋ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ํ๋ถํฐ ์์ํ์ฌ ๋ ์ธ์ด ๊ฐ์๋ ๋ช ๊ฐ์ง ์ฃผ์ ์ฐจ์ด์ ์ด ์์ต๋๋ค.
OpenGL ES 3.0 ๋ฒํ ์ค ๋ฐ ํ๋๊ทธ๋จผํธ ์ ฐ์ด๋์ ์ฒซ ๋ฒ์งธ ์ค์๋ ํญ์ ์ ฐ์ด๋ ๋ฒ์ ์ด ์ ์ธ๋ฉ๋๋ค. ์ ฐ์ด๋ ์ปดํ์ผ๋ฌ๋ ์ ฐ์ด๋์ ์ ์ธ๋ ๋ฒ์ ์ ๋ฐ๋ผ์ ์ ฐ์ด๋๋ฅผ ์ปดํ์ผ ํฉ๋๋ค. (์ ์ธํ์ง ์์ผ๋ฉด 1.00 ๋ฒ์ ์ฌ์ฉ Opengles 2.0) ์ ฐ์ด๋ฉ ์ธ์ด 3.0์์๋ ์๋ก์ด ๊ธฐ๋ฅ์ด ๋ง์ด ์ถ๊ฐ ๋์์ต๋๋ค.
-
์ถ๊ฐ๋ ๊ธฐ๋ฅ
non-square matrices, full integer support, interpolation qualifiers, uniform blocks, layout qualifiers, new built-in functions, full looping, full branching support, and unlimited shader instruction length
์ปดํจํฐ ๊ทธ๋ํฝ์์๋ ๋ฐฑํฐ์ ํ๋ ฌ์ด (์ปดํจํฐ ๊ทธ๋ํฝ์์์?)๋ณํ์ ๊ธฐ์ด๋ฅผ ํ์ฑํฉ๋๋ค. ์ด ๋ ๋ฐ์ดํฐ ํ์ ์ ์ ฐ์ด๋ฉ ์ธ์ด์ ํต์ฌ์ด๊ธฐ๋ ํฉ๋๋ค.
๋ณ์ ํด๋์ค | ํ์ | ์ค๋ช |
---|---|---|
Scalars (์ค์นผ๋ผ) | float, int, uint, bool | ๋ถ๋ ์์์ , ์ ์, ๋ถํธ ์๋ ์ ์ ๋ฐ ๋ถ์ธ ๊ฐ์ ๋ํ ์ค์นผ๋ผ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์ ํ |
Floating-point-vectors (๋ถ๋์์์ ๋ฒกํฐ) | float, vec2, vec3, vec4 | 1๊ฐ, 2๊ฐ, 3๊ฐ ๋๋ 4๊ฐ์ ๊ตฌ์ฑ์์์ ๋ถ๋ ์์์ ๊ธฐ๋ฐ ๋ฒกํฐ ์ ํ |
Integer vector (์ ์ ๋ฐฑํฐ) | int, ivec2, ivec3, ivec4 | 1๊ฐ, 2๊ฐ, 3๊ฐ ๋๋ 4๊ฐ ์ฑ๋ถ์ ์ ์ ๊ธฐ๋ฐ ๋ฒกํฐ ์ ํ |
Unsigned integer vector (๋ถํธ์๋ ์ ์ ๋ฒกํฐ) | uint, uvec2, uvec3, uvec4 | 1๊ฐ, 2๊ฐ, 3๊ฐ ๋๋ 4๊ฐ ์ฑ๋ถ์ ๋ถํธ ์๋ ์ ์ ๊ธฐ๋ฐ ๋ฒกํฐ ์ ํ |
Boolean vector (๋ถ์ธ ๋ฒกํฐ) | bool, bvec2, bvec3, bvec4 | 1๊ฐ, 2๊ฐ, 3๊ฐ ๋๋ 4๊ฐ ์ฑ๋ถ์ ๋ถ์ธ ๊ธฐ๋ฐ ๋ฒกํฐ ์ ํ |
Matrics (ํ๋ ฌ) | mat2, mat2x3, mat2x4, mat3x2, mat3, mat3x4, mat4x2, mat4x3, mat4 | ํฌ๊ธฐ๊ฐ 2ร2, 2ร3, 2ร4, 3ร2, 3ร3, 3ร3, 4ร2, 4ร3 ๋๋ 4ร4์ธ ๋ถ๋ ์์์ ํ๋ ฌ |
์ ฐ์ด๋ฉ ์ธ์ด์ ๋ณ์๋ ๋ฐ๋์ ํ์ ๊ณผ ํจ๊ป ์ ์ธํด์ผํฉ๋๋ค.
์์ :
float specularAtten; // ๋ถ๋ ์์์ ๊ธฐ๋ฐ ์ค์นผ๋ผ
vec4 vPosition; // ๋ถ๋์์์ ๊ธฐ๋ฐ 4-ํํ ๋ฒกํฐ
mat4 mViewProgection; // 4 x 4 ํ๋ ฌ ๋ณ์ ์ ์ธ
ivec2 vOffset; // ์ ์ ๊ธฐ๋ฐ 2-ํํ ๋ฒกํฐ
๋ณ์๋ ์ ์ธ ๋, ํน์ ์ดํ์ ์ด๊ธฐํํ ์ ์์ต๋๋ค. ์ด๊ธฐํ๋ ์์ฑ์๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋๋ฉฐ, ์ ํ ๋ณํ์๋ ์ฌ์ฉ๋ฉ๋๋ค.
-
์ ฐ์ด๋์์๋ ๋ณ์ ํ์ ์ ๋ณํ์ ๋ํ์ฌ ๊ท์น์ด ์๊ฒฉํจ. ๋ณ์๋ ๊ฐ์ ํ์ ์ ๋ณ์์๋ง ํ ๋น๋๊ฑฐ๋ ์ฐ์ฐ์ ํ ์ ๊ฐ์ ํ์ ์ด์ด์ผ๋ง ํ๋ค.
-
์์์ ํ์ ๋ณํ(implicit type conversion) ํ์ฉํ์ง ์์ โ ์๋ํ์ง ์์ ๋ณํ์ผ๋ก ์ธํ ๋ฒ๊ทธ ๋ฐฉ์งํ๊ธฐ ์ํด์
-
ํ์ ๋ณํ์ด ์์ ๋กญ์ง ์์์(?์ ์ฝ์ด ์์ด์?) ์์ฑ์๋ฅผ ์ฌ์ฉํ ์ ์์
- ์์ฑ์๋ฅผ ํตํด์ ๋ณ์ ์ด๊ธฐํ ๊ฐ๋ฅ
- ๋ค๋ฅธ ํ์ ์ ๋ณ์๊ฐ์ ํ๋ณํ ๊ฐ๋ฅ
- ์์ฑ์๋ฅผ ํตํด์ ๋ณ์๋ฅผ ์ ์ธํ ๋ (๋๋ ์ ฐ์ด๋์์ ๋์ค์) ์ด๊ธฐํ
- ๋ด์ฅ๋ ๊ฐ ๋ณ์ ํ์ ์๋ ๊ด๋ จ ์์ฑ์๋ค์ด ์์
- ์ด๊ธฐํ/์บ์คํ ์์
float myFloat = 1.0; float myFloat2 = 1; // ERROR: invalid type conversion bool myBool = true; int myInt = 0; int myInt2 = 0.0; // ERROR: invalid type conversion myFloat = float(myBool); // [myBool] Convert from bool -> float myFloat = float(myInt); // [myInt] Convert from int -> float myBool = bool(myInt); // [myInt] Convert from int -> bool
-
๋ฒกํฐ ๋ฐ์ดํฐ ๋ํ ์์ฑ์๋ฅผ ์ฌ์ฉํด์ ๋ณํ๊ณผ ์ด๊ธฐํ ๊ฐ๋ฅํจ. ๋ฒกํฐ ์์ฑ์์ ๋ํ ์ธ์๋ ๋์ผํ built in type (
float
,int
,bool
)๋ก ๋ณํ๋จ. ๋ฒกํฐ ์์ฑ์์ ์ธ์๋ฅผ ๋๊ธฐ๋ ๋ฐฉ๋ฒ ๋ ๊ฐ์ง:-
์์ฑ์์ ์ธ์๋ฅผ 1๊ฐ๋ง ๋ฃ์ผ๋ฉด ๊ทธ ๊ฐ์ด ๋ฒกํฐ์ ๋ชจ๋ ๊ฐ์ ์ค์ ํ๋๋ฐ ์ฌ์ฉ๋จ
-
์ฌ๋ฌ ์ค์นผ๋ผ ๋๋ ๋ฒกํฐ ์ธ์๊ฐ ์ ๊ณต๋๋ฉด ํด๋น ์ธ์๋ฅผ ์ผ์ชฝ์์ ๋ถํฐ ์ค๋ฅธ์ชฝ ์์๋ก ์ค์ . ์ฌ๋ฌ ์ค์นผ๋ผ ์ธ์๊ฐ ์ ๊ณต๋ ๊ฒฝ์ฐ, ์ธ์๋ก ๋ค์ด์จ ์ค์นผ๋ผ ์ปดํฌ๋ํธ ์(== ์ค์นผ๋ผ ๊ฐ์ ๊ฐ์)๊ฐ ๋ฒกํฐ์ ์ปดํฌ๋ํธ ์๋งํผ ๋ง์์ผํจ
-
-
ํ๋ ฌ(๋งคํธ๋ฆญ์ค)์ ๊ฒฝ์ฐ ์ ์ฐํ๊ฒ ๊ตฌ์ฑํ ์ ์๋ค(flexibleํ๋ค)
-
ํ๋ ฌ์ ๊ตฌ์ฑํ๋ ๊ธฐ๋ณธ ๊ท์น
- ํ๋ ฌ ์์ฑ์์ ์ค์นผ๋ผ ์ธ์๊ฐ 1๊ฐ ๋ค์ด์ค๋ฉด, ํด๋น ๊ฐ์ ํ๋ ฌ์ ๋๊ฐ์ ์ ๋ฐฐ์น๋จ. ์๋ฅผ๋ค์ด mat4(1.0)์ 4*4 ํ๋ ฌ์ ์์ฑํจ
- ํ๋ ฌ์ ์ฌ๋ฌ ๋ฒกํฐ ์ธ์๋ก ๊ตฌ์ฑํ ์ ์์. ์๋ฅผ๋ค์ด mat2๋ 2๊ฐ์ vec2๋ก ๊ตฌ์ฑํ ์ ์์
- ํ๋ ฌ์ ํ๋ ฌ์ ๊ฐ ๊ฐ์ ๋ํด ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์์ผ๋ก ์ค์ ๋๋ ์ฌ๋ฌ ์ค์นผ๋ผ ๊ฐ์ ์ธ์๋ก ๊ตฌ์ฑํ ์ ์์
-
ํ๋ ฌ์ ๊ตฌ์ฑ์ ์์ ๊ธฐ๋ณธ๊ท์น๋ณด๋ค ๋ ์ ์ฐํ๋ค
-
ํ๋ ฌ์ ์ด๊ธฐํ ํ๊ธฐ์ ์ถฉ๋ถํ ์ธ์๋ค๋ง ์๋ค๋ฉด, ์ค์นผ๋ผ์ ๋ฒกํฐ์ ์กฐํฉ๋ค๋ก ํ๋ ฌ์ ๊ตฌ์ฑํ ์ ์๋ค.
-
์ธ์๊ฐ ๋ค์ด์ค๋ฉด ์ด(column)๋ถํฐ ์ฑ์ด๋ค
-
โ.โ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐ์ด ์ฒจ์ โ[]โ๋ฅผ ํตํด์ ๋ฒกํฐ ์ ๊ทผ ๊ฐ๋ฅํจ
-
โ.โ์ฐ์ฐ์ ์ฌ์ฉ
-
๋ฒกํฐ๋ฅผ ๊ตฌ์ฑํ๋ ์ปดํฌ๋ํธ์ ์์ ๋ฐ๋ผ์ ๊ฐ ์ปดํฌ๋ํธ๋ ๋ค์ ๋ฌธ์๋ค์ ํผํฉ(= ๋ช ๋ช ๊ท์น)์ ์ฌ์ฉํด์ ์ ๊ทผํ ์ ์๋ค. โ {x, y, z, w}, {r, g, b, a}, {s, t, p, q}
-
3๊ฐ์ง๊ฐ ์ด๋ฆ์ด ๊ฐ๊ฐ ๋ค๋ฅธ ์ด์ : ๋ฒกํฐ๊ฐ ํํํ๋ ๋ฐ์ดํฐ๊ฐ ์ํ์ ์ฐ๋ ์ํ, ์, Texture Coordinate 3๊ฐ์ง์ฌ์.
-
๋ฒกํฐ์ ์ ๊ทผ ํ ๋ 1๋ฒ์ 1๊ฐ์ ๋ช ๋ช ๊ท์น๋ง ์ฌ์ฉ๊ฐ๋ฅํจ
-
์์!
-
-
-
๋ฐฐ์ด์ฒจ์ โ[]โ ์ฌ์ฉ
-
[0]์ x, [1]๋ y, [2]๋ z
-
ํ๋ ฌ์ ์ฌ๋ฌ ๋ฒกํฐ๋ก ๊ตฌ์ฑ๋ ๊ฒ์ผ๋ก ์๊ฐํจ
-
ํ๋ ฌ์์ ํ์ ๋ฐฐ์ด ์ฒจ์ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ํํ ๊ฐ๋ฅ
-
์์!
-
์์๋ ๊ธฐ๋ณธ ํ์ ์ ๋ค ์์ ๋ณ์๋ก ์ ์ธ ๊ฐ๋ฅํฉ๋๋ค. ์์ ๋ณ์๋ ์ ฐ์ด๋ ์์์ ๊ฐ์ด ๋ฐ๋์ง ์๋ ๋ณ์์ ๋๋ค. ์์๋ฅผ ์ ์ธํ๋ ค๋ฉด constํ์ ์๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค. ์์ ๋ณ์๋ ์ ์ธ์ ์ด๊ธฐํ ํด์ผํฉ๋๋ค!
C๋ C++์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฝ๊ธฐ์ ์ฉ์ด๋ฉฐ ์์ค ๋ด์์ ์์ ํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ํ์ ์ธ์๋ C์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ณ์๋ค์ ๊ตฌ์กฐ์ฒด๋ก ๋ง๋ค ์ ์์ต๋๋ค.
fogStruct
๋ผ๋ ๊ตฌ์กฐ์ฒด์ fogVar
๋ผ๋ ์ ๋ณ์๋ฅผ ์์ฑํฉ๋๋ค. ๊ตฌ์กฐ์ฒด๋ ์์ฑ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๊ธฐํ ํ ์ ์์ต๋๋ค. ์ ๊ตฌ์กฐ์ฒด๊ฐ ์ ์๋๋ฉด ํด๋น ๊ตฌ์กฐ์ฒด์ ๊ฐ์ ์ด๋ฆ์ผ๋ก ์ ๊ตฌ์กฐ์ฒด ์์ฑ์๋ ์ ์๋ฉ๋๋ค. ๊ตฌ์กฐ์ฒด์ ์ ํ๊ณผ ์์ฑ์๋ ์ผ๋์ผ๋ก ๋์๋์ด์ผํฉ๋๋ค.
๊ตฌ์กฐ์ฒด์ ์์์ ์ ๊ทผ ํ๋ ๋ฐฉ๋ฒ์ c์ ๋์ผํฉ๋๋ค.
C์ ๋งค์ฐ ์ ์ฌํฉ๋๋ค. index 0๋ถํฐ ์์ํฉ๋๋ค.
์ด๊ธฐํ ํ๊ธฐ:
๋ฐฐ์ด ์์ฑ์์ ํฌ๊ธฐ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ์ ํ ์ฌํญ์ ๋๋ค. ๋ฐฐ์ด ์์ฑ์์ ์ธ์ ์๋ ๋ฐฐ์ด์ ํฌ๊ธฐ์ ๊ฐ์์ผ ํฉ๋๋ค.
-
๊ฑฐ์ ๋ค C๋ ๋๊ฐ์ด ๋์ํฉ๋๋ค.
-
์ด์ง ์ฐ์ฐ์(*, /, +, -)์ ๊ฒฝ์ฐ ๋ณ์์ ๊ธฐ๋ณธ ์ ํ์ ๋ถ๋ ์์์ ๋๋ ์ ์์ฌ์ผ ํฉ๋๋ค.
-
๊ณฑํ๊ธฐ๋ float, vector, matrix์ ์กฐํฉ๋ค๊ฐ์๋ง ์ฐ์ฐ์ด ๊ฐ๋ฅํฉ๋๋ค.
-
๋น๊ต ์ฐ์ฐ์๋ ==์ !=(<, <=, >, >=)๋ฅผ ์ ์ธํ๊ณ ๋ ์ค์นผ๋ผ ๊ฐ์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
-
๋ฒกํฐ ๋น๊ตํ๋ ํจ์๋ ๋์ค์ ๋์์ฉ
- C์ธ์ด์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ ์ธ
- ์ ์ธํ ์์ ๋ณด๋ค ๋จผ์ ์ฌ์ฉํ๋ ค๋ฉด prototype ์จ์ค์ผ ํจ
- ๋งค๊ฐ๋ณ์ ํ์ ์ ์ง์๋จ
- in : (์ง์ ๋์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ) ์ด ํ์ ์๋ ๋งค๊ฐ๋ณ์๊ฐ ๊ฐ์ผ๋ก ์ ๋ฌ๋๋ฉฐ ํจ์์ ์ํด ์์ ๋์ง ์๋๋ก ์ง์ ํฉ๋๋ค.
- inout : ์ด ํ์ ์๋ ๋ณ์๊ฐ ํจ์์ ์ฐธ์กฐ๋ก ์ ๋ฌ๋๊ณ ๊ฐ์ด ์์ ๋๋ฉด ํจ์ ์ข ๋ฃ ํ ๋ณ๊ฒฝ๋๋๋ก ์ง์ ํฉ๋๋ค.
- out : ์ด ํ์ ์๋ ๋ณ์ ๊ฐ์ด ํจ์์ ์ ๋ฌ๋์ง ์๊ณ ํจ์์ ์ ๋ฌ๋์ง ์์ง๋ง ํจ์์์ ๋ฐํ๋ ๋ ์์ ๋ฉ๋๋ค. โ ์ ์์. return ๊ฐ์ผ๋ก ๋์ฒด
- ์ฌ๊ทํธ์ถ ์ง์x
- ์ผ๋ถ ์ํฉ์์๋ inlineํจ์ ๊ฐ์ด ํจ์๋ฅผ callํ์ง ์๊ณ ํด๋น ์ฝ๋๋ก ๋์ฒด
- stack์ ์ง์ํ์ง ์๋ GPU๋ฅผ ์ง์ํ๊ธฐ ์ํด inline implementation์ง์
- ๋นํธ์ธ ํจ์ ์ง์
- ์์ฒญ ๋ง๋ค๊ณ ํ๋ค
OpenGL ES Shading์ธ์ด์ control flow syntax๋ C ์ธ์ด์ ๋น์ทํฉ๋๋ค. ๊ฐ๋จํ if-then-else ๊ตฌ๋ฌธ์ C์ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ ํํ๋ก ์์ฑ ๊ฐ๋ฅํฉ๋๋ค.
์กฐ๊ฑด๋ฌธ(conditional statement) ์์ ์๋ ํํ์์ ๋ฐ๋์ boolean value์ด์ด์ผ๋ง ํฉ๋๋ค. ์ฆ, boolean value ๋๋ boolean value๋ฅผ ๋์ถํ๋ ํํ์(์์ปจ๋ ๋น๊ต ์ฐ์ฐ์)์ ์ฌ์ฉํด์ผ ํ๋ค๋ ๋ป์ ๋๋ค. ์ด๊ฒ์ด OpenGL ES Shading ์ธ์ด์์ ์กฐ๊ฑด๋ฌธ์ด ํํ๋๋ ๋ฐฉ์์ ๊ธฐ์ ์ ๊น๋ ค์๋ ๊ฐ๋ ์ ๋๋ค.
์กฐ๊ฑด๋ฌธ ์ด์ธ์๋, while, do-while loop๋ฅผ ์์ฑ ๊ฐ๋ฅํฉ๋๋ค. OpenGL ES 2.0์์๋ loop๋ฅผ ์ฌ์ฉํ ๋ ์๊ฒฉํ ์ ์ฝ์ด ์กด์ฌํ์์ต๋๋ค. ์ค์ง ์ปดํ์ผ๋ฌ์ ์ํด ํผ์ณ์ง๋(unrolled) loop๋ง ์ฌ์ฉ๊ฐ๋ฅํ์ต๋๋ค. ์ด๋ฌํ ์ ์ฝ์ ๋์ด์ 3.0 ๋ฒ์ ผ์์๋ ์กด์ฌํ์ง ์์ต๋๋ค. GPU ํ๋์จ์ด๋ loop์ flow control๋ฅผ ์ง์ํ๋๊ฒ์ผ๋ก ๊ธฐ๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก loop๋ ์ง์์ด ๋ฉ๋๋ค.
์ด๊ฒ์ loop๋ฅผ ์ฌ์ฉํ๋๊ฒ์ด performance์ ์ํฅ์ด ์์ ์๋ค๊ณ ํ๋๊ฒ์ ๋งํ๊ณ ์ ํ๋๊ฒ ์๋๋๋ค. ๋๋ถ๋ถ์ GPU ์ํคํ ์ณ๋, vertices์ fragments๋ ์ฌ๋ฌ๊ฐ์ batch๋ฅผ ํตํด parallel ํ๊ฒ ์คํ์ด ๋ฉ๋๋ค. GPU๋ ๋ณดํต ํ๋์ batch์์ ์๋ ๋ชจ๋ vertices์ fragment๋ค์ ํ๋ฆ์ ์ด๊ตฌ๋ฌธ์ ๋ชจ๋ ๋ถ๊ธฐ๋ค (๋๋ loop)์ ๋น ์ง์์ด ์ํํ๋๋ก ์๊ตฌํฉ๋๋ค. Batch ์ฌ์ด์ฆ๋ GPU์ ๋ฐ๋ผ ๋ค๋ฅด๋ฉฐ ํน์ ์ํคํ ์ฒ์์ ํ๋ฆ ์ ์ด ์ฌ์ฉ์ด ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ํ์ธํ๊ธฐ ์ํด ํ๋กํ์ผ๋ง์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ํ์ง๋ง ๊ฒฝํ์ ์ผ๋ก ์๋ ค์ง ๋ฐฉ๋ฒ์, ๋๋ฌด ๋ณต์กํ ํ๋ฆ์ ์ด ๊ตฌ๋ฌธ์ ํผํ๋ผ๋ ๊ฒ์ ๋๋ค. (ํ์ค๋ก ์ ์์๋ก ์กฐ๊ธ๋ ๋นจ๋ผ์ง)
๐ก ์์ ๋ฌธ์ ์ ์ branch divergence๋ผ๊ณ ๋ ํ๋ค.OpenGL ES Shading Language์์์ ๋ณ์ ํ์ ์ ์ด์ ์ค ํ๋๋ uniform๋ณ์์ ๋๋ค. Uniform ๋ณ์๋ application์ ์ํด์ OpenGL ES 3.0 API์ฝ์ ํตํด ์ ๋ฌ๋ read-only ๊ฐ์ ์ ์ฅํฉ๋๋ค.
-
ํต์์ ์ผ๋ก, Vertex shader์ fragment shader๋ค์ ๋์์ ์ฌ์ฉ๋๋ฉด์ ๋ณํ์ง ์๋ ๋ณ์๊ฐ ์๋ค๋ฉด uniform์ผ๋ก ์ ์ธํฉ๋๋ค.
-
compile-time์ ๊ฐ์ด ์ ํด์ง๋ ์์๋ค์ ์ฑ๋ฅ์์ ์ด์ ๋ก constant๋ก ์ง์ ๋๋ฉด ์ข์ต๋๋ค.
-
Uniform ๋ณ์๋ค์ vertex shader, fragment shader์์ ๊ณต์ ๋ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ์ type๊ณผ ์ด๋ฆ์ผ๋ก ์ ์ธ๋์ด์ ์๋ก ๋งค์นญ์ด ๋์ด์ผ ํฉ๋๋ค.
-
โconstant storeโ๋ก ์๋ ค์ง ํ๋์จ์ด ๊ณต๊ฐ์ ์ ์ฅ์ด ๋ฉ๋๋ค. ๋ณดํต์๊ฒฝ์ฐ ์ด ๊ณต๊ฐ์ ํ์ ๋ ๊ณต๊ฐ์ด๋ผ ์ ์ฅ๋ ์ ์๋ uniform ๊ฐฏ์๋ ํ์ ๋์ด ์์ต๋๋ค. gl_MaxVertexUniformVectors, gl_MaxFragmentUniformVectors ๋ด์ฅ ๋ณ์๋ฅผ ์ฝ์์ผ๋ก์จ ์์๋ผ ์ ์์ต๋๋ค. ์ต์๋ก ๋ณด์ฅํ๋ ๊ฐฏ์๋ 256๊ฐ์ vertex uniform vectors์ 224๊ฐ์ fragment uniform vectors์ ๋๋ค.
- opengl es์ ํน์๋ณ์ํ์ (?!) Vertex input(๋๋ ์ดํธ๋ฆฌ๋ทฐํธ)
- ๋ฒํ ์ค ์ ๋ ฅ ๋ณ์๋ ๋ฒํ ์ค ์ ฐ์ด๋์ ๋ํ ๋ฒํ ์ค๋ณ ์ ๋ ฅ์ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ in ํค์๋๋ก ์ง์ ๋ฉ๋๋ค.
- ์์น, ๋ ธ๋ง, ํ ์ค์ฒ ์ขํ ์์๋ฑ์ ๋ฐ์ดํฐ ์ ์ฅํจ
- ๊ฐ ๋ฒํ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋
-
layout ํ์ ์๋ vertex attribute์ ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ ๋ ์ฌ์ฉ (์ ํ์ฌํญ์ด๋ฉฐ ์ ํ๋ฉด ๋ง์ปค์์ ์๋ํ ๋น)
- 6์ฅ์์ ์์ธํ๊ฒ ๋์ต๋๋ค.
-
vertex shader input๊ณผ ๋ฌ๋ฆฌ vertex shader output/fragment shader input ๋ณ์์์๋ layout ํ์ ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค
-
ํ๋์จ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฒํ ์ค ์ ฐ์ด๋ ์ถ๋ ฅ/ํ๋๊ทธ๋จผํธ ์ ฐ์ด๋ ์ ๋ ฅ์ ์๋ฅผ ์ ํํฉ๋๋ค(ํ๋์จ์ด์์๋ ๋ณดํต ์ด๋ฅผ ๋ณด๊ฐ๊ธฐ๋ผ๊ณ ํฉ๋๋ค). ์ง์ํ๋ ๋ฒํ ์ค ์ ฐ์ด๋ ์ถ๋ ฅ์ ์๋ gl_MaxVertexOutputVectors ๋ด์ฅ ๋ณ์์ ์ํด ์ ๊ณต๋ฉ๋๋ค
- (glGetIntegerv๋ฅผ ์ฌ์ฉํ์ฌ GL_MAX_VERTEX_OUTPUT_COMPONENTS๋ฅผ ์ฟผ๋ฆฌํ๋ฉด ๋ฒกํฐ ์๊ฐ ์๋ ์ด ์ปดํฌ๋ํธ ๊ฐ์ ์๊ฐ ์ ๊ณต๋ฉ๋๋ค)
-
OpenGL ES 3.0 ๊ตฌํ์ด ์ง์ํ ์ ์๋ ๋ฒํ ์ค ์ถ๋ ฅ ๋ฒกํฐ์ ์ต์ ๊ฐ์๋ 16๊ฐ
-
์ง์ํ๋ ํ๋๊ทธ๋จผํธ ์ ฐ์ด๋ ์ ๋ ฅ์ ์๋ gl_MaxFragmentInputVectors์ ์ํด ์ ๊ณต๋ฉ๋๋ค
- (glGetIntegerv๋ฅผ ์ฌ์ฉํ์ฌ GL_MAX_FRAGMENT_INPUT_COMPONENTS๋ฅผ ์ฟผ๋ฆฌํ๋ฉด ๋ฒกํฐ ์๊ฐ ์๋ ์ด ์ปดํฌ๋ํธ ๊ฐ์ ์๊ฐ ์ ๊ณต๋ฉ๋๋ค).
-
OpenGL ES 3.0 ๊ตฌํ์ด ์ง์ํ ์ ์๋ ์กฐ๊ฐ ์ ๋ ฅ ๋ฒกํฐ์ ์ต์ ๊ฐ์๋ 15๊ฐ
-
์์
-
ํ๋๊ทธ๋จผํธ ์์ด๋๋ 1๊ฐ ์ด์์ ์์ ์ถ๋ ฅํ ์ ์์
- ์ผ๋ฐ์ ์ผ๋ก ๋จ์ผ ์์ ๋ฒํผ๋ก๋ง ๋ ๋๋ง, ์ด๋ layout ํ์ ์๋ ์ ํ์ฌํญ (์ถ๋ ฅ ๋ณ์๋ 0๋ฒ์งธ๋ก ์ด๋ํ๋ค๊ณ ๊ฐ์ )
- ๋ฉํฐ ๋ ๋ ํ๊น(MRT)์ผ๋ก ๋ ๋๋ง ํ ๋๋ layout ํ์ ์๋ฅผ ์ฌ์ฉํด์ ๊ฐ ์ถ๋ ฅ์ด ์ด๋ค ๋ ๋ ํ๊น์ผ๋ก ์ด๋ํ๋์ง ์ง์ ๊ฐ๋ฅ.
-
๋ณดํต ํ๋๊ทธ๋จผํธ ์์ด๋์ 1๊ฐ์ ์ถ๋ ฅ ๋ณ์๊ฐ ์๊ณ , ์ด ๊ฐ์ ํ์ดํ๋ผ์ธ โper-fragment operationsโ๋ก ์ ๋ฌ ๋ ์ถ๋ ฅ ์์์ด ๋จ
-
vertex shader output๊ณผ fragment shader input ์์๋ ํ์ ์ ์ฌ์ฉ๊ฐ๋ฅํจ
-
ํ์ ์๊ฐ ์๋ ๊ฒฝ์ฐ ๋ถ๋๋ฌ์ด ์์ด๋ฉ(smooth shading)์ ์ํํจ
-
vertex shaer ouput์ ์ถ๋ ฅ๋ณ์๋ (primitive ์ ์ฒด์ ๊ฑธ์ณ) ์ ํ๋ณด๊ฐ๋๋ฉฐ, fragment shader๋ ์ ํ ๋ณด๊ฐ๋ ๊ฐ์ ์ ๋ ฅ์ผ๋ก ๋ฐ์
-
์์
-
-
Flat Shading
-
opengl es 3.0์์ ์ถ๊ฐ๋จ
-
vertex shader์ ์ถ๋ ฅ๋ณ์๊ฐ ๋ณด๊ฐ๋์ง ์์
-
๋์ vertex ์ค์ 1๊ฐ๋ฅผ provoking vertex๋ก ์ ํ๊ณ (primitive์ ํ์ ๋ฐ๋ผ ๋ค๋ฆ. 7์ฅ์์ ์์ธํ ์ค๋ช ), ์ด vertex์ ๊ฐ primitive์ ๋ชจ๋ fragments์ ์ฌ์ฉํจ
-
์์
-
-
centroid
-
๋ณด๊ฐ๊ธฐ์ centroid๋ฅผ ์ฌ์ฉํด์ ๋ค๋ฅธ ํ์ ์๋ฅผ ์ถ๊ฐํ ์ ์์
-
11์ฅ์ ์์ธํ ๋์ด
-
๋ฉํฐ์ํ๋ง์ผ๋ก ๋ ๋๋งํ ๋, centroid ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋๋ง๋๋ primitive ๋ด๋ถ์์ ๋ณด๊ฐ์ ๊ฐ์ ๋ก ์ํํ ์ ์์
- ์ํด์ฃผ๋ฉด primitive ๊ฐ์ฅ์๋ฆฌ์ ์ํฐํฉํธ ๋ฐ์
-
์์
-
- OpenGL ES Shading Language์ preprocessor๋ ๋๋ถ๋ถ C++ preprocessor๊ด์ต์ ๋ฐ๋ฆ ๋๋ค. Macro์ ์๋ฌธ, ์กฐ๊ฑด๋ฌธ์ ๋ค์ ์ง์์๋ฅผ ์ด์ฉํด์ ํํ๋ ์ ์์ต๋๋ค.
- C++์์๋ parameter์์ด ๋ฉํฌ๋ก๊ฐ define๊ฐ๋ฅํ์ง๋ง OpenGL ES Shading Language์์๋ ๊ทธ๋ ์ง ์์ต๋๋ค.
- ๋ค์ macro๋ค์ ๋ฏธ๋ฆฌ ์ ์๋์ด ์์ต๋๋ค.
- #error ์ง์์๋ ์ ฐ์ด๋๊ฐ ์ปดํ์ผ ๋ ์ ๊ด๋ จ๋ ๋ฉ์ธ์ง๋ฅผ info log์ ์ ์ฅ์ํค๋ฉด์ ์๋ฌ๊ฐ ๋๊ฒ ํฉ๋๋ค.
- #pragma ์ง์์๋ ํน์ ๊ตฌํ์ ์ ์ฉ๋ ์ ์๋ ์ง์๋ค์ ํํํ ๋ ์ฐ์ ๋๋ค.
- #extension ์ง์์๋ vendor ๋๋ vendor๋ค์ ๊ทธ๋ฃน์ด OpenGL ES Shading ์ธ์ด๋ฅผ ํ์ฅํ๋ ๊ธฐ๋ฅ์ด ์์๋ ํด๋น ๊ธฐ๋ฅ์ ํ์ฑํํ ์ง ๋ฑ์ ํ๋์์์ ์ ํ๋ ๊ธฐ๋ฅ์ ๋๋ค. Vendor๋ค์ด OpenGL ES Shading ์ธ์ด๋ฅผ ํ์ฅํ ์, ํ์ฅ ์ฌ์์ ์์ฑํฉ๋๋ค(์์ปจ๋, GL_NV_shadow_samplers_cube). ์ ฐ์ด๋๋ ๋ฐ๋์ ์ปดํ์ผ๋ฌ์๊ฒ extension๋ค์ ์ฌ์ฉํ ๊ฒ์ธ์ง, ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ์ด๋ค ์ผ์ด ๋ฐ์ํ ๊ฒ์ธ์ง์ ๋ํ ํ๋์์์ ์๋ ค์ค์ผ ํฉ๋๋ค. ์ด๊ฒ์ #extension ์ง์์๋ฅผ ํตํด ์ง์ํฉ๋๋ค. ๋ค์์ ์์์ฝ๋์ ๋๋ค.
-
์ฒซ๋ฒ์งธ ์ธ์๋ extention์ ์ด๋ฆ ๋๋ all์ด ์ฌ์ ์์ต๋๋ค. all์ธ๊ฒฝ์ฐ ๋ชจ๋ extention๋ค์ ์ ์ฉ๋ฉ๋๋ค.
-
๊ตฌ์ฒด์ ํ๋ ๋ฐฉ์
-
- Uniform๋ค์ ํ๋์จ์ด์ constant store์ ์ ์ฅ๋จ.
- Vertex shader output/fragment shader input๋ค์ ํ๋์จ์ด์ interpolators๋ผ๋ ๊ณต๊ฐ์ ์ ์ฅ๋จ.
- Constant store๋ interpolators๋ชจ๋ vector๋ค์ array๋ก ํํ๋๋๊ณต๊ฐ์ผ๋ก ์๊ฐํ ์ ์๋ค.
- ์ ฐ์ด๋์์ ๋ค์ํ ํ์ ๋ค(scalar, vector, matrix๋ฑ)์ด ์ค์ ๋ก ์ด๋ป๊ฒ ๋ฌผ๋ฆฌ์ ๊ณต๊ฐ(๋ฉ๋ชจ๋ฆฌ)์ ๋งคํ์ด ๋๋๊ฐ? โ packing rule
-
์ ฐ์ด๋ ์์ uniform, interpolators๋ณ์๊ฐ ์ด๋ป๊ฒ ๋ฌผ๋ฆฌ์ ๊ณต๊ฐ์ ๋งคํ๋ ์ง๋ฅผ ๊ด์ฅํ๋ rule.
-
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌผ๋ฆฌ์ ๊ณต๊ฐ(๋ฉ๋ชจ๋ฆฌ)์ด 4๊ฐ์ column๊ณต๊ฐ์ผ๋ก ๋๋ ์ ธ์๊ณ , n๊ฐ์ row๊ฐ ๊ฐ๊ฐ storage location์ผ๋ก ๋งคํ์ด ๋๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
-
Packing rule์ ๋ณ์๋ค์ ์ฑ์๋ฃ์๋(pack variables) ์์ฑ๋ ์ฝ๋(generated code)๊ฐ ์์ํญ์ ๋น๋กํด์ ์ปค์ง์ ๋๋ก ์ฑ์๋ฃ์ต๋๋ค. ๋ค๋ฅธ๋ง๋ก ํ๋ฉด packing์ผ๋ก ์ธํด ์ถ๊ฐ์ ์ธ ๊ธฐ๊ณ์ด ๋ช ๋ น์ด ์๊ธฐ์ง ์์์ ๋๋ก packingํฉ๋๋ค. ์คํ๋ ค ํจํน ๊ท์น์ ๋ฐํ์ ์ฑ๋ฅ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น์ง ์์ผ๋ฉด์ ๋ฌผ๋ฆฌ์ ์ฃผ์ ๊ณต๊ฐ์ ์ฌ์ฉ์ ์ต์ ํํ๋ ค๊ณ ํฉ๋๋ค.
-
๊ตฌ์ฒด์ ์ธ ์์๋ก ๋ค์์ uniform ๋ณ์ 3๊ฐ๋ฅผ packing rule์ ์ ์ฉํ์ง ์์์๋์ packing rule์ ์ ์ฉํ์๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ด๋ป๊ฒ ๋งคํ๋๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- packing rule ์๋ค๋ฉด ์๋นํ ๊ณต๊ฐ์ด ๋ญ๋น๋ฉ๋๋ค(Table 5-6).
- packing rule์ ์ ์ฉํ๋ฉด ๊ณต๊ฐ์ด ์ ์ฝ๋ฉ๋๋ค(Table 5-7). Array f์ ๊ฒฝ์ฐ packing ํ์๋ ์ฌ๋ฌ ํ๋ค์ ๊ฑธ์ณ์ ธ ์๋๋ฐ, ์ด๋ GPU๋ constant store๋ฅผ index์ vector location index๋ก indexํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
- OpenGL ES ์ ฐ์ด๋ฉ ์ธ์ด์์ packing์ ํจ์ ๋ฐ๋ผ uniform, vertex shader outputs/fragment shader input๋ค์ด ์ด๋ป๊ฒ ์ธ์ด์ง์ด์ผ ํ๋ ๋ฐฉ์์ ์ ํด๋์ง ์์์ต๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ๊ตฌํ์ฒด์์ ๋์๊ฐ๊ฒ ๋ณด์ฅํ๋ ค๋ฉด, ํจํนํ์ uniform, interpolator๋ค์ด ๊ฐ๊ฐ ์ต์ ํ์ฉ ์ ์ฅ์ ํฌ๊ธฐ๋ฅผ ๋์ง ์์์ผ ํฉ๋๋ค.
- shader ๋ณ์์ ๋ํ ๊ณ์ฐ์ด ์ํ๋๋ ์ ๋ฐ๋ ์ง์ ๊ฐ๋ฅ.
- low, medium, high ์ ๋ฐ๋๋ก ์ ์ธ ๊ฐ๋ฅ.
- ์ปดํ์ผ๋ฌ์ hint๋ก ์ฌ์ฉ๋์ด ๋ ๋ฎ์ ๋ฒ์, ์ ๋ฐ๋๋ก ๋ณ์์ ๋ํ ๊ณ์ฐ ์ํ๊ฐ๋ฅํ๋๋ก ์ค์ .
- ์ ๋ฐ๋ ๋ฎ์ ๊ฒฝ์ฐ:
- shader ์คํ ์๋ ์ฆ๊ฐ ๋๋ ๋ ๋์ ์ ๋ ฅ ํจ์จ๋ก ์คํ ๊ฐ๋ฅ.
- ์ผ๋ถ opengl es implementation์ ๊ฒฝ์ฐ์์๋ง ํด๋น.
- ์ผ๋ถ๋ฅผ ์ ์ธํ๊ณ ๋๋จธ์ง์์๋ ๋ชจ๋ ๊ณ์ฐ์ ์ต๊ณ ์ ๋ฐ๋๋ก ์ํํ๊ณ ํ์ ์๋ฅผ ๋ฌด์ํด๋ ๋จ. opengl es ์ฌ์์์ ๊ธฐ๋ณธ ํ๋์จ์ด์์ ์ฌ๋ฌ ์ ๋ฐ๋๋ฅผ ์ง์ํด์ผํ๋ค๊ณ ๋ช ์๋์ด ์์ง ์๊ธฐ ๋๋ฌธ.
- ์ด๋ฐ ํจ์จ์ฑ ํฅ์์๋ ์ ๋ฐ๋๊ฐ ํฌ์๋๋ฏ๋ก presicion qualifiers ์ฌ์ฉํ์ง ์์ผ๋ฉด artifact ๋ฐ์ ๊ฐ๋ฅ.
- shader ์คํ ์๋ ์ฆ๊ฐ ๋๋ ๋ ๋์ ์ ๋ ฅ ํจ์จ๋ก ์คํ ๊ฐ๋ฅ.
- ๋ถ๋ ์์์ / ์ ์ ๊ธฐ๋ฐ ๋ณ์์ ์ ๋ฐ๋ ์ง์ ์ ์ฌ์ฉ.
- lowp, meduimp, highp ํค์๋๋ฅผ ์ฌ์ฉํ๋ค.
highp vec4 position;
varyin lowp vec4 color;
mediump float specularExp;
- precision qualifier ์์ด ๋ณ์๋ฅผ ์ ์ธํ ๊ฒฝ์ฐ, default precision qualifier๋ก ์ค์ .
์๋์ ๊ฐ์ด vertex shader / fragment shader ๋งจ ์์ ์ง์ .
precision highp float;
precision mediump int;
-
ํน์ ๋ณ์ ํ์ ์ ์ง์ ๋ precision : ํด๋น ํ์ ์ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ชจ๋ ๋ณ์๋ค์ ์ ์ฉ.
- int์ ์ง์ ๋ precision : ๋ชจ๋ int ๋ณ์ precision.
-
vertex shader์์ precision quailfier ์์ด ์ ์ธ๋ ๋ชจ๋ ๋ณ์ : ๊ฐ์ฅ ๋์ ์ ๋ฐ๋ ๊ฐ์ง.
-
fragment shader : floating-point์ ๋ํ default precision ์ ์๋์ด ์์ง ์์.
- ๋ชจ๋ shader : default float precision ์ ์ธ / ๋ชจ๋ float ๋ณ์์ ๋ํ precision ์ ์ธํด์ผ ํจ.
-
precision qualifier๋ก ์ง์ ๋ precision : ๊ตฌํ์ ๋ฐ๋ผ ๋ฒ์ / ์ ๋ฐ๋ ๋ฌ๋ผ์ง.
- ์ฃผ์ด์ง ๊ตฌํ ๋ฒ์ / ์ ๋ฐ๋ ๊ฒฐ์ ์ํ API ํธ์ถ์ 15์ฅ์์ ๋ค๋ฃธ.
-
โinvariance(๋ถ๋ณ์ฑ)โ : vertex shader์ ๋ชจ๋ ๋ค์ํ ์ถ๋ ฅ์ ์ ์ฉ ๊ฐ๋ฅ.
-
๋ฌธ์ : shader ์ปดํ์ผ โ ์ปดํ์ผ๋ฌ ์ต์ ํ ํ instruction ์์ ๋ณ๊ฒฝ โ ๋ shader ๊ฐ ๋๋ฑํ ๊ณ์ฐ ๋ณด์ฅ๋์ง ์์. (๋ ์์ด๋๊ฐ ๋์ผํ ์ฐ์ฐ์ ํด๋ ๊ฐ์ ๊ฒฐ๊ณผ ์์ฑ๋๋ค๋ ๋ณด์ฅx.)
- multipass shader effect(์ํ ๋ธ๋ ๋ฉ์ ์ฌ์ฉํ์ฌ ๋์ผํ ์ค๋ธ์ ํธ๋ฅผ ๊ทธ ์์ ๊ทธ๋ฆฌ๋ ๊ฒ)์์ ํนํ ๋ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋์.
- ์ด๋ ๊ฒ ์ถ๋ ฅ ์์น ๊ณ์ฐํ๋๋ฐ ์ฌ์ฉ๋๋ ๊ฐ์ ์ ๋ฐ๋๊ฐ ์ ํํ ์ผ์นํ์ง ์์ โ artifact ๋ฐ์.
- Z fighting์ผ๋ก ๋ฌธ์ ๊ฐ ๋ํ๋จ. (ํฝ์ ๋น ์์ z ์ ๋ฐ๋ ์ฐจ์ด๋ก ์ธํด ์๋ก ๋ค๋ฅธ ํจ์ค๊ฐ ์๋ก ๋ฐ์ง์ด๋ ๊ฒ)
-
multipass shading์ ๋ถ๋ณ์ฑ์ด ์ค์ํ ์ด์
-
fragment shader
- ์ฒซ ๋ฒ์งธ ํจ์ค์์ specular ์กฐ๋ช ์ ๊ณ์ฐ.
- ๋ ๋ฒ์งธ ํจ์ค์์ ambient , diffuse ์กฐ๋ช ๊ณ์ฐ.
-
vertex shader
- ๋ถ๋ณ์ฑ์ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก ๋ shader์ ์ ๋ฐ๋ ์ฐจ์ด๋ก ์ธํด Z fighting ๋ฐ์.
(figure 5-1. ๋ถ๋ณ์ฑ์ ์ ์ฉํ์ง ์์์ ๋ฐ์ํ Z Fighting Artifacts)
-
-
์์น์ ๋ถ๋ณ์ฑ์ ์ ์ฉํ ๋์ผํ multipass shader
(figure 5-2. ๋ถ๋ณ์ฑ์ ์ด์ฉํด ํผํ Z Fighting )
-
๋ถ๋ณ์ฑ์ ๋์
- ๋์ผํ ๊ณ์ฐ์ ์ฌ์ฉํด ์ถ๋ ฅ์ ๊ณ์ฐํ ๊ฒฝ์ฐ ๊ทธ ๊ฐ์ด ๋์ผํ๋๋ก ์ง์ ๊ฐ๋ฅ.
- ํด๋น ํค์๋๋ฅผ ๊ฐ๋ณ(varying) ์ ์ธ / ์ ์ธ๋ varying์ ์ด์ฉ ๊ฐ๋ฅ.
invariant gl_Position; invariant texCoord;
-
์ถ๋ ฅ์ ๋ํ ๋ถ๋ณ์ฑ ์ ์ธ
- ์ปดํ์ผ๋ฌ : shader์ ๋์ผํ ๊ณ์ฐ, ์ ๋ ฅ์ ํ ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ผํ๋ค๋ ๊ฒ ๋ณด์ฅ.
(๋ทฐ ํฌ์ ํ๋ ฌ์ ์ ๋ ฅ ์์น๋ฅผ ๊ณฑํ์ฌ ์ถ๋ ฅ ์์น๋ฅผ ๊ณ์ฐํ๋ 2๊ฐ์ vertex shader๊ฐ ์ฃผ์ด์ง ๊ฒฝ์ฐ, ํด๋น ์์น๊ฐ ๋ถ๋ณ์ ๋ณด์ฅ)
#version 300 es uniform mat4 u_viewProjMatrix; layout(location = 0) in vec4 a_vertex; invariant gl_Position; void main() { //๋์ผํ viewProjcMatrix, vertex๊ฐ ์๋ ๋ชจ๋ shader์์ ๋์ผํ ๊ฐ. gl_Position = u_viewProjMatrix * a_vertex; }
-
๋ชจ๋ ๋ณ์๋ฅผ ์ ์ญ์ ๋ถ๋ณ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด์๋ #pragma ์ง์์ด ์ฌ์ฉ.
#pragma STDGL invariant(all)
- ์ฃผ์์
- ์ปดํ์ผ๋ฌ๋ ๋ถ๋ณ์ฑ ๋ณด์ฅ์ ์ํด ์ต์ ํ๋ฅผ ์ ํํ ์ ์์.
- ํ์ํ ๊ฒฝ์ฐ์๋ง ๋ถ๋ณ ํ์ ์ ์ฌ์ฉํด์ผ ํจ. (๊ทธ๋ ์ง ์์ผ๋ฉด ์ฑ๋ฅ ์ ํ ์ด๋)
- #pragma : ๋ถ๋ณ์ฑ์ด ์ค์ ๋ก ํ์ํ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉ.
-
๋ถ๋ณ์ฑ = ํน์ GPU์์ ๊ณ์ฐ ๊ฒฐ๊ณผ ๋์ผ.
- OpenGL ES์ ๋ชจ๋ ๊ตฌํ์์ ๊ณ์ฐ์ด ๋ถ๋ณ์ด๋ผ๋ ์๋ฏธ๋ ์๋.
OpenGL_ES 3.0์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ณ ์์ต๋๋ค ๐ก
OpenGLES3.0 Programming Guide ์ฑ ์ ํด์ค ๋ฐ ๋ฒ์ญ ์์ ๊ณผ ์์ ์ฝ๋ ์์ฑ์ ์งํ์ค์ ๋๋ค.
์ฑํฐ | ์๋ฃ์ฌ๋ถ |
---|---|
chapter 1 | |
chapter 2 | โ |
chapter 3 | โ |
chapter 4 | โ |
chapter 5 | โ |
chapter 6 | โ |
chapter 7 | โ |
chapter 8 | โ |
chapter 9 |