Develog
로그인

[Unity] URP 물 거품 버그 해결

muchan
muchan
∙2026년 8월 24일∙조회 12
Unity
[Unity] URP 물 거품 버그 해결
유니티 공부 기록
본문 로딩 중...
이전 글[Unity] SerializeReference
다음 글[Unity] 데칼 프로젝터
0
muchan

게임 버그도 콘텐츠입니다.

새 글이 올라오면 Develog 알림으로 알려드려요

댓글 0

문제

Orthographic 카메라에서 물과 실제로 닿지 않은 산이나 오브젝트에도 거품이 생기는 문제가 있었다.

원인은 기존 셰이더가 화면상의 깊이 차이로 접촉 여부를 판단했기 때문이다. 월드 공간에서는 떨어져 있어도 화면에서 물과 겹치면 접촉한 것으로 인식했다. (산 윗부분을 보면 거품이 생긴다.)

해결

Depth Texture에서 지형의 월드 좌표를 복원하고, 지형의 Y 높이가 실제 수면 높이와 가까울 때만 거품이 생기도록 변경했다.

hlsl
half heightMask =
    1.0 - saturate(
        abs(scenePositionWS.y - waterHeightWS)
        / _FoamHeightRange);

물보다 카메라 앞에 있는 오브젝트도 거품 판정에서 제외했다.

hlsl
half isBehindWater =
    step(0.0001, sceneEyeDepth - waterEyeDepth);

거품 경계에는 step() 대신 smoothstep()을 사용해 자연스럽고 부드럽게 표현했다.

결과

화면에서만 물과 겹치는 오브젝트에는 거품이 생기지 않고, 실제 수면 높이에 가까운 해안선에만 자연스럽게 거품이 표시된다.

 

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요.

관련 글

[Unity] 제네릭의 컴파일

[Unity] 제네릭의 컴파일

ㅇㅇ

10월 7일42
[Unity] 제네릭과 가변성(variance)

[Unity] 제네릭과 가변성(variance)

제네릭과 가변성

10월 6일821
[Unity] IEnumerator 개요

[Unity] IEnumerator 개요

코루틴에이저포에버

10월 6일4
[Unity] 제네릭의 컴파일
Unity

NEW[Unity] 제네릭의 컴파일

ㅇㅇ

KYO
KYO
420
KYO
KYO
∙10월 7일
420
[Unity] 제네릭과 가변성(variance)
Unity

[Unity] 제네릭과 가변성(variance)

제네릭과 가변성

KYO
KYO
821
KYO
KYO
∙10월 6일
821
[Unity] IEnumerator 개요
Unity

[Unity] IEnumerator 개요

코루틴에이저포에버

KYO
KYO
400
KYO
KYO
∙10월 6일
400