Search

'SHADER'에 해당되는 글 2건

  1. 2006/08/01 GPU Skinning
  2. 2006/06/04 Development shader system using Semantics

GPU Skinning

Game Dev./General 2006/08/01 19:10 Posted by sonee
기존에 캐릭터 애니메이션을 CPU 에서 처리 하던것을 GPU 로 옮겼다.
하루 종일 삽질끝에 완성-_-v
그러나.. 속도는 많이 빨라 졌지만 문제가 생겼다.-_-

만들고 있는 게임에선 렌더타겟이 많은데-_-;;;
렌더타겟 별로 그려줄 때 계속 GPU 에서 애니메이션 계산을 해야 한다는 것. ;;;

결국 속도는 비슷하게 나온다.. 렌더타겟이 화면에 출력되지 않을땐 빠르고..-_-
흐으으으;;;;

여튼 쉐이더 코드만 기하급수적으로 늘어나고 있다-_-;
라이팅 1개 일때, 2개일때-_-, 스페큘러 맵, 환경 맵, 노멀맵, 라이트맵-_-, 디스플래이스먼트맵-_-, 쉐도우맵, GPU 스키닝 여부, 그림자 렌더링;;; 등
경우의 수만큼 Technique 가 증가하고 있다.
OTL
TAG 3d, SHADER
보통 쉐이더를 사용하는 게임에서는 두 개 이상의 FX코드를 사용한다.
이렇게 FX코드 파일이 늘어날 수록 번거로운 부분은 C 코드 내에서 쉐이더 코드에 있는 변수로 값을 세팅해줄 때 동일한 변수명이 아니면 통일화된 쉐이더 구조를 개발하기 힘들다는 점이다.

그래서 HLSL 코드에서는 semantic 이라는 기능이 지원이 되고 각각 변수가 의미하는 것을 지정해줄 수 있다.
예를들면

float4 CameraPos : CAMERA_POSITION;

CameraPos 는 CAMERA_POSITION 이라는 것을 의미하게 된다.
따라서 이렇게 Semantic policy 만 잘 정의 해두면 여러 fx들을 손쉽게 교체하고, 사용할 수 있다.

이와 관련해서 FX 파일을 읽을 때 FX파일에 있는 모든 변수들에 대하여 semantic 이 있는 경우에는 미리 ShaderHandle 객체를 만들어 각각의 핸들을 세팅해 주면 런타임에 find shader-handle by semantic 을 수행하지 않고, 로딩시에 읽어 미리 세팅해놨던 핸들을 사용하여 탐색 시간을 줄일 수 있다.

또 이러한 구조를 만들어 사용하게 되면 편리한 부분은 sort by shaderHandle 이 가능하다는 점이고, batch process 의 퍼포먼스를 향상 시킬 수 있다.
semantic 에 대해서는 실수 하지 않도록 따로 헤더를 만들어 pre-def. 하여 사용하도록 하고, 예외 처리해야할 부분은 ShaderConstant 객체를 만들어 스크립트화 시켜 사용하거나, 상속을 사용하여 dynamic 하게 구현하도록 한다.

--
오늘도 역시나 셤공부하러 학교 나와서 밥먹고 블로그질을..ㅠㅠ
TAG 3d, SHADER, 설계