프로그래밍 2015. 5. 9. 20:45
728x90

 

그림자 vsm 구현 - 깊이 버퍼 그림자 vsm

 

 

게임 디스아너드 의 스샷입니다.

 

요즘 집에서 간간히 싱글미션을 진행하고 있습니다.

이전에 좀 하다가, 그만 두었었는데,

꽤 재미있었던 관계로, 엔딩 한번 봐볼까하고

다시 진행중입니다.

 

디스아너드는

2012년도에 출시되었고, 언리얼3 엔진으로 개발되었습니다.

언리얼3 엔진이 그림자 에지를 다듬는 기법으로 vsm 을 채택했었고,

언리얼4 엔진에서는 좀 더 나은 기술이 채택되었는지는 모르겠지만,

어쨋든 참고가 됩니다.

 

 

[매우 부드럽고도 샤프한 외곽]

 

 

 

좋습니다, 아주 좋아요~

 

 

 

 

캐릭터가 일정거리 이상 멀어지면,

그림자의 농도가 옅어지면서 사라집니다.

화면 중간의 남자에게서는 그림자가 보이지 않습니다.

 

 

 

 

 

 

 

 

 

캐릭터의 동적 그림자의 퀄리티가 매우 좋습니다.

깊이 버퍼 그림자에서는 그림자 매개체와 라이트의 거리가 멀다면, 

그림자의 퀄리티가 매우 떨어지게 됩니다.

위의 경우, 그림자를 만들어내는 라이트가 캐릭터와 매우 가까운 곳에 있다고 볼수 있습니다.

 

 

그런데 다수의 캐릭터가 있다면,

어떻게 될까요?

 

 

 

 

좋습니다, 아주 좋아요~

 

 

분명히 캐릭터 하나당, 하나의 동적인 라이트뷰가 할당되었습니다.

 

위에서 만약 하나의 라이브뷰가 사용되었다면, 각각의 그림자들간에 퀄리티 차이가 있어야 합니다.

라이트에 가까운 캐릭터는 좀더 퀄리티가 좋게,

반대로 라이트에 먼 캐릭터는 좀더 퀄리티가 떨어지게 되겠지요.

게다가 라이트의 범위가 넓어져야 하므로, 전체적인 그림자의 퀄리티는 매우 떨어지게 되어 있습니다.

 

저의 경우,

두개의 동적라이트를 사용하고,

각각의 라이트는 꽤 넓은 범위의 다수의 캐릭터나, 배경 오브젝트를 담게 해놓았습니다만,

이런 방식은, 전체적인 그림자의 퀄리티가 떨어질수 밖에 없습니다.

(그림자 매개체와의거리가 멀고, 라이트뷰의 면적이 커져야 하므로)

 

이거,

고민을 땡기게 합니다. 

 

 

언리얼엔진의 도움말에서 발췌한 내용입니다.

다이내믹 섀도잉

.......

이는 Per Object 섀도우로 가능합니다.

각 이동 오브젝트는 하나의 스테이셔너리 라이트에서 다이내믹 섀도우를 두 개 만듭니다:

오브젝트에 드리워지는 정적인 월드에 대한 그림자와,

월드에 드리워지는 오브젝트에 대한 그림자입니다.

이런 구성에서 스테이셔너리 라이트에 드는 섀도잉 비용은,

영향을 끼치는 다이내믹 오브젝트에서만 발생합니다.

즉 다이내믹 오브젝트의 수에 따라 비용이 매우 조금 들 수도 많이 들 수도 있습니다.

.......

 

 

https://docs.unrealengine.com/latest/KOR/Engine/Rendering/LightingAndShadows/LightMobility/StationaryLights/index.html

 

 

 

 

 

728x90
posted by BK dddDang
: