TECHARTNOMAD | TECHARTFLOWIO.COM

TECH.ART.FLOW.IO

[번역] Matcap 왜곡 보정 정보

jplee 2023. 9. 20. 22:30

 

역자의 말.

2006년 게임브리오를 사용 하던 무렵에 처음으로 이러한 기법을 사용했었습니다.

사실 그 당시에는 흔히 말하는 Matcap 이라고 명칭이 정의 되지 않았었죠.

그리고 실제로 2004년도 부터 간단한 리플렉션 반사(가짜)에 사용 되던 기법의 파생일 뿐입니다.

픽솔로직 지브러시에는 2005년 후반에 이미 들어가 있었는데 엄격히 보면 지브러시 개발사에서 응용을 했던 것이죠.

2006년 당시 맥스 뷰포트가 워낙 구렸고 맥스 뷰포트에서 간단한 .fx 셰이더를 사용해서 구현 했던 적이 있습니다.

이후 모바일 게임 개발 트렌드가 2012년 부터 업계 전반에 걸쳐 도래했을 때 꽤나 각광 받게 된 기법이죠. 2012년 까지만 해도 큐브맵 리플렉션도 성능하락을 유발 시키는 주범으로 주목되던 때 였으니까 말이죠. 2011년도에 개발하던 코덱스 더 워리어 라는 프로젝트에도 유용하게 사용했었습니다. 방패나 금속 아머 같은 곳에 반사효과(가짜) 등을 넣을 때 말이죠.

아무튼... 오랜 시간이 흘렀지만 일부 활용하는 것은 여전합니다. 화각 중심에서 벗어난 오브젝트의 matcap 좌표 변형에 대한 글을 오래전에 본 적이 있어서 이렇게 포스팅을 해 봅니다. 사실 이 원문을 쓴 저자의 나름 연구하고 그런 흔적이 좋아서 간단히 번역글로 올려보게 되었네요.

 

원문 저자의 블로그.

 

 

@marv_kurushimayのマイページ - Qiita

ゲーム系エンジニア UnrealEngineとUnityを行き来する生活

qiita.com

 

원문 포스팅.

 

Matcapの歪み補正について - Qiita

前書きタグにUEとかつけていますが、内容はUEはあまり関係なくシェーダ/マテリアルの話です。検証環境としてUEを使ったのでタグ付けしました。概要軽量に高品質のライティングを再現する

qiita.com


머리말

태그에 UE를 넣었지만 내용은 UE가 많지 않은 쉐이더 / 재질에 관한 것입니다. UE를 검증 환경으로 사용했기 때문에 태그를 지정했습니다.

요약

Matcap이라는 기술은 종종 가벼운 방식으로 고품질 조명을 재현하는 데 사용됩니다.

 

 

【Unity】Matcap、事前に用意した綺麗な光表現を利用する - テラシュールブログ

今回はMatcapについて紹介しようと思います。 Matcapを利用した材質変化。思ってたよりソレッポイ絵が出来てビックリ。 pic.twitter.com/F5swLI5YXG — 椿 (@tsubaki_t1) 2016年6月10日 手前からゴーストユ

tsubakit1.hateblo.jp

자세한 내용은 이 사이트를 참고로 하는 것이 더 빠르지만, 대략적으로 설명하자면, 미리 렌더링된 이미지를 사용하여 빛을 표현하는 방식입니다.

카메라에서 보이는 조명 결과를 영상에 저장하고, 통상의 방향에 따른 영상을 참조함으로써, 의사 조명을 수행할 수 있다. 복잡한 조명 계산없이 고품질의 조명 결과 (의사 임에도 불구하고)를 얻을 수 있기 때문에 Unity 및 VRChat 서클에서 자주 사용되는 것 같습니다.

이번에는 익숙한 환경으로 인해 UnrealEngine (UE-5.0.0)으로 검증했습니다 만, 제가 하고 있는 것은 엔진에 의존하지 않기 때문에 유니티 등 어떤 환경에서도 사용할 수 있습니다.

또한 기사에 사용된 ColorGrid는 다음과 같습니다.

 

カラーグリッド配布

UVの歪みがないか確認する用のテクスチャ、カラーグリッドというらしい。 PmxEditorのカラーグリッド参考…

maniacbamboo.wordpress.com

배포되는 것을 사용했습니다.

 

MATCAP 문제

먼저, 표준 Matcap 계산에서는 화면 가장자리에 오브젝트가 있으면 UV가 왜곡되는 문제가 있습니다.
화면 중앙에 놓았을 때는 아래와 같이 깔끔하게 텍스처가 붙습니다.

하지만 대상 오브젝트가 화면 가장자리에 있으면 아래와 같이 UV가 왜곡되어 원하는 라이팅 결과를 얻을 수 없습니다.

이때의 머트리얼은 이런 상태입니다.

 

 

 

X에서 かにひら 님

要望があったので画面端でも破綻しないmatcapシェーダの作り方をご紹介。 作例はShaderForgeですが同様の問題なら何使っても同じようなやり方で直せるんじゃないかと思います。

twitter.com

트위터에서 이 문제에 대한 수정 방법을 제안하는 사람이 있어 거기서 힌트를 얻어 더욱 개선했다.

트위터에서 제안된 방법을 시도해봤습니다.
UE 표준 화각 90도로 제안된 방법을 시도해 본 결과는 다음과 같습니다.

 

 

표준 방식
트위터의 방법론

 

확실히 좋은 느낌으로 보정되어 있습니다. 하지만 트위터의 방식으로도 화각을 넓혀보면...

이렇게 왜곡이 생깁니다. 그래서 제가 조정을 해봤는데요.

 

이런 결과가 나왔습니다. 이마저도 왜곡이 남아있기 때문에 해결책이 아니라 해결방안이라는 수준이지만요.

 

애초의 문제

표준 Matcap의 방법으로 돌아가서, 왜 UV가 돌아가는지에 대해 조금 더 설명하겠습니다.

여기만 수기 자료 기반이 됩니다(구두로 설명할 때의 자료를 재사용).
우선 UV 전개는 왼쪽 위 그림과 같이 뷰 공간에서의 노멀 방향에 따라 UV 전개가 이루어집니다.
대상 오브젝트가 정면에 있을 때는 좋지만, 오른쪽 위 그림과 같이 화면 가장자리로 가면 보이는 범위와 UV 전개되는 범위가 어긋나서 UV가 돌아가는 끝이 보이게 됩니다. :sweat:

이를 보정하기 위해 화면 가장자리로 갈수록 기울어지는 시선 방향 벡터를 사용하여 보정해 주면 됩니다. 이것이 바로 이번 방법입니다. 화각이 넓으면 화면 가장자리의 시선 방향 벡터의 기울기가 커집니다. 그래서 화각이 넓으면 보정 효과가 너무 커서 왜곡이 두드러지는 결과를 낳았습니다.

 

이번 개선 방법

먼저, 트위터의 기법에서 사용된 ShaderForge의 NormalBlend의 공식은 아마도...

 

Blending in Detail

The x, why, z It’s a seemly simple problem: given two normal maps, how do you combine them? In particular, how do you add detail to a base normal map in a consistent way? We’ll be examining several popular methods as well as covering a new approach, Re

blog.selfshadow.com

위 블로그의 마지막에 있는 blend_rnm() 함수입니다.

또한, 위 사이트에 나와 있는 식은 노멀맵의 텍스처에 저장된 상태에서 다시 텍스처에 저장된 상태로 되돌리기까지 하고 있는데, 셰이더 내에서 하기에는 무리가 있습니다.
그것들을 생략한 함수가 아래 함수입니다.

half3 blend_rnm(half3 n1, half3 n2)
{
  half3 t = n1 * half3(-1, -1, 1) + half3(0, 0, 1);
  half3 u = n2 * half3(-1, -1, 1);
  half3 r = normalize(t*dot(t, u) - u*t.z);
  return r;
}

이 중 보간계수가 될 수 있는 것이 함수 내 첫 번째 줄의 의 부분인데, 이를 1.25로 변경한 것이 제가 개선한 방법입니다. + half3(0, 0, 1);

전환 기능 등을 포함해서 최종 머티리얼은 다음과 같은 형태가 되었습니다.

 

정리

시야 공간의 XY로 UV를 만들기 때문에 발생하는 돌림현상 문제를 시선 방향을 이용해 보정한다. 라는 것이 이 대응의 핵심입니다.
따라서 시선 방향 외에 다른 좋은 보정 기준이 있다면 그것을 사용해도 좋고, 블렌딩 방법도 RNM이 아닌 다른 방법을 사용해도 좋을 것 같습니다.
혹시 다른 좋은 보정 방법을 생각하시는 분이 계시면 알려주세요!


역자 각주.

기사와 상관 없지만~~~ 보너스.

저도 주로 애용하는 matcap 리소스 모음 사이트 입니다.

 

 

GitHub - nidorx/matcaps: Huge library of matcap PNG textures organized by color

Huge library of matcap PNG textures organized by color - GitHub - nidorx/matcaps: Huge library of matcap PNG textures organized by color

github.com

 

Sivka's Iridescent & Gems Matcap Pack

Skip to the last two gifs to see these used on a VRChat model's accessories in-game!INFO↓These were generated using OpenAi. All of them are resized to 1024x1024 pixels, are in .png format, and have black backgrounds.♥― 37 Diamond/Gem Matcaps♥― 41

23mink.gumroad.com

 

12 Matcaps ideas | popular nail designs, sns nails, zbrush

 

www.pinterest.co.kr