추천중입니다.
닫기 블로그로 보내기


설정된 블로그가 없습니다.

블로그 설정하기

슬라이드를 블로그에 보내는 중입니다.
KGC2009 In-House 환경에서 Shader 통합
0
027180
cagetu 2009.10.11 00:29:47
마가린 바르기bookmarkr.netmetagsWzd.com네이버에 북마크하기다음에 북마크하기HanRSS에 북마크하기이올린에 북마크하기Pumfit에 글 올리기News2.0에 투고하기del.icio.us에 북마크하기
TAG
URL Copy_btn
EMBED Copy_btn
작성자가 등록한 다른 큐
댓글을 작성하기 위해서는 먼저 로그인 하셔야 합니다.
현재 댓글의 수는 0 개 입니다.
Page 0: Page 1: In-House 개발을 위한 Shader 통합 이창희 Page 2: Self-Introduction •現 CCR 엔진팀장 E-mail: cagetu79@gmail.com Blog: cagetu@egloos.com Page 3: Shader-Driven  Shader-Driven?  Game Engine에서 Shader를 사용하여, Rendering을 처리 하는 것이 일반화 됨.  그렇다면, 과연 Shader를 사용하여 Rendering을 효과적으로 처리하는 방법들 에 대해서도 한번 고민해봐야 하지 않을까? Page 4: Shader-Driven(Cont’)  Data-Driven과 비교해보면…  Shader의 변경만으로 다양한 효과를 낼 수 있으면 좋겠다.  C++의 코드를 수정하지 않고… Page 5: Contents  In-House Renderer의 개발 사례를 기반으로 ShaderDriven을 되돌아보자. • • • • • Shader Variable Binding Shader/Material System Shader Generator (UberShader/Material Editor) Post-Processing 후기 Page 6: Shader Variable Binding  처음 Shader를 작업한다면,  Shader Code 작성->Shader의 Variable들을 C++ Code에서 설정해준다. C++ Logic Shader Logic  만약, 이런 식으로 계속적인 작업을 한다면…  Shader에 변수들을 추가할 때마다, 매번 C++ Code를 수정함. Page 7: Shader Code의 Shader Variable과 C++ Code의 연결을 자동으로 할 수는 없을까? Page 8: Shader Variable Binding(Cont’)  Shader를 이용하여 새로운 기능을 구현하기 위해서, C++과 완젂히 독립적일 수는 없다. • Normal-Map 기능 추가 (vertex의 tangent (+binormal) 구현 필요) • GPU Skinning 기능 추가 (vertex blend 정보 및 bone matrix들 구현 필요) •… 하지만, 같은 기술 레벨의 기능을 추가하는 것은 C++을 수정하지 않고도 충분히 가능하다. • 또한, 변경에 대한 추가비용을 줄일 수 있다. (예, DOF의 장면Depth)  • C++과 완전 분리가 목표. (Data-Driven) Page 9: Shader Variable Binding(Cont’)  Effect (.fx) 파일은 소스 파일이 아닌, Data로 본다면, C++과 Effect파일이 분리될 수 있어야 한다 C++ Code를 연결할 수 있는 기능이 필요하다.  상수는 • Shader가 변경되어도, 자동을 Shader Variables와  외부에서 설정 가능 한 것들(material 변수들, texture 등…)  프로그램 내부에서 Bind해줘야 하는 것(matrix, 카메라 위치 등…) Page 10: 사례  Shader Variable의 Sementic이나 이름을 이용  정의된 Sementic이라면, C++ Code에 Mapping!!! Page 11: Shader  Shader의 사용 용도를 크게 나누어 보면, 1. Mesh나 Effect등에 재질을 표현하기 위해서 사용. 2. Post-Processing등에 사용되는 후처리 효과를 표현 하기 위해 사용. 3. …  1, 2번에 대해서 조금 더 자세히… Page 12: Shader-Material System  재질을 표현하는 Shader를 조금 더 효과적으로 사용하기 위해서, Shader를 포함한 더 큰 의미의 Material로 표현. Shader 기반의 Renderer를 작성하기 위해서는 Renderer 의 기본이 되는 Shader(Material) System이 필요하다. Material의 구성  Texture, Color, RenderState, Shader 등… Shader Mesh Material C++   Page 13: 사례  Material을 이용하여, Shader에 넣어주어야 Shader Variable들에 값을 넣어주자. Page 14: Shader 제작  현재 엔진에서 쉐이더를 작성하는 방법은 크게 3가지 정 도로 나눌 수 있는데, • Shader Code를 작성 수작업으로 작성. • Shader 작성 Tool을 이용하여 작성. (FX composer, RenderMonkey, ShaderFX…) • Shader Editor (Material Editor)을 구현하여 작성.  프로그래머가 C++에 Shader를 통합하는 방법이 경우에 따라서는 좋은 선택이 될 수도 있다. • UberShader가 괜찮은 해법이 될 수도 Page 15: Uber Shader  하나의 Shader로 모든 기능 구현  Super Shader라고도 불림  Shader의 젂처리기를 이용하여, Shader 작성  그래프 편집과 비교  몇 가지 기능 위주로 선택적으로 사용할 경우, 그래프 편집보다 편리  아티스트의 셰이더 조합에 대한 스트레스 없이 기능을 적용  지속적인 기능 추가를 위해선 젂담 셰이더 프로그래머가 필요  셰이더 종류가 한정적이이서 최적화에 유리  Material System과 함께 이용하면, Material System에서 설정된 값을 통하여, Shader의 다양한 조합을 설정할 수 있음. Page 16: 사례  Material에서 GlowMap을 추가한다면, Page 17: 툴과 연동  On/Off 형태로 기능을 끄고 켤 수 있도록…  Material + UberShader  참고 영상: http://www.youtube.com/watch?v=utaMQFuwNHw&hl=ko Page 18: Shader Editor    Shader Editor는 Kgc2008 에서 장언일님에 의해 소개 UE3의 Material Editor Shader Editor를 사용해야만 하는가? • http://realtimecollisiondetection.net/blog/?p=73 • http://diaryofagraphicsprogrammer.blogspot.com/2008/09/shader- workflow-why-shader-generators.html Page 19: 사례  Fragment(Node)는 만들 수 있다.   만든 노드를 순서대로 빌드하면, Shader Code를 뽑는 것도 어려운 일이 아니다. 단, Editor를 만드는 것은 GG. Page 20: Post-Processing  Post-Processing • Shader에 의존적이지만, 기반 시스템이 젂혀 다르다. • Material Editor 기반으로 Shader를 생성한다고 해도, Post- Processing의 Shader에 대해서는 다른 방식이 필요할 것이 다. • Post-Processing을 C++에서 구현하게 되면, 아마도 내부적 으로 비슷한 작업 방식을 가지는 지저분한 코드들이 반복적 으로 생성될 것이다. • Post-Processing 작업을 C++코드와 독립시킬 수 있는 시스 템이 필요. • ShaderX5권에 소개 된 Post-Process Effects In Design • Nubula3의 frameShader Page 21: Post-Processing  Post-Processing의 패턴을 살펴보면, 다음 과정을 반 복 1. RenderTarget 설정 2. 1번 타겟에 ScreenAlignedQuad에 장면 랜더링  원하는 Shader 처리 3. 이젂 랜더링된 텍스쳐(타겟)을 이용하여, 1번과 2번 작업을 반복. 4. FrameBuffer에 최종 랜더타겟의 텍스쳐 출력 Page 22: [ShaderX5. PostProcessing Effects in Design] Page 23: Post-Processing(Cont’)  패턴화 된 형태를 C++ Code에서 처리할 수 있도록 해주고, xml등의 외부에서 Post-Processing에 대해서 규정한다면,  Data-Driven 형태로, Post-Processing을 Shader와 xml 을 수정만으로도 처리가 가능.  Post-Processing 기능들의 On/Off에 대한 조합의 처 리도 의외로 갂단하게 처리할 수 있다.  각 기능들을 하나의 Node와 같이 처리하자! Page 24: 사례 [Nebula3. frame/dx9default.xml] Page 25: Summary • Shader Variable Binding • Shader 변수의 Sementic을 이용한 C++과 연결. • Shader/Material System • Material(.xml)에 정의된 텍스쳐, 색상 정보등을 정해진 Shader 변수에 설정해준다. • UberShader • UberShader를 사용하여, Shader 조합의 폭발을 해결 한다. 특히, Material(.xml)과 함께 사용. • Post-Processing • Post-Processing의 작업 패턴을 이용하여, xml등에서 설정할 수 있도록 하면, C++ Code의 변경을 줄일 수 있다. Page 26: 후기  C++에서 Shader와 연결하는 깔끔한 인터페이스를 만드는 것이 매우 어렵더라  Shader Logic과 C++ Logic 에서 처리할 것들을 잘 구 분하면, 더 깔끔해질 수 있을 것 같다.  Shader에서 처리하는 것이 그래도, 좀 깔끔한 듯.  추가되는 기능에 대해 동일한 인터페이스를 유지하는 것이 쉽지는 않다.  어느 정도 Code가 쌓이면, xml파일과 fx파일을 이용 해서, 왠만한 새로운 Shader의 추가 작업을 처리할 수 있더라.  Ex) NormalMap, SpecularMap 추가 Page 27: In-House 랜더러를 개발한다면, 자신에 상황이나 게임에 적합 한 Shader작업 방식에 대해서 한번 정도 고민해보자!!! Page 28: Page 29:  A/S 문의  http://cagetu.egloos.com/5091227 Page 30: Reference  Shaders and Metaprogramming  http://www.gamedev.net/reference/programming/features/ shadermet/ • Shader & Material System • http://www.gamedev.net/community/forums/topic.asp?to pic_id=169710&PageSize=25&WhichPage=1 • http://www.gamedev.net/community/forums/topic.asp?to pic_id=345563 • Visual Editor  http://gamecode.org/tt/entry/visualshadereditor  Nebula3  http://flohofwoe.blogspot.com/ Page 31: Page 32: