Your SlideShare is downloading. ×
  • Like
Shader compilation
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Shader compilation

  • 936 views
Published

kasastudy

kasastudy

Published in Engineering
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
936
On SlideShare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
14
Comments
0
Likes
11

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. Shader Compilation 이창희(cagetu79@gmail.com) @cagetu #kasastudy
  • 2. Agenda • Shader – HLSL / GLSL • Shader Build – Shader Graph – Uber Shader • Mobile Shader • Shader Compilation
  • 3. Shader • 렌더링 파이프라인을 직접 프로그래밍할 수 있다! • 고정 파이프라인 / 프로그래머블 파이프라인 • HLSL – DirectX에서 사용하는 고수준 셰이더 언어 – Shader Model 버전별로 스펙이 다름 – DirectX11.2 / SM 5.0 최신 • GLSL – OpenGL에서 사용하는 고수준 셰이더 언어 – OpenGL / OpenGL ES 버전 별로 스펙이 다름
  • 4. Shader Build • 초창기 셰이더는 프로그래머가 셰이더 코 드를 작성 • 어셈 셰이더 • 고수준 셰이더 언어 (cg, hlsl, glsl, …) • But, 셰이더의 응용 범위가 늘어나면서, 복 잡도가 높아짐
  • 5. Shader Explosion • 셰이더 조합의 폭발! • Static or Skinned Model • +Lighting (or No Light) • +Shadow (or No Shadow) • +Cartoon (or No Cartoon) • +Etc.. • 추가할 때마다 조합의 경우의 수가 제곱으로 폭발!!!
  • 6. Shader Explosion • 포스트 프로세싱의 발전 • 유저의 PC 사양의 다양화 • 셰이더의 표현 가능한 스펙트럼이 넓어짐 • 유저의 PC 환경이나 게임의 그래픽 타겟 에 맞게 유연하게 셰이더가 연동되어야 함 • “다양한 기능 + 다양한 환경”
  • 7. • 모든 경우의 수를 코딩해야 한다면!!!
  • 8. Shader Explosion Solution • 조합형 셰이더 – 독립된 단일 기능에 대한 셰이더 코드 유닛을 작 성 – 셰이더 코드 유닛을 조합해서 셰이더 코드 완성 • Uber 셰이더 – 전체적으로 모든 기능의 셰이더 코드를 작성하고 필요한 기능만 On/Off 해서 필요한 기능만 사용
  • 9. [UDK : DefaultVertexShader.msf]
  • 10. Shader Editing • 셰이더가 프로그래밍을 해야 하는 과정이지 만, 최종 결과는 아티스트 영역 • 아티스트들이 좀 더 셰이더를 다양하고 손쉽 게 다루고자 하는 Needs가 생김 • 1. 셰이더를 배운다. • 2. 비주얼 프로그래머에게 친한 척 한다. • 3. 비주얼 프로그래머를 툴을 만들어 달라고 협박(?) 한 다. • 결국 Iteration의 문제!
  • 11. Shader Editor • Shader Explosion / Shader Editing을 해결 할 수 있는 방법이 없을까? • 나름의 방식으로 “Shader Editor”가 발전 • 전통적인 방식의 “Shader Graph Editor” • 변칙적인 방식의 “Uber Shader Editor”
  • 12. Shader Graph Editor
  • 13. Uber Shader Editor
  • 14. Cross Platform • 모바일 게임 시대에 도래! • PC / Mobile 을 동시에 지원하는 것이 중요해 짐 • OpenGL ES의 중요성이 높아짐! • 즉, HLSL기반에서 GLSL기반으로 포팅이 필요 해짐! • 일반적으로 기존에 PC용 엔진 기반을 모바일 엔진으로 포팅
  • 15. UE3의 사례 • 초창기에는 엔진과 별도로 OpenGL ES 렌더러 포 팅을 진행 • 기존 셰이더 기반은 유닛 셰이더 조합 기반이었으 나, 모바일에서는 UberShader 방식을 사용 • 모바일 셰이더를 수작업으로 별도로 만듦 • 하지만, Editor는 같음 • 따라서, 별도의 모바일 작업 룰이 발생하고, 미묘 하게 공식도 달라짐
  • 16. Cross Platform • 셰이더를 새로 구현하거나 변경했을 경우, 포팅 및 관리가 어려워짐 – 셰이더 파일 자체의 파편화! • 실행해보기 전에는 잘 돌아가는지 알 수가 없음! • 같은 GLSL이라고 해도 플랫폼 별로 최적 화 이슈를 처리해야 할 필요도 생김
  • 17. • 모든 경우의 수를 코딩해야 한다면!!!
  • 18. 요구사항들. • 셰이더를 하나로 관리하고 싶음 • 에디터에서도 동일하게 사용하고 싶음 • 실행하기 전에 오류를 확인하고 싶음
  • 19. Shader Compilation • 시작은 유니티에서 먼저 시작 • Unity 3.0을 작업하면서 저 문제를 해결해보 고 싶었음 • 기존 PC 엔진에 모바일 포팅하는 것이 아니 라 완전히 새로운 구성이 필요해짐 • HLSL2GLSL • glsl-optimizer
  • 20. HLSL to GLSL Translator • 유니티 개발팀 Aras Pranckevičius 님이 주 도 • ATI에서 HLSL2GLSL이라는 예전 프로젝트 로 출발! Hlsl2glslfork 라이브러리화 • http://code.google.com/p/hlsl2glslfork/
  • 21. GLSL Optimizer • 변환은 성공하였으나, 모바일 환경에서는 매 우 느림. GLSL최적화 필요! • 우연히 Mesa3D 라이브러리에서 새로운 컴파 일러를 만들고 있다는 것을 알게 됨. • 참고해서 GLSL최적화 처리를 시도 glsl- optimizer를 만듦 • http://github.com/aras-p/glsl-optimizer
  • 22. UE4 • 같은 방식과 기반을 사용 • 전처리기만 mcpp로 사용 • hlslcc 라는 셰이더 Cross Compile 라이브 러리를 개발
  • 23. Metal API • IOS8에서 선보이는 새로운 랜더링 API • Metal Programming Guide • Metal Shading Language • Metal Shading Language Guide • “clang과 LLVM을 사용한다” • Unreal에서는 ShaderCompileWorker를 업데 이트 받으면 적용된다고 발표! • 셰이더 컴파일러가 내부적으로 컴파일 해주겠..
  • 24. Conclusion • 이거슨 게임 엔진에서 셰이더 시스템의 변천사 1. Shader Writing – Shader Explsion / Shader Editing Issue 2. Shader Generation / Uber Shader 3. Shader Editor – Graph Editor / Uber Shader 4. Cross Platform Issue – 셰이더 파편화 5. Shader Compilation – Compile / Optimize / Cache
  • 25. Conclusion • 이제 프로그래머가 드라이버에 맞춰서 셰이 더 최적화 하는 시대가 아니다! • 그래도 아티스트의 최적화가 가장 중요! • (개발 관점에서) 엔진에서 가장 중심에 있는 부 분이라고 생각. • 이 중심을 기반으로 데이터 구조와 렌더링 프로세스가 구성 • 관심 있게 보면 시대의 흐름이 보임
  • 26. 참고자료 • http://blogs.unity3d.com/2010/10/20/shader- compilation-for-multiple-platforms/ • http://aras-p.info/blog/2010/09/29/glsl-optimizer/ • http://www.slideshare.net/cagetu/gdc-14-bringing- unreal-engine-4-to-opengl • http://www.slideshare.net/cagetu/mobile- crossplatformchallenges-siggraph- 15528000?related=1&utm_campaign=related&utm_ medium=1&utm_source=2