Your SlideShare is downloading. ×
0
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Shader Driven
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Shader Driven

1,400

Published on

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,400
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
21
Comments
0
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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

×