한 장면에서 많은 조명 처리 (쉐이더 사용)


9

한 장면에서 많은 조명을 처리하는 방법이 궁금합니다. 롤 플레잉 게임, 던전 (조명 포함) 등에서 매우 큰 맵을 감안할 때 지연된 조명에 대해 알고 있지만 많은 조명을 렌더링하는 방법에 대해서만 대답합니다. 그러나 내 질문은 더 많은 것입니다 : 많은 조명을 렌더링 하지 않는 방법 . 장면에 영향을주는 조명 만 렌더링하는 것이 바람직하지만,이를 보관할 기술 / 알고리즘을 모르겠습니다. 지도에 어딘가에 있기 때문에 아무도 500 포인트 라이트를 원하거나 렌더링 할 수 없습니다. 그러나 빛에서 플레이어까지 직선을 긋고 그 사이에 무언가가 있는지 테스트 할 수는 없습니다. 거리도 좋은 지표처럼 보이지 않습니다. (햇빛?)

tl; dr : 장면에 어떤 조명이 렌더링에 영향을 미치는지 어떻게 알 수 있습니까?


OpenGL 또는 DirectX?
kravemir

6
실제로, 모든 조명에 그림자를 원하지 않는 한 지연 조명을 사용하면 500 개의 조명을 사용할 수 있습니다.)

예를 들어 점 및 원추의 경우 오 컬션 컬링을 사용할 수 있습니다. 점 조명은 단지 구입니다. 방향성 빛은 어디에서나 볼 수 있습니다
Kikaimaru

4
@Darkwings 기본적으로 여기 blubb이 요청한 내용을 설명합니다. 어떻게 걸 을까요? 글쎄, 나는 여기서 해결책이 걷는 것이라고 생각한다! ;-) "그 소스가 뷰 프러스 텀에서 무언가를 비추고 있는지 알아야합니다." <-그것이 바로 그가 요구하는 것입니다. 그는 어떻게 할 수 있는지 알고 싶어합니다. ^^ Kikaimaru의 원뿔 / 구체가 도움이 될 수 있습니다.
cooky451

1
OP에 대해서는 거리를 언급했기 때문에 시야 절두체를 확인하는 것이 분명하지 않았습니다. 각 조명에는이를 결정하기위한 몇 가지 매개 변수가 있습니다. 디렉 셔널 라이트를 사용하면 어디에서나 도달 할 수 있으며 스포트라이트에는 타겟 영역이 있습니다 (따라서 벡터 평면 교차로 해결할 수 있습니다). 당신은 불이있는 라인에 더 생각해야 당신이 원하는 당신이 정말 서로 가까이 조명의 전체 많은 경우 당신이 (그림자 주조)에 가깝게 더 나을거야 주어진 장면에 영향을 미칠 수 있습니다. IE : 골동품 샹들리에의 100 개의 양초를 단일 조명으로 취급 할 수 있습니다.
Darkwings 2016 년

답변:


5

볼륨을 묶는 것보다 훨씬 간단합니다.

각 조명에 반경을 지정하십시오. 장면을 렌더링 할 때는 장면 오브젝트와 각 조명 사이의 거리가 조명 반경보다 작은 지 확인하십시오. 그렇다면 조명을 사용하고 그렇지 않으면 건너 뜁니다.

성능이 얼마나 중요한지에 따라 조금 더 복잡합니다.

이것으로 일종의 광범위한 위상 검사를 할 수 있습니다. 그리드 셀 단위로 라이트 핸들을 저장하는 공간 그리드를 정의한 다음 장면 오브젝트의 최대 반경 내에있는 셀에있는 라이트에 대해서만 거리 확인을 수행하십시오.


5
+
1-

조금 늦게 ... 어쨌든, 그것은 정확히 경계 영역입니다. 이 방법을 사용하면 벽 등으로 완전히 가려져 장면과 관련이없는 조명을 계속 렌더링합니다. 또한 모든 빛이 모든 방향으로 향하는 것은 아닙니다.
Darkwings

5

내가 생각할 수있는 가장 간단한 방법은 (솔직히 말해서 내가 생각한 유일한 방법이다) 각 빛에 한정된 양 을주는 것 입니다. 경계 체적이 뷰 프러스 텀 (또는 뷰 프러스 텀의 경계 볼륨)과 교차하는 경우 라이트를 적용합니다.

보이는 물체에는 영향을 미치지 않지만 간단하고 빠르더라도 적용되는 라이트가 여전히있을 수 있습니다. 장면 그래프를 스마트하게 배치하면 몇 번의 교차 검사만으로 대부분의 조명을 컬링 할 수 있습니다 (객체 컬링 작업과 동일).

태양과 같은 것에는 경계 볼륨이 없을 수 있습니다 (항상 적용해야 함을 나타냄).

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