마인 크래프트 세계에서 조명


10

Minecraft는 주로 하이트 맵을 기반으로하는 게임으로, 해당 heigtmap 정보를 사용하여 세상을 빛으로 가득 채 웁니다. 내가 이해 한 바에 따르면 하이트 맵에서 가장 높은 지점은 햇빛에 영향을받는 지역의 끝입니다. 그 위의 모든 것은 햇빛에 의해 켜지고 그 아래의 모든 것은 반경 8 블록 근처의 빛의 영향을받습니다.

당신이 당신의 세계의 상단에 떠있는 섬이 있다면 아래의 모든 것은 본질적으로 동굴로 볼 수 있습니다. 두 개의 조명이 같은 지점에 영향을 주면 더 밝은 조명이 이깁니다 (확실하지 않음).

어느 쪽이든 마인 크래프트 조명 모델에는 몇 가지 문제가 있습니다. 먼저, 세계에 하이트 맵이 없으면 정확히 햇빛을 방출 해야하는 것과 그렇지 않은 것을 파악하는 것이 까다로워집니다. 간단한 방법은 세상이 (내 경우에는) 떠 다니는 암석이라고 가정 한 다음 각 축을 양방향에서 가로 지르며 암석의 시작과 끝을 알아내는 것입니다. 그러나 바위의 움푹 들어간 곳이 암흑에 있지 않기 때문에 이것은 문제를 완전히 제거하지 못합니다.

Minecraft 자체는 블록의 재료에 대한 정보와 함께 청크에 라이트 정보를 캐시합니다. 따라서 월드가 수정 된 경우에만 조명을 업데이트해야합니다. 불행히도 그 과정은 여전히 ​​업데이트 속도가 느리고 조명이 빠르게 변경되면 조명이 뒤쳐지는 것을 볼 수 있습니다. 많은 블록이 변경되고 (TNT, 일몰 등) 가장 빠른 컴퓨터 (Mac의 경우 Java)를 실행하지 않는 경우 특히 그렇습니다.

여전히 3D 그래픽 조명에 대한 제한적인 이해에서 마인 크래프트와 같은 세계가 가장 큰 문제가되어서는 안됩니다. 문제를 어떻게 해결 하시겠습니까?

복셀 세계의 조명에 대한 기본 요구 사항은

  1. 단일 프레임에서 발생할 수있을 정도로 빠르게 업데이트하십시오. 그래픽 장치에서 조명을 수행하고 변경된 조명 정보를 기본 RAM으로 다운로드 할 수 있습니다.
  2. 라이트 정보는 기본 게임 로직에 신속하게 이용 가능해야 그래픽 장치를 전적으로 기반으로하지는 않습니다 : 추론 : 라이트는 잔디의 성장, 몬스터의 생성 등에 영향을 미칩니다.
  3. 가벼운 업데이트는 덩어리에 국한되거나 다른 한계를 가져서 크기가 매우 큰 전 세계를 비추 지 않아도됩니다.

주요 아이디어는 빛을 빠르게 업데이트하는 것입니다. 반드시 더 아름답지는 않습니다. 일반적인 라이트 렌더링 성능 향상을 위해 SSAO를 쉽게 추가 할 수있어 더 멋진 세상을 만들 수 있습니다.

답변:


7

Minecraft의 조명은 비동기 적으로 계산되어 지오메트리에 구워집니다. 실시간으로 수행되지 않습니다.

각 복셀은 아마도 해당 복셀의 조명을 단일 바이트로 저장합니다 (또는 2, 노치는 낮과 밤주기를 가능하게하기 위해 계층화 된 접근 방식을 사용합니다). 16 레벨의 빛만 있습니다. 세계를 밝히기 위해 Minecraft는 2 패스를 수행합니다. 하나는 햇빛을위한 것이고, 다른 하나는 빛을 동굴 등으로 전파하거나 범람시키는 것입니다. 모든 광원은 최대 16 블록 떨어진 곳에서만 빛을 전파 할 수 있기 때문에 조명이 현지화됩니다. 물과 용암은 거의 같은 방식으로 작동합니다.

더 많은 정보는 그의 블로그에서 볼 수 있습니다 : http://notch.tumblr.com/post/434902871/per-request-this-is-how-the-new-lighting-will-work


알아. 나는 위에서 그것을 썼다 (밝기 4 비트 해상도 빼기).
Armin Ronacher

1

GPU 렌더를 사용하여 결과를 텍스처링하고 더블 버퍼링 할 수 없으므로 항상 각 프레임을 다시 읽을 수있는 조명 정보를 계산할 수 있습니까?

조명을 위해이 데이터를 구성하는 방법은 전적으로 귀하에게 달려 있지만, 원하는 모든 것이 조명 알고리즘의 속도를 향상시키는 것이라면 이것이 조사를위한 첫 번째 옵션이 아닌 이유를 모르겠습니다.


정확히 내가 생각했던 것. 대부분의 CPU와 달리 거의 모든 GPU는 이러한 종류의 대규모 병렬 계산 연습을 위해 설계되었습니다.
그랜트 피터

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.