본문 바로가기

Rim Light 이론과 구현 Rim Light = 역광 (Back Lighting) : 오브젝트 뒷면의 조명이 비춰서 오브젝트의 외각이 빛나는 듯이 보이는 현상(엣지 라이팅) 장점 1. 캐릭터와 배경의 구별을 명확히 한다 2. 물체의 외곽선을 살려준다 3. 빛을 받지 않는 부분의 디테일을 높여준다 4. 구현이 아주 간단하다' Fresnel (프레넬)공식을 사용한다. ViewDir을 이용하는데 이것은 버텍스에서 바라보는 카메라의 방향이다. Normal과 ViewDir을 dot 연산하게 되면 카메라가 조명처럼 인식되서 내가 바라보는 방향이 계속 밝아진다. 카메라가 조명인 것처럼 연산되었기 때문에 카메라를 회전해도 빛의 각도는 변하지 않는다. 이 결과를 뒤집어준다. Emissive = 1- fRIm 이렇게 하면 각도를 바꾸어도 외각이 밝..
Adaptation 구현 과정 Adaptation은 이론에도 나와있듯이 사람이 어두운 곳에 있다가 밝은 곳으로 나오면서 눈이 서서히 적응하게 되는 효과를 말한다. Adaptation을 구현하려면 먼저 HDR이 구현되어야 한다. Adaptation을 구현하기 위해서는 리소스를 저장할 Buffer 3개, Input을 위한 ShaderResourceView 3개, Output을 위한UnorderedAccessView 3개가 필요하다 픽셀을 DownScale 하기 위해 다음과 같은 Description을 가진 Buffer, ShaderResourceView, UnorderedAccessView를 만들어준다. 그리고 DownScale에서 구한 현재 프레임의 평균 휘도를 가지고 Adaptation을 해주기 위해 다음과 같은 Description..
C++ 기초 2 컴파일 과정 전처리기 -> 컴파일러 -> 어셈블러 -> 링커 값에 의한 전달 (Call by Value) : 함수를 호출하면서 파라미터를 넘길 때 값이 복제되어 전달된다. 참조에 의한 객체 전달 (Call by Reference) : 파라미터로 넘겨지는 객체가 복제되는 오버헤드를 피하기 위해 사용한다. 주소값만 복제되고 내용은 복제되지 않기 때문에 값에 의한 전달보다 효율적이다. 얕은 복사 (Shallow Copy) : 비트 단위 복제, 포인터가 가리키는 데이터는 빼놓고 피상적으로 그 변수값, 즉 주소값만 복제하는 것이다. 깊은 복사 (Deep Copy) : 포인터 변수값만 피상적으로 복제하지 않고 그 변수의 맥락에 맞게 연관된 데이터까지 재귀적으로 온전하게 복제하는 것이다. 클래스가 동적 할당 메모리를..
기하 셰이더 (Geometry Shader) 기하 셰이더 (Geometry Shader) : 기하구조를 동적으로 파이프라인에 추가하거나 제거하는 능력, 기하 정보를 스트림 출력 단계를 통해서 정점 버퍼로 넘겨주는 능력 그리고 입력된 기본도형과는 다른 종류의 기본도형을 출력하는 능력 등의 기능을 가지고 있다. 처리된 기하구조 자료를 파일로 저장하거나, 파이프라인 연산을 디버깅하는등의 용도로도 활용할 수 있다. 입력 기본도형들을 형성하는 일련의 정점들을 받는다. 이 정점들을 자신의 목적에 맞게 기본도형들로 재해석해서 출력 스트림 객체를 통해 파이프라인의 다른 단계로 전달한다. triangleadj : 이 배열이 인접 정보(adjacency)를 가진 삼각형을 나타낸다는 뜻이다. Hull Shader와 Domain Shader를 NULL로 설정해서 테셀레..
DirectX 11 기초 Device (ID3D11Device) : 셰이더 프로그램 객체, 자원, 상태 객체, 질의 객체 등의 생성을 위한 여러 메서드들을 제공 Device Context (ID3D11DeviceContext) : Device로 생성한 자원이나 셰이더 객체, 상태 객체를 파이프라인에 묶는 데 쓰인다. 렌더링 파이프라인과 계산 파이프라인의 실행을 제어하는 수단을 제공하고, Device로 생성한 자원을 조작하는 수단도 제공한다. Immediate Context : 파이프라인에 직접 연결되는 통로. 하나의 응용 프로그램은 단 하나의 Immediate Context만 사용할 수 있다. Device가 생성될 때 함께 만들어진다. Deferred Context : 주 렌더링 스레드 이외의 2차적인 스레드들이 보낸 일련의 명..
C++ 기초 #include : 헤더 파일을 여기에 포함시키는 기능이다 (전처리기) 실행 과정 : 컴파일 -> 빌드 -> 수행 컴파일 : 번역작업이다. Ctrl + Shift + B 를 이용해서 컴파일 및 빌드를 할 수 있다. C++ 표준 기능의 대부분은 std라는 namespace 안에 존재하고 있다. 이름이 겹치는 것을 방지해주기 위해서이다. cout : 콘솔 창에 출력해주는 기능이다. 뒤에 있는 ""안에 있는 문자들을 화면에 출력해준다. 문자를 여러개 사용할 때는 반드시 "" 안에 넣어주고 이런 것을 문자열 이라고 한다. endl : 개행 기능이다. 변수 : 변하는 수. 값이 바뀔 수 있다. 용량의 최소 단위 : bit 1byte = 8bit 1kbyte = 1024byte 1mbyte = 1024kbyte 1..
3D 애니메이션 이론 2 Animation Methods as Data Compression Techniques 가장 많이 쓰는 방법은 오브젝트 표면에 애니메이션 컨트롤용의 작은 포인트를 잡아주는 것이다.이렇게 하면 많은 양의 데이터가 잠재적으로 들어있는 애니메이션을 만들 수 있다 Joint는 직접적으로 조종되는 오브젝트다. 그리고 bone들은 심플하게 joint들 사이의 빈공간에 위치하게 된다. Joint Index는 애니메이션 데이터 구조 내의 Joint를 나타내기 위해 사용된다ex) Child Joint는 지정된 인덱스의 부모 Joint를 참조한다Skinned 메쉬에서 정점은 인덱스로 바인딩된 Joint를 나타낸다 Joint 구조체는 Joint의 이름, 부모 Joint의 인덱스, Inverse bind pose가 들어간다B..
Directx11 렌더링 파이프라인 Swap Chain : 렌더링된 내용물을 창에 표시하는데 쓰이는 실제 버퍼들을 추상화한 것 렌더링 파이프라인 입력 조립기 (Input Assembler)정점 셰이더 (Vertex Shader)덮개 셰이더 (Hull Shader)테셀레이터 (Tessellator)영역 셰이더 (Domain Shader)기하 셰이더 (Geometry Shader)래스터라이저 (Rasterizer)픽셀 셰이더 (Pixel Shader)출력 병합기 (Output Merger) 1. 입력 조립기 (Input Assembler) : 자원들로부터 입력 자료를 읽어 들여서 파이프라인의 이후 단계들이 사용할 정점들을 긁어모으는 작업을 담당한다. 취합한 정점들과 기본도형(Primitive) 연결성 정보를 다음 단계로 넘겨준다. 2. 정점 ..