본문 바로가기

분류 전체보기

(11)
02. 문제 해결 개관 2.1 도입 좋은 문제해결자가 되기 위해서는 문제를 푸는 기술을 연마해야한다. • 자신이 문제를 어떤 방식으로 해결하는지를 의식 • 어떤 부분을 개선해여하는지 파악 2.2 문제 해결 과정 1단계: 문제를 읽고 이해하기 문제 설명을 공격적으로 읽으며 문제가 원하는 바를 완전히 이해하는 과정 2단계: 재정의와 추상화 문제를 자신이 직관적으로 이해하기 쉽게 추상화하는 과정 3단계: 계획 세우기 어떻게 해결할 것인지 계획을 수립하는 과정 4단계: 계획 검증하기 설계한 알고리즘이 모든 경우에 요구 조건을 정확히 수행하는지 증명하고, 수행시간과 사용하는 메모리가 제한조건에 만족하는지 확인하는 과정 5단계: 계획 수행하기 프로그램을 작성하는 과정 6단계: 회고하기 자신의 문제 해결 과정을 돌이켜보고 개선하는 과정 문..
알고리즘 문제해결 전략 프로그래밍 대회에서 배우는 알고리즘 문제해결 전략
환경매핑(실습) 1. 환경매핑(environmental mapping) 물체의 표면에 다른 물체나 배경이 반사되는 것을 볼 수 있습니다. 표면이 입사광을 모두 흡수하지 않고 반사한다면 그 물체가 비쳐보이는 효과가 나타납니다. 이때, 표면에 반사되는 것을 계산하기 위해서는 원래 물체의 정반사광과 난반사광을 구해야 합니다. 이런 작업이 계속된다면 빛의 반사를 끝없이 구하여야하며, 실시간 렌더링에서는 어렵습니다. 따라서, 현실의 물리적 작용을 모두 구현하는 것이 아닌 속임수를 써러 그와 같은 효과처럼 보이게 하는 기법을 사용합니다. 환경매핑 : 거울처럼 주위 환경이 표면에 반사되는 것을 재현하는 기법 환경매핑의 원리는 주위환경을 미리 텍스처 안에 저장해 놓고 실행할 때 실시간으로 그 텍스처를 입힙니다. 상하, 좌우, 전후 6..
패럴랙스매핑(parallax mapping)&&패럴랙스오클루젼매핑(parallax occlusion mapping) 법선매핑의 문제점은 법선맵이 입혀진 측면에서 표면을 볼 때 입체감이 없다는 것입니다. 이 문제점을 해결하기 위해 고안된 기법이 패럴랙스매핑입니다. 높이맵(height map)을 이용하여 문제를 해결합니다. 패럴랙스 오클루젼 매핑(parallax occlusion mapping) : 인접픽셀과 높이차를 구한 뒤 그에 따라 그림자를 입히는 기법
법선매핑(실습) 1. 법선매핑(Normal Mapping) 일반적으로 물체가 실체와 비슷에 보이기 위해서는 폴리곤의 수를 늘려서 실체와 비슷한 모델로 만듭니다. 테셀레이션(tesellation) 기법 : 실제 폴리곤 수를 높이는 방법 하지만, 정점의 수가 많아질수록 처리 속도가 느려지고, 정점버퍼의 메모리 소모도 커집니다. 따라서, 폴리곤의 수를 늘리지 않고도 디테일을 추가할 수 있는 방법으로 법선매핑이 있습니다. 법선이 어떻게 정의되느냐에 따라서 표면의 굴곡을 나타낼 수 있습니다. → 각 텍셀에 법선을 저장시킴 법선맵(normal map) : 각 픽셀이 사용할 법선정보를 담고 있는 텍스처 법선매핑(normal mapping) : 법선맵을 이용해서 조명을 계산하는 기법 2. 법선맵(Normal Map) 법선(Normal..
툰 셰이더(실습) 1. 툰 셰이딩(Toon Shading) 툰셰이딩(Toon Shading = Cell Shading) : 만화 같은 명암을 입히기 위해서 난반사광을 단계적으로 줄어들게 만든 셰이딩입니다. 주전자 모델을 사용하기 위해 모델을 바꾸겠습니다. [ ※ ] Model → (오른쪽) → Change Model → "Teapot.3ds" 설정을 하면 다음과 같은 주전자 모델이 보입니다. // Vertex Shader float4x4 gWorldViewProjectionMatrix; // 월드 x 뷰 x 투영 float4x4 gInvWorldMatrix; // 월드 행렬의 역행렬 float4 gWorldLightPosition; // 광원 위치 벡터 struct VS_INPUT { float4 Position : PO..
디퓨즈/스페큘러 매핑(실습) 1. 디퓨즈 맵 // Vertex Shader float4x4 gWorldMatrix; float4x4 gViewMatrix; float4x4 gProjectionMatrix; float4 gWorldLightPosition; float4 gWorldCameraPosition; struct VS_INPUT { float4 mPosition : POSITION; float3 mNormal : NORMAL; float2 mUV : TEXCOORD0; }; struct VS_OUTPUT { float4 mPosition : POSITION; float2 mUV : TEXCOORD0; float3 mDiffuse : TEXCOORD1; float3 mViewDir : TEXCOORD2; float3 mRefle..
기초 조명셰이더(실습) 1. 난반사광(Diffuse Light) 다음의 코드는 람베르트 모델(Lambert Model)을 사용하여 난반사광을 계산해 내는 코드입니다. 난반사광은 Vertex Shader나 Pixel Shader에서 계산하는 결과값은 비슷하지만 효율을 위해 계산이 적은 Vertex Shader에서 계산합니다. // Vertex Shader float4x4 gWorldMatrix; float4x4 gViewMatrix; float4x4 gProjectionMatrix; float4 gWorldLightPosition; // 광원의 위치 struct VS_INPUT { float4 Position : POSITION; float3 mNormal : NORMAL; // 법선(Normal) 벡터 -> 각 정점버퍼에 저장..