분류 전체보기

    [Unreal] 리깅 및 리타겟터 (각기 다른 메시 애니메이션 연동 Mixamo)

    MIXAMO 사이트에서 제공해주는 애니메이션은 언리얼에서 제공해주는 메시와 스켈레톤이 맞지가 않는다 따라서 연동을 해줘야한다 (IK Rigging,IK Retargeter) 우선 변경된 블렌더 버전을 다운로드한다. [FREE] Custom Blender Version for Easy Mixamo Retargeting in UE5 (gumroad.com) 그 담 아래와 같이 생성될텐데 다운로드한 Mixamo fbx 파일을 In에다 넣어준다. n키 누르고 Mixamo 선택 후 Batch Convert 버튼을 눌러준다. 해당 옵션이 없을 시 아래 참고 Edit > Preferences > Add-ons에서 플러그인을 선택해준다. Anims Out에서 생성됐다면 정상적으로 실행된거다 Animation 부분에서 ..

    프로세서, 메모리, 캐시 개념 및 원리 (메모리 및 버스/연결 관한)

    시스템 버스 시스템 버스는 하드웨어를 물리적으로 연결하여 서로 데이터를 주고받을 수 있게하는 통로 역할을 한다. 이때 버스는 데이터 버스, 주소 버스, 제어 버스로 나뉜다. 데이터 버스 프로세서와 메인 메모리 그리고 주변 장치들 사이에서 데이터를 전송할 때 쓰인다. 이때 버스는 데이터를 주고받아야 하므로 양방향이다. 주소 버스 프로세서에서 메모리의 주소를 지정할 때, 그 주소가 어디인지에 대한 정보를 보내는 버스이다. 즉, 프로세서에서 01110011이라는 위치에 데이터를 보내려면 데이터 뿐만 아니라 데이터의 목적지인 01110011도 버스를 통해 보내는데 이를 주소 버스를 통해 보낸다. 결국 프로세서가 주소를 지정하면서 보내는 버스이다. 이 버스는 주소를 보내면 되니 단방향이다. 제어 버스 프로세서가 ..

    [Unreal] 애니메이션 이벤트 관련 / Notify 및 NotifyState

    두 가지의 Notify 즉 메시지가 존재하는데, 이건 애니메이션 내에서 설정이 가능하다 이 둘의 가장 큰 차이점은 AnimNotify는 일회성이고 AnimNotifyState는 시작 (Begin), 진행 중일 때 (Tick) 그리고 끝날 때 (End) 각각 다른 이벤트를 처리하도록 설정할 수 있다는 점이다. UAnimNotify / Super:: 해서 부모 클래스 오버라이딩 함수 호출 생략 UE_DEPRECATED(5.0, "Please use the other Notify function instead") virtual void Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation); virtual void Notify(USkele..

    C++ std::tuple 여러가지 타입들의 객체를 보관 / Structured binding

    #include #include #include int main() { std::tuple tp; tp = std::make_tuple(1, 3.14, "hi"); std::cout

    std::variant와 std::monostate 여러가지 타입 중 한 가지의 객체를 보관

    std::variant 는 one-of 를 구현한 클래스라고 보면 된다. 즉, 컴파일 타임에 정해진 여러가지 타입들 중에 한 가지 타입의 객체를 보관할 수 있는 클래스이다. 물론 공용체(union) 을 이용해서 해결할 수 도 있겠지만, 공용체가 현재 어떤 타입의 객체를 보관하고 있는지 알 수 없기 때문에 실제로 사용하기에는 매우 위험하다. // v 는 이제 int std::variant v = 1; // v 는 이제 std::string v = "abc"; // v는 이제 double v = 3.14; 먼저 variant 를 정의할 때 포함하고자 하는 타입들을 명시해줘야 한다. 위의 경우 정의한 variant 는 int, std::string, double 이 셋 중 하나의 타입을 가질 수 있다. var..

    [3] 등굣길

    #include #include #define SIZE 101 using namespace std; int solution(int m, int n, vector puddles) { int check[SIZE][SIZE]{0}, vis[SIZE][SIZE]{0}; for(int i=0;i

    [실2] 11725 - 트리의 부모 찾기

    #include #include #include #include using namespace std; #define MAX_SIZE 100001 vector graph[MAX_SIZE]; int arr[MAX_SIZE]; bool vis[MAX_SIZE]; int main() { int n; cin >> n; for (int i = 1; i > y >> x; graph[y].push_back(x); graph[x].push_back(y); } stack s; s.push(1); vis[1] = true; while (!s.empty()) { auto idx = s.top(); s.pop(); for (int i = 0; i < graph[idx].size(..

    [실3] 15654 - N과 M (5)

    #include #include #include using namespace std; #define MAX 9 vector v; int arr[MAX]{ 0 }; bool vis[MAX]{ 0 }; int n, m; void dfs(int idx) { if (idx == m) { for (int i = 0; i m; v.resize(n); for (int i = 0; i > v[i]; sort(v.begin(), v.end()); dfs(0); }

    [골4] 1922 - 네트워크 연결

    #include #include #include using namespace std; #define MAX 100001 struct sEdge { int val, a, b; }; vector graph; int parent[MAX]; int res = 0; int Find(int x) { return (parent[x] == x) ? x : parent[x] = Find(parent[x]); } void Union(int x, int y) { x = Find(x), y = Find(y); if (x != y) parent[y] = x; } bool Cmp(sEdge edge1, sEdge edge2) { return (edge1.val < edge2.val); } int main() { ios_base:..

    [3] 단속 카메라

    #include #include #include using namespace std; int solution(vector routes) { int answer = 1; sort(routes.begin(), routes.end()); int tmp = routes[0][1]; for (auto a : routes) { if (tmp = a[1]) tmp = a[1]; } return answer; }