왜곡효과
핵심 = 화면좌표를 구하기위해서는 월드뷰투영끝난 좌표(-1~1)에서 0~1로 바꿔주어야함
NDC 좌표계
로컬정점*월드뷰투영=NDC좌표계
- 정규 좌표계(NDCS : Normalized Device Coordinate System, 정규화 장치 좌표계)
* 정규화(normalization)란? : 어떤 값을 1을 기준으로 상대적으로 표시하는 행위
* 절단 좌표계의 동차 좌표(x,y,z,w)를 3차원 좌표(x/w, y/w, z/w, 1)로 변환하는 원근분할을 가한 좌표
-> 2D 정규 좌표(소수점 정밀도)
실제 화면에 출력될때는 NDC좌표를 NDC좌표의 w로 나누어서 Screen좌표로 변환을 해서 최종 Screen좌표를 구해주게 된다.
그래서 화면에서의 UV를 구하기 위해서는 w로 나누어준다음에 범위 -1~1좌표를 0~1로 변환해줘야한다.
노말텍스쳐
노말텍스쳐는 바라보는 방향을 기준으로 처리를 할것이다.
셰이더에서 가져온다면 0~1사이로 가져오게되는데
벡터는 -1~1이므로 -1~1이 되게끔 만들어준다. (0~1 2를 곱한다 -> 0~2 1을 뺀다 -> -1~1)
필터텍스처
색을 이용해서 Distortion을 먹이는 일종의 강도를 사용하는 텍스처
ex) 테두리는 검은색 가운데로갈수록 흰색으로 바뀌는 텍스처가 있다. -> 값이 더 커진다 -> 왜곡이 더 잘 먹을것이다.
UV교란
원본 UV가 존재할경우 이동시킨 UV를 뱉어내서 일렁이는듯한 효과를 보여주는것
전체적인 효과를 적용하는것을 포스트프로세스 후처리라고 부른다.
DistortionBuffer 정의
1. Weight ,Self (자기자신 또는 배경), Speed
준비
1. DistortionBuffer,Component를 준비한다.
2. RenderManager에서 m_DiffuseTarget(렌더타겟 전체화면용)를 준비한다.
3.화면 전체 혹은 일정부분 왜곡을 시키려면
인자로 들어온 ProjPos(월드뷰투영계산된 좌표) 이용해서 화면의 UV구하기(ProjPos/w) -> -1~1 -> 0~1
4.
과정
1. UV값을 가져오고 노말텍스처를 UV값을 토대로 가져온다.
(텍스처로부터 방향을 뽑아다가 쓰는 렌더링방식이 많이 사용된다. 노말텍스처 많이쓰임)
2. -1~1사이의 값으로 변경한다 이후 위에 상수버퍼로 저장한Weight(가중치)값을 곱해서 Weight를 구한다
3. 그만큼 UV에 방금 구한 Weight를 더해서 이동시킨다.
4. 소수점 이하 부분을 리턴한다.
'공부 > DirectX' 카테고리의 다른 글
| Texture (0) | 2021.09.28 |
|---|---|
| UI 구조 (인게임) (0) | 2021.09.27 |
| PaperBurn (0) | 2021.09.13 |
| ObjectComponent (0) | 2021.09.10 |
| 렌더타겟구조 (0) | 2021.09.09 |