멀티 레이어 2D 타일 맵에서 조명과 그림자를 어떻게 구현할 수 있습니까?


11

아이소 메트릭 게임을 처음부터 작성하는 중이며 조명과 그림자를 추가 할 수있는 방법 / 있는지 알고 싶습니다.

내가 지금까지 가지고있는 코드는 여기에서 찾을 수 있습니다 ,하지만 알고 충분히해야한다 지금 ,지도는 참 / 거짓 값의 간단한 3D 배열 . 다음은 환경 샷입니다.다층 타일 맵의 스크린 샷

단일 레이어 타일 맵이라면 간단합니다. 필요한 2D의 간단한 레이 캐스팅을 이해할 수 있습니다.

그러나지도에 동굴과 같은 높이뿐만 아니라 여러 수준의 높이가 있기 때문에 확실한 그림자를 만드는 방법을 모릅니다. 아마도 블록 단위 솔루션이 유일한 현실적인 방법일까요?


사전에 굽거나 동적으로 생성 된 조명을 찾고 있습니까? 플레이어가 들어 오면 "동굴 모양의 영역"이 잘려 보입니까, 아니면 조명도 천장을 고려해야합니까? 각 타일이 이진 / 어둡거나 일부 분수 값을 가질 것으로 예상합니까?
Anko

1
@Anko 나는 0-1.1 (폭발과 같은 밝은 영역의 경우)과 같은 분수를 선호하지만 실제 보간이나 그와 같은 것이 없으면 단순히 블록 기반 일 수 있습니다. 나는 그것이 동적이기를 원하고 여러 조명을 지원합니다. "동굴 모양의"/ 지붕이있는 부분은 잘려나 간 상태에서 알고는 빛을 계산할 때 표시되지 않은 블록을 고려해야합니다. 예를 들어, 집안을 걸 으면 지붕 블록이 사라지지만 여전히 내부에 그늘이 있어야합니다.
Danie Clawson

동굴과 높이가있는 솔루션을 찾으면 2D가없는 것 같습니다. 카메라가 항상 45 ° 아래 방향을 향하더라도 완벽한 3D 솔루션을 찾고있을 것입니다. 스텐실-섀도우 또는 이와 유사한 기술을 살펴 봐야합니다.
Adrian Maire

두 번째 @AdrianMaire는 적절한 3D 계산을 수행해야하지만 "타일"의면에 보간이없는 경우 몇 가지 지름길을 만들어야합니다. 보간을하지 않으면 아마도 광선을 사용할 수 있습니다.
NeomerArcana

나는 지금 그것을 대답으로 소화 할 수있는 마인드 스페이스가 없지만, 나는 이 블로그 게시물에서 하이트 맵 지형에 대한 가시선 결정에 대해 우연히 발견했다 . 당신이 찾고있는 것처럼 들립니다.
Anko

답변:


1

아바타가 현재 켜져있는 수준에 해당하더라도 2D 그림자를 먼저 작동시키는 것이 좋습니다. 그런 식으로 코드를보고 시작하는 것이 더 쉬울 것입니다.

몇 가지 방법으로 2D 타일 맵에서 그림자를 구현했습니다. Microsoft의 Eric Lippert가 설명한 그림자 캐스팅 방법 중 하나가 잘 작동합니다.

그리고 다른 방법으로, 제가 이런 종류의 것을 보았을 때 보이는 타일과 타일 에지를 직교 스윕하고 가장 적은 수의 에지에서 장면을 설명하는 에지 (및 모서리 iirc)를 생성하는 것이 었습니다. 그런 다음 약간의 벽을 표시하려면 숨겨진 가장자리를 컬링하고 오목한 그림자와 같은 사용자 정의 그림자 기능을 형성 할 수 있습니다. 그런 다음 그림자 지오메트리 (투영 그림자 투사?)를 만들어 맨 위에 렌더링하십시오.

그러나 그 아이디어를 3d로 가져 가려고하면 3d 로하는 것이 더 쉬워집니다. Eric Lippert가 설명한 방법은 아마도 3d로 변환 될 수 있습니다. 하지만 3D로하는 것이 비싸다는 것을 알게 될 것입니다. 아마도 Brogue 의 소스 코드도 살펴보십시오 . 2D 가시성 / 섀도우 캐스팅을위한보다 효율적인 구현이있을 수 있습니다.

행운을 빕니다.

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