- Today
- Total
프로그래밍 농장
쉐이더 [Unity] 본문
빛이라는 개념은 물체가 빛을 받았을떄 3가지로 이루어진다.
1. 정반사 ( Speculer )
2. 난반사
3. 환경광 (constant한 상수값)
빛의 총량이 1 이라고 했을떄
-> 100% (1) = 정반사(입사각=반사각) + 환경광 + 난반사(그 외의 것)
정반사 <-> 난반사 (반비례)
정반사 100% -> 내가 쏜빛이 그대로 비추게 됨 : 거울을 구현가능
난반사 100% -> 'Ambient' : 본 물체의 색깔을 뱉음
위의 내용들을 활용하여 구현한 것이 '쉐이더'이다.
Legacy Shader는 위의 광,반사값들을 하나하나 설정해주어서 구현해놓은 것이다.
하지만 이제는 Standard에서 물리기반으로 값들을 전부 합쳐놓은 것을 사용한다. (사실적인 그래픽 구현가능)
- Albedo : 원래 물체의 색상
-> 기존의 Legacy Shader의 경우에는 Albedo가 없고 MainColor라는 남반사 자체의 색상을 설정했었다.
- UV Set
- Metalic
왠만하면 1 또는 0 을 쓴다 -> 금속 or not금속 -> + Specular를 통해 재질 등의 설정을 가능
도자기(seramic) : 비금속(metalic:0)이면서 smoothness가 1
거울 : 금속(metalic:1)이면서 smoothness가 0
위와 같은 개념은 아래의 도표에서 공식문서화 되어있어서 참고할수있다.
일반 큐브(평면 6면) 에 Alebo(색상)만을 적용했을때
일반 큐브에 Alebo를 적용하고 Normal Map에 Texture를 적용하였을떄
( Texture의 RGB값에 따른 입체적인 효과를 얻을수 있다 )
위와 같이 Normal Map에 들어갈 RGB값을 조절한 Texture들만을 Normal Map에 넣어서 사용할수있으며, 아래와 같이 해당 Texture Type은Normal Map으로 바꾸어 주는것이 좋다. ( 경고가 뜰수있다. )
직접 포토샵으로 Normal Map을 만드는 사이트
- Depth Map ( 깊이 맵 )
- Emission ( 발광 )
- Tilling ( 한 타일당 Texture를 그려줄 횟수 )
- Camera 에서의 랜더링 / 쉐이더 설정
URP를 쓰지않는다는 전제하에는 Standard를 사용하는것이 유니티 내부에서 먼저 전처리를 한 후에 뽑아주기때문에 사용하기 용이하다.
그렇다면 Standard를 사양적으로 접근해보자.
아래와 같이 스크립트상에서 설정해줄수있다.
ex) 게임과 같은 멀티플랫폼환경에서의 프로젝트를 구현할때 아래와 같이 그래픽 티어를 지정해줄수있다.
( 어떤 기기나 환경일시에 어떤 그래픽 티어를 수행시킬지 ,, 혹은 설정에서 그래픽 사양을 조절할때 ,, )
- Shadow Cascade
: 케스케이드의 값이 더 많아 질수록 그림자에 따른 더 섬세한 표현을 할수있다.
-> URP에서는 Standard Shadr를 만들수없고, 전부 별도로 만들어야한다.
ex) URP에서 일반 Standard shader를 사용하려하면 전부 마젠타색으로 깨지는것을 확인할수있는데 이 문제이다.
- Directional Light
- Audio Listener 와 Camera의 거리에 비례하여 소리의 크기가 달라진다.
Force To Mono : 기존 Audio Listener의 경우 L,R(좌,우) 값이 다르게 주어질수있지만, Mono를 체크해주면 해당 사운드값이 통일된다.
ShaderLab : 유니티가 정의해놓은 Wrapper ( 일반화 -> 사용성 제약 )
cg : ( c for graphic ) : 그래픽을 위한 c언어
Glls ( OpenGL Shader Language) :
Hlsl ( High level Shader Language ) :
URP (Universal Render Pipeline)
- 유니티 쉐이더
Vert / Frag shader - vertex / fragnent
Surface shader - PBR(물리기반)
Shader를 쓰는 Material 이 있고, 이 Material을 쓰는 Object가 있을것이다.
아래와 같이 CGPROGRAM 을 적어주면 그아래로 해당 함수들을 선언 및 사용하겠다는 뜻이다.
Vertex에 대한 정의를 낾 -> vertex를 태움 -> vertex에 대한 후처리 수행 -> Rasterization
vertexShader를 쓸때 : 텍스쳐에 대한
fragmentShader를 쓸때 : 색상에 대한 작업 ( 투명도 . . )
--> 위 두개가 섞여서 나오는것이 최종적인 Shader 파일이다 .
cutoff : 일정값이 넘으면 해당 현상이 일어나지 않도록 하는것
// additive : 빛 끼리의 합 -> r,g,b + r,g,b : but, 색들이 섞이지는 않음
// Multiply : 빛 끼리의 곱 -> r,g,b (src) * r,g,b(src) : 감소연산 : 어둡게 할때 스임
//Substractive : r,g,b - r,g,b : 어둡게 할때 쓰임
'Unity' 카테고리의 다른 글
유니티 정리예정 포스팅글 내용 (0) | 2022.08.24 |
---|---|
UGUI [Unity] (0) | 2022.08.22 |
유니티 스크린샷 찍기 ( RenderTexture 조절 vs Pixel 조절 출력 ) (0) | 2022.08.16 |
Unity HDRP / URP 임포트시 발생하는 여러 에러에 관한 부분 (0) | 2022.08.10 |
렌더링 / 파티클 / 포스트프로세싱 . . (0) | 2022.08.05 |