본문 바로가기

툰렌더링 공부50

언리얼 엔진 뜯어보기 #6 4.26 셰이더 컴파일 중 강제종료했더니 엔진이 고장났다. 다시 빌드해야 할 것 같다. 수요일 아침의 산뜻한 출발. 컴파일을 중간에 그만두고 다시 켰더니 두개의 코어가 싸우며 데이터를 망가뜨린 모양이다. 그래서 한동안 고생. 하지만 팀 내 언리얼 전문가가 해결해 주셨다. 덕분에 오늘 공부 쉽니다. 내일은 스카이라이트를 알아보자. 4.27 언리얼에서 앰비언트 컬러를 조절하는 부분은 2가지가 있다. 하나는 라이트매스, 하나는 스카이라이트. 이 중 루멘은 라이트매스를 사용하지 않으므로 패스. 라이트맵이여, 안녕! 스카이 라이트 코드를 살펴보기 전에 먼저 스카이라이트의 특성부터 이해해보자. 내가 이해한 바로 기본은 IBR(Image Based Rendering)과 같다.다만 이걸 게임에서 캡처하느냐, 이미지를 .. 2023. 4. 26.
언리얼 엔진 뜯어보기 #5 4.21 회사일이 바빠서 한동안 엔진을 건드리지 못했다.어디까지 했었지? 마지막 글을 보니 셀프쉐도우의 색을 바꾸는 시도를 하고 있었다. 기록은 중요하다. LightAccumulator.ush에서 의심되는 부분을 바꿨었다. LightAccumulator_AddSplit()에서 그림자 정보를 CommonMultiplier라는 float3형으로 넘겨주는데, 이 정보에 색을 더해준다면 그림자 색을 밝게 보정할 수 있을 줄 알았지만, 실제로는 그렇지 않았다. 셀프쉐도우가 정말 CommonMultiplier뿐인가?를 확인할 필요가 있다. 먼저 이를 흰색으로 바꿔서 그림자가 사라지는 지 살펴보자. CommonMultiplier = 1; In.TotalLightDiffuse += DiffuseTotalLight * .. 2023. 4. 21.
언리얼 엔진 뜯어보기 #4 4.12 내가 수정하길 원하는 렌더링들은 대부분 베이스 패스 렌더에서 끝난다는 것은 알았다. 지금까지 가정한 것들을 정리해보면 루멘은 베이스 패스 렌더링 후 간접광을 한 번 더 덧그리는 식으로 구현된다. 그런데 베이스 패스렌더에서도 이미 간접광 계산은 되고 있다. 혹시 이것은 루멘이 아니라, 언리얼의 GI시스템이 기본으로 가지는 효과는 아닐까? 그렇다면 포워드 릿에서도 간접광이 계산이 될까? ...는 역시 안된다. 루멘이 맞다. 애초에 쓸만한 GI옵션의 선택지가 루멘뿐이다. 그럼 다시 베이스 패스의 렌더러로 돌아와보자. 라이팅 계산을 위한 BxDF의 색깔을 바꿔보자 아하- 해당 셰이더모델의 BxDF는 IntegrateBxDF()에서 호출된다. 그리고 이 함수는 AccumulateDynamicLightin.. 2023. 4. 12.
언리얼 엔진 뜯어보기 #3 4.5 회사일이 바빠서 한동안 엔진을 들여다보질 못했다. 최근에 알아본 것은 안티앨리어싱에 대해서인데 MSAA방식은, 적어도 포워드 셰이딩을 사용할 땐, PC에서 Masked머티리얼이 반투명으로 출력되는 버그를 일으킨다. 모바일에선 정상으로 나오는 걸로 보아 알파 투 커버리지 관련 코드가 말썽을 일으키는 게 아닐까 추정된다. PC게임 만들면서 포워드 + MSAA를 쓸 이유가 그닥없기 때문에 방치하고 있는 걸지도 모르겠다. 이제 다시 엔진뜯기 MRT[0]이 파이널컬러일 줄 알았는데 의외로 그렇지 않았다. MRT[2]의 알파값이 1이면 BaseColor핀에 꽂힌 컬러대로 간접광을 일으킨다. 이에 따라 MRT의 합성과정에 대해 살펴볼 필요가 있다. 챗GPT에게 물어보자 ...별로 도움이 안된다. 각 MRT는 .. 2023. 4. 5.