
개요이번 시간에는 Instanced Drawing이라는 개념에 대해서 알아보겠습니다.Instanced Drawing이란 같은 Geometry 여러 개를 하나의 DrawCall로 그리는 것을 뜻합니다.여기서 말하는 Instance란 한 번에 그려지는 개체들을 뜻합니다.DirectX12에는 DrawIndexedInstanced라는 함수가 있는데 여기 InstanceNum 인자로 5를 보내게 되면 5개의 Instance가 한 번의 DrawCall로 그려지게 됩니다.각 Instance 별로 별도의 Scale, Rotation, Translation, Color 정보를 주는 것도 가능합니다.물론 Instanced Drawing 대신 5번의 일반적인 Draw를 통해서도 같은 효과를 낼 수 있습니다.다만, 이렇게 할..
개요이번 시간에는 DirectX12의 GPU 동기화에 대해서 알아보겠습니다. DirectX12는 기존 버전의 DirectX나 OpenGL과는 다르게 CPU와 GPU의 동기화를 위해 별도의 명시적인 작업을 해주어야 합니다. 기존 DirectX에서는 관련 작업을 driver가 자동으로 해주어서 그래픽 프로그래머가 좀 더 간편하게 코딩할 수 있었지만, DirectX12부터는 프로그래머가 직접 컨트롤 할 수 있게 되어서 어플리케이션에 좀 더 알맞는 코딩을 할 수 있게 되었습니다. 하지만 프로그래머가 더 신경써야 할 부분이 많아지기는 했습니다. 어찌됐든 GPU 동기화는 DirectX12에서 꼭 필요한 요소입니다. GPU 동기화를 하지 않은 경우 CPU와 GPU가 코드로 의도한 순서대로 동작하지 않고, GPU에서 ..

DirectX12 프로그래밍을 하다 보면 디버깅이 필요한 시점이 있습니다.Visual Studio로 디버깅을 해서 중단점이 잡히면 그나마 다행이지만, 화면이 그냥 까맣게 나오는 경우도 있습니다.의심되는 코드를 수정해보거나 의심되는 데이터를 따로 뽑아서 출력해봄으로써 확인해 볼 수도 있습니다.하지만 이렇게 파악한 데이터는 한정적이고, 문제가 생길 때마다 테스트 코드를 작성하면 매우 많은 시간이 소요될 것입니다.대신 Microsoft에서 제공하는 디버깅 툴인 PIX를 활용하면 그래픽 관련 디버깅을 매우 간편하고 빠르게 할 수 있습니다. 툴은 이곳에서 다운 받을 수 있습니다.https://devblogs.microsoft.com/pix/download/ 다음으로는 PIX를 통해 DirectX12 프로그램을 디..

이번 시간에는 DirectX12를 활용해서 PostProcessing을 하는 예제를 살펴보겠습니다. 여기서 Post란 "~이후에"를 뜻하고, Processing이란 "처리"를 뜻합니다, 따라서 합쳐서 "후처리"라고 표현을 합니다.그래픽스에서는 보통 씬을 렌더링한 후 생성된 이미지에 별도 효과를 주는 것을 말합니다.PostProcessing으로 줄 수 있는 효과는 매우 다양하지만 이번 시간에는 가장 기본적인 GrayScale에 대해서만 다루겠습니다. 먼저 예제에서 생성된 이미지는 아래와 같습니다.PostProcessing 개요PostProcessing은 일반적으로 2개의 Pass를 사용합니다.1) 3D World를 Texture에 렌더링하는 Pass2) 만들어진 Texture를 input으로 별도 효과를 ..

반응성 좋은 프로그램을 만들려면 병렬/비동기 프로그래밍은 거의 필수입니다. 병렬 프로그래밍은 작업이 오래 걸리는 부분을 여러 곳에서 동시에 처리하는 것이고 비동기 프로그래밍은 작업이 오래 걸리는 부분은 일단 다른 곳에서 처리하도록 해서 현재의 흐름을 방해하지 않고 진행하다가 처리가 끝나면 다시 돌아와서 처리하는 것을 뜻합니다. 어찌됐든 병렬/비동기 프로그래밍 모두 Thread와 밀접한 연관이 있습니다. 따라서 이번 시간에서는 C#에서 Thread를 사용하는 여러 가지 방법에 대해 알아보겠습니다. C#에서 Thread를 사용하는 방법은 여러 가지 있습니다. 오늘 소개할 방법은 총 3가지입니다. 각각은 Thread와 ThreadPool 그리고 Task입니다. 각각에 대해서 깊게 살펴보지는 않을 것이고 각각의..

이번 시간에는 저번 포스팅에 이어서 MakeConst 튜토리얼을 더 진행해 보겠습니다. 저번 포스팅 링크는 아래와 같습니다. https://mathmakeworld.tistory.com/103 이번 포스팅에서는 Unit Test를 통해서 빠르게 원하는 기능을 테스트하는 코드를 만들어 보겠습니다. Unit Test 솔루션에 존재하는 프로젝트 중 MakeConst.Test를 열고 내부의 MakeConstUnitTests.cs 파일을 엽니다. 그후 아래 이미지와 같이 MakeConstUnitTest 클래스 내부에 함수들을 만들면 Unit Test를 할 수 있습니다. Unit Test를 돌리려면 함수를 작성할 때 TestMethod라는 Attribute를 붙이면 됩니다. Test를 하는 함수로는 총 2가지가 있..

C#에서는 CallStack을 Runtime에 파악할 수 있는 기능을 제공합니다. 크게 두 가지 방식이 있는데 Environment.StackTrace라는 Property를 이용하는 것 StackTrace Class를 사용 이 두 가지입니다. Environment.StackTrace 일단 첫 번째는 매우 간단합니다. System.Environment.StackTrace라는 Property를 그대로 사용하면 됩니다. 예제를 위해 MyClass를 만들고 LogStackTrace() 함수를 만들어 봅시다. MyClass의 LogStackTrace() 함수에서 Environment.StatckTrace를 그대로 출력하도록 구현해봅시다. Main 함수에서는 다음과 같이 MyClass 객체를 만들고 LogStack..

이번 시간에는 로슬린을 이용해서 "상수로 만들 수 있는 변수 선언에 const 키워드를 제안하는 프로젝트" 를 만들어 보겠습니다. 풀어서 설명하면 const 키워드를 추가할 수 있는 변수 선언에 권고 사항을 나타내주고 클릭 한 번으로 직접 const를 추가할 수 있도록 해주는 프로젝트입니다. 이 포스팅을 다 읽고 나면 Roslyn을 이용해 "특정 구문을 찾아내는 방법"과 "코드로 새로운 코드를 만드는 법"을 배우게 될 것입니다. 참고한 튜토리얼 문서는 아래와 같습니다. https://docs.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/tutorials/how-to-write-csharp-analyzer-code-fix Tutorial: Write your first ..

C#은 매우 강력한 기능인 Reflection을 사용할 수 있습니다.Reflection을 한 마디로 정의하면 "런타임 때 컴파일 타임에 정의된 정보를 가져올 수 있는 기능"입니다.설명만 보면 "이것이 정확히 어떤 의미인지, 어떤 상황에서 필요한 기능인지" 잘 이해하기 어렵습니다.하지만 좀만 시간을 들여 파악해보면 이것이 무엇을 의미하는지 알 수 있고, 생각보다 활용할 수 있는 곳이 많다는 것을 알 수 있습니다. 이런 것이 가능한 이유는 닷넷 프레임 워크 용어 정리 포스팅에서 간단하게 설명했지만 C#으로 만들어진 EXE 파일은 CLR이라는 또 다른 프로그램에 의해 관리를 받고 있기 때문입니다. 예시그럼 Reflection을 통해 어떤 것들을 할 수 있는지 예시를 통해 간단히 살펴보겠습니다.설명 드릴 예제는..

저번 포스팅에서는 C#의 Pass by value에 대해 알아보았습니다. 짧은 예제를 통해 value type의 변수와 reference type의 변수를 parameter로 보냈을 때의 동작을 알아보았죠. 그리고 value type과 reference type의 동작 차이에 대해서는 저저번 포스팅에서 설명드렸었습니다. in, out, ref 키워드 이번 포스팅에서는 Pass by reference에 대해 알아보겠습니다. 먼저 요약해서 말씀드리면 C#에서는 ref, out 혹은 in 이라는 키워드를 통해 Pass by reference를 구현합니다. 이름에서 유추할 수 있듯이 ref는 reference로 보낸다는 것을 뜻하고 in은 입력 용도로, out은 출력 용도로 사용한다는 것을 뜻합니다. 한 가지 ..
- Total
- Today
- Yesterday
- DirectX12
- opengl
- 강화학습
- collision detection
- 루빅스큐브
- Scriptable Render Pipeline
- NDC
- VTK
- normalized device coordinate
- Mesh
- CollisionDetection
- 참조 형식
- 최적화
- perspective projection
- Bounding Volume Hierarchy
- Transformation
- RubiksCube
- Mesh Processing
- C#
- transform
- SRP
- RL
- Unreal
- reference type
- AABB
- value type
- 값 형식
- MeshProcessing
- Unity
- 유니티
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |