Shader

[Shader] Fog with SkyBox

HungryK 2025. 5. 8. 01:06

f

공부용으로 작성되는 페이지입니다. 틀린 부분이나 환경에 따라 오류가 발생할 수 있습니다. 

 


 

해당 예제는 유니티의 Built-in 코드를 기반으로 작업하였다.  

 

 

이것은 수정하기전의 모습이다. World 전체에 Fog Lighting이 적용되지 않는 것이 확인된다. 

 

기존의 코드에서 수정한 부분들 

위에서 언급한 Fog 관련 처리 및 include할 HLSL 파일들 수정이 주로 이루어졌다. 기존 코드는 CG기반이기에 HLSL로 수정 작성하면서 필요해진 작업이다. 즉, 본래 사용되었던 내장함수들을 사용할 수 없기 때문에 추가하거나 대체해줄 필요가 있었다. 

 

1. Unity_PI  

PI는 우리가 알고있는 파이(x) 즉 3.14이다. URP에서 내장되어있지 않으므로 직접 추가해주었다. 

 

2. UnityObjectToClipPos 

공간 변환 관련 행렬들은 URP에도 내장되어있지만 이름이 전부 변경되었다. 

UnityObjectToClipPos의 경우 TransformObjectToHClip 로 변경해준다. 

 

3.ComputeFogFactor()

안개(Fog) 효과를 구현할 때 사용하는 내장 함수로, 주어진 깊이 값(Z)를 기반으로 안개의 강도를 계산하며 안개가 카메라로부터의 거리나 깊이에 따라 계산해주는 역할을 한다. 

 

4.unity_ColorSpaceDouble

Unity PI와 마찬가지로 직접 작성해주었다. 컬러스페이스에 따라 색상 보정을 하는 역할을 한다.

이 부분은 아래에 참고한 레퍼런스의 내용대로 작성하였따. 

에러가 났던 부분

o.fog_coord = ComputeFogFactor(o.vertex.z);

 

참고한 블로그대로 작성했을 때, z축을 기준으로 설정하면 화면 전체가 아니라 중앙이 빈 것처럼 적용되는 오류가 있었다.

따라서 나는  fogDensity를 더해주었다. 이는 유니티 내의 fog 세기와 동일하다. 

 

그리고 ColorSpaceDouble의 경우 내장함수인 SRGBToLinear(); 를 사용할 수 있는 것도 확인하였다. 

 

결과물 

일반 skybox : 오브젝트만 노랗게 되는 것을 확인

 

skybox fog : 전체가 노랗게 변하는 것을 확인

 

결국 오브젝트에만 적용되느냐, skybox 전체에 적용되냐의 차이이다 

 

참고자료 

Fog가 적용되는 Skybox의 셰이더 만들어보자!

 

Fog가 적용되는 Skybox의 셰이더 만들어보자!

서론 배경 아티스트 분께서 Skybox에 Fog를 표현하고 싶다고 요청한 적이 있다 배경 오브젝트에는 Fog가 걸리지만 그 뒤의 Skybox에는 Fog가 생기지 않아서 위화감이 생긴다는 이유였다 당시의 필자는

wincnt-shim.tistory.com

Pi(π) | Visual Effect Graph | 10.8.0

 

Pi(π) | Visual Effect Graph | 10.8.0

Pi(π) 메뉴 경로: Operator > Math > Constants > Pi (π) Pi (π) 연산자는 숫자 Pi(π)를 반환합니다. 이는 원의 둘레에 대한 지름의 비율입니다. 연산자 프로퍼티 Output 타입 설명 π float Pi 값입니다. Mathf.PI와

docs.unity3d.com

 

 

Unity - Manual: Use built-in shader functions in the Built-In Render Pipeline