Minecraft는 주로 하이트 맵을 기반으로하는 게임으로, 해당 heigtmap 정보를 사용하여 세상을 빛으로 가득 채 웁니다. 내가 이해 한 바에 따르면 하이트 맵에서 가장 높은 지점은 햇빛에 영향을받는 지역의 끝입니다. 그 위의 모든 것은 햇빛에 의해 켜지고 그 아래의 모든 것은 반경 8 블록 근처의 빛의 영향을받습니다.
당신이 당신의 세계의 상단에 떠있는 섬이 있다면 아래의 모든 것은 본질적으로 동굴로 볼 수 있습니다. 두 개의 조명이 같은 지점에 영향을 주면 더 밝은 조명이 이깁니다 (확실하지 않음).
어느 쪽이든 마인 크래프트 조명 모델에는 몇 가지 문제가 있습니다. 먼저, 세계에 하이트 맵이 없으면 정확히 햇빛을 방출 해야하는 것과 그렇지 않은 것을 파악하는 것이 까다로워집니다. 간단한 방법은 세상이 (내 경우에는) 떠 다니는 암석이라고 가정 한 다음 각 축을 양방향에서 가로 지르며 암석의 시작과 끝을 알아내는 것입니다. 그러나 바위의 움푹 들어간 곳이 암흑에 있지 않기 때문에 이것은 문제를 완전히 제거하지 못합니다.
Minecraft 자체는 블록의 재료에 대한 정보와 함께 청크에 라이트 정보를 캐시합니다. 따라서 월드가 수정 된 경우에만 조명을 업데이트해야합니다. 불행히도 그 과정은 여전히 업데이트 속도가 느리고 조명이 빠르게 변경되면 조명이 뒤쳐지는 것을 볼 수 있습니다. 많은 블록이 변경되고 (TNT, 일몰 등) 가장 빠른 컴퓨터 (Mac의 경우 Java)를 실행하지 않는 경우 특히 그렇습니다.
여전히 3D 그래픽 조명에 대한 제한적인 이해에서 마인 크래프트와 같은 세계가 가장 큰 문제가되어서는 안됩니다. 문제를 어떻게 해결 하시겠습니까?
복셀 세계의 조명에 대한 기본 요구 사항은
- 단일 프레임에서 발생할 수있을 정도로 빠르게 업데이트하십시오. 그래픽 장치에서 조명을 수행하고 변경된 조명 정보를 기본 RAM으로 다운로드 할 수 있습니다.
- 라이트 정보는 기본 게임 로직에 신속하게 이용 가능해야 그래픽 장치를 전적으로 기반으로하지는 않습니다 : 추론 : 라이트는 잔디의 성장, 몬스터의 생성 등에 영향을 미칩니다.
- 가벼운 업데이트는 덩어리에 국한되거나 다른 한계를 가져서 크기가 매우 큰 전 세계를 비추 지 않아도됩니다.
주요 아이디어는 빛을 빠르게 업데이트하는 것입니다. 반드시 더 아름답지는 않습니다. 일반적인 라이트 렌더링 성능 향상을 위해 SSAO를 쉽게 추가 할 수있어 더 멋진 세상을 만들 수 있습니다.