티스토리 뷰
Part10. Lit Shader Graph를 이용해 봅시다
1. Lit Shader
지금까지 사용해왔던 UnLit 셰이더를 뒤로 하고, 이제 Lit 셰이더에 대해 알아보도록 하자!
Lit Shader란?
Unity의 URP 또는 HDRP에서 사용하는 물리기반 셰이더이다.
물리 기반 셰이더란 기존의 구형 라이팅 시스템과 달리 주변 환경에 따르 재질의 변화를 물리 법칙에 입각하여 실시간으로 계산해서 표현해 줄 수 있는 재질의 표현 방식이다.
조명, 그림자, 반사, 금속성, 거칠기 등을 자동으로 처리해주는 듯 하다.
지금부터 릿 셰이더를 생성하고 사용해보도록 하겠다.
생성하면 나오는 필드들
확실히 Unlit 셰이더 보다는 이것저것 많이 들어간 모습이다.
2. Lit Shader Graph 사용하기
총을 하나 준비한다.
https://assetstore.unity.com/packages/3d/props/guns/sci-fi-pistol-pbr-213679
Sci-fi Pistol [PBR] | 3D 총기 | Unity Asset Store
Elevate your workflow with the Sci-fi Pistol [PBR] asset from StarGames studio. Find this & other 총기 options on the Unity Asset Store.
assetstore.unity.com
그냥 꺼내면 공포의 분홍 프리펩이 나오는데, 여기 Lit Shader 로 머티리얼을 만들어서 일괄 적용시켜준다.
Base Color에 텍스쳐도 연결해준다.
이제 Lit Shader의 Fragment 필드들에 대해 알아보도록 하자
2.1 메탈릭(Metallic) 과 스무스니스 (Smoothness)
메탈릭은 이 재질이 금속이냐 아니냐를 결정하는 부분이다.
0이면 비금속, 1이면 금속 재질이 된다.
금속은 대부분의 빛을 흡수하지 않고 표면에서 컬러 반사한다.
비금속은 빛이 표면에서 일부 반사되고, 나머지는 표면 안으로 흡수되어 다시 확산된다.
스페큘러는 광원이 반사되어 눈에 보이는 반짝임을 말한다.
금속일 때 스페큘러는 물체 고유의 색을 나타내고, 이는 Bace Color를 의미한다.
비금속일 때 스페큘러는 주로 흰색, 회색이다.
금속은 정면과 기울어진 면의 반사차가 크지 않지만
비금속은 기울어질수록 반사가 강해진다.
Smoothness는 이 재질의 매끄러움/ 거침 여부를 결정하는 부분이다.
0이면 거칠어서 난반사만 일어나고, 1이면 매끄러워서 정반사만 일어나게 된다.
거친 표면에서는 스페큘러가 적어 보인다.
왼쪽의 메탈릭 텍스쳐를 보면
이런식으로 어느 부분이 금속이고, 비금속인지 흑백으로 나타내고 있다.
오른쪽은 메탈릭 텍스쳐의 A 채널인데, 스무스니스를 나타낸다.
이렇게 연결해주면
왼쪽은 메탈릭을 적용한 모습, 오른쪽은 스무스니스까지 다 적용한 모습이다.
감마 코렉션의 원리에 따르면 sRGB를 체크 해제해서 Linear 텍스쳐로 만들어 주어야 할 텐데, 위에서는 하지 않았고 해도 별 차이가 없다.
이건 모르겠어서 챗지피티한테 물어봤더니,
체크를 안 해도 내부에서 Linear 샘플링 처리를 한다고 한다. 하지만 체크 하는게 권장이라고 함
틀린 정보라면 말해주세요,,,
2.2 노말맵 (Normal Map)
노말맵이란, 실제 디테일이 없는 부분을 디테일이 있는 것처럼 보이게 만들기 위한 눈속임 맵이다.
텍스쳐 타입 "Normal map" 확인
텍스쳐 연결해준다.
Normal Strength 라는 노드로 노말맵의 강도를 조절할 수도 있다.
씬에서 확인해보면
이거보고 좀 디테일해졌나?... 내 눈으로는 아트하면 안되겠다 암튼 더 괜찮아진다니까 그런거겠지.. 하고 넘어가려다가
노드 타입이 노멀이 아닌걸 발견했다!!
이렇게 해주어야 한다ㅠㅠㅠ
다시 결과를 보면
이제 진짜 제대로 적용된 것 같다.
2.3 엠비언트 오클루젼 (Ambient Occlusion)
엠비언트 오클루젼은 구석진 부분의 추가적인 음영을 표현해 주는 기능을 가지고 있다.
매우 구석져 있거나 복잡한 물체들로 가려져 빛이 닿지 못하는 부분은 더욱 더 어두워지는데 이 부분을 엠비언트 오클루젼이라고 부른다.
엠비언트 오클루젼 값이 0 일 땐 주광을 받지 못한 부분은 그냥 검은색이 된다.
1일 땐 환경광의 영향을 받음
텍스쳐를 연결해보자
결과는 이렇다.
뭔가 좀 어두워야 할 부분은 더 어두워 진 것 같은 느낌.
필요하다면 이런식으로 강도 조절을 할 수 있다.
난 아무생각 없이 RGBA 채널을 적용했지만,
메탈릭 텍스쳐는 R, BaseMap은 RGB, 엠비언트오클루젼은 R 채널만 사용한다고 한다.
따라서 메탈릭과 엠비언트오클루젼을 합쳐서 한 텍스쳐로 나타내거나, BaseMap에 사용할 텍스쳐의 A 채널에 다른 데이터 텍스쳐를 통합시키는 경우도 있다고 한다. 최적화를 위해..!
2.4 이미션 (Emission)
이미션은 RGB 이미지로, 빛의 영향을 받지 않는 Unlit 텍스쳐이다. 그림자의 영향도 받지 않기 때문에, 주로 전구와 같이 스스로 빛나는 부분에 사용한다.
텍스쳐를 적용하면, 검은색 부분은 빛나지 않고 컬러가 적용된 부분만 빛나게 된다.
컬러값을 곱해서 강도를 조절해보면
여기까지 Lit Shader에서 사용하는 기능들을 Shader Graph를 이용하여 제작해 보았다.
'개발 > Unity' 카테고리의 다른 글
[ 대마왕의 유니티 URP 셰이더 그래프 스타트업 1 ] Part09 (1) | 2025.06.14 |
---|---|
[ 대마왕의 유니티 URP 셰이더 그래프 스타트업 1 ] Part08 (2) | 2025.06.06 |
[ 대마왕의 유니티 URP 셰이더 그래프 스타트업 1 ] Part07 (1) | 2025.05.31 |
[ 대마왕의 유니티 URP 셰이더 그래프 스타트업 1 ] Part06 (1) | 2025.05.25 |
[ 대마왕의 유니티 URP 셰이더 그래프 스타트업 1 ] Part05 (0) | 2025.05.18 |
- Total
- Today
- Yesterday
- Vector
- 안드로이드스튜디오
- map
- Unity
- 바이너리세마포
- 유니티
- 동기화
- registerForActivityResult
- NotFoundException: String resource ID #0x0
- unityAR
- mutex
- SpinLock
- unorderedset
- semaphore
- 게임개발
- StartActivityForResult
- Java
- unorderedmap
- 광유다
- 지크슈
- dependencyResilutionManagement
- C++
- photon
- 뮤텍스
- 세마포
- ARface
- 유니티슈팅게임
- 스핀락
- ㅗㅂ
- 포톤
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |