일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- C
- Programmers
- UnrealEngine4
- 1563
- Frustum
- 줄 세우기
- DeferredRendering
- RVO
- const
- NRVO
- winapi
- 오블완
- UE5
- Unreal Engine5
- 팰린드롬 만들기
- 프로그래머스
- 티스토리챌린지
- directx
- softeer
- RootMotion
- baekjoon
- 백준
- 언리얼엔진5
- DirectX11
- 2294
- IFileDialog
- GeeksForGeeks
- UnrealEngine5
- C++
- algorithm
- Today
- Total
목록ComputerGraphics (26)
Game Develop
-> 윈도우크기와 같은 크기의 그림자깊이맵텍스쳐. ->윈도우맵보다 8배 큰 그림자깊이맵 텍스쳐. 근데 8배나 늘려야 저정도 퀄리티가 나온다는게 영 이상하다;;
여러 그림자 구현방법중, 깊이맵을 이용한 그림자구현 기법이다. 옛날에는 Circle Shadow, Projected Shadow Mapping 등을 사용했다고 하지만 요즘 하드웨어로 굳이 퀼리티가 떨어지는 기법을 사용할 필요가 없다. 제목처럼 깊이맵을 활용한 그림자매핑은 현재 상용엔진에서도 많이 적용하는 기법이다. 물론! 내가 지금 적용한건 제일 기초적인 그림자매핑이고, 실제로 상용엔진에서는 캐스케이드 그림자매핑이나 퍼센티지 클로저필터링 등 추가적인 최적화를 거친 기법을 사용한다. 깊이맵을 이용한 그림자매핑에 대한 설명은 사실 이미 잘나와있는것들이 굉장히 많아서... 나는 아래링크를 보고 구현해봤다. 다만 아래링크는 dx9이긴하지만 크게 상관은 없다. https://www.slideshare.net/Su..
그림자매핑을 구현하긴 했는데, 그림자퀼리티가 너무 떨어진다. 고해상도의 그림자맵을 사용하거나 CascadeShadow를 적용해야할 거 같긴 한데... 고해상도 그림자맵은 아마 시범삼아 한번 시도는 하겠지만, 결국에는 CascadeShadow를 적용해야 할 것이다.
현재 내 프로그램같은 경우 디퍼드렌더링을 사용하고 있다. 최소 4장(depth,diffuse,normal,specular)의 텍스쳐를 사용해서 최종적으로 출력할 픽셀값을 결정하게 되는데, 각각의 텍스쳐에 값을 기록하는건 GBuffer셰이더에서 하고, 이 텍스쳐를 사용해서 픽셀값 결정하는건 디퍼드셰이더에서 한다. 즉 디퍼드셰이더에서 라이팅연산까지 한 후에 출력하는건데, 문제는 컬라이더도 같이 빛연산이 적용되버려서 출력이 되던것이다. 알다시피 컬라이더는 실제 인게임에서 형태를 출력할일은 없을것이고 디버깅모드에서나 출력할텐데, 출력할때도 초록색 그대로 출력하지, 뭐 라이팅연산 적용해서 출력하진 않는다. 근데 다른 메쉬 렌더링하는것처럼 똑같이 디퍼드렌더링 시키니까 이 컬라이더들이 빛연산이 적용되서 출력이 되는 ..
1. 몬스터 증발버그 해결 (바로 이전 글에 올려놨던) 2. 몬스터가 공격도중에 플레이어가 기본공격을할때 특정타이밍에 충돌 체크가 안되던 점 해결 -> 알고보니 너무 가까워서 애초에 충돌이 안났던 것. 거리만 조금 늘려주니 잘 체크됨. 너무 허무했다. 3. 몬스터 거리에 따른 몬스터체력UI Zsorting. 4. 플레이어 애니메이션 여러개 추가... =========================================================================================== 전부해결
예전에 2D포폴했을때는 몬스터->플레이어의 방향벡터를 정규화하는 과정에서 nan값이 발생했었다. 분모에 0이 들어가면 안되는데, 몬스터랑 플레이어랑 거의 겹쳐져버리면 x2-x1값도 0, y2-y1값도 0이라 분모에 루트0값이 들어가버려서 nan값이 발생했었다. 근데 이번에도 몬스터가 증발하길래 열심히 추적해서 해결했다. 먼저 여차저차해서 몬스터의 WorldMatrix값에 nan값들이 포함되어있는걸 확인 -> rotation.y가 nan값이 발생되는걸 확인-> assert이용해서 어떤 함수에서 rotation.y에 nan값이 대입되는지 확인 -> 해당함수 벡터값 다 출력찍어봐서 확인 -> cmath::acos 함수에서 nan값이 리턴(!). acos 관련 글 : https://runebook.dev/ko/..
그런데 코드 다시 짜야할 것 같다. UI구현은 처음이다보니 어떤 변화에대한 오프셋값을 구해야하는지 몰랐었는데 구현하다보니 머리속이 정리가 되서 구해야할게 정해졌다. 어떻게해야하는거를 모르는게 아니라 뭘 해봐야 할 지를 몰랐었다. 일단 해야할 것. 윈도우크기는 고정인 상태에서 UI크기 조절을 통해 위치값 구하기. 즉 스케일값에 대한 offset값을 구하기.
포폴에 너무 인게임컨텐츠가 부실해서(심지어 UI도 구현을 안했었다) 옵저버패턴 활용해서 UI코드를 작성하는 중이다. 인게임에 UI를 배치하면 위치조정을 해야하니 그냥 Transform 클래스에 TRS값 조절(Translation,Rotation,Scale)하는 ImGui윈도우를 렌더하는 함수를 추가했다. ImGui윈도우를 생성할때는 고유이름으로 생성해야하는데, 중복될경우 한개만 렌더가 된다. 꼭 이거때문이 아니더라도 각 오브젝트의 이름을 고유값으로 설정하고 싶었다. 그래서 트랜스폼을 상속받는 객체가 태그네임을 Set할 때 고유한값으로 Set할 수 있도록 코드를 작성했다. 대충 로직은 아래처럼 짰다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23..