
- 왜 계산하기 쉽지 않은가
정점들을 죽 놓고 동시에 processing을 하는게 GPU
그림자를 계산하려면 나한테 오는 빛을 누가 막았지?에 대한 정보가 필요해짐
GPU 입장에서는 병렬처리 중이라 다른 데이터를 제공할수 없어.. 하기 때문에 특수한 방법으로 정보를 얻어햐함.
그리고 그림자는 계속해서 움직인다. 물체의 움직임에 따라 계속 움직여야함. 미리 만들어줄 수도 없고 속도도 필요하니 어려움.. cost가 꽤먹어요

= 그림자를 만들기 위한 정보(빛을 받는 곳인지 구분할 수 있는 정보)를 수집하는 것
shadow map에 depth를 저장
핵심 : view point , depth
뭐뭐가 : view frustum

- q1에 그림자가 만들어지는가? = vertex에 빛이 도달하는가 (sphere 정보를 받아올 수 없는데 어케해?)
- 계산
- shadow map에서 u,v coordinate를 찾아 depth 정보()를 얻어내서 비교
- > -> 어떤 물체가 가로박고 있구나! = shadow구나
- q2의 경우 d2=z2이므로 빛을 직접 받고 있다고 판단 = No shadow
interpolation : 중간에 정보들을 채워주기 위해서
지금은 대부분 interpolation 정보들은 필요 없음! 그냥 거리를 알고싶어. depth말이야
pixel shader는 거의 다 비워 놓는다. color도 필요없. screeen space coordinate는 필요함
= 불필요한 곳 까지 shadow가 생긴다.

Problem
- Nearest point sampling
= 모든 점을 조밀하게 sampling할 수 없기 때문 (해상도가 정해져있음)
= 젤 가까운 texel 점으로 대충했더니 문제가 발생
- bias(임의의 수)를 더해서 어느정도 해결이 가능하다.
- bias가 너무 클 경우 필요하지 않은 곳 까지 밝게 표시될 수 있기 때문에 잘 설정해야 한다.


shadow map을 interpolation 한다는 것은 얘가 빛을 비추고있는지에 대해 부드럽게 하는 거지.. 흰색이냐 검은색이냐를 부드럽게 하는 것이 아님..? 뭐라노
depth map을 texture의 형태로 얻어야함. 특수한 처리가 필요하다
일반적으로 렌더링할 때는 return color하면 자동으로 화면에 보였음.
depth map은 화면에 바로 송출되는 것이 아니에용
-> render texture라는 형태로 가져옴

코드를 분석하며노
점 두개를 비교.
projecttexcoord : shadow map에서 data가져오는 것
depth value : texture
depth map vslue :

hard shadow : 완전히 어둡거나 밝게

soft shadow : 0~1 사이의 값으로
에너지 보존법칙까지 생각하세됨
최적화 문제 : 총 E를 한정하고
