참고
옛날 게시글이긴 하지만, 쉐이더에 익숙해질 겸 만들어보았다.
https://gamedevforever.com/326
원리
복잡한 수학은 아니고 약간의 수학을 얹었다고 설명해주시는데, 나한텐 이해하기 어려웠다...!!
순서대로 차근차근 이해해보자...
1. 최종적으로 알아야 할 값은 P' 위치이다.
P' 위치 = P 위치 + (L 방향 * 선분 H 길이) 이다.
P 위치는 World Position 노드로 알 수 있고, L 방향도 커스텀 노드로 알 수 있다.
2. H 길이를 구하려면......... 또 차근차근 이해해보자.
닮음비를 이용할 것이다.
L:L.y = H:O
H*L.y = O*L
H = (O*L)/L.y
L은 Normalize(빛 벡터)이기 때문에, 1이다.
H = O/L.y
선분 O의 길이 구하기. (월드 포지션의 Vertex Y값 - Height 변수)
드디어 H를 구했으니까, 라이트 방향으로 H 길이만큼 늘려주고, 포지션에 더해준다.
결과 노드
왼쪽 캐릭터는 평면 상의 그림자고, 오른쪽 캐릭터는 그냥 실시간 그림자이다.
오른쪽 움짤을 보면, 평면 상의 그림자의 한계를 알 수 있다.
'Unity' 카테고리의 다른 글
포톤 연동하기 (0) | 2021.09.27 |
---|---|
[Unity] 베지어 곡선으로 카이사 q 따라하기 (0) | 2021.09.24 |
UV 좌표로 텍스쳐 크기 조절하기 (0) | 2021.09.16 |
Dissolve 효과 (0) | 2021.08.10 |
Clocking 효과 (0) | 2021.08.10 |