Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
Archives
Today
Total
관리 메뉴

행복한 개구리

Unity 복습 21.05.09. Shader - 빛효과 단계별 적용, halfvector, Hologram, RimLight, lerp 본문

Unity/복습

Unity 복습 21.05.09. Shader - 빛효과 단계별 적용, halfvector, Hologram, RimLight, lerp

HappyFrog 2021. 5. 9. 23:01

빛효과 단계별 적용

ndotl에 ceil만 사용하여 빛의 경계를 10단계로 나누어주었다.

ceil의 기능 // Nvidia

스칼라값이나 각 벡터의 요소보다 작지 않은 최소값의 정수를 반환한다고 적혀있다.

코드 // 10 // 5

final로 텍스쳐의 Albedo까지 빛에 적용시켰더니 이렇게 나온다. 경계가 잘 보이지 않는 것 같아서 5로 줄였더니 빛의 경계가 나뉘는 부분이 잘 보인다. 이렇듯 경계의 수가 커지면 커질수록 그라데이션에 가까운 효과가 나타난다.

 

-----------------------------------------------------------------------------------------------------------------------------------

halfVector

BlinnPhong // Lambert // Standard

BlinnPhong같은 경우는 _SpecColor를 프로퍼티에 선언해주지 않으면 반사광이 제대로 표현되지 않는 점을 발견했다.

그리고 위의 3가지 사진은 빛효과로 주었을 때라 얼마나 다를지 궁금해서 올린 것이다.

 

 LambertLight // Half-LambertLight // BlinnPhong - HalfVector
 LambertLight // Half-LambertLight // BlinnPhong - HalfVector

여기서 라이트효과의 오브젝트모양이 석고상처럼 보이는 이유는 텍스쳐의 rgb값이 들어가지 않아서 그렇다.

 

또, 주의할 점은 halfVector를 사용할 때는 빛효과의 메서드 매개변수에 시선벡터를 넣어줘야 한다는 것이다.

그리고 Blinnphong halfVector는 빛벡터와 시선백터의 중간값을 일반화 시키고 그 일반화 한 벡터값과 오브젝트의 표면벡터의 내적을 이용하여 연출하는 것이다.

 

-----------------------------------------------------------------------------------------------------------------------------------

Hologram

alpha:fade를 안했을 때 // 했을 때 // 코드

 

하지만 뭔가가 부족하니 프로퍼티에 무언가를 추가하여 조절해보자.

투명토에 제곱을 해주니 아래 사진처럼 더욱 투명해지며 홀로그램 스러워지기 시작했다.

그래서 제곱의 수를 조절할 수 있는 프로퍼티와 색상 프로퍼티, 그리고 범프도 추가해주었다.

 

_FracLine, FracThickness = 1
_FracLine 5 // FracThickness 5 // _FracLine, FracThickness = 5

작명을 제대로 한건지는 모르겠지만 Thickness가 높아질 수록 선의 두께는 얇아지고 = 넓게펴진 선이 응축되는 느낌

Line값이 커질수록 선의 갯수가 많아진다.

_FracLine, FracThickness = 1 // _FracLine, FracThickness = 5

-----------------------------------------------------------------------------------------------------------------------------------

RimLight

rim을 구해 Albedo에 적용하면 이렇게 나온다. 하지만 반전을 준다면 아래 사진과 같이 된다.

이제 여기서 윤곽선만 밝게하고 테두리의 안쪽은 어둡게 하면 림라이트가 완성된다. 편하게 쓰기위해 pow라는 제곱식을 사용할 예정이다. 그리고 색깔은 따로 프로퍼티에 선언하여 조절할 예정.

 

더하기 // 곱하기

코드에서 Albedo에 림컬러를 더하면 이렇게 되는데, 이유는 색상값이 전체적으로 높아지기 때문이다. 따라서 밝기는 유지하며 색상만 바꾸고 싶다면 값을 곱하자.

 

-----------------------------------------------------------------------------------------------------------------------------------

lerp

사용한 텍스쳐들 둘 모두 A값이 존재한다.
alpha:fade x // alpha:fade o // 코드

두장의 텍스쳐를 겹치는 부분만 보이게 코딩했다. 겹치는 부분만 출력되게 하는 코드는 o의 Alpha값을 정해주는 코드이고, 두 장의 색이 어우러지게 하는 코드는 각 텍스쳐의 rgb값을 곱하는 부분이다. 그리고 효과로 쓸 텍스쳐를 시간값에 따라 y축이동시켜주면 불타오르는 텍스쳐가 완성된다.

겹치는 부분만 표현되기 때문에 위처럼 일렁거리는 효과와 불타오르는 효과를 모두 쓸 수 있다.