Custom DepthStencil Buffer 의 Resolution을 ScreenPercentage 가 적용되지않은 ViewPort 크기로 잡고 싶습니다.

안녕하세요.

Custom DepthStencil 버퍼를 이용해서 PostProcess에서 Outline을 만들고 있습니다.

저희는 ToneMapping 으로 인해 Outline의 색깔이 변경되는 것을 원하지 않아 PostProcessMaterial 에서 Blendable Location을 Scene Color After ToneMapping으로 설정하였습니다.

그렇게했더니 TSR 이후에 적용이되어 ScreenPercentage가 50 ~ 70 등으로 낮을시에 CustomStencil의 정보가 부족하여(작게 만들어져서) Outline에 Aliasing이 심하게 발생하는 문제가 있습니다.

TSR 이전에서 실행하면(Scene Color After DOF) Temporal 의 도움을 받아 이 문제는 사라지나 저희가 원하는 방식이 아닙니다.

CustomDepth의 크기를 다음과 같이 코드를 수정하여 늘려보려고 하였으나 크기는 늘어나는데 내부적으로 전체를 사용하지 않아 문제가 해결되지는 않습니다. (스크린샷 참조)

CustomDepth의 크기를 SceneTexture와 다르게 ViewPort 사이즈와 동일하게 설정할 수 있는 방법이 있을지 궁금하네요.

감사합니다.

// SceneTextures.CustomDepth = FCustomDepthTextures::Create(GraphBuilder, Config.Extent, Config.ShaderPlatform, Config.bRequireMultiView);

다음과 같이 수정

FIntPoint customDepthRes(ViewFamily.Views[0]->UnscaledViewRect.Max);

SceneTextures.CustomDepth = FCustomDepthTextures::Create(GraphBuilder, customDepthRes, Config.ShaderPlatform, Config.bRequireMultiView);

[Image Removed]

제가 좀 찾아보니 언리얼도 해당 문제는 인지는 하고 있는거 같은데 위와 같은 기능을 만들 계획이 있는지 궁금하네요~. 감사합니다.

​[Image Removed]

안녕하세요.

스텐실 버퍼는 ScreenPercentage에 따라 저해상도로 렌더된 뒤 뷰포트 해상도로 샘플링되어 사용됩니다. 따라서 스텐실만 별도로 풀 해상도로 유지하려면 엔진 소스 수정이나 별도 커스텀 렌더 패스 구현이 필요하지만, 이러한 엔진 커스터마이징은 복잡도와 유지보수 부담이 커 권장되지 않습니다.

대신 포스트프로세스 머티리얼을 Before/AfterDOF 단계에 배치한 뒤 FilmToneMapInverse 노드로 톤매핑을 역산하고, 이어서 EyeAdaptationInverse 노드로 자동 노출을 역산하면, 최종적으로 톤매핑 노출 이전의 원본 RGB에 매우 근접한 색상을 재현할 수 있습니다.

[Image Removed]이와 관련하여 유사 사례의 링크를 함께 첨부하였으니 참고하시면 도움이 될 것 같습니다.

[Content removed]

[Content removed]

감사합니다.

안녕하세요. 답변감사드립니다.

우선 제가 해보니 원하는 되로 동작을 하지 않습니다. 머트리얼을 Before/AfterDOF 단계에 배치한 뒤 머트리얼을 변경해주었습니다. 그리고 아래와같이 Contrast를 변경해보았는데요.

[Image Removed]

결과는 아래처럼 마스크부분에 Tone이 적용되어서 나옵니다.

[Image Removed]

원하는 값은 아래처럼되어야할거같은데요.[Image Removed]

보내주신 방법은 half3 FilmToneMapInverse( half3 ToneColor ) 함수를 사용하는 것인데요.

FilmToneMapInverse 함수는 이미 ToneMap이 끝난값을 역으로 돌리는 함수가 아닌가 싶습니다.

(파라미터의 이름도 ToneColor)

Before/AfterDOF 단계에서 사용할 수 있는 함수인지 궁금하네요.

감사합니다.

안녕하세요.

이전 설명으로 혼란을 드린 점 사과드립니다.

Blendable Location을 Scene Color After ToneMapping으로 설정한 포스트프로세스 머티리얼에서 CustomStencil 버퍼를 사용할 때 계단 현상이 발생하는 이유는, CustomStencil 버퍼가 ScreenPercentage의 영향을 받아 저해상도로 렌더된 후 풀 해상도로 샘플링되기 때문입니다.

아래 문서를 참고하시면 스탠실 버퍼와 TSR에 대한 제한 사항을 확인할 수 있습니다.

현재 언리얼 엔진은 안티앨리어싱이 적용된 스텐실 마스크만을 분리해 추출하는 기능을 기본으로 제공하지 않습니다.

이 기능을 구현하려면 엔진 소스를 직접 수정해 별도의 렌더 패스를 추가해야 하는데, 이 작업은 구현 난이도가 매우 높고, 엔진 업그레이드나 유지보수 시 큰 부담이 될 수 있어 권장드리지 않습니다.

또한, 말씀해주신 요구사항은 내부적으로도 공유될 수 있도록 하겠습니다.

감사합니다.