관리 메뉴

λͺ©λ‘2023/04 (19)

KoreanFoodie's Study

[OpenGL ES] 16κ°• : μ „μ—­ μ‘°λͺ…, 레이 νŠΈλ ˆμ΄μ‹±, 그림자 κ΄‘μ„ , λ°˜μ‚¬κ΄‘, κ΅΄μ ˆκ΄‘, 라이트 맀핑, ν™˜κ²½ 맀핑, 큐브 맀핑

이 κ°•μ˜λŠ” μœ νˆ¬λΈŒμ— 무료둜 κ³΅κ°œλ˜μ–΄ μžˆλŠ” ν•œμ •ν˜„ κ΅μˆ˜λ‹˜μ˜ 컴퓨터 κ·Έλž˜ν”½μŠ€ κ°•μ’Œλ₯Ό μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ κ°•μ˜λ₯Ό 직접 λ“€μœΌμ‹œκ±°λ‚˜ 책을 κ΅¬μž…ν•˜μ…”μ„œ 확인해 λ³΄μ„Έμš”. κ°•μ˜ μžλ£ŒλŠ” κΉƒν—™ 링크에 μ˜¬λΌμ™€ μžˆμŠ΅λ‹ˆλ‹€. μš”μ•½ : 1. Phong λΌμ΄νŒ… λͺ¨λΈμ€ local illumination 을 λ§Œλ“€μ–΄λ‚΄λŠ” λ°λŠ” μœ μš©ν•˜μ§€λ§Œ, μ „μ—­ μ‘°λͺ…(Global Illumination) 을 μžμ—°μŠ€λŸ½κ²Œ λ§Œλ“€μ–΄λ‚΄κΈ° μœ„ν•΄μ„œλŠ”, 3 가지 좔가적인 μš”μ†Œλ₯Ό κ³ λ €ν•΄μ•Ό ν•œλ‹€. 즉, 그림자 κ΄‘μ„ (Shadow Ray), λ°˜μ‚¬κ΄‘(Reflection Ray), κ΅΄μ ˆκ΄‘(Transmitted/Refraction Ray) 을 λ°˜μ˜ν•΄μ•Ό ν•œλ‹€. 2. 레이 νŠΈλ ˆμ΄μ‹± 기법은 μž¬κ·€μ μœΌλ‘œ Ray 값듀을 κ³„μ‚°ν•˜μ—¬ 색상을 κ³„μ‚°ν•œλ‹€. 각 Ray λŠ” Primary Ray ..

Game Dev/OpenGL ES 2023. 4. 28. 00:27
[OpenGL ES] 15κ°• : μ‰λ„μš° 맀핑(Shadow Mapping), PCR(Percentage Closer Filtering), Hard Shadow vs Soft Shadow

이 κ°•μ˜λŠ” μœ νˆ¬λΈŒμ— 무료둜 κ³΅κ°œλ˜μ–΄ μžˆλŠ” ν•œμ •ν˜„ κ΅μˆ˜λ‹˜μ˜ 컴퓨터 κ·Έλž˜ν”½μŠ€ κ°•μ’Œλ₯Ό μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ κ°•μ˜λ₯Ό 직접 λ“€μœΌμ‹œκ±°λ‚˜ 책을 κ΅¬μž…ν•˜μ…”μ„œ 확인해 λ³΄μ„Έμš”. κ°•μ˜ μžλ£ŒλŠ” κΉƒν—™ 링크에 μ˜¬λΌμ™€ μžˆμŠ΅λ‹ˆλ‹€. μš”μ•½ : 1. μ‰λ„μš° 맀핑(Shadow Mapping) 은 그림자λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ Vertex Shader μ—μ„œ light source λ‘œλΆ€ν„° 각 surface μ κΉŒμ§€μ˜ κΉŠμ΄κ°’κ³Ό visibility 값을 μ €μž₯ν•˜λŠ” 기법을 μ˜λ―Έν•œλ‹€. 2. Pass 1 μ—μ„œλŠ” 각 ν‘œλ©΄κΉŒμ§€μ˜ κΉŠμ΄κ°’ z λ₯Ό, Pass 2 μ—μ„œλŠ” μ‹€μ œ μ κΉŒμ§€μ˜ 거리 d λ₯Ό μ €μž₯ν•˜μ—¬, 이λ₯Ό λΉ„κ΅ν•΄μ„œ Shadow μ—¬λΆ€λ₯Ό κ²°μ •ν•œλ‹€. Nearest Sampling κ³Ό Bilinear Interpolation λ‘˜ λ‹€ 별 도움은 λ˜μ§€ μ•ŠμœΌλ―€λ‘œ, PC..

Game Dev/OpenGL ES 2023. 4. 27. 14:42
[OpenGL ES] 14κ°• : 노말 맀핑(Normal Mapping), Height Map, νƒ„μ  νŠΈ 곡간(Tangent Space), Tangent-Space Normal Mapping

이 κ°•μ˜λŠ” μœ νˆ¬λΈŒμ— 무료둜 κ³΅κ°œλ˜μ–΄ μžˆλŠ” ν•œμ •ν˜„ κ΅μˆ˜λ‹˜μ˜ 컴퓨터 κ·Έλž˜ν”½μŠ€ κ°•μ’Œλ₯Ό μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ κ°•μ˜λ₯Ό 직접 λ“€μœΌμ‹œκ±°λ‚˜ 책을 κ΅¬μž…ν•˜μ…”μ„œ 확인해 λ³΄μ„Έμš”. κ°•μ˜ μžλ£ŒλŠ” κΉƒν—™ 링크에 μ˜¬λΌμ™€ μžˆμŠ΅λ‹ˆλ‹€. μš”μ•½ : 1. 고해상도 λ©”μ‹œμ—μ„œ, μ‹€μ‹œκ°„μœΌλ‘œ λΌμ΄νŒ…μ„ μ²˜λ¦¬ν•˜λŠ”λ°λŠ” λΉ„μš©μ΄ 많이 λ“€ 것이닀. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄, 노말 맀핑(Normal Mapping) κ³Ό 저해상도 λ©”μ‹œλ₯Ό μ‚¬μš©ν•˜μ—¬ 효율적으둜 κ·ΈλŸ΄λ“―ν•œ λΌμ΄νŒ… 효과λ₯Ό λ§Œλ“€μ–΄λ‚Ό 수 μžˆλ‹€. 2. 노말 맡을 λ§Œλ“œλŠ” λŒ€μ€‘μ μΈ λ°©λ²•μœΌλ‘œλŠ” Height Field κ°€ μžˆλ‹€. λ©”μ‹œμ—μ„œ ν•œ 점에 μΈμ ‘ν•œ 4개의 μ μ—μ„œ 각 2개의 점씩 μ§μ„ μ˜ 방정식을 λ§Œλ“  λ‹€μŒ, 두 직선 벑터에 λŒ€ν•΄ 외적을 μ·¨ν•˜λŠ” 방법이닀. 그럼 (x, y) μ’Œν‘œμ— λŒ€ν•œ z 의 값을 λ°©μ •μ‹μœΌλ‘œ ν‘œν˜„ν• ..

Game Dev/OpenGL ES 2023. 4. 27. 01:57
[OpenGL ES] 13κ°• : μŠ€μΌˆλ ˆν†€(Skeleton), Bone Space, Skinning, Forward Kinematics, Inverse Kinematics

이 κ°•μ˜λŠ” μœ νˆ¬λΈŒμ— 무료둜 κ³΅κ°œλ˜μ–΄ μžˆλŠ” ν•œμ •ν˜„ κ΅μˆ˜λ‹˜μ˜ 컴퓨터 κ·Έλž˜ν”½μŠ€ κ°•μ’Œλ₯Ό μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ κ°•μ˜λ₯Ό 직접 λ“€μœΌμ‹œκ±°λ‚˜ 책을 κ΅¬μž…ν•˜μ…”μ„œ 확인해 λ³΄μ„Έμš”. κ°•μ˜ μžλ£ŒλŠ” κΉƒν—™ 링크에 μ˜¬λΌμ™€ μžˆμŠ΅λ‹ˆλ‹€. μš”μ•½ : 1. 캐릭터 μ• λ‹ˆλ©”μ΄μ…˜μ„ κ΅¬ν˜„ν•  λ•ŒλŠ” 일반적으둜 μŠ€μΌˆλ ˆν†€μ„ 많이 μ‚¬μš©ν•œλ‹€. 각 λΌˆλŠ” μ„œλ‘œ λΆ€λͺ¨ μžμ‹ 관계λ₯Ό λ§Ίκ³  있으며 λΌˆμ— μžˆλŠ” 각 vertex λŠ” ν•΄λ‹Ή 뼈의 Bone Space 에 μ •μ˜λœ μ’Œν‘œλ₯Ό κ°€μ§ˆ 수 μžˆλ‹€. 2. Forward Kinematics λŠ” Skeleton 의 Hierarchy μ—μ„œ λΆ€λͺ¨λ‘œλΆ€ν„° μžμ‹κΉŒμ§€, Top-Down traversal λ°©μ‹μœΌλ‘œ μ›€μ§μž„μ„ μ μš©ν•˜λŠ” 방식이닀. 각 λΌˆκ°€ λ…λ¦½μ μœΌλ‘œ 움직인닀고 κ°€μ •ν•˜κ³ , ν•΄λ‹Ή Bone Space μ—μ„œ Character Space..

Game Dev/OpenGL ES 2023. 4. 26. 02:02
[OpenGL ES] 12κ°• : Object Picking, Ray Intersection, Bounding Volume, Arcball

이 κ°•μ˜λŠ” μœ νˆ¬λΈŒμ— 무료둜 κ³΅κ°œλ˜μ–΄ μžˆλŠ” ν•œμ •ν˜„ κ΅μˆ˜λ‹˜μ˜ 컴퓨터 κ·Έλž˜ν”½μŠ€ κ°•μ’Œλ₯Ό μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ κ°•μ˜λ₯Ό 직접 λ“€μœΌμ‹œκ±°λ‚˜ 책을 κ΅¬μž…ν•˜μ…”μ„œ 확인해 λ³΄μ„Έμš”. κ°•μ˜ μžλ£ŒλŠ” κΉƒν—™ 링크에 μ˜¬λΌμ™€ μžˆμŠ΅λ‹ˆλ‹€.μš”μ•½ : 1. 였브젝트 ν”Όν‚Ή(Object Picking)을 ν•˜λ©΄, 슀크린 μŠ€νŽ˜μ΄μŠ€μ—μ„œ Ray λ₯Ό z μΆ• λ°©ν–₯ μ•ˆμͺ½μœΌλ‘œ 쏜 λ‹€μŒ, 처음으둜 λΆ€λ”ͺνžˆλŠ” 였브젝트λ₯Ό μ„ νƒλ˜μ—ˆλ‹€κ³  μΈμ‹ν•œλ‹€. 이 Ray λ₯Ό Object Space 둜 λ°”κΎΈκΈ° μœ„ν•΄ 3번의 λ³€ν™˜(Screen -> Camera -> World -> Object)을 진행해야 ν•œλ‹€(각 Ray 에 λŒ€ν•΄ Object λ³„λ‘œ Ray κ°€ 생성) 2. 였브젝트 ν”Όν‚Ήμ—λŠ” Ray Intersection(폴리곀 λ©”μ‹œμ—μ„œ Ray κ°€ μ‚Όκ°ν˜• μ•ˆμ— μžˆλŠ”μ§€ 체크) κ³Ό Boun..

Game Dev/OpenGL ES 2023. 4. 26. 01:42
[OpenGL ES] 11κ°• : 였일러 λ³€ν™˜(Euler Transform) κ³Ό μΏΌν„°λ‹ˆμ–Έ(Quaternion)

이 κ°•μ˜λŠ” μœ νˆ¬λΈŒμ— 무료둜 κ³΅κ°œλ˜μ–΄ μžˆλŠ” ν•œμ •ν˜„ κ΅μˆ˜λ‹˜μ˜ 컴퓨터 κ·Έλž˜ν”½μŠ€ κ°•μ’Œλ₯Ό μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ κ°•μ˜λ₯Ό 직접 λ“€μœΌμ‹œκ±°λ‚˜ 책을 κ΅¬μž…ν•˜μ…”μ„œ 확인해 λ³΄μ„Έμš”. κ°•μ˜ μžλ£ŒλŠ” κΉƒν—™ 링크에 μ˜¬λΌμ™€ μžˆμŠ΅λ‹ˆλ‹€. μš”μ•½ : 1. 였일러 λ³€ν™˜μ€ μ£Ό μΆ•(Principal Axes)을 κΈ°μ€€μœΌλ‘œ 일정 κ°λ„μ˜ νšŒμ „μ„ μ—°μ†μ μœΌλ‘œ μ μš©ν•  λ•Œ μ‚¬μš©ν•  수 μžˆλ‹€. 그런데 였일러 λ³€ν™˜μ˜ 결과값은 κ΅ν™˜λ²•μΉ™μ΄ μ„±λ¦½ν•˜μ§€ μ•ŠλŠ”λ‹€. 2. ν‚€ν”„λ ˆμž„ 보간을 ν•  λ•Œ, 였일러 λ³€ν™˜μ€ μ–΄μƒ‰ν•œ κ²°κ³Όλ₯Ό 보여쀄 수 μžˆλŠ”λ°, 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μΏΌν„°λ‹ˆμ–Έμ„ μ‚¬μš©ν•œλ‹€. μΏΌν„°λ‹ˆμ–Έμ€ μ‚¬μ›μˆ˜λ₯Ό μ΄μš©ν•œλ‹€. 3. μΏΌν„°λ‹ˆμ–Έμ„ μ΄μš©ν•˜λ©΄ μž„μ˜μ˜ 좕에 λŒ€ν•΄ 𝛉 만큼의 κ°λ„λ‘œ 점/벑터λ₯Ό νšŒμ „μ‹œν‚€λŠ” νšŒμ „ 행렬을 μ‰½κ²Œ λ§Œλ“€μ–΄ λ‚Ό 수 μžˆλ‹€(qpq*). 그리고 μΏΌν„°λ‹ˆμ–Έ μ‚¬μ΄μ˜ 보..

Game Dev/OpenGL ES 2023. 4. 24. 02:02
[OpenGL ES] 10κ°• : 좜λ ₯ 병합(Output Merger), 색상 버퍼(Color Buffer), 깊이 버퍼(Depth Buffer)

이 κ°•μ˜λŠ” μœ νˆ¬λΈŒμ— 무료둜 κ³΅κ°œλ˜μ–΄ μžˆλŠ” ν•œμ •ν˜„ κ΅μˆ˜λ‹˜μ˜ 컴퓨터 κ·Έλž˜ν”½μŠ€ κ°•μ’Œλ₯Ό μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ κ°•μ˜λ₯Ό 직접 λ“€μœΌμ‹œκ±°λ‚˜ 책을 κ΅¬μž…ν•˜μ…”μ„œ 확인해 λ³΄μ„Έμš”. κ°•μ˜ μžλ£ŒλŠ” κΉƒν—™ 링크에 μ˜¬λΌμ™€ μžˆμŠ΅λ‹ˆλ‹€.μš”μ•½ : 1. 좜λ ₯ 병합 λ‹¨κ³„μ—μ„œλŠ” Fragment Shader λ₯Ό 톡해 전달받은 픽셀을 보여쀄지 말지, ν˜Ήμ€ μ–΄λ–»κ²Œ 보여쀄지λ₯Ό κ²°μ •ν•œλ‹€. μ΄λ•Œ 3 κ°€μ§€μ˜ 버퍼λ₯Ό μ‚¬μš©ν•œλ‹€(Color Buffer, Depth Buffer, Stencil Buffer) 2. Z-buffering 을 μ΄μš©ν•΄ z 값을 μ΄μš©ν•œ 컬링을 슀크린 μŠ€νŽ˜μ΄μŠ€μ—μ„œ μˆ˜ν–‰ν•  수 μžˆλ‹€. μ΄λ•Œ, μ–΄λ–€ 물체λ₯Ό λ¨Όμ € λ Œλ”λ§ν•˜λŠ”μ§€μ™€ 관계없이 결과값은 λ™μΌν•˜λ‹€. 3. μ•ŒνŒŒ λΈ”λ Œλ”©(Alpha Blending) 을 μ΄μš©ν•˜λ©΄ 투λͺ…ν•œ μ˜€λΈŒμ νŠΈλ“€μ΄ 겹쳐져 ..

Game Dev/OpenGL ES 2023. 4. 20. 22:42
[OpenGL ES] 9κ°• : λΌμ΄νŒ…, 퐁 λͺ¨λΈ(Phong Model), λ‚œλ°˜μ‚¬(Diffuse), μ •λ°˜μ‚¬(Specular), μ£Όλ³€κ΄‘(Ambient), 자체 λ°œκ΄‘(Emissive)

이 κ°•μ˜λŠ” μœ νˆ¬λΈŒμ— 무료둜 κ³΅κ°œλ˜μ–΄ μžˆλŠ” ν•œμ •ν˜„ κ΅μˆ˜λ‹˜μ˜ 컴퓨터 κ·Έλž˜ν”½μŠ€ κ°•μ’Œλ₯Ό μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ κ°•μ˜λ₯Ό 직접 λ“€μœΌμ‹œκ±°λ‚˜ 책을 κ΅¬μž…ν•˜μ…”μ„œ 확인해 λ³΄μ„Έμš”. κ°•μ˜ μžλ£ŒλŠ” κΉƒν—™ 링크에 μ˜¬λΌμ™€ μžˆμŠ΅λ‹ˆλ‹€. μš”μ•½ : 1. Fragment Shader λŠ” Texturing κ³Ό Lighting 을 μˆ˜ν–‰ν•˜λŠ”λ°, Lighting 의 λŒ€ν‘œμ μΈ λͺ¨λΈλ‘œλŠ” 퐁 λΌμ΄νŒ… λͺ¨λΈ(Phong Lighting Model 이 μžˆλ‹€). 2. 퐁 λΌμ΄νŒ… λͺ¨λΈμ—μ„œ, 빛은 4 κ°€μ§€μ˜ μš”μ†Œλ₯Ό λ”ν•œ ν–‰λ ¬λ‘œ ν‘œν˜„λœλ‹€ : Diffuse(λ‚œλ°˜μ‚¬), Specular(μ •λ°˜μ‚¬), Ambient(μ£Όλ³€κ΄‘), Emissive(자체 λ°œκ΄‘). 3. Specular 에 ν•„μš”ν•œ View λ²‘ν„°μ˜ 경우, Vertex Shader κ°€ μ›”λ“œ κ³΅κ°„μ—μ„œ κ΅¬ν•œ View 벑..

Game Dev/OpenGL ES 2023. 4. 20. 01:48