공부/Unity

24.05.16

월러비 2024. 6. 9. 11:05

새로 생성한 스크립트

  • Warp_Cursor : 워프 커서 생성 기능

 

  • 워프에 이용할 좌표를 가져오기 위해, 마우스포인터 좌표를 화면에 출력
  • Warp 스크립트 수정

투영과 역투영(Projection, UnProjection)

  • 트라이앵글 리스트(로컬좌표) →IA → VS(WVP 변환) → RS(Vp → 이때 픽셀을 뷰 공간에 그린다.) → Ps → oM(Output Merge) → BB(Back Buffer)
    • 월드(W) : 회전 가능한 직육면체로 표시된다. (월드좌표)
    • 뷰 : 카메라의 위치와 방향을 표시한다. (카메라가 나가는 공간이 보이도록 표시된다.)
      • 카메라 바로 앞 : 니어(near)
      • 카메라가 표시할 영역의 끝 : 파(far)
    • 프로젝션 : 뷰공간에 보일 영역 투영
    • WVP 변환 이후 직육면체는 회전이 불가능하게 표시된다. ⇒ 우리가 화면에 표시해야 하기 때문이다.
      • 이 과정은 RS에서 실행되고 Vp 과정이다.
      • 이 직육면체 표시 방법을 ‘NDC’라고 한다.
      • 직육면체의 표시는 ‘Nomalize’된 좌표다. ⇒ -1 또는 1로 표시된다.
    • 이후 이 직육면체가 2D로 변환된다. ⇒ Projection 이라고 부른다.
      • Ps 과정에서 진행된다.
  • A * B = AB * B^-1 = A
    • L * (W * V * P) * VP = L * WVP * VP → Projection(3D → 2D) = L * (WVP)^-1 * VP^-1 → UnProjection(2D → 3D) = L

Camera.main.ScreenPointToRay(Input.mousePosition)

  • 투영(Projection) 역행렬(역순) 과정이다.
  • 2D의 마우스 포인터를 3D로 변환하여 Ray로 가져온다.

 

  • ScreenPointToRay / 지파이팅 이론 설명
  • Warp 스크린포인트 레이 수정 / 마우스포인트 레이 출력 함수를 따로 만듬

Camera.main.ScreenPointToRay(Input.mousePosition)

  • 투영(Projection) 역행렬(역순) 과정이다.
  • 2D의 마우스 포인터를 3D로 변환하여 Ray로 가져온다.
  • 이 역변환은 로컬좌표까지는 가진 않고 월드 좌표까지만 간다.

지파이팅(z-Fighiting)

  • 오브젝트가 겹쳐질때 텍스처가 깨지는 현상을 의미한다.
  • 각 픽셀은 0~1로 표시된다.
    • 각 픽셀은 그려지는 깊이(z값)가 있고 니어(near)에 가까울수록 깊이가 작아진다.
    • 뷰공간에 표시는 ‘깊이가 작은’ 픽셀이 표시된다.
      • 가까이에 건물이 있고 멀리에 사람이 있을떄 사람이 건물에 가려지는 것을 생각해라
    • 만약, 오브젝트의 좌표가 겹칠때 깊이를 비교하여 더 작은 픽셀의 깊이를 가진 오브젝트가 겹친 공간에 표시된다.
  • 위의 과정은 Output Merge (OM) 과정에서 진행된다.
  • BB 과정에서 두 오브젝트가 겹치면 두개의 오브젝트를 그리고 겹친부분은 깊에비교에 따라 매 프레임마다 지워지고 그려지고를 반복하기 때문에 오브젝트가 겹치면 화면이 계속 깜빡이는 이유이다.
    • 이 과정을 ‘싱글버퍼’라고 한다.
    • 해결책 : 해당 화면을 그릴 버퍼를 하나 더 그린다.
      • 1번 버퍼가 겹칠 동안 2번 버퍼에 다시 그린다.
      • 양쪽 버퍼를 번갈아가면서 출력하면 끊김 없이 게임화면이 출력된다.
      • 이 해결책을 ‘더블 버퍼링(Double Buffering)’이라고 한다.

 

  • 투영되어 비추는 쉐이더 / 극장 조명 이론 설명
  • UnitTest 용으로 Decal 쉐이더를 이용하여 마법진처럼 그릴 수 있는 테스트를 진행 / SpotLightProxy 쉐이더를 이용하여 ‘워프 커서 프리펩’을 생성

RTV

  • PS 과정에 속하는 과정이다.
  • 화면에 두 오브젝트가 겹칠 때 화면에 출력할 색을 보여주는 과정이다.

URP Decal Projector - 컴포넌트

  • 투영공간에 그려주는 텍스처 = Projection Texture
  • 마법진 그릴때 사용한다.

SpotLightProxy - Shader

  • 극장 조명처럼 머리 위부터 바닥까지 원형으로 비추는 조명
  • Projection Depth가 커질수록 다른 오브젝트를 비출때 바닥부터 조명까지 겹치는 비율을 조정할 수 있다.

 

  • 이전 시간에 만든 ‘워프 커서 프리펩’을 전전 시간에 가져온 마우스 위치에 소환하는 기능
  • Warp - 워프 커서 소환 기능 수정 (미완성) / 벽에 워프 커서가 안붙어서 회전 넣는 시간이 좀 걸림

'공부 > Unity' 카테고리의 다른 글

24.05.20  (0) 2024.06.09
24.05.17  (0) 2024.06.09
24.05.14  (1) 2024.06.09
24.05.13  (0) 2024.06.09
24.05.10  (0) 2024.06.09