SlideShare uma empresa Scribd logo
1 de 9
Baixar para ler offline
UberShader 소개와 구현

      김성익(noerror@hitel.net)
                  2009.5.17
셰이더 프로그래밍의 어려움
• 조합의 폭발
  –   RimLight   가 있는 경우 없는 경우
  –   텍스처를       사용하는 경우 안하는 경우
  –   노말맵을       사용하는 경우 안하는 경우
  –   그림자가       드리우는 경우 드리우지 않는 경우
• 조합에 따른 셰이더 파일의 폭발적 증가
• 툴화의 어려움
  – 아티스트가 손쉽게 다룰 수 있는 환경 구축이 어려움
  – 기능 추가를 손쉽게 하면서 툴에 기능 추가 하기의 번거로움
셰이더 연동
•   그래프 편집
    –   다양한 조합이 가능
    –   거꾸로 조합의 다양성으로 인한 아티스트의 어려움
    –   툴 구현 작업과 연동의 난이도
    –   대표적인 케이스 : Unreal3, 초기 ProjectOffset, 엔트리브 왕리얼 차기 엔진 (^^)
•   Uber Shader
    – 많은 inhouse 엔진에서 사용 중
    – 특별히 셰이더를 제너럴하게 만들 필요가 없는 경우
    – 대표적인 케이스 : Crysis, ProjectOffset, 대부분의 inhouse 엔진
Uber Shader
• 하나의 셰이더로 모든 기능을 구현
• super shader 라고도 불림
• 그래프 편집과 비교
  –   몇 가지 기능 위주로 선택적으로 사용할 경우 그래프 편집보다도 편리
  –   아티스트의 셰이더 조합에 대한 스트레스 없이 기능을 적용
  –   지속적인 기능 추가를 위해선 전담 셰이더 프로그래머가 필요
  –   셰이더 종류가 한정적이어서 최적화에 유리
기본 아이디어
•   셰이더의 전처리기를 이용해서 셰이더 작성




•   셰이더 빌드시 셰이더 앞에 아래 코드를 선택적으로 삽입

•   기본 구현부는 동일한 uber shader를 사용하고 선택적으로 기능이 포함되도록 작성




•   (텍스처, 텍스처+상수색, 텍스처+버텍스 칼라등 쉽게 조합해서 사용 가능)
셰이더 변수 연동(1)
• 셰이더 코드에 필요한 변수들을 선택적으로 선언

• 코드에서는 GetParameterBySemantic(NULL, "BASETEXTURE") 혹
  은 GetParameterByName("texSampler0") 등으로 핸들 찾아서 세팅
셰이더 변수 연동(2)
• 외부에서 세팅해서 사용




• 변수 세팅하는 방법은 다양
• 변수 찾는 부분을 자동화 할 경우 사용하지 않는 변수는 빌드에 포
  함되지 않도록 해야 불필요한 세팅 시간을 줄일 수 있다
• tip
  – 실제로 셰이더 코드는 하나지만 선택적으로 생성된 effect는 여러개가
    되서 모든 변수를 매번 세팅
  – d3d에서 셰이더들 공통으로 사용하는 변수는 공유해서 사용가능
툴과 연동
• 기능 켜고 끄는 것을 ubershader 과 연동 (전처리 define)
• 기능을 on 했을 때 세팅을 해야 하는 파라메터들이 추가 되어 세팅
  할 수 있도록
• 아티스트 친화적으로 데이터 주도형으로 구현
• (참고영상:http://www.youtube.com/watch?v=utaMQFuwNHw)
요약
• Ubershader 셰이더 시스템 구현
  –   모든 기능을 구현한 셰이더 파일 (effect)
  –   선택적으로 셰이더 기능 활성 (전처리 코드와 ubershader조합)
  –   셰이더 세팅과 변수 연계
  –   선택된 기능별 셰이더 바이너리 캐싱 (prebuild)
• 아티스트를 위한 셰이더 설정 그래픽 툴 구현

Mais conteúdo relacionado

Destaque

스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 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
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipelinechangehee lee
 
NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트재철 황
 
[2012 대학특강] 아티스트 + 프로그래머
[2012 대학특강] 아티스트 + 프로그래머[2012 대학특강] 아티스트 + 프로그래머
[2012 대학특강] 아티스트 + 프로그래머포프 김
 
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기changehee lee
 
5강 알파와알파소팅
5강 알파와알파소팅5강 알파와알파소팅
5강 알파와알파소팅JP Jung
 
3강 shader fx 기초실습_텍스쳐 조작
3강 shader fx 기초실습_텍스쳐 조작3강 shader fx 기초실습_텍스쳐 조작
3강 shader fx 기초실습_텍스쳐 조작JP Jung
 
Rendering Tech of Space Marine
Rendering Tech of Space MarineRendering Tech of Space Marine
Rendering Tech of Space MarinePope Kim
 
TA가 뭐예요? (What is a Technical Artist? 블루홀스튜디오)
TA가 뭐예요? (What is a Technical Artist? 블루홀스튜디오)TA가 뭐예요? (What is a Technical Artist? 블루홀스튜디오)
TA가 뭐예요? (What is a Technical Artist? 블루홀스튜디오)valhashi
 
4강 shader fx 기초실습_텍스쳐 조작2
4강 shader fx 기초실습_텍스쳐 조작24강 shader fx 기초실습_텍스쳐 조작2
4강 shader fx 기초실습_텍스쳐 조작2JP Jung
 
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근MinGeun Park
 
Valient killzone ps4 lighting
Valient killzone ps4 lightingValient killzone ps4 lighting
Valient killzone ps4 lighting민웅 이
 
Microfacet brdf
Microfacet brdfMicrofacet brdf
Microfacet brdf민웅 이
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010devCAT Studio, NEXON
 
「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리
「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리
「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리민웅 이
 
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)민웅 이
 
[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기
[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기
[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기동석 김
 
Brdf기반 사전정의 스킨 셰이더
Brdf기반 사전정의 스킨 셰이더Brdf기반 사전정의 스킨 셰이더
Brdf기반 사전정의 스킨 셰이더동석 김
 

Destaque (20)

스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 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
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipeline
 
NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트
 
[2012 대학특강] 아티스트 + 프로그래머
[2012 대학특강] 아티스트 + 프로그래머[2012 대학특강] 아티스트 + 프로그래머
[2012 대학특강] 아티스트 + 프로그래머
 
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기
 
5강 알파와알파소팅
5강 알파와알파소팅5강 알파와알파소팅
5강 알파와알파소팅
 
3강 shader fx 기초실습_텍스쳐 조작
3강 shader fx 기초실습_텍스쳐 조작3강 shader fx 기초실습_텍스쳐 조작
3강 shader fx 기초실습_텍스쳐 조작
 
Rendering Tech of Space Marine
Rendering Tech of Space MarineRendering Tech of Space Marine
Rendering Tech of Space Marine
 
TA가 뭐예요? (What is a Technical Artist? 블루홀스튜디오)
TA가 뭐예요? (What is a Technical Artist? 블루홀스튜디오)TA가 뭐예요? (What is a Technical Artist? 블루홀스튜디오)
TA가 뭐예요? (What is a Technical Artist? 블루홀스튜디오)
 
4강 shader fx 기초실습_텍스쳐 조작2
4강 shader fx 기초실습_텍스쳐 조작24강 shader fx 기초실습_텍스쳐 조작2
4강 shader fx 기초실습_텍스쳐 조작2
 
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
 
Valient killzone ps4 lighting
Valient killzone ps4 lightingValient killzone ps4 lighting
Valient killzone ps4 lighting
 
Microfacet brdf
Microfacet brdfMicrofacet brdf
Microfacet brdf
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
 
「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리
「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리
「스퀘어 에닉스 오픈 컨퍼런스 2012」「Agni's Philosophy」비하인드 스토리
 
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
 
[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기
[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기
[Ndc13]Ndc 2013 김동석:UDK로 물리기반 셰이더 만들기
 
Brdf기반 사전정의 스킨 셰이더
Brdf기반 사전정의 스킨 셰이더Brdf기반 사전정의 스킨 셰이더
Brdf기반 사전정의 스킨 셰이더
 

Mais de noerror

15_TextureAtlas
15_TextureAtlas15_TextureAtlas
15_TextureAtlasnoerror
 
11_웹서비스활용
11_웹서비스활용11_웹서비스활용
11_웹서비스활용noerror
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 
KCGS11_실시간 피사계 심도 렌더링 개선 기법
KCGS11_실시간 피사계 심도 렌더링 개선 기법KCGS11_실시간 피사계 심도 렌더링 개선 기법
KCGS11_실시간 피사계 심도 렌더링 개선 기법noerror
 
11_통계 자료분석 입문
11_통계 자료분석 입문11_통계 자료분석 입문
11_통계 자료분석 입문noerror
 
11_빠른 개발 가능한 레벨 편집 시스템
11_빠른 개발 가능한 레벨 편집 시스템11_빠른 개발 가능한 레벨 편집 시스템
11_빠른 개발 가능한 레벨 편집 시스템noerror
 
11_SH를 이용한 실시간 투명 근사법
11_SH를 이용한 실시간 투명 근사법11_SH를 이용한 실시간 투명 근사법
11_SH를 이용한 실시간 투명 근사법noerror
 
ICON08_게임 애니메이션 최적화 기법
ICON08_게임 애니메이션 최적화 기법ICON08_게임 애니메이션 최적화 기법
ICON08_게임 애니메이션 최적화 기법noerror
 
08_Marching Cube Terrains
08_Marching Cube Terrains08_Marching Cube Terrains
08_Marching Cube Terrainsnoerror
 
08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드noerror
 
08_플래시 맛보기
08_플래시 맛보기08_플래시 맛보기
08_플래시 맛보기noerror
 
08_애니메이션고등학교 게임과 특강
08_애니메이션고등학교 게임과 특강08_애니메이션고등학교 게임과 특강
08_애니메이션고등학교 게임과 특강noerror
 
08_Wxwidgets 소개
08_Wxwidgets 소개08_Wxwidgets 소개
08_Wxwidgets 소개noerror
 
07_PhysX 강체물리 입문
07_PhysX 강체물리 입문07_PhysX 강체물리 입문
07_PhysX 강체물리 입문noerror
 
07_스케일폼 소개
07_스케일폼 소개07_스케일폼 소개
07_스케일폼 소개noerror
 
06_HDR 소개
06_HDR 소개06_HDR 소개
06_HDR 소개noerror
 
06_게임엔진 활용팁
06_게임엔진 활용팁06_게임엔진 활용팁
06_게임엔진 활용팁noerror
 
06_게임엔진구성
06_게임엔진구성06_게임엔진구성
06_게임엔진구성noerror
 
06_자동차물리입문(1)
06_자동차물리입문(1)06_자동차물리입문(1)
06_자동차물리입문(1)noerror
 
06_앰비언트어클루전 소개
06_앰비언트어클루전 소개06_앰비언트어클루전 소개
06_앰비언트어클루전 소개noerror
 

Mais de noerror (20)

15_TextureAtlas
15_TextureAtlas15_TextureAtlas
15_TextureAtlas
 
11_웹서비스활용
11_웹서비스활용11_웹서비스활용
11_웹서비스활용
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
KCGS11_실시간 피사계 심도 렌더링 개선 기법
KCGS11_실시간 피사계 심도 렌더링 개선 기법KCGS11_실시간 피사계 심도 렌더링 개선 기법
KCGS11_실시간 피사계 심도 렌더링 개선 기법
 
11_통계 자료분석 입문
11_통계 자료분석 입문11_통계 자료분석 입문
11_통계 자료분석 입문
 
11_빠른 개발 가능한 레벨 편집 시스템
11_빠른 개발 가능한 레벨 편집 시스템11_빠른 개발 가능한 레벨 편집 시스템
11_빠른 개발 가능한 레벨 편집 시스템
 
11_SH를 이용한 실시간 투명 근사법
11_SH를 이용한 실시간 투명 근사법11_SH를 이용한 실시간 투명 근사법
11_SH를 이용한 실시간 투명 근사법
 
ICON08_게임 애니메이션 최적화 기법
ICON08_게임 애니메이션 최적화 기법ICON08_게임 애니메이션 최적화 기법
ICON08_게임 애니메이션 최적화 기법
 
08_Marching Cube Terrains
08_Marching Cube Terrains08_Marching Cube Terrains
08_Marching Cube Terrains
 
08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드
 
08_플래시 맛보기
08_플래시 맛보기08_플래시 맛보기
08_플래시 맛보기
 
08_애니메이션고등학교 게임과 특강
08_애니메이션고등학교 게임과 특강08_애니메이션고등학교 게임과 특강
08_애니메이션고등학교 게임과 특강
 
08_Wxwidgets 소개
08_Wxwidgets 소개08_Wxwidgets 소개
08_Wxwidgets 소개
 
07_PhysX 강체물리 입문
07_PhysX 강체물리 입문07_PhysX 강체물리 입문
07_PhysX 강체물리 입문
 
07_스케일폼 소개
07_스케일폼 소개07_스케일폼 소개
07_스케일폼 소개
 
06_HDR 소개
06_HDR 소개06_HDR 소개
06_HDR 소개
 
06_게임엔진 활용팁
06_게임엔진 활용팁06_게임엔진 활용팁
06_게임엔진 활용팁
 
06_게임엔진구성
06_게임엔진구성06_게임엔진구성
06_게임엔진구성
 
06_자동차물리입문(1)
06_자동차물리입문(1)06_자동차물리입문(1)
06_자동차물리입문(1)
 
06_앰비언트어클루전 소개
06_앰비언트어클루전 소개06_앰비언트어클루전 소개
06_앰비언트어클루전 소개
 

09_UberShader

  • 1. UberShader 소개와 구현 김성익(noerror@hitel.net) 2009.5.17
  • 2. 셰이더 프로그래밍의 어려움 • 조합의 폭발 – RimLight 가 있는 경우 없는 경우 – 텍스처를 사용하는 경우 안하는 경우 – 노말맵을 사용하는 경우 안하는 경우 – 그림자가 드리우는 경우 드리우지 않는 경우 • 조합에 따른 셰이더 파일의 폭발적 증가 • 툴화의 어려움 – 아티스트가 손쉽게 다룰 수 있는 환경 구축이 어려움 – 기능 추가를 손쉽게 하면서 툴에 기능 추가 하기의 번거로움
  • 3. 셰이더 연동 • 그래프 편집 – 다양한 조합이 가능 – 거꾸로 조합의 다양성으로 인한 아티스트의 어려움 – 툴 구현 작업과 연동의 난이도 – 대표적인 케이스 : Unreal3, 초기 ProjectOffset, 엔트리브 왕리얼 차기 엔진 (^^) • Uber Shader – 많은 inhouse 엔진에서 사용 중 – 특별히 셰이더를 제너럴하게 만들 필요가 없는 경우 – 대표적인 케이스 : Crysis, ProjectOffset, 대부분의 inhouse 엔진
  • 4. Uber Shader • 하나의 셰이더로 모든 기능을 구현 • super shader 라고도 불림 • 그래프 편집과 비교 – 몇 가지 기능 위주로 선택적으로 사용할 경우 그래프 편집보다도 편리 – 아티스트의 셰이더 조합에 대한 스트레스 없이 기능을 적용 – 지속적인 기능 추가를 위해선 전담 셰이더 프로그래머가 필요 – 셰이더 종류가 한정적이어서 최적화에 유리
  • 5. 기본 아이디어 • 셰이더의 전처리기를 이용해서 셰이더 작성 • 셰이더 빌드시 셰이더 앞에 아래 코드를 선택적으로 삽입 • 기본 구현부는 동일한 uber shader를 사용하고 선택적으로 기능이 포함되도록 작성 • (텍스처, 텍스처+상수색, 텍스처+버텍스 칼라등 쉽게 조합해서 사용 가능)
  • 6. 셰이더 변수 연동(1) • 셰이더 코드에 필요한 변수들을 선택적으로 선언 • 코드에서는 GetParameterBySemantic(NULL, "BASETEXTURE") 혹 은 GetParameterByName("texSampler0") 등으로 핸들 찾아서 세팅
  • 7. 셰이더 변수 연동(2) • 외부에서 세팅해서 사용 • 변수 세팅하는 방법은 다양 • 변수 찾는 부분을 자동화 할 경우 사용하지 않는 변수는 빌드에 포 함되지 않도록 해야 불필요한 세팅 시간을 줄일 수 있다 • tip – 실제로 셰이더 코드는 하나지만 선택적으로 생성된 effect는 여러개가 되서 모든 변수를 매번 세팅 – d3d에서 셰이더들 공통으로 사용하는 변수는 공유해서 사용가능
  • 8. 툴과 연동 • 기능 켜고 끄는 것을 ubershader 과 연동 (전처리 define) • 기능을 on 했을 때 세팅을 해야 하는 파라메터들이 추가 되어 세팅 할 수 있도록 • 아티스트 친화적으로 데이터 주도형으로 구현 • (참고영상:http://www.youtube.com/watch?v=utaMQFuwNHw)
  • 9. 요약 • Ubershader 셰이더 시스템 구현 – 모든 기능을 구현한 셰이더 파일 (effect) – 선택적으로 셰이더 기능 활성 (전처리 코드와 ubershader조합) – 셰이더 세팅과 변수 연계 – 선택된 기능별 셰이더 바이너리 캐싱 (prebuild) • 아티스트를 위한 셰이더 설정 그래픽 툴 구현