Wanho Choi

CG/VFX Software Engineer

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로 수정한 후 저장하면 된다.

GRUB single mode booting

1. 부팅과정의 grub 메뉴에서 e를 누른다. 2. edit 화면에서 화살표키로 “kernel /boot/vmlinuz….”를 선택한다. 3. e를 누르면 명령어 편집을 할 수 있는데 맨 마지막에 한 칸 띄우고 single을 입력한 후 엔터를 친다. 4. b를 눌러서 부팅한다.

, ,

Installing Nvidia Driver on CentOS 6.x

CentOS 6.x에서는 nouveau라는 graphic card driver가 기본적으로 설치된다. nouveau: accelerated open source driver for nVidia cards (http://nouveau.freedesktop.org) nouveau는 부팅 시에 여러 가지 이펙트를 가능하게 하는 프레임버퍼 모듈이다. nouveau의 문제점은 nVidia graphic card driver와 충돌을 발생한다는 점에 있다. 즉, http://www.nvidia.com에서 최신 드라이버를 다운받아 설치할 때 에러가 발생한다. 만일 nVidia graphic card driver를 설치하고 싶다면 다음과 같은 과정을 […]

, ,

yum install mplayer on CentOS 6.x

yum을 이용하여 mplayer 설치시 다음과 같은 error가 발생한다면… Error: Package: mpg123-1.14.4-1.el4.rf.x86_64 (rpmforge) Requires: libltdl.so.3()(64bit) You could try using –skip-broken to work around the problem You could try running: rpm -Va –nofiles –nodigest 설치 전에 다음과 같이 해주면 된다. yum clean all rpm -Uhv http://repo.bstack.net/RPMforge/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

, ,

Previous Posts