게임 로직/AI에 사용하기 위해 3D 장면에서 객체가 얼마나 보이는지 계산

StackOverflow https://stackoverflow.com/questions/924761

문제

캐릭터가 어두운 영역에 숨을 수 있도록 하는 게임 프로젝트를 시작하려고 합니다.어두운 구석에 숨어 있으면 다른 캐릭터가 당신을 보기가 더 어려워질 것입니다.

나에게 필요한 것은 캐릭터가 위치한 곳의 조명 조건이 어떻게 되는지를 계산하는 방법입니다.

이상적인 것은

double getLightFactor(GameCharacter observer, GameCharacter target)

왜냐하면 빛이 떨어지는 조명 조건이 있어서 대상의 서로 다른 면이 서로 다른 양의 빛에 닿을 수 있다고 가정하기 때문입니다.하지만 난 기꺼이 만족하겠어

double getLightFactor(GameCharacter target)

어디에서 보든 상관없이 특정 캐릭터에 대한 조명을 얻으려면

double getLightFactor(int x, int z)

지형의 특정 지도 지점에서 빛을 얻으려면

이 방법은 게임 플레이 중에 조명 조건이 바뀔 수 있다는 점을 고려해야 하지만 턴 기반이므로 일부 무거운 계산이 허용될 수 있습니다.손전등을 사용할 수 있도록 하려고 하므로 손전등도 고려해야 합니다(그러나 별도로 모델링하고 처리할 수는 있습니다).

나는 내 장면을 처리하기 위해 Ogre3d를 사용할 것이지만 일반적인 솔루션이나 다른 엔진에 대한 솔루션도 기꺼이 받아들일 것입니다(내가 선택한 엔진은 확정되지 않았습니다).

아이디어, 논문 또는 관련된 모든 것을 환영합니다!

도움이 되었습니까?

해결책

현재 조명 설정을 고려하여 관찰자의 관점에서 오프스크린 버퍼(다소 낮은 해상도에서도)로 장면을 렌더링할 수 있습니다.그런 다음 대상 캐릭터 중앙의 평균 광도 값을 계산할 수 있습니다.

나는 Ogre3d 엔진에 대해 모르지만 이것은 문제를 처리하는 다소 일반적인 방법이어야 합니다(결국 장면을 다른 관점에서 렌더링하는 것입니다...).

다른 팁

오 소년.이는 엔진에 따라 많이 달라집니다.이제 두 번째 옵션을 원하신다고 말씀드릴 수 있습니다.

조명은 어떻게 작동하나요?동적인가요, 아니면 정적인가요?이 둘의 조합이라고 가정해 봅시다.

정적 조명의 경우 근처의 라이트맵을 확인하세요.정점 기반이거나 텍스처 기반이거나 어느 쪽이든 근처의 몇 가지 지점에서 샘플링하여 평균을 낼 수 있습니다.엔진이 모델의 조명을 계산하는 방법을 살펴보고, 그래픽 코드를 자세히 살펴보고, 데이터가 실제로 어디에서 나오는지 확인하고, 동일한 소스를 사용할 수 있습니다.일부 게임에는 체적 조명 정보가 있는데, Quake 2는 BSP 트리의 리프별로 이를 수행하고(확인하기 쉬움) Quake 3에는 체적 텍스처가 있습니다(확인하기도 쉽습니다).

그런 다음 동적 조명을 추가해야 합니다.이를 수행할 수 있는 한 가지 방법은 플레이어에서 광원을 향해 광선(플레이어의 다른 부분에서 나오는 몇 가지 다른 광선)을 쏘는 것입니다.얼마나 많은 타격을 입었는지 세어보고 빛의 거리에 따라 각각의 숫자에 조금씩 추가하세요.모든 괜찮은 게임 엔진에는 "광선을 쏘고 그것이 무엇에 부딪치는지 확인"하는 절차가 있습니다. 이는 AI가 시선을 수행하는 방식과 어떤 총알이 부딪혔는지, 벽에 부딪힐 때 어떤 일이 일어나는지 파악하는 방법입니다.속도가 느려질 수 있으므로 너무 많은 광선을 너무 멀리 쏘지 마십시오.

이 값을 너무 자주 다시 계산할 필요는 없습니다. 새 광원이 생성될 때마다 그리고 매초마다 다시 계산할 수 있습니다.

환경의 복잡성에 따라 지형에 오버레이된 2D 라이트맵을 속여 사용할 수 있습니다.각 셀은 근처의 광원을 기반으로 빛의 강도 값을 갖습니다.움직이는 물체에 대해서도 계산이 빠르고, 위치의 "어두움"을 판단하기 위해 접근하는 것도 빠릅니다.

가지고 있는 조명 유형에 따라 간단한 상자 또는 원 알고리즘을 사용하여 모양을 "스탬프"해야 할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top