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

More Related Content

What's hot

NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술Ki Hyunwoo
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
[박민근] 3 d렌더링 옵티마이징_5 최적화 전략
[박민근] 3 d렌더링 옵티마이징_5 최적화 전략[박민근] 3 d렌더링 옵티마이징_5 최적화 전략
[박민근] 3 d렌더링 옵티마이징_5 최적화 전략MinGeun Park
 
Unity3D로 풀3D web mmorpg 만들기
Unity3D로 풀3D web mmorpg 만들기Unity3D로 풀3D web mmorpg 만들기
Unity3D로 풀3D web mmorpg 만들기JP Jung
 
취미로 엔진 만들기
취미로 엔진 만들기취미로 엔진 만들기
취미로 엔진 만들기Jiho Choi
 
191019 Forward / Deferred Rendering
191019 Forward / Deferred Rendering191019 Forward / Deferred Rendering
191019 Forward / Deferred RenderingKWANGIL KIM
 
06_게임엔진구성
06_게임엔진구성06_게임엔진구성
06_게임엔진구성noerror
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 [KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 JiUng Choi
 
Porting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp appPorting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp appYEONG-CHEON YOU
 
[IGC 2017] 넷마블게임즈 한승진 - 게임서비스를 위한 프라이빗 클라우드
[IGC 2017] 넷마블게임즈 한승진 - 게임서비스를 위한 프라이빗 클라우드[IGC 2017] 넷마블게임즈 한승진 - 게임서비스를 위한 프라이빗 클라우드
[IGC 2017] 넷마블게임즈 한승진 - 게임서비스를 위한 프라이빗 클라우드강 민우
 
NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트재철 황
 
엔진, 툴, 그리고 스크립트
엔진, 툴, 그리고 스크립트엔진, 툴, 그리고 스크립트
엔진, 툴, 그리고 스크립트Kalito Viscra
 
[2012 대학특강] 아티스트 + 프로그래머
[2012 대학특강] 아티스트 + 프로그래머[2012 대학특강] 아티스트 + 프로그래머
[2012 대학특강] 아티스트 + 프로그래머포프 김
 
[KOR][E-Kor-Seminar 2014][1/8] Introduction of EFL and Enlightenment (Hermet)
[KOR][E-Kor-Seminar 2014][1/8] Introduction of EFL and Enlightenment (Hermet)[KOR][E-Kor-Seminar 2014][1/8] Introduction of EFL and Enlightenment (Hermet)
[KOR][E-Kor-Seminar 2014][1/8] Introduction of EFL and Enlightenment (Hermet)EnlightenmentProject
 
빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술YEONG-CHEON YOU
 
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전Sukwoo Lee
 
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템강 민우
 
[IGC 2017] 엔지메이킹 이대희 - 이제는 웹에서 게임을 만들 수 있는 환경 'Construct3를 바탕으로'
[IGC 2017] 엔지메이킹 이대희 - 이제는 웹에서 게임을 만들 수 있는 환경 'Construct3를 바탕으로'[IGC 2017] 엔지메이킹 이대희 - 이제는 웹에서 게임을 만들 수 있는 환경 'Construct3를 바탕으로'
[IGC 2017] 엔지메이킹 이대희 - 이제는 웹에서 게임을 만들 수 있는 환경 'Construct3를 바탕으로'강 민우
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기강 민우
 

What's hot (20)

NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
[박민근] 3 d렌더링 옵티마이징_5 최적화 전략
[박민근] 3 d렌더링 옵티마이징_5 최적화 전략[박민근] 3 d렌더링 옵티마이징_5 최적화 전략
[박민근] 3 d렌더링 옵티마이징_5 최적화 전략
 
Unity3D로 풀3D web mmorpg 만들기
Unity3D로 풀3D web mmorpg 만들기Unity3D로 풀3D web mmorpg 만들기
Unity3D로 풀3D web mmorpg 만들기
 
취미로 엔진 만들기
취미로 엔진 만들기취미로 엔진 만들기
취미로 엔진 만들기
 
191019 Forward / Deferred Rendering
191019 Forward / Deferred Rendering191019 Forward / Deferred Rendering
191019 Forward / Deferred Rendering
 
06_게임엔진구성
06_게임엔진구성06_게임엔진구성
06_게임엔진구성
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 [KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
 
Porting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp appPorting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp app
 
[IGC 2017] 넷마블게임즈 한승진 - 게임서비스를 위한 프라이빗 클라우드
[IGC 2017] 넷마블게임즈 한승진 - 게임서비스를 위한 프라이빗 클라우드[IGC 2017] 넷마블게임즈 한승진 - 게임서비스를 위한 프라이빗 클라우드
[IGC 2017] 넷마블게임즈 한승진 - 게임서비스를 위한 프라이빗 클라우드
 
NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트
 
엔진, 툴, 그리고 스크립트
엔진, 툴, 그리고 스크립트엔진, 툴, 그리고 스크립트
엔진, 툴, 그리고 스크립트
 
[2012 대학특강] 아티스트 + 프로그래머
[2012 대학특강] 아티스트 + 프로그래머[2012 대학특강] 아티스트 + 프로그래머
[2012 대학특강] 아티스트 + 프로그래머
 
[KOR][E-Kor-Seminar 2014][1/8] Introduction of EFL and Enlightenment (Hermet)
[KOR][E-Kor-Seminar 2014][1/8] Introduction of EFL and Enlightenment (Hermet)[KOR][E-Kor-Seminar 2014][1/8] Introduction of EFL and Enlightenment (Hermet)
[KOR][E-Kor-Seminar 2014][1/8] Introduction of EFL and Enlightenment (Hermet)
 
빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술
 
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
 
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
 
[IGC 2017] 엔지메이킹 이대희 - 이제는 웹에서 게임을 만들 수 있는 환경 'Construct3를 바탕으로'
[IGC 2017] 엔지메이킹 이대희 - 이제는 웹에서 게임을 만들 수 있는 환경 'Construct3를 바탕으로'[IGC 2017] 엔지메이킹 이대희 - 이제는 웹에서 게임을 만들 수 있는 환경 'Construct3를 바탕으로'
[IGC 2017] 엔지메이킹 이대희 - 이제는 웹에서 게임을 만들 수 있는 환경 'Construct3를 바탕으로'
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
 

Viewers also liked

QGIS 공식 Training Manual 한국어판
QGIS 공식 Training Manual 한국어판 QGIS 공식 Training Manual 한국어판
QGIS 공식 Training Manual 한국어판 SANGHEE SHIN
 
Build the Virtual Reality Web with A-Frame
Build the Virtual Reality Web with A-FrameBuild the Virtual Reality Web with A-Frame
Build the Virtual Reality Web with A-FrameMozilla VR
 
[1126 박민근] 비전엔진을 이용한 mmorpg 개발
[1126 박민근] 비전엔진을 이용한 mmorpg 개발[1126 박민근] 비전엔진을 이용한 mmorpg 개발
[1126 박민근] 비전엔진을 이용한 mmorpg 개발MinGeun Park
 
Asia bootcamp devclan
Asia bootcamp devclanAsia bootcamp devclan
Asia bootcamp devclanLee Jungpyo
 
07_Visual Shader Editor
07_Visual Shader Editor07_Visual Shader Editor
07_Visual Shader Editornoerror
 
NDC08_실시간비주얼그래프편집
NDC08_실시간비주얼그래프편집NDC08_실시간비주얼그래프편집
NDC08_실시간비주얼그래프편집noerror
 
Company of Heroes 2 (COH2) Rendering Technology: The cold facts of recreating...
Company of Heroes 2 (COH2) Rendering Technology: The cold facts of recreating...Company of Heroes 2 (COH2) Rendering Technology: The cold facts of recreating...
Company of Heroes 2 (COH2) Rendering Technology: The cold facts of recreating...Daniel Barrero
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)포프 김
 
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013devCAT Studio, NEXON
 
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhudMinGeun Park
 
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014NDOORS
 
10_Human Skin Rendering
10_Human Skin Rendering10_Human Skin Rendering
10_Human Skin Renderingnoerror
 
내 손에 픽셀을 쥐어다오
내 손에 픽셀을 쥐어다오내 손에 픽셀을 쥐어다오
내 손에 픽셀을 쥐어다오KwangSam Kim
 

Viewers also liked (20)

점, 선, 면
점, 선, 면점, 선, 면
점, 선, 면
 
Cocos2d 기초
Cocos2d 기초Cocos2d 기초
Cocos2d 기초
 
QGIS 공식 Training Manual 한국어판
QGIS 공식 Training Manual 한국어판 QGIS 공식 Training Manual 한국어판
QGIS 공식 Training Manual 한국어판
 
Build the Virtual Reality Web with A-Frame
Build the Virtual Reality Web with A-FrameBuild the Virtual Reality Web with A-Frame
Build the Virtual Reality Web with A-Frame
 
[1126 박민근] 비전엔진을 이용한 mmorpg 개발
[1126 박민근] 비전엔진을 이용한 mmorpg 개발[1126 박민근] 비전엔진을 이용한 mmorpg 개발
[1126 박민근] 비전엔진을 이용한 mmorpg 개발
 
How riot works
How riot worksHow riot works
How riot works
 
Asia bootcamp devclan
Asia bootcamp devclanAsia bootcamp devclan
Asia bootcamp devclan
 
WebVR
WebVRWebVR
WebVR
 
Inferred Lighting
Inferred LightingInferred Lighting
Inferred Lighting
 
The Producer
The ProducerThe Producer
The Producer
 
07_Visual Shader Editor
07_Visual Shader Editor07_Visual Shader Editor
07_Visual Shader Editor
 
NDC08_실시간비주얼그래프편집
NDC08_실시간비주얼그래프편집NDC08_실시간비주얼그래프편집
NDC08_실시간비주얼그래프편집
 
카툰 렌더링
카툰 렌더링카툰 렌더링
카툰 렌더링
 
Company of Heroes 2 (COH2) Rendering Technology: The cold facts of recreating...
Company of Heroes 2 (COH2) Rendering Technology: The cold facts of recreating...Company of Heroes 2 (COH2) Rendering Technology: The cold facts of recreating...
Company of Heroes 2 (COH2) Rendering Technology: The cold facts of recreating...
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
 
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013
 
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud[박민근] 3 d렌더링 옵티마이징_nv_perfhud
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
 
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
영웅의 군단의 테크니컬 아트 - 황재철, 유나이트 코리아 2014
 
10_Human Skin Rendering
10_Human Skin Rendering10_Human Skin Rendering
10_Human Skin Rendering
 
내 손에 픽셀을 쥐어다오
내 손에 픽셀을 쥐어다오내 손에 픽셀을 쥐어다오
내 손에 픽셀을 쥐어다오
 

Similar to Shader compilation

아이폰에 포팅해보기
아이폰에 포팅해보기아이폰에 포팅해보기
아이폰에 포팅해보기changehee lee
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Daum DNA
 
Development AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic APIDevelopment AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic APIYEONG-CHEON YOU
 
Cocos2d x a to z (상)
Cocos2d x a to z (상)Cocos2d x a to z (상)
Cocos2d x a to z (상)SeungIl Choi
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기Sumin Byeon
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍Chris Ohk
 
develop android app using intellij
develop android app using intellijdevelop android app using intellij
develop android app using intellijSewon Ann
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018devCAT Studio, NEXON
 
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍NDOORS
 
엔지니어링비젼_언리얼엔진4_커스텀______________________
엔지니어링비젼_언리얼엔진4_커스텀______________________엔지니어링비젼_언리얼엔진4_커스텀______________________
엔지니어링비젼_언리얼엔진4_커스텀______________________Kyoung Seok(경석) Ko(고)
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발Jeongkyu Shin
 
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기) FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기) YoungSu Son
 
SOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AISOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AIJoongi Kim
 
Crawling with AWS Lambda
Crawling with AWS LambdaCrawling with AWS Lambda
Crawling with AWS LambdaSeungho Kim
 
Unify data and model using Apache S2Graph and GraphQL.
Unify data and model using Apache S2Graph and GraphQL.Unify data and model using Apache S2Graph and GraphQL.
Unify data and model using Apache S2Graph and GraphQL.if kakao
 
2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈
2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈
2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈Changhwan Yi
 

Similar to Shader compilation (20)

아이폰에 포팅해보기
아이폰에 포팅해보기아이폰에 포팅해보기
아이폰에 포팅해보기
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012
 
Development AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic APIDevelopment AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic API
 
Cocos2d x a to z (상)
Cocos2d x a to z (상)Cocos2d x a to z (상)
Cocos2d x a to z (상)
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
 
Node.js in Flitto
Node.js in FlittoNode.js in Flitto
Node.js in Flitto
 
develop android app using intellij
develop android app using intellijdevelop android app using intellij
develop android app using intellij
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
(게임개발을위한) printf("Hello World!"); 그 이상의 콘솔 프로그래밍
 
엔지니어링 비젼_동영상제거.pptx
엔지니어링 비젼_동영상제거.pptx엔지니어링 비젼_동영상제거.pptx
엔지니어링 비젼_동영상제거.pptx
 
엔지니어링비젼_언리얼엔진4_커스텀______________________
엔지니어링비젼_언리얼엔진4_커스텀______________________엔지니어링비젼_언리얼엔진4_커스텀______________________
엔지니어링비젼_언리얼엔진4_커스텀______________________
 
RZDESK-Docker hackday
RZDESK-Docker hackdayRZDESK-Docker hackday
RZDESK-Docker hackday
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
 
Tizen UIFW - EFL
Tizen UIFW - EFLTizen UIFW - EFL
Tizen UIFW - EFL
 
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기) FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
 
SOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AISOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AI
 
Crawling with AWS Lambda
Crawling with AWS LambdaCrawling with AWS Lambda
Crawling with AWS Lambda
 
Unify data and model using Apache S2Graph and GraphQL.
Unify data and model using Apache S2Graph and GraphQL.Unify data and model using Apache S2Graph and GraphQL.
Unify data and model using Apache S2Graph and GraphQL.
 
2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈
2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈
2013 W3C HTML5 Day Conferences:HTML5 Game App 개발 및 이슈
 

More from changehee lee

Gdc 14 bringing unreal engine 4 to open_gl
Gdc 14 bringing unreal engine 4 to open_glGdc 14 bringing unreal engine 4 to open_gl
Gdc 14 bringing unreal engine 4 to open_glchangehee lee
 
Smedberg niklas bringing_aaa_graphics
Smedberg niklas bringing_aaa_graphicsSmedberg niklas bringing_aaa_graphics
Smedberg niklas bringing_aaa_graphicschangehee lee
 
Fortugno nick design_and_monetization
Fortugno nick design_and_monetizationFortugno nick design_and_monetization
Fortugno nick design_and_monetizationchangehee lee
 
Mobile crossplatformchallenges siggraph
Mobile crossplatformchallenges siggraphMobile crossplatformchallenges siggraph
Mobile crossplatformchallenges siggraphchangehee lee
 
개발 과정 최적화 하기 내부툴로 더욱 강력한 개발하기 Stephen kennedy _(11시40분_103호)
개발 과정 최적화 하기 내부툴로 더욱 강력한 개발하기 Stephen kennedy _(11시40분_103호)개발 과정 최적화 하기 내부툴로 더욱 강력한 개발하기 Stephen kennedy _(11시40분_103호)
개발 과정 최적화 하기 내부툴로 더욱 강력한 개발하기 Stephen kennedy _(11시40분_103호)changehee lee
 
개발자여! 스터디를 하자!
개발자여! 스터디를 하자!개발자여! 스터디를 하자!
개발자여! 스터디를 하자!changehee lee
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희changehee lee
 
Gamificated game developing
Gamificated game developingGamificated game developing
Gamificated game developingchangehee lee
 
Windows to reality getting the most out of direct3 d 10 graphics in your games
Windows to reality   getting the most out of direct3 d 10 graphics in your gamesWindows to reality   getting the most out of direct3 d 10 graphics in your games
Windows to reality getting the most out of direct3 d 10 graphics in your gameschangehee lee
 
Basic ofreflectance kor
Basic ofreflectance korBasic ofreflectance kor
Basic ofreflectance korchangehee lee
 
Valve handbook low_res
Valve handbook low_resValve handbook low_res
Valve handbook low_reschangehee lee
 
아빠 개발자로 살아남기
아빠 개발자로 살아남기아빠 개발자로 살아남기
아빠 개발자로 살아남기changehee lee
 
R banninga visual_arts_specingoutaaa
R banninga visual_arts_specingoutaaaR banninga visual_arts_specingoutaaa
R banninga visual_arts_specingoutaaachangehee lee
 
Shadow mapping 정리
Shadow mapping 정리Shadow mapping 정리
Shadow mapping 정리changehee lee
 

More from changehee lee (20)

Visual shock vol.2
Visual shock   vol.2Visual shock   vol.2
Visual shock vol.2
 
Gdc 14 bringing unreal engine 4 to open_gl
Gdc 14 bringing unreal engine 4 to open_glGdc 14 bringing unreal engine 4 to open_gl
Gdc 14 bringing unreal engine 4 to open_gl
 
Smedberg niklas bringing_aaa_graphics
Smedberg niklas bringing_aaa_graphicsSmedberg niklas bringing_aaa_graphics
Smedberg niklas bringing_aaa_graphics
 
Fortugno nick design_and_monetization
Fortugno nick design_and_monetizationFortugno nick design_and_monetization
Fortugno nick design_and_monetization
 
Paper games 2013
Paper games 2013Paper games 2013
Paper games 2013
 
V8
V8V8
V8
 
Wecanmakeengine
WecanmakeengineWecanmakeengine
Wecanmakeengine
 
Mobile crossplatformchallenges siggraph
Mobile crossplatformchallenges siggraphMobile crossplatformchallenges siggraph
Mobile crossplatformchallenges siggraph
 
개발 과정 최적화 하기 내부툴로 더욱 강력한 개발하기 Stephen kennedy _(11시40분_103호)
개발 과정 최적화 하기 내부툴로 더욱 강력한 개발하기 Stephen kennedy _(11시40분_103호)개발 과정 최적화 하기 내부툴로 더욱 강력한 개발하기 Stephen kennedy _(11시40분_103호)
개발 과정 최적화 하기 내부툴로 더욱 강력한 개발하기 Stephen kennedy _(11시40분_103호)
 
개발자여! 스터디를 하자!
개발자여! 스터디를 하자!개발자여! 스터디를 하자!
개발자여! 스터디를 하자!
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희
 
Light prepass
Light prepassLight prepass
Light prepass
 
Gamificated game developing
Gamificated game developingGamificated game developing
Gamificated game developing
 
Windows to reality getting the most out of direct3 d 10 graphics in your games
Windows to reality   getting the most out of direct3 d 10 graphics in your gamesWindows to reality   getting the most out of direct3 d 10 graphics in your games
Windows to reality getting the most out of direct3 d 10 graphics in your games
 
Basic ofreflectance kor
Basic ofreflectance korBasic ofreflectance kor
Basic ofreflectance kor
 
C++11(최지웅)
C++11(최지웅)C++11(최지웅)
C++11(최지웅)
 
Valve handbook low_res
Valve handbook low_resValve handbook low_res
Valve handbook low_res
 
아빠 개발자로 살아남기
아빠 개발자로 살아남기아빠 개발자로 살아남기
아빠 개발자로 살아남기
 
R banninga visual_arts_specingoutaaa
R banninga visual_arts_specingoutaaaR banninga visual_arts_specingoutaaa
R banninga visual_arts_specingoutaaa
 
Shadow mapping 정리
Shadow mapping 정리Shadow mapping 정리
Shadow mapping 정리
 

Shader compilation

  • 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 해서 필요한 기능만 사용
  • 10. Shader Editing • 셰이더가 프로그래밍을 해야 하는 과정이지 만, 최종 결과는 아티스트 영역 • 아티스트들이 좀 더 셰이더를 다양하고 손쉽 게 다루고자 하는 Needs가 생김 • 1. 셰이더를 배운다. • 2. 비주얼 프로그래머에게 친한 척 한다. • 3. 비주얼 프로그래머를 툴을 만들어 달라고 협박(?) 한 다. • 결국 Iteration의 문제!
  • 11. Shader Editor • Shader Explosion / Shader Editing을 해결 할 수 있는 방법이 없을까? • 나름의 방식으로 “Shader Editor”가 발전 • 전통적인 방식의 “Shader Graph Editor” • 변칙적인 방식의 “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.
  • 23. UE4 • 같은 방식과 기반을 사용 • 전처리기만 mcpp로 사용 • hlslcc 라는 셰이더 Cross Compile 라이브 러리를 개발
  • 24.
  • 25. Metal API • IOS8에서 선보이는 새로운 랜더링 API • Metal Programming Guide • Metal Shading Language • Metal Shading Language Guide • “clang과 LLVM을 사용한다” • Unreal에서는 ShaderCompileWorker를 업데 이트 받으면 적용된다고 발표! • 셰이더 컴파일러가 내부적으로 컴파일 해주겠..
  • 26. 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
  • 27. Conclusion • 이제 프로그래머가 드라이버에 맞춰서 셰이 더 최적화 하는 시대가 아니다! • 그래도 아티스트의 최적화가 가장 중요! • (개발 관점에서) 엔진에서 가장 중심에 있는 부 분이라고 생각. • 이 중심을 기반으로 데이터 구조와 렌더링 프로세스가 구성 • 관심 있게 보면 시대의 흐름이 보임
  • 28. 참고자료 • 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