Wanho Choi

CG/VFX Software Engineer

갤럭시 갤러리에서 사진 안보이는 문제

.nomedia 파일이 존재하면 그 이하 폴더에 있는 파일들이 보이지 않게된다. .nomedia 파일을 검색하여 삭제하고, 재부팅을 해주면 된다.

MPxLocatorNode::draw()

Locator node를 사용하면 draw() 함수 안에서 custom data에 대한 OpenGL rendering을 구현하는 것이 가능하다. 그런데, MPxLocatorNode::draw() 함수 안에서 print를 해보면, Maya viewport에서 camera 정보가 변할 때 뿐만 아니라, viewport를 click하거나 marquee를 그리는 등의 조작을 할 경우에도 호출되는 것을 확인할 수 있다. Maya에서는 viewport를 click하거나 marquee를 그리는 등의 행동을 하게 되면 vieport 상에서 이렇게 지정한 영역과의 collision을 계산하여 […]

, , , ,

Linux Maya에서 키보드가 먹통일 때

Tray에 있는 iBus input method framework를 마우스 오른쪽 버튼으로 선택한 후 restart를 해주면 된다. 만약 Tray에 iBus가 사라졌다면 홈디렉토리에 있는 .gconf 디렉도리를 삭제하면 초기화된다.

, , ,

A weird problem when using CUDA

다음은 CUDA by Example 책의 p.67에 있는 예제를 기반으로 작성한 코드이다. 이 코드를 가지고 테스트를 하던 중 이상한 일을 겪게 되었다. Line 13을 주석(comment) 처리를 하더라도 정상적인 결과가 나오는 황당함을 겪게 되었다. 반나절 고민 끝에 찾아낸 이유는 너무나도 간단했다. 이전 실행에서의 dev_c에 대한 결과가 GPU memory상에 남아있었고, 주석 처리를 한 후에 다시 compile할 때 dev_c는 […]

Conflict problem between Cuda and Maya

Maya는 MTypes.h에 short2, short3, long2, long3, int2, int3, float2, float3, double2, double3, double4 등의 자료형을 정의하여 사용한다. 용감하게도 어떠한 prefix나 namespace도 사용하지 않는다. Cuda는 vector_types.h에 int2, int3, float2, float3 등의 자료형을 정의하여 사용한다. Cuda 또한 용감하게도 어떠한 prefix나 namespace소 사용하지 않는다. Maya plug-in에서 사용하는 헤더파일(.h)에서 이나 을 해주면 자연스럽게 충돌이 일어난다. (소스파일(.cpp)에서는 문제가 되지 않는다.) […]

, , , ,

Fast Inverse Square root

워드프레스 수동 업데이트

1. 만약을 위해서 서버에 있는 모든 디렉토리들 및 파일들을 로컬로 백업한다. 2. 설정에서 모든 플러그인들을 비활성화 한다. 3. 새로운 버전의 파일을 로컬에 다운로드 받는다. 4. 서버에 있는 wp-admin, wp-includes 디렉토리를 삭제한다. 5. 로컬에 있는 새로운 버전의 wp-admin, wp-includes 디렉토리를 서버에 업로드한다. 6. 로컬에 있는 새로운 버전의 wp-content 디렉토리를 서버에 업로드 한다. (덮어쓰기) 만약 실패한다면 서버의 […]

Angle between two vectors

길이가 1인 두 개의 벡터 A와 B가 주어졌을 때, 두 벡터 사이의 각도를 구하는 함수 float Angle1( const Vector& A, const Vector& B ) { return acosf( DotProduct(A,B) ); } : A와 B가 거의 평행하게 될 때 DotProduct(A,B)의 값이 -1 보다 작거나 +1 보다 큰 경우가 생기며, 이 때 문제가 발생할 수 있다. #define Clamp(x,min,max) […]

,

Hash

[ hash function ] – 임의의 길이를 갖는 data를 고정된 길이의 data로 mapping하는 algorithm – output: hash value – (A’s hash value) != (B’s hash value) -o-> (A’s original data) != (B’s original data) (A’s hash value) != (B’s hash value)

제34회 청룡영화제 기술상. 미스터 고.

생애 첫 번째로 R&D supervisor로 참여한 프로젝트. 청룡영화상. 어찌보면 아무것도 아닌데… 고생이 컸던만큼 아픔도 컸었는데 많은 위로가 됩니다.

, ,

Uniform, Varying, and Attribute in GLSL

GLSL shader에서 input 또는 output으로 사용하는 변수 type은 3가지가 있다. 1. uniform rendering하는 동안 변하지 않는 변수이다. 마치 C 언에에서의 global extern variable의 개념이라고 생각하면 된다. OpenGL application으로 부터 값을 전달받을 수 있다. vertex shader와 fragment shader에서 모두 공유하여 사용하는 것이 가능하지만, 값을 읽는 것만 가능하다. 예) light position, light color 2. atttibute uniform과 마찬가지로 […]

, , ,

GLSL

OpenGL에서 사용하는 shader를 작성하는 데 쓰이는 언어를 OpenGL Shading Language (GLSL)이라고 한다. GLSL은 GLslang이라고도 한다. GLSL은 C 언어와 유사한데, C언어를 기초로 만들어진 상위 레벨의 shading 언어이기 때문이다. C언어에서 source code가 compile되어 object 파일로 만들어진 후에 합쳐져서 하나의 프로그램이 되는 것과 마찬가지로, GLSL 또한 source code가 compile되어 shader object로 만들어진 후에 program object에 link되어 사용된다. 하지만 C언어 프로그램은 […]

,

OpenGL graphics pipeline

Shader란 rendering pipeline (graphics pipeline)의 중간에 위치하여 어떠한 필요한 계산을 해주는 비교적 작은 크기의 programmable unit을 말한다. OpenGL에서 사용 가능한 shader의 종류는 다음 세 가지가 있다. 1. vertex shader (VS) 2. geometry shader (GS) 3. fragment shader (FS) 우선 OpenGL에서 사용하는 vertex의 개념부터 알아보자. Vertex란 한 점에 정의된 attribute들의 집합을 말한다. 예) location in space, […]

,

OpenGL framebuffer object

Framebuffer는 rendering의 최종 결과가 기록되는 buffer들의 집합이다. OpenGL context가 생성되면서 기본적으로 하나의 framebuffer를 생성하여 사용하는데, 이러한 default framebuffer를 window-system-provided framebuffer라고 부른다. 반면, 필요 시 임의의 framebuffer를 동적으로 생성하여 사용하는 것이 가능한데, 이렇게 생성된 framebuffer를 application-created framebuffer라고 하며, 일반적으로 framebuffer object (FBO)라고 한다. FBO는 display 외의 목적으로도 많이 사용된다. Buffer란 OpenGL이 관리하는 memory 영역을 말한다. (buffer=array=image) 이러한 […]

, ,

OpenGL texturing

,

OpenGL object

OpenGL object는 다수의 state를 저장하는 구조체이다. OpenGL object가 어떤 context에 연결되면, object가 저장하고 있는 state가 context의 state로 나타나게 된다. 따라서, context 상에서의 변경 내용은 현재 연결되어 있는 object의 상태를 변경하게 된다. 또한, context 상에서 수행하는 함수들은 현재 연결되어 있는 object에 저장되어 있는 상태를 기반으로 작동한다. OpenGL object를 사용하려면 우선 각 object 마다 고유한 이름이 필요한데, […]

,

DC (Device Context) & RC (Rendering Context)

OpenGL이 OS상에서 구동되려면 OS에서 제공하는 window에 연결되어야 한다. 만약 동시에 두 개 이상의 OpenGL applications가 실행되고 있다면 이들 사이에는 상호간 영향이 있어서는 안된다. (A application에서 색상이나 선의 두께를 조절하였을 때, B application에서도 그 결과가 나오면 안된다는 뜻이다.) OpenGL은 이러한 문제를 해결하기 위해서 rendering context (RC)를 사용한다. MFC 등과 같은 Windows programming을 해보았다면 device context (DC)라는 용어를 […]

,

OpenGL as a State Machine

State machine이란 state를 변경하는 명령을 받기 전에는 현재의 state를 계속 유지하는 machine을 말한다. OpenGL은 미리 정의되어 있는 유한개의 state들을 가지고 있으므로 finite state machine (FSM)의 일종으로 볼 수 있다. (실제로 유한개이긴 하지만 매우 많은 state들이 정의되어 있다.) 예를 들면, glColor3f(0,0,1)을 호출한 이후에는 또 다른 값으로 glColor3f(*) 함수를 호출하지 않는 한 모든 도형들이 파란색으로 그려지게 된다. […]

,

Maya custom node name and type id

A라고 불리는 custom Maya plug-in을 만들어서 사용하고 있었다. A에는 a라는 이름의 custom node가 있었다. 그리고, a 노드를 이용하여 제작한 aScene.mb 파일이 있다고 가정하자. 이 때, A를 보다 개선한 AA라는 custom Maya plug-in을 만들어서 사용하고자 한다. AA를 새로 배포하고 A를 삭제하였다. 과연 이 때, aScene.mb를 열면 a 노드는 어떻게 될까? 당연히 사라진다. 하지만 AA plug-in을 Load한 […]

, , ,

SELINUX

root 권한을 가지고도 chown, chmod로 소유권과 허가권을 바꿀 수 없도록 해주는 기능. 레드헷 계열의 리눅스인 경우 프롬프트에서 setenforce 0을 입력하면 selinux를 끌 수 있다. 만약 다음 부팅 후에도 영구적으로 selinux를 끄고 싶으면 /etc/sysconfig/selinux 파일을 열어서 SELINUX=enforcing 부분을 disabled로 수정한 후 저장하면 된다.

Previous Posts