250120

RTFM·2025년 1월 20일

개발 일지

목록 보기
57/350

✅ 오늘 한 일


  • 대마왕의 유니티 URP 셰이더 그래프 읽기
  • Random Study : 블랜더 공부, Project 2P


📖 대마왕의 유니티 URP 셰이더 그래프


Gerstner Wave (거스너 웨이브) 만들기

Gerster Wave는 sine wave보다 좀 더 그럴듯한 품질을 가진 파도를 표현할 수 있다.
X좌표를 cosine으로 이동시켜 뾰족한 모양의 파도를 만든다.

  • X를 따로 떼어낸 뒤, 이전에 계산했던, 시간에 따라 달라지고 파장과 높이를 조절했던 X좌표를 cosine에 넣은 뒤 더해주고 다시 X 좌표에 넣는다.
  • x와 y의 미분값을 통해 Tangent를 구하고, Tangent로 Normal을 구한다 (사진 생략)

의문해결
이렇게 하면 X가 움직여야 하는거 아닌가 했는데, 움직이는게 맞았다. 끝 부분 보니까 생겼다가 사라지는 부분이 생긴다. 0.09를 곱해주기 때문에 변동폭이 크지 않았고, 삼각함수라 순환하기 때문에 쭉 가지 않아서 그랬던 것.

거스너 웨이브를 서브 그래프로 만들고, 이전에 만든 물과 합친다.

04 굴절

이전에 했던 것처럼

  • Base Color를 검은색으로 만들고
  • Scene Color에 Scene Position를 연결하고 Emission에 넣어주면 투명해진다

물에 사용했던 노말맵에 아주 작은 값을 곱해서 Scene Position에 더해주면 굴절이 일어난다.
이렇게 하면 물에 잠긴 하반신 뿐 아니라 상반신 뒤에도 굴절이 일어나는데, 해결하려면 물에 잠긴 부분을 구분하는 복잡한 과정이 필요해서 보통 여기까지는 해결 안 한다.

05 뎁스(Depth)를 이용한 투명과 깊이

물은 깊어질수록 불투명해지고, 땅과 맞닿는 부분은 투명하다.

Depth Fade를 이용해서 경계면을 부드럽게 만든다.

기존 셰이더에서 Alpha 값에 Depth Fade를 넣어주면 경계면 부분이 부드럽게 연결된다

  • Depth Fade로 지면과 가까운 부분(0에 가까움)과 물이 깊은 곳(1에 가까움)을 나누고, 그걸 Lerp에 넣는다.
  • Lerp로 지면과 가까운 부분은 Scene Position과 Scene Color로 투명하게 표현된 부분이 드러나게, 물이 깊은 곳은 Color 단색이 드러나게 한다.
  • Fresnel 효과로 또 다시 Lerp하여 이전에 구현했던, 지면과 가까운 부분의 굴절이 심해지는 효과와 합쳐준다.
  • (삽질) 왜인지 모르겠는데, 결과를 Smoothness에 넣어놓고 왜 색깔이 이상하게 보이지? 이러고 있었다.

06 마무리와 응용

Unlit으로 변환하기

원래 Lit 셰이더에 있던 Metalic이나 Smoothness는 하나도 사용하고 있지 않는데 들어가 있다.
사용하지도 않는 연산이 가동 중이니, 깔끔하게 Unlit으로 만들어준다.
대신 Specular는 나중에 더해줘야 함.

Alpha 사용하지 않게 만들기

Depth Fade를 Alpha에 연결해서 투명도를 만드는 건 옳지 않다.
이미 Scene Color를 통해 투명도를 표현하고 있기 때문.
여기에 다시 Alpha를 이용해서 추가로 투명하게 할 필요가 없다.

그런데 Depth Fade를 통한 투명도를 알파 블렌딩으로 표현하면 굴절된 다리와 투명도로 인해 굴절되지 않은 다리가 겹쳐서 2개로 보이게 된다.

앞서 이미 물 깊이에 따른 투명도를 만들면서 투명도처럼 보이는 불투명 기능을 다 만들어놓았기 때문에, 이전 결과물에서 알파를 끊어주기만 하면 된다.

이렇게 되면 다리는 굴절되는데 Depth Fade는 굴절되지 않는다. Depth Fade도 다리와 같이 굴절되게 만들어야 한다. 이를 위해 굴절 연산을 적용한 Screen Position 값을 Scene Depth의 UV에 넣어준다.

응용 및 마무리

스페큘러가 없기 때문에 추가해주고

Transparent라 로봇까지 그린 후 Screen Color를 받아오기 때문에, 물 밖의 로봇도 같이 굴절되는 현상이 일어난다.

Comparison 노드로 Depth Fade가 0보다 크냐 작냐를 통해 물보다 카메라에 가까이 있다면 굴절 없이 그냥 그려준다.



🎮 Random Study


Modeling in Blender (Part 1/5)

https://www.youtube.com/watch?v=_Iu88tZ9utE&list=PLQk3p-aJsSWTKKmuFwnzEVaf3ovKIg1jx&index=3

Edit > Preferences > Navigarion > Orbit Around Selection : 선택된 물체를 중심으로 회전
우측 상단 화살표 > Backface Culling : 앞쪽면만 보이게 설정 (유니티와 동일하게 보이게)

Num패드에 있는 . : 선택된 물체로 카메라 이동
물체 선택 > 우클릭 > Set Origin > Origin to 3D Cursor : 물체 피벗 설정

Tab : Edit 모드
A : 모든 오브젝트 선택
X : 삭제
Z : 렌더링 모드 변경
Shift+N : 노말 반전
Shift+S : 커서 위치 고르기

Cavity : 뷰포트 셰이딩(Viewport Shading) 옵션의 한 부분으로, 모델의 오목한 부분과 돌출된 부분의 조명을 조정하여 강조

Normals tab이 없길래 검색해봤더니 사라졌다고 함. 우클릭 > Shade Auto Smooth 하면 되는듯
https://blender.stackexchange.com/questions/316985/missing-normals-in-data

Project 2P

방 만듦
내일은 가구 채워넣기



0개의 댓글