PhysicallyBasedRendering기초 ! 기초 !카사 스터디 - 김혁
내용
Real Shading in Unreal Engine 4 문서 앞부분
Physically Based Rendering 의 기초를 다룸
디즈니의 PBR ( 비실시간 )-> 언리얼 엔진 4 의 근사를 통한 실시간 계산 방법을 설명
이번 발표에서는 IBL(Image Based Lighting) 만 다룸
디즈니 BRDF 의 원칙 (Principle)
물리적으로 올바르기보다는 아티스트 친화적일 것
물리적인 파라미터 보다는 직관적인 파라미터를 지향
가급적 적은 파라미터 , 가급적 0~1 범위로 조절
모든 파라미터의 조합은 견고 (robust) 하고 ,있음직해야함 (plausible)
언리얼 엔진 BRDF 의 원칙
기본적으로 디즈니의 BRDF 를 따름
리얼타임
가급적 적은 파라미터와직관적인 인터페이스 등은 디즈니와 동일
Perceptually Linear – 레이어링
Photorealistic/Non-photorealistic
사용되는 파라미터 ( 디즈니 )
줄인다며 !!!
사용되는 파라미터 ( 언리얼 엔진 4)
Rendering Equation
출처 : http://www.cc.gatech.edu/~turk/7490_stuff/talks.html
Rendering Equation
모든 방향 (Wi) 에서 x 로 들왔다가눈 방향 (Wo) 으로 나가는 것을 계산
= 픽셀
출처 : https://en.wikipedia.org/wiki/Rendering_equation
계산 (Diffuse 와 Specular 를 분리함 )
Microfacet Specular BRDF
Importance Sampling
중요하고 자주 등장하는 개념( 실시간 렌더링에서는 그렇게 자주 등장하진 않았음 )
Uniform Sampling 균일하게 샘플링한다 균일하게 더한다
Importance Sampling 기여도에 따라 확률을 만들고 ( 중요한 지점은 높은 확률 ) 기여도에 따라 값을 낮추고 더한다
Uniform Sampling
Importance Sampling
코 .. 코드를 보자…
1024 번 샘플링 코드
실제로는 안쓰이는 코드
그런데 돌아는감 . ( 반 실시간 )
Split Sum Approximation
수학적으로는 말도 안되는 근사 Li 를 상수처럼 여겨서 시그마 밖으로 뺀 후 다시 풀어버렸음
하지만 Roughness 가 높을 경우 ( 반구 샘플링 ) 어차피 엇비슷 Roughness 가 낮을 경우 ( 거울 , 글로시 ) 샘플링 주변 값들이 비슷 결과적으로 꽤 괜찮음 ( 오잉 ?)
Pre-Filtered Environment Map
이 부분
환경 맵을 계산함
여긴 Roughness 가 없는데 , Roughness 를 기준으로 미리 샘플링해둠
이 부분이 두번째 큰 근사 계산
원래는 Li 과 Lo 방향에 따라 모양이 달라짐 ( 예 , 타원 )
그걸 그냥 원으로 고정한 것임
즉 , 실시간에서만 알 수 있는 Li 과 Lo 의 의존이 없어짐
그렇게 함으로써
( 주의 : 실제 이 이미지는 아님 )
원본 환경 맵 (Roughness = 0) 을 기준으로 Roughness=1까지의 이미지를 미리 만들어둘 수 있음 ( 밉맵으로 저장 )
Environment BRDF
이걸 계산
잘 보면 Li( 환경 맵 ) 와 관련이 없음
이렇게 가정하고 풀면 다음의 공식이 나옴
f(BRDF) 와 F(Fresnel) 은 그냥 문서에 있는 거 대입하면 됨
Environment BRDF
방금의 계산을텍스쳐로 구워둠
이건 공통적으로 사용 가능
다시 코 .. 코드를 보자
밉맵으로 만들어둔 텍스쳐를 적당히 얻어옴
방금의 Lookup Texture
Diffuse + Specular
잠깐 ? 그럼 Metallic? 은 ?
Metal: Black * Diffuse BRDF + Albedo * Specular BRDF
Non-metal: Albedo * Diffuse BRDF + White * Specular BRDF
시행착오 및 팁 (Experiences)
예전에 Specular Color 로 썼던 것 대신 Roughness 를 쓸 것 Specular Color 와 Roughness 가 반대라고 생각하면 쉬움
유니티 엔진 5 와 Frostbite 엔진은 1-Roughness=Smooth 를 씀
Metalic 은 일반적으로 0 혹은 1 로만 세팅
결론
아직은 발전과 시행 착오 단계
엔진마다 구현 방법이나 도입하는 수식이 조금씩 다르다
기존 앰비언트 / 디퓨즈 / 스페큘러 컬러만 조절하던아티스트 들에게는 딴 세상
언리얼 엔진은 NPR 도 중요하게 생각하는데 ,현재 방법 (Specular Color 를 조절 못하는 환경 ) 에서는NPR 을 만들기 어려움
그래서 ( 인지 ) 유니티 5 는 PBR Material 을 두개를 만들었음 하나는 메탈릭을 조절 하나는 스페큘러 컬러 값을 조절 ( 아티스트 멘붕하겠다 )
출처 & 참고자료
SIGGRAPH 2012 Course:Practical Physically Based Shading in Film and Game Productionhttp://blog.selfshadow.com/publications/s2012-shading-course/ Physically Based Shading at Disney (Brent Burley)
SIGGRAPH 2013 Course:Physically Based Shading in Theory and Practicehttp://blog.selfshadow.com/publications/s2013-shading-course/ Real Shading in Unreal Engine 4 (Brian Karis)
SIGGRAPH 2014 Course:Physically Based Shading in Theory and Practicehttp://blog.selfshadow.com/publications/s2014-shading-course/ Moving Frostbite to PBR (Sébastien Lagarde & Charles de
Rousiers)