저번에는 다양한 색상 연산에 대해 알아보았습니다.
프로퍼티 상세 정리
저번에는 다양한 색상 연산에 대해 알아보았습니다.
프로퍼티 상세 정리
키워드, SPR Batcher
정적 분기(static branch)를 만듭니다.
기존의 쉐이더에서 분기를 생성해 파생된 수 만큼 Variant가 생성되고, 분기는 별개의 쉐이더로 인식하기 때문에 연산량은 배로 늘어납니다.
키워드 사용에 유의할 점을 설명하기 위해 아래 자료를 보고가겠습니다.
아래의 쉐이더에서는 텍스쳐에 색상을 곱하는데, ColorSelect를 키워드로 내보내 빨강인 A를 디폴트로 총 5가지 분기로 나눠집니다.
그리고 위의 쉐이더가 적용된 10개의 공이 있습니다.
상단의 공은 색상 A만을 사용하고, 텍스쳐만 변경.
하단의 공은 키워드로 생성된 ColorSelect를 통해 색상까지 변경되었습니다.
그래서 뭐 어쩌라고?
SRP Batcher 에 대한 이해가 필요합니다.
쉐이더 가 같을 경우 화면에 그려지는 과정 중 Set Pass Call의 연산을 합쳐서 생략해주게 됩니다.
한 쉐이더지만 경로 별로 새로운 쉐이더로 인식하기 때문에 색상이 다른 공의 여부에 따라서 SetPass calls의 수가 달라지는 것을 알 수 있습니다.
SetPass calls 수를 줄임으로써 그만큼의 연산량도 줄일 수 있습니다. 키워드를 사용할 때 유의하며 사용합시다.
이제 색상 연산에 대해 알아보고자 합니다.
색상 연산 1에서 배우고 간 내용에 이어서 이리저리 알아봅시다.
Add (덧셈)
Subtract (뺄셈)
One Minus (반전)
pow (제곱)
abs (절대값)
sunsimu1018.tistory.com/15?category=940748
오늘 할 것
Multyply
Divide
saturate, clamp
곱하기(Multiply)
float3(1,1,1)*float3(0,1,1)
=float3(0,1,1)
흰색x시안=시안
1*0=0
흰색(1,1,1)에 시안(0,1,1)을 곱해보았습니다.
Multiply의 경우 0을 곱하면 무조건 0이 나온다는 특징이 있죠. 1 이상 이하로 밝아지거나 어두워지게 돨겁니다.
나누기(Divide)
0으로는 나눌 수 없듯이 쉐이더에서도 0으로 나누면 오류가 뜹니다!
float3(1,1,1)/float3(1,-1,1)
=float3(1,-1,1)
흰색/마젠타?=마젠타
곱셈과 반대. 1이상의 수에 사용하는 경우가 많았습니다. 간단한 흑백 공식에서도 사용할 수 있죠.
(R+G+B)/3 --- RGB를 서로 더해 평균을 구하는 식
saturate, clamp
값에 제한을 둬 일정 값의 이상, 이하로 넘어갈 수 없도록 합니다.
saturate는 1~0의 수로만 제한이 됩니다. (엄청 가벼움!)
Clamp는 Min Max로 값을 정할 수 있는 차이가 있습니다.
어디에 사용하면 좋을까?
예를 들어 아래와 같이 색상연산 중 0~1 이상 또는 이하의 값을 침범하게 되었을 때
clamp, 또는 saturate를 사용해 값의 최대 최소를 정해줄 수 있을 것입니다.
아래의 경우 saturate를 사용하는게 더 좋았겠죠.
응용
저번에 배운 것들을 포함해 응용을 해봅시다.
아래 이미지는 불 이펙트의 일부입니다. 알파값에 pow를 연결하고, FirePower로 float1값을 추가해줬습니다.
그러면?
제곱 값이 높아질 주록 흰색 영역이 줄어들면서 불의 세기를 조절할 수 있게 됩니다.
'Unity3D > 2021_엔진 심화' 카테고리의 다른 글
[Unity Shader] 좌표계, 벡터 (0) | 2021.05.26 |
---|---|
[Unity] Z-buffer, Shader Lab (0) | 2021.05.05 |
[Unity] 색상 연산, 블렌더 (0) | 2021.04.07 |
[Unity] Shader Graph 기초 / UI (0) | 2021.04.01 |