전체 글
-
[DirectX11] Specular BRDFDirectX11 2023. 12. 11. 17:09
Diffuse의 경우에는 간단하게 램버트의 코사인 법칙을 적용했다.다음으로 Specular를 계산해야하는데 Phong 반사 모델 같은 간단한 방법도 있지만 그것보다는 더 자연스럽게 표현하고싶어서 Cook-Torrance 방식을 적용했다. 코드와 수식 참고한곳:https://blog.naver.com/canny708/221551990444 GGX와 Schlick Fresnel, 그리고 자주 쓰이는 쿡-토런스 함수이전 쿡-토런스 게시글에서 가장 핵심이 되는 건 다음 수식입니다. 사실, 나머지 수식과 소스코드는 쿡-토...blog.naver.comhttps://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html?m=0 Specular BRDF Ref..
-
[DirectX11] DrawIndexedInstanced로 여러개의 인스턴스 그리기DirectX11 2023. 12. 7. 22:29
여러개의 동일한 모델을 그려야 하는 경우 DrawIndexed를 여러번 호출하는 대신 DrawIndexedInstanced를 사용하면 한번의 드로우 콜으로 여러개의 모델을 그릴 수 있다. 각 인스턴스들의 정보를 배열의 형태로 버퍼를 통해 전달하면 DrawIndexedInstanced에 지정한 횟수만큼 배열의 인덱스를 늘리면서 각 인스턴스의 정보에 맞게 그린다. 필요한 것은 다음과 같다. 인스턴스의 정보를 담을 구조체 인스턴스의 정보를 GPU로 보내줄 버퍼 인스턴스용 버텍스 쉐이더 또는 픽셀 쉐이더 인스턴스의 정보는 간단하게 월드 변환 매트릭스만 전달하겠다. struct InstanceInfo { XMMATRIX mInstanceToWorld; }; // ... int g_InstanceNum = 2; I..
-
[DirectX11] obj 파일로 모델 임포트DirectX11 2023. 12. 7. 17:10
만들어져있는 모델을 넣기 위해서 obj파일을 읽어서 정점 정보를 처리하는 클래스를 만들었다. Assimp도 써봤는데 내가 사용하려는 모델이 블렌더에서 익스포트한 모델이어서 설정이 잘못된건지 제대로 임포트하지 못했다. face의 경우 CCW를 CW로 바꿔주는 플래그 등 오른손 좌표계를 왼손 좌표계로 바꿔주는 플래그를 지정해줘도 삼각형이 제대로 만들어지지 않거나 원하는 형태로 임포트되지 않았다. Assimp의 문제가 아니라 사용자의 문제일 것이다. 블렌더의 Export 옵션에 Forward Axis와 Up Axis가 있는데 기본 설정은 저렇다. 해당 옵션이 무엇을 기준으로 Forward이고 Up인지 검색해봐도 명확하게 알려주는 글을 찾을 수 없었다. (해당 모델을 사용하는 곳 기준으로 정해주면 되는 듯 하지..
-
[UE5] 사용자 제작 퍼즐 - 결론언리얼엔진/노노그램 2023. 11. 15. 11:52
지금까지 했던 퍼즐 검증, 서버 통신 외에 퍼즐을 푸는 기능이나 진행 상황 기록같은 것들은 기존의 것을 그대로 이용했다. 추가로 사용자가 퍼즐을 만들 때 퍼즐의 크기를 골라야하는데 이 때에는 기본적으로 제공하는 크기가 있고, 원하는 경우 사용자가 크기를 지정할 수 있게 했다. 최소 크기는 5, 최대는 30으로 제한해놨다. 이렇게 원하는 대로 크기를 지정할 수 있게 해서 아래와 같은 퍼즐도 생성할 수 있다. 작동하는 영상 https://youtu.be/JGXoh67HdxI
-
[UE5] 사용자 제작 퍼즐 - 퍼즐 목록 받아오기언리얼엔진/노노그램 2023. 11. 14. 18:21
마지막으로 사용자가 업로드한 퍼즐의 목록을 불러와서 위젯으로 띄운다.퍼즐의 목록은 위젯의 리스트 뷰에서 목록 뷰를 사용하고, 무한 스크롤을 구현할 것이다. 먼저 무한 스크롤 먼저 구현한다.무한 스크롤의 기본 동작은 어느정도 스크롤이 됐을 때 다음 아이템들을 새로 생성해서 추가하면 된다.중요한 부분은 스크롤이 얼마나 내려갔는지를 확인하는 부분이다.언리얼 엔진 위젯의 리스트 뷰는 목록 뷰 스크롤 시 이벤트에서 스크롤이 얼마나 내려갔는지, 얼마나 남았는지를 알 수 있다. 리스트 뷰에 아이템이 추가될 수록 전체 스크롤 크기는 계속 증가하므로, 특정 값과 Distance Remaining의 값을 비교해서 아이템을 추가할 때를 판단하면 된다.일반적으로는 이렇게 하면 된다. 위 방법을 먼저 알아냈다면 이 ..
-
[UE5] 사용자 제작 퍼즐 - 퍼즐 업로드언리얼엔진/노노그램 2023. 11. 13. 17:30
다음으로 사용자가 퍼즐을 만들면 서버에서 검증하고, 검증에 통과하면 데이터베이스에 저장해야한다. 먼저 기존에 있던 퍼즐을 푸는 기능을 조금만 수정해서 아래와 같이 퍼즐을 만드는 기능을 추가했다. 퍼즐의 전체 크기가 바뀔 때마다 크기를 화면에 맞추는 작업을 하다보니 힌트가 늘어나면 퍼즐이 흔들리는 문제가 있어서 고쳐야 할 듯 하다. 그래도 일단 기능은 제대로 작동하므로 이대로 진행한다. 그 다음 서버를 만들어서 제작된 퍼즐을 검증해야한다. 저번 글에서 장고를 써서 서버를 만들기로 했다. 사실 웹 애플리케이션을 만드는 것도 처음이고, 장고를 써보는 것도 처음이어서 작동만이라도 되게 하는 것을 목표로 했다. 서버의 역할은 크게 두가지가 있다. 하나는 사용자가 제작한 퍼즐을 검증하는 것. 다른 하나는 사용자가 ..
-
[UE5] 사용자 제작 퍼즐 - 퍼즐 검증, 노노그램 Solver언리얼엔진/노노그램 2023. 11. 9. 18:13
제일 핵심 기능인 퍼즐을 검증하는 기능부터 구현하기로 했다.나머지는 이 기능에 맞춰서 구현할 수 있기 때문이다. 노노그램은 풀이 공식이 있다.노노그램에 좀 익숙하면 웬만해선 대부분 아는 방법들이라서 이 글에서는 자세히 다루지 않겠다.자세한건 위키에 나와있다.https://ko.wikipedia.org/wiki/%EB%85%B8%EB%85%B8%EA%B7%B8%EB%9E%A8#%ED%92%80_%EB%95%8C%EC%9D%98_%EC%A0%95%EC%84%9D 노노그램 - 위키백과, 우리 모두의 백과사전위키백과, 우리 모두의 백과사전. 노노그램 예시 노노그램(영어: Nonogram, 일본어: お絵かきロジック 오에가키로짓쿠[*])은 일본의 퍼즐 게임이다.[1] 각각 적혀있는 숫자를 보면서 숨겨져 있..
-
[UE5] 사용자 제작 퍼즐 - 서론언리얼엔진/노노그램 2023. 11. 8. 18:57
No2g에는 사용자가 퍼즐을 만들어서 서버에 업로드 하고 다른 사용자가 그 퍼즐을 풀 수 있다. 퍼즐을 만들어서 서버에 업로드 할 때 퍼즐을 먼저 검증하는 과정을 거치는데 관심이 생긴 부분은 이 검증 과정이다. 검증은 힌트가 너무 적지는 않은지, 퍼즐을 풀 수 있는지, 중복된 답이 있는지를 검사한다. 그래서 따지고 보면 노노그램 퍼즐을 자동으로 풀어주는 기능이라는 의미가 된다. 제일 관심있는 부분은 퍼즐을 자동으로 풀어주는 알고리즘이지만, 이 기능을 넣으면서 사용자가 퍼즐을 만들고 서버에 업로드 하는 기능도 따라서 만들어 보기로 했다. 사용자가 퍼즐을 만드는 기능을 구현하는 것은 어려운 일이 아니다. 기존의 퍼즐 화면에서 enum으로 퍼즐을 푸는 모드와 퍼즐을 만드는 모드를 구분하고, 퍼즐을 푸는 경우에..