DX (49) 썸네일형 리스트형 Bloom Filter 와 Post-Processing 정리 기본 시스템 구조Copy Filter최종 화면부터 생성한 그래픽스 결과를 사본으로 관리Downsampling + Threshold BuildFilters 함수 중에// 해상도를 낮춰서 다운 샘플링 auto copyFilter = make_shared(m_device, m_context, L"Sampling", L"Sampling", m_screenWidth, m_screenHeight); copyFilter->SetShaderResources({m_shaderResourceView}); m_filters.push_back(copyFilter); auto downFilter = make_shared( m_device, m_context, .. Post Processing 3D 렌더링 이후에 화면에 다양한 효과를 적용하는 "후처리(Post Processing)"는 게임 그래픽스에서 아주 중요한 파이프라인입니다. 이번 글에서는 이미지 필터 클래스를 활용해 후처리 필터를 구현하는 구조와 개념을 차근차근 살펴보겠습니다. 1. 이미지 필터 클래스 구조다양한 쉐이더를 효율적으로 관리하기 위해 ImageFilter 클래스가 사용됩니다.생성자에서 버텍스/픽셀 쉐이더의 접두사(prefix)를 설정하면 쉐이더 파일명을 자동으로 결정합니다. 2. 후처리용 텍스처 초기화일반 모델 텍스처와 다르게 클램프(Clamp) 모드 사용Depth Buffer는 불필요하므로 비활성화이미지 해상도는 자유롭게 조절 가능고품질 처리를 위해 R32G32B32_FLOAT 혹은 128비트 float 포맷 사용 3. .. fresnel 효과 fresnel 효과?빛이 물체 표면에 닿을 때, 시야각(=입사각)에 따라 반사되는 빛의 양이 달라지는 현상 아래 사진을보면 멀리 있는 수면 위에는 나무가 그려진다. 가까이 있는 수면 그러니까 시선과 수직에 가까운 수면에는 물고기가 그려진다. 이것이 fresnel 효과이다. 이 효과를 적용할 때 일단은 빛의 굴절은 적용하지 않는 것으로 한다.fresnel 함수를 보면 물질의 고유 특성과 노멀 값, eye pos 로 구현한다. 픽셀로 시선과 노멀을 내적으로 해서 가까운지 멀리있는지에 따라 값을 바꾸도록 f0 를 만든다.return 에서 내적의 결과에 따라 가까울수록 물체의 고유 성질 fresnelR0 만 적용하고 멀리 있으면 f0 값이 더욱 많이 적용되도록 한다. float3 SchlickFresnel(.. 이미지 기반 라이팅 현실같이 복잡한 조명 상황을 만들기에는 퐁 쉐이딩 만으로는 무리가 있다. 그래픽스에서는 텍스처를 잘사용하는 방식으로 성장 중이다. 그래서 환경맵 자체를 조명으로 사용하도록 만들기 시작함. 그래서 아래처럼 다양한 방향에서 샘플링 해온다음에 평균을 내기도함. 다만, 이건 게임에는 못씀. 연산이 너무 많기 때문임 그래서 게임에서는 다른 방식을 사용함. 텍스처를 미리 저 평균처럼 만들어 놓는 것.아래 사진은 각 디퓨즈와 스펙큘러다. 저 위에 평균을 이용해 텍스처에 각 라이팅 정보를 넣어두고 다양한 텍스처를 사용하는 것이다. 사용할 리소스 뷰를 디퓨즈와 스펙큘러 용으로 나눠서 추가한다.// 물체 렌더링할 때 큐브맵도 같이 사용ID3D11ShaderResourceView *resViews[3] = { me.. 환경 매핑(반사 매핑) 환경 매핑 배경의 텍스처를 오브젝에 매핑하는 것을 의미한다.아래 사진은 배경의 반대편 모습을 구체에 담아낸 것이다. 이 반사매핑을 이용하면 배경과 모델의 라이팅 분위기를 매칭 시킬 수 있다. 느낌이 비슷해짐. 구현 방식은 그냥구체의 각 정점의 노말 벡터로 RayTrace 해서 색을 가져와 해당 vertex에 맞는 픽셀에 샘플링하면 된다. 그러니까 Render 함수에서 물체를 그릴때 2가지 리소스 뷰를 넘겨준다.PS 에서 텍스처를 하나 더 추가. 그리고 리턴 시 큐브 맵으로부터 샘플링한다. 이동은 적용되지 않도록 normalWorld 를 기준으로 샘플링한다.Texture2D g_texture0 : register(t0);// TODO:TextureCube g_textureCube1 : register(.. 큐브 매핑 큐브 맵(Cube Map)이란?큐브맵은 정육면체 6개의 면에 이미지를 입힌 텍스처 형태이 6면을 통해 360도 전 방향을 표현할 수 있어서, 주로 환경 반사, 하늘, 광원 효과, 스크린 프로브 등에 사용 큐브 맵 같은 특수 텍스처를 사용하기 위해 DDS 파일 형식을 사용한다. DDS 파일이란?DDS (DirectDraw Surface)는 마이크로소프트가 만든 텍스처 전용 파일 포맷으로,DirectX에서 그래픽 텍스처로 빠르게 사용하기 위해 설계된 압축된 바이너리 포맷입니다. 큐브 맵 전용 구조체. 큐브 맵은 렌더링 하고 싶은 세상을 감싸는 것이기 때문에 박스 메쉬를 가지고 있어야한다.dds 파일로부터 큐브 맵 텍스처를 만들고 그 텍스처를 쉐이ㅏ더에 넣어줄 수 있도록 쉐이더 리소스 뷰를 만들어 저장.us.. Rim Lighting 실습 Rim Lighting은 물체의 가장자리에 빛을 비추는 효과로, 실루엣에 빛나는 테두리처럼 보이게 만들어 형태를 강조하고 입체감을 살리는 데 사용한다. 구현 방법. 정점의 노멀 벡터와 카메라가 바로보는 방향벡터를 내적 했을 때 0에 가까울=수록 가장자리 부분이므로 이 성질을 이용해서 가장자리에만 추가 색을 부여한다. 색을 넣는 작업이기 때문에 PS 에서 적용한다.cbuffer BasicPixelConstantBuffer : register(b0){ float3 eyeWorld; bool useTexture; Material material; Light light[MAX_LIGHTS]; float3 rimColor; float rimPower; float rimSt.. 구 매핑 서브디비전은 원본 모델이 얼마나 형태를 잘나타내느냐에 따라 더욱 정교한 폴리곤이 나온다. 구에 텍스처를 매핑 할 때 조심해야할 것. 일반적인 이미지 형태의 텍스처를 구에 매핑하면 문제가 생길 수 있다.이음매 부분에서 잘못 매핑되어지는 문제가 생기는 것이다. 텍스처 맵핑에 필요한 텍스처 좌표를 버텍스의 좌표로부터 역산정해서 사용하는 UV 계산 방식을 사용하면 문제가 생긴다. 그러니까 서브디비전으로 새로 생긴 폴리곤들은 지도의 양끝 이음매 부분에서 문제가 된다. 만약 양끝을 이루는 삼각형이 생겼다면? 그럼 중간에 저 큰 지도를 인터폴레이션하게되어 그것을 폴리곤의 색상이 되는 문제가 생기는 것이다. 이럴 때는 텍스처 좌표 UV 계산을 ps 에서 진행하면 된다. 코드를 보면 UV 즉 texcoord .. 이전 1 2 3 4 ··· 7 다음