0311 복셀 라이팅
복셀 라이팅
참고로 GI구현기법 아님
걍 마인크래프트라 생각하셈
아이디어 기본 - "전역 햇빛 라이팅"
그냥 "평지" 기준으로,
모든 "윗대가리에 아무 블록도 없는" 블록에 대해서
3차원 Ray를 쏜다.
-> 시작점이 블록이고,
orien은 -(햇빛dirlight.direction) 임.
만약에 Ray에 걸리는게 있다?
-> <가장 윗면의> modulate를 낮춘다.
근데 비용이 괜찮을까??
-> Static으로 한번 구워둔 다음에,
실시간에서는 블록 하나 바뀔 때만
그 블록에 대해서만 검사하면 되지 않나?
아이디어 확장 - "인접 블록 밝기 라이팅"
블록과 블록이 인접한 경우
얼마나 인접했는가?
두 면이 완전히 붙어있다면 -> 고려X
햇빛이 내려쬐는데
동굴 안은 약간만 밝아야 한다.
-> 밝은 블록이 "전파", propagate 되게 만들면 되지 않을까??????
예를 들어
1. 특정 블록 밝기가 10으로 설정됨
2. 해당 블록에 인접한 6개의 블록의 라이팅을 업데이트
(대각선은 X, update함수 안에 10이라는 값을 줘야 함)
3. 해당 블록은 6면 전체에 대해서
붙어있지 않은 면의 라이팅 계수를 10에 맞춰 업데이트.
-> 끝나면 10에서 2씩 빼서
재귀적 (2) 를 수행. 인접한 6개에 8을 전달.
4. 만약 0보다 작아지면 그냥 거기서 라이팅 전파 끝내기.
횃불 or 발광석이 있다면?
-> 새로운 발광석이 설치될 때마다
발광석 기준으로 해당 청크의 모든블록 거리 측정.
인접하지 않은 면의 modulate를 거리에 따라 조정.
-> 이거 구현도 "빛 전파" 시키면 구현이 가능함ㅇㅇ