Nut엔진의 일부인 그래픽 엔진을 작성하면서 난해한 고민이 생겼다.
지금 셰이더 부분을 작성하는데, 과연 셰이더의 추상화된 개념을 무엇으로 해야하느냐를 두고서 며칠째 고민하고 있다. 다른 많은 엔진들에서의 구현과 'Direct3D ShaderX2'에서의 셰이더의 추상화 부분을 보면 모두 셰이더란 개념을 Material이란 개념으로 추상화했는데, 내 생각은 조금 다르다.
셰이더를 재질이라고 보기에는,
그러다 한참을 고민했는데, 마침 GPU Gems 1권에서 'Integrating Shaders into Applications'라는 매우 흥미로운 아티클을 읽게 되었다.
개념은 간단하다. 셰이더는 Shader로 두고 다만 셰이더의 파라메터들을 따로 모아 Material이란 개념으로 추상화하는 것이다. 고로 코드와 데이터의 분리가 이루어진 것이다.
그렇다면 Material은 일종의 프로퍼티 백 정도가 되겠는데, 이 프로퍼티를 어떻게 구현해야할지가 의문이다. 매 프레임마다 참조되기 때문에 성능 상의 요소도 따질 점이 많고, 보다 더 난해한 것은, 자료형이 서로 다른 것들을 한 데 묶어야 하기 때문이다.
좀 더 고민해봐야겠다.
지금 셰이더 부분을 작성하는데, 과연 셰이더의 추상화된 개념을 무엇으로 해야하느냐를 두고서 며칠째 고민하고 있다. 다른 많은 엔진들에서의 구현과 'Direct3D ShaderX2'에서의 셰이더의 추상화 부분을 보면 모두 셰이더란 개념을 Material이란 개념으로 추상화했는데, 내 생각은 조금 다르다.
셰이더를 재질이라고 보기에는,
- 셰이더는 재질을 구현하는 이상의 기능을 갖고 있다는 점이고,
- 둘은 각각 실행과 자료로서의 임무를 지니고 있다는 점에서
그러다 한참을 고민했는데, 마침 GPU Gems 1권에서 'Integrating Shaders into Applications'라는 매우 흥미로운 아티클을 읽게 되었다.
개념은 간단하다. 셰이더는 Shader로 두고 다만 셰이더의 파라메터들을 따로 모아 Material이란 개념으로 추상화하는 것이다. 고로 코드와 데이터의 분리가 이루어진 것이다.
그렇다면 Material은 일종의 프로퍼티 백 정도가 되겠는데, 이 프로퍼티를 어떻게 구현해야할지가 의문이다. 매 프레임마다 참조되기 때문에 성능 상의 요소도 따질 점이 많고, 보다 더 난해한 것은, 자료형이 서로 다른 것들을 한 데 묶어야 하기 때문이다.
좀 더 고민해봐야겠다.
TAG 셰이더





