전체 글 98

[OpenCV] opencv_core 빌드 컴파일 에러, cuda tookit 버전 호환 문제

c++로 openCV를 사용하기전에 cmake로 configure한 후 빌드하려고 할 때,이렇게 ALL_BUILD를 누르고 빌드하면 되는데 다양한 에러가 뜰 수 있다. 여기서 에러를 고치는 방법은 예를들어 이렇게 opencv_core라는 프로젝트에서 빌드에러가 나면 이것만 따로 빌드해서 어디가 문제인지 파악하는 것이다. 이 문제는 opencv_core를 빌드하려고하니 cuda 버전쪽에서 문제가 생겨서 컴파일이 되지 않았던 것이다. visual studio 2022와 cuda toolkit 13.2를 사용하고 있었는데, 호환이 되지 않아서 컴파일 오류가 떴던 것이고 12.9로 다운그레이드하니 빌드가 성공하였다. opencv 포럼에 가면 다양하게 문제를 겪고 있는 사람들이 있는데 여기서 힌트를 얻을 수 있다..

OpenCV (C++) 2026.03.22

outlier제거 방법(statistical, radius)

outlier제거 방법에는 ransac방식을 적용할 수 있지만, open3d에서 제공해주는 outlier제거 기능에 대해 알아보려고 한다. 두가지가 있는데 첫번째는 statistical방식이고 두번째는 radius방식이다 1) statisticalpcd, inliers = pcd.remove_statistical_outlier(nb_neighbors=20, std_ratio=2.0)여기서 각 점을 P라고 하자. nb_neighbors=20 즉, P주위의 가장 가까운 점이 20개를 뽑아서 평균낸 값이 d(P)이다. 그럼 점이 20만개가 있으면 d(P1), d(P2) ... d(P200000)이 있을 것이다. 이 D(P)들을 평균낸 값을 μ라고하고 표준편차를 σ라고 하자. D(P) > μ+std_ratio..

open3d 2026.02.14

mesh모델을 point cloud 점으로 바꿔보기 실습

The Stanford 3D Scanning Repository The Stanford 3D Scanning RepositoryIn recent years, the number of range scanners and surface reconstruction algorithms has been growing rapidly. Many researchers, however, do not have access to scanning facilities or dense polygonal models. The purpose of this repository is to make some rangraphics.stanford.edu 라는 곳에서 bunny파일을 다운받고, 주피터파일이 있는 곳에서 경로를 잘 설정후에,이..

open3d 2026.01.29

open3d amd cpu에러날 때 해결법

amd cpu와 내장 그래픽카드를 사용한다면 # Python APIpython -c "import open3d as o3d; \ mesh = o3d.geometry.TriangleMesh.create_sphere(); \ mesh.compute_vertex_normals(); \ o3d.visualization.draw(mesh, raw_mode=True)"# Open3D CLIopen3d example visualization/draw 여기서 에러가 날 수 있다. 해결법은 nvidia gpu를 디폴트로 설정해야하는데 기본 그래픽 프로세서를 고성능 nvidia 프로세서로 바꿔주고, openGl 렌더링 gpu를 nvidia로 바꿔주면 해결된다. htt..

open3d 2026.01.29

[Dx12] cpu-gpu 병렬처리

dx12는 fence를 통해 gpu작업이 끝나면 cpu가 실행되도록한다.그런데 gpu실행하는 동안 cpu가 놀고있으면 비효율적이니 context를 2~3개로 써서 cpu와 gpu가 동시에 실행 될 수 있도록 하는 기법이 있다.그림으로 보면 다음과 같다 커맨드리스트, 디스크립터풀 등을 2개로 만든다.첫번째 프레임에는 첫번째 커맨드리스트, 첫번째 디스크립터 풀 작업을 cpu에서한다. 그리고 gpu에 올린다. 그러면 gpu작업을 하는동안 두번째 커맨드리스트, 두번째 디스크립터 풀작업을 cpu에서 한다. 이렇게 돌아가는 식이다. 여기서 포인트는 반드시 해당 프레임에선 해당 번째의 커맨드리스트와 디스크립터 풀을 이용해야한다는 점이다. 그렇지않으면 gpu작업중에 그 gpu에 해당하는 데이터(디스크립터 및 리소스)..

[3dsmax-plugin]애니메이션 time0일땐 되고 나머지는 다 망가질 때 해결법

스키닝이 꼬이는 문제는 정말 많지만. 아무리 생각해도 값 완벽하게 들어갔는데 뭔가 스키닝이 꼬이는 경우가 있을 수 있다. max에서는 애니메이션이 잘 작동하는데 내 엔진에서는 이렇게 꼬일 수도 있다. 근데 이걸 time을 0으로 맞춰놓고 찍어보면 그냥 가만히 서있는 model로서 잘 나온다. 즉 값은 잘 들어갔다는 것이다. 그런데 time을 0으로 찍지말고 800으로 찍어보니까 이렇게 엄청 뒤틀린다. 분명 0과 800샘플링 된 값을 비교해 봤을때 아주 미세한 움직임인데 왜 저렇게 많이 뒤틀릴까? 그리고 내 엔진에서 행렬값을 잘 찍어봐도 다 명확하게 잘 들어갔다. 특히 time이 0일때는 잘 그려지는데 나머지는 망가질때 첫번째로 의심해야할 부분은 이것이다."bone과 bind-pose가 정확히 매칭이 ..

assimp,3ds max의 face처리 과정과 버텍스 병합 코드

한 mixamo모델의 vertex를 3ds max sdk로 출력하면 대략 86000개가 나온다. 누락되는 거 없이 모든 face들을 순회해서 만든 것이다. 여기서 같은 모델을 assimp에 넣고 vertex를 출력해보았다. 대략 56000개가 나온다. 왜 이렇게 줄었을까 하고, 아마 vertex병합이 일어나지 않을까 생각해서 assimp의 오픈소스를 찾아보앗다. assimp 코드에 code/PostProcessing/JoinVerteicesProcess.cpp라는 코드가 있었다.https://github.com/assimp/assimp/blob/master/code/PostProcessing/JoinVerticesProcess.cpp pos, uv, normal,tangent가 거의 유사하다면 같은 것..

카테고리 없음 2025.11.08

3ds max export시 texture name지정과 불필요한 노드제거

3ds max켜고 m을 눌러서, 상단에 Material-> get all scene material에 들어간다. 그리고 관련 texture폴더를 열면 다음과같이 나온다 이거 작업전에 ase파일로 export하면 다음과 같이 불필요한 subtexture가 떳엇다 외부 사이트에서 다운받고 뽑으니 불필요한 노드들이 있었던 것이다. 저 에디터에서 제거 후, MAP_NAME같은 것들도 같은 이름으로 통일시켜주었다 깔끔해졌다. 이제 파싱할 때 좀 더 수월할 것 같다.

assimp node 구조 이해하기

assimp구조를 보면 다음과 같다.이 node들과 bone은 다르다. 여기의 node들은 그냥 메쉬들을 나타낸 것이다. 보통 하나의 노드에 하나의 메쉬들이 붙어있다. 여기에 맞게 데이터를 뽑으려면 max,maya,bledner같은 툴에 데이터 넣고 메쉬들을 트리구조로 만들고 export하고 assimp에 넣어야한다. 또한 mesh하나당 mMateriaIndex하나를 가지고 있는 것을 볼 수 있는데, multiMaterial이 적용이 안된다. 그 점을 제외하고는 편리성 측면에서는 유용할 수도 있다고 생각한다. max로 뽑으면 가장 확실하긴 한데 assimp는 예상치 못한 값이 들어왔을 때 추적하기가 좀 힘들 수도 있다. assimp는 다양한 포멧을 읽을 수 있기 때문에 처음 모델로딩을 입문한 사람에게는 ..

외부 애니메이션 씬 파일 뽑아서 엔진에 넣을 때 case 구분

max에서 데이터를 뽑아서 자체 엔진에 넣을 때, 다양한 케이스를 나눠서 읽도록 해야한다. 이미 유니티나 언리얼은 그걸 다 구현해놓았다. 예를들어 어떤 사이트에서 스키닝된 캐릭터와 그에 딸린 몇몇 오브젝트들(스키닝 되지 않음)이 한꺼번에 애니메이션이 구현되는 경우가 있다. 그럴 땐, 그냥 스키닝 된 캐릭터와 그에 딸린 지오메트리만 선택해서 따로빼는게 좋겠다. 나머지 스키닝 되지 않은 오브젝트들은 스키닝 되어있지 않지만, bone에 딸려있을 수도 있다. 그걸 다 한꺼번에 빼버리면 너무 작업량이 많아지고, 완전히 익스포트해서 임포트가 잘 진행되었다 하더라도 비효율적인 것 같다. 가령 스키닝된 캐릭터와 캐릭터의 손목의 자식으로 무기가 하나 딸려있고 그 무기의 나사부분이 계속 돌아가는 씬을 다운받았다고 가정하자..