본문 바로가기

Engine Development

내 맘대로 Shader

728x90
반응형

현재 쉐이더 시스템 Effect 하나에 테크닉 여러개 붙혀놓고 if 문으로 분기 처리해서 열라 조잡하게 되어있다.. 이유는 하나인데 메쉬면 메쉬, 지형이면 지형 하나의 이펙트를 선언해서 이펙트 변환(Change)없이 쓸려하니 최적화면에서 참 괜찮다고 생각했는데... 코드가 늘어날때마다 쉐이더에 분기문 처리가... ㅜㅜ
UberShader를 사용한다면 define으로 선언해서 조금 코드 복잡하게 보일지 몰라도 분기문이 없어 GPU에서 처리는 빨리될텐데...
흠... 여기서 질문이 하나 있음..
1. Effect 변환없이 FX 파일에 여러개의 테크닉을 넣어놓고 메쉬를 랜더링할때
2. UberShader를 사용해서 Effect가 메쉬를 그릴때마다 바뀌지만 랜더링 속도

어떤게 좋을까요?

좀더 길게 설명하자면...

1. fx파일에 여러개의 랜더링 테크닉이 있음
랜더링시 초기 쉐이더 파라미터 바뀌지 않는것들은 처음에 한번만 세팅하면 끝
다른 메쉬들 그릴때는 월드뷰 메트릭스만 바꾸어서 넣으기만 하면 됨

유지보수가 조금 힘듬... 쉐이더에 분기가 많아지면 안좋음으로 계속해서 테크닉을 추가하는 형식으로 가야함
테크닉 A 는 기본 B는 스펙큘라만 C는 노말맵까지 D는 기타등등

2. fx파일에 define이 걸려있음 랜더링 테크닉은 하나
랜더링시에 각 메쉬의 이펙트를 불러와서 모든 정보를 새로 세팅해야함

이것도 코드는 좀 보기 그럼
중간중간에 있는 ifdef endif 이런거 때문에... 코드 길이가 계속 길어짐
하지만 유지보수는 쉽다 쉐이더 코드에 대한 최적화는 더 잘되어 있음
하지만 메쉬를 그릴때마다 이펙트가 바뀌므로 계속 새로 쉐이더 파라미터를 처음부터 다시 세팅해야함

고민이다... 어찌할까.. ㅜㅜ

728x90
반응형