본문 바로가기

Unity3D/2021_엔진 심화

[Unity] 키워드, 색상 연산2

 

 

저번에는 다양한 색상 연산에 대해 알아보았습니다.

 

프로퍼티 상세 정리

 

저번에는 다양한 색상 연산에 대해 알아보았습니다.

 

 

 

프로퍼티 상세 정리

sunsimu1018.tistory.com/14

 

[Unity] Shader Graph 기초 / UI

내용 정리 쉐이더 구성 -블랙보드 -그래프 인스펙터 -메인 프리뷰 색상, 색상 연산 기타 등등 쉐이더 그래프를 구경해봅시다. 이전 쉐이더는 코딩으로 제작하였으나 Unity 2018.1 이후버전 부터 HD

sunsimu1018.tistory.com

키워드, 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

 

[Unity] 색상 연산, 블렌더

오늘은 쉐이더의 색상 연산 방식에 대해 얘기해봅시다. -복습- '색상=숫자' 색상을 나타낼 때 가산 혼합 방식을 사용하는데 (한 픽셀당 빨강, 초록, 파랑 각 8비트 정도를 분배해 가산 혼합을 통해

sunsimu1018.tistory.com

오늘 할 것

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