일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- winapi
- 언리얼엔진5
- const
- UnrealEngine4
- C++
- 2294
- IFileDialog
- 프로그래머스
- directx
- 절두체
- NRVO
- UE5
- 백준
- algorithm
- GeeksForGeeks
- DeferredRendering
- 트리의 지름
- 절두체 크기
- RootMotion
- softeer
- baekjoon
- 줄 세우기
- Programmers
- RVO
- DirectX11
- C
- UnrealEngine5
- 가장 먼 노드
- 가장 큰 정사각형
- Frustum
- Today
- Total
목록directx (6)
Game Develop
컬라이더세팅툴씬에서 컬라이더를 마우스피킹했을 경우 기즈모를 렌더시키고 싶기 때문에 구현해봤다. 사실 기존의 반직선피킹을 하더라도 툴씬을 사용하는데에 지장을 줄정도로 프레임저하가 있을거 같진 않긴하다. 당장은 컬라이더를 뭐 수십 수백개를 세팅(검사)할것도 아니니까.. 하지만 여기 말고도 다른 씬에서 사용할 수도 있고, 구현방법은 쉬우면서 효과는 좋기때문에 해봤다. 분명 유용할것같긴하다. 픽셀단위로 정확한거치고는 프레임저하가 거의 없다. 다만 두번 그리는것이기 때문에 고해상도일수록 프레임 저하가 좀 더 있을것이다. 영상 이 방법은 예~전에 김포프님께서 올려주신 글을 보고 따라해봤다.(https://blog.popekim.com/ko/2012/12/03/fast-object-picking.html) 포프님께서..
사실 아직도 도저히 이해가 안가는 일이긴 하다. 씬에서 직접 fbx파일을 추출해서 Asset창에 보여주고 렌더시키는 툴을 만드는 중인데 fbx파일 선택을 위해 공용대화상자를 여는 winapi를 찾게 되었다. 먼저 사용한건 commdlg.h에 있는 GetOepnFileName()이라는 함수를 이용해서 파일대화상자(FileDialog)를 여는건데, 비교적 사용법은 쉬웠다. (사용법에 대해선 따로 정리해놨다) 근데 이상하게, 저 대화상자를 열고 파일 선택하고 확인을 누른 다음에 ModelExporter을 실행하면 도통 파일을 읽어오질 못한다. 이것저것 시도하다 하루를 날렸는데 멘탈이 조금 깨졌었다. 그냥 한창 구현만 하면 되는 작업이였어서 딱히 막히는일이 없을줄알았는데 생각치도못한곳에서 작업이 멈추니까 짜증도..
기존의 사용하던 피킹은 반직선피킹인데 프레임이 너무 안나와서 다른 피킹방법이 있나 찾게되었다. 물론 반직선피킹을 하더라도 최적화를 좀 더 하면 프레임이 좀 더 나오긴 하겠지만, 터레인에디터에서는 진짜 말 그대로 피킹지점의 월드좌표만 알아내면 되기 때문에 픽셀피킹을 시도해보았다. 깊이값 샘플링과 행렬계산은 컴퓨트셰이더에서 수행하고 수행결과값(월드값)만 CPU로 리턴시켜서 써먹었다. 깊이값샘플링을 위한 깊이맵은 PreRendr를 해서 따왔다. 렌더타겟을 OM에 셋팅해놓고 터레인 버텍스만 넘겨서 파이프라인 한번 돌린다음 얻어온 렌더타겟의 SRV를 컴퓨트셰이더에 샘플링을 위해 넘겼다. 그냥 같이 바인딩된 DSV의 깊이맵텍스쳐를 바로 컴퓨트셰이더에 넘겨주면 되긴 하는데, 그냥 깊이맵을 시각화하고싶어서 따로 렌더했..
현재 작업중인 프레임워크는 학원에서 배우고 사용했던 프레임워크를 기반으로 내 포트폴리오에 맞춰서 최적화시킬수 있는건 최적화하고 기능 추가하고 하는중이였는데 터레인에디터부분에서 최적화가 많이 필요한걸 느꼈다. 일단 터레인맵의 크기가 클수록 프레임이 기하급수적으로 떨어졌다. 피킹을 하면 터레인크기가 클수록 프레임이 더 떨어지는건 정상이긴하지만 좀 많이 떨어졌다. 떨어졌던 원인 2가지는 아래와 같다. 1. 터레인피킹 2. 터레인피킹으로 좌표를 받아와서 좌표주변의 버텍스 y값 조절을 통해 지형을 수정하는 과정. 피킹자체는 학원에서 배울 때 컴퓨트쉐이더를 이용해서 gpu쪽연산으로 돌렸기 때문에 최적화가 됐다. 그러나 렌더함수쪽에서 피킹으로 값받아오는 연산이 프레임단위로 수행되고 있었기 때문에 터레인크기를 늘리자마..
그냥 어느정도의 영역만큼 컬링하는지 표현하려고 해봤다. 혹시 크기를 알아내는게 복잡한가? 싶어서 투영행렬 유도식까지 공부하고 정리했는데 굳이 필요는 없었다. 물론 공부자체는 매우 유익했는데 절두체크기 구하는건 단순히 탄젠트공식 하나만 알면 되는 부분이긴했다. 절두체크기 구하는 부분에 대해선 다른 카테고리에 포스팅했으니 참고할사람은 했으면 좋겠다. 결과물은 아래와 같다.
WVP변환이란? WVP변환은 컴퓨터그래픽스에서 최종적으로 2D모니터에 출력하기 위한 위치변환과정 중 하나이고, 그중에서 Clip Space로 변환하기위한 과정이다. (DirectX 기준) World 어떤 공허한 공간이 있고 여기에 정사면체 하나가 있다고 가정하자. 이 정사면체의 (0,0,0)은 자신의 중심점이고, 이건 이 정사면체뿐만 아니라 공허한공간에 있는 모든 오브젝트들이 동일하다. 이 공허한 공간에서의 (1,0,0)은 중심점에서부터 1,0,0에 위치한 지점일 뿐이다. 이런 각 오브젝트의 공간을 ObjectSpace, LocalSpace, ModelSpace 등으로 부른다. 각자의 0,0,0이 의미하는 지점이 다르기 때문에 world좌표라는 기준을 통해 우리가 컨트롤할 수 있는 실세계로 끌어내려야한다..