SlideShare une entreprise Scribd logo
1  sur  31
Télécharger pour lire hors ligne
Visual Shader Editor

                     2007.06.23
                         김성익
                     noerror@hitel.net
            http://www.gamecode.org
개요
• 셰이더의 발전과 대중화

• HLSL 코드 작성의 어려움
 – 활용도가 높아짐에 따라 다수의 셰이더 코드
   를 관리하기가 힘들어짐
   => 동적인 셰이더 코드 조합식 방식으로 접근
개요
 – 아티스트들이 접근하기 어려움
   => 아티스트를 위한 HLSL 도구 등장


• 차세대 엔진의 기본 구성 요소
그래프 인터페이스
• 다양한 셰이더 코드를 쉽게 생성
• 아티스트들이 작성 가능
• 직관적이고 편리함

• 도입사례
 – ShaderFX
 – Unreal3
 – Project Offset
ShaderFX
• Autodesk 3ds Max 플러그인
• 아티스트를 위한 셰이더 에디터
ShaderFX
• 실시간 확인 가능
• FX 파일로 export 가능
    – 일반 엔진에서 사용 가능
•   확장 가능
•   저렴
•   명령어 단위의 노드들
•   (참고동영상)
• http://www.lumonix.net/
Unreal3
• 언리얼3 엔진 전용
•   http://www.unrealtechnology.com/
• (참고영상)
Project Offset
• 엔진 전용
•   http://www.projectoffset.com
• (참고영상)
셰이더 에디터 구현
• 자체 엔진을 위한 inhouse 툴 사례 소개
• (universal graph편집 사용한 shader edit)

• 사전준비
  – 노드 베이스의 그래프를 렌더링할 툴 킷 작성
    (개발 초기 단계임)
  – hlsl shader 코드 적용 가능한 그래픽 엔진 작
    성 (개발 초기 단계임)
  – xml 기반의 데이터 엔진
셰이더 에디터 구현 이슈
• 기본 이슈
 – HLSL 함수의 구성 분석
 – 그래프화 (노드화)
• 베이스가 될만한
  기본 셰이더 코드
• HLSL 코드는 공통
  적으로 다음과 6
  부분으로 구성됨
• 버텍스 입력과 관
  련 있는 부분
• 텍스처 출력과 관
  련 있는 부분
 – 버텍스 셰이더에
   입력이 픽셀 셰이
   더에 출력이 있음
 – 버텍스 셰이더 출
   력 데이터를 통해
   서 전달
• 출력과 관련 있는
  부분
 – 최종 버텍스 값도
   출력 함수 노드에
   포함
HLSL특성
• 실제 셰이더 코드는 컴파일 되어 생성
• HLSL 단계에서는 최적화 불필요
• 아래 두 코드 동일한 결과
HLSL특성
• 중간 변수를 활용 가능
• 중간 변수를 사용해
  서 다시 정리해본 셰
  이더 코드
• 각 함수 분리 가능
그래프화
• 노드
 – 각 노드는 서브 노드 input node, out node 를 가짐
 – 고유 id 를 가지고 있음
   (중간 변수 등에 사용됨)
노드 구성
• 입력 노드 구성
노드 구성
• 텍스처 출력 노드 구
  성
노드 구성
• 출력 노드 구성
그래프화
• 링크
 – Output node -> input node
 – 노트 연결 제한
   • 같은 데이터형
   • VS->VS, PS->PS
 – 노드간 임시 변수를 사용해 전달
조합
• 각 노드별로 input node, output node를
  정의하고 필요한 셰이더 코드를 작성
• 연결 순서에 맞도록 정렬 후 코드 생성
노드 정렬
• 최종 노드에서 출발
• 리스트에 있는 제일 앞 노드에서 추가 안된 입
  력 노드를 사이에 추가
• 노드의 순서는 모든 노드에 대해서 (출력노드를 가진
  노드 => 입력노드를 가진 노드)의 순서가 된다
셰이더 코드 조합
• 순서대로 정해진 코드를 조합
• %id 는 노드 고유 값으로 치환
• %(nodeid) 도 고유 값으로 치환

• 함수 부는 중복해서 더하지 않음
• 합성 결과
• (데모시연)
기타
•   n개의 출력 (RGB,RGBA, R, G, B)
•   데이터 캐스팅
•   생략 가능한 입력 노드
•   멀티패스
•   셰이더 노드 추가

• 오브젝트 – 머트리얼 - 셰이더
기타
• 생성한 FX파일 3ds MAX 에서 import
•   http://sparks.discreet.com/knowledgebase/techdocs/searchable/techd
    oc_DXMaterialFormat/DxMaterial_Effect_format.htm
기타
• HLSL과 엔진 연동 이슈
  segmantics, annontation

• 셰이더 공유
• 다수의 technique (그림자 렌더링 등)
질문

Contenu connexe

Similaire à 07_Visual Shader Editor

Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipelinechangehee lee
 
The Architecture of Open Source Applications : GDB
The Architecture of Open Source Applications : GDBThe Architecture of Open Source Applications : GDB
The Architecture of Open Source Applications : GDBSanghoon Lee
 
ASP.NET MVC Framework 개발자를 위한 Razor Syntax.pdf
ASP.NET MVC Framework 개발자를 위한 Razor Syntax.pdfASP.NET MVC Framework 개발자를 위한 Razor Syntax.pdf
ASP.NET MVC Framework 개발자를 위한 Razor Syntax.pdfSangHoon Han
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
2006 03 15_pe & api hook
2006 03 15_pe & api hook2006 03 15_pe & api hook
2006 03 15_pe & api hook용환 노
 
Unity Surface Shader for Artist 01
Unity Surface Shader for Artist 01Unity Surface Shader for Artist 01
Unity Surface Shader for Artist 01SangYun Yi
 
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)khuhacker
 
서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기YEONG-CHEON YOU
 
Main Variable Program
Main Variable ProgramMain Variable Program
Main Variable Program경섭 심
 
Windows reversing study_basic_7
Windows reversing study_basic_7Windows reversing study_basic_7
Windows reversing study_basic_7Jinkyoung Kim
 
[Step UP! 마이그레이션] RAD 업그레이드 마이그레이션_점검과 수행
[Step UP! 마이그레이션] RAD 업그레이드 마이그레이션_점검과 수행[Step UP! 마이그레이션] RAD 업그레이드 마이그레이션_점검과 수행
[Step UP! 마이그레이션] RAD 업그레이드 마이그레이션_점검과 수행Devgear
 
06_게임엔진구성
06_게임엔진구성06_게임엔진구성
06_게임엔진구성noerror
 
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013devCAT Studio, NEXON
 
Quick & Dirty Tips for x64 hooks
Quick & Dirty Tips for x64 hooksQuick & Dirty Tips for x64 hooks
Quick & Dirty Tips for x64 hooks용환 노
 
자바 8
자바 8자바 8
자바 8신 한
 
이펙트 쉐이더 1강 - Shader 기초 개념
이펙트 쉐이더 1강 - Shader 기초 개념이펙트 쉐이더 1강 - Shader 기초 개념
이펙트 쉐이더 1강 - Shader 기초 개념Jihoo Oh
 

Similaire à 07_Visual Shader Editor (20)

Shader compilation
Shader compilationShader compilation
Shader compilation
 
Asp.net Razor
Asp.net Razor Asp.net Razor
Asp.net Razor
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipeline
 
The Architecture of Open Source Applications : GDB
The Architecture of Open Source Applications : GDBThe Architecture of Open Source Applications : GDB
The Architecture of Open Source Applications : GDB
 
ASP.NET MVC Framework 개발자를 위한 Razor Syntax.pdf
ASP.NET MVC Framework 개발자를 위한 Razor Syntax.pdfASP.NET MVC Framework 개발자를 위한 Razor Syntax.pdf
ASP.NET MVC Framework 개발자를 위한 Razor Syntax.pdf
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
2006 03 15_pe & api hook
2006 03 15_pe & api hook2006 03 15_pe & api hook
2006 03 15_pe & api hook
 
Unity Surface Shader for Artist 01
Unity Surface Shader for Artist 01Unity Surface Shader for Artist 01
Unity Surface Shader for Artist 01
 
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
 
서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기
 
Main Variable Program
Main Variable ProgramMain Variable Program
Main Variable Program
 
Shader Driven
Shader DrivenShader Driven
Shader Driven
 
Windows reversing study_basic_7
Windows reversing study_basic_7Windows reversing study_basic_7
Windows reversing study_basic_7
 
[Step UP! 마이그레이션] RAD 업그레이드 마이그레이션_점검과 수행
[Step UP! 마이그레이션] RAD 업그레이드 마이그레이션_점검과 수행[Step UP! 마이그레이션] RAD 업그레이드 마이그레이션_점검과 수행
[Step UP! 마이그레이션] RAD 업그레이드 마이그레이션_점검과 수행
 
Open Jig Ware
Open Jig WareOpen Jig Ware
Open Jig Ware
 
06_게임엔진구성
06_게임엔진구성06_게임엔진구성
06_게임엔진구성
 
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013
 
Quick & Dirty Tips for x64 hooks
Quick & Dirty Tips for x64 hooksQuick & Dirty Tips for x64 hooks
Quick & Dirty Tips for x64 hooks
 
자바 8
자바 8자바 8
자바 8
 
이펙트 쉐이더 1강 - Shader 기초 개념
이펙트 쉐이더 1강 - Shader 기초 개념이펙트 쉐이더 1강 - Shader 기초 개념
이펙트 쉐이더 1강 - Shader 기초 개념
 

Plus de noerror

15_TextureAtlas
15_TextureAtlas15_TextureAtlas
15_TextureAtlasnoerror
 
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_게임엔진 활용팁
06_게임엔진 활용팁06_게임엔진 활용팁
06_게임엔진 활용팁noerror
 
05_Reliable UDP 구현
05_Reliable UDP 구현05_Reliable UDP 구현
05_Reliable UDP 구현noerror
 
05_스마트 포인터 구현하기
05_스마트 포인터 구현하기05_스마트 포인터 구현하기
05_스마트 포인터 구현하기noerror
 
05_벡터와 매트릭스
05_벡터와 매트릭스05_벡터와 매트릭스
05_벡터와 매트릭스noerror
 
05_STL컨테이너정리
05_STL컨테이너정리05_STL컨테이너정리
05_STL컨테이너정리noerror
 
05_동기화_개요
05_동기화_개요05_동기화_개요
05_동기화_개요noerror
 

Plus de noerror (20)

15_TextureAtlas
15_TextureAtlas15_TextureAtlas
15_TextureAtlas
 
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_게임엔진 활용팁
06_게임엔진 활용팁06_게임엔진 활용팁
06_게임엔진 활용팁
 
05_Reliable UDP 구현
05_Reliable UDP 구현05_Reliable UDP 구현
05_Reliable UDP 구현
 
05_스마트 포인터 구현하기
05_스마트 포인터 구현하기05_스마트 포인터 구현하기
05_스마트 포인터 구현하기
 
05_벡터와 매트릭스
05_벡터와 매트릭스05_벡터와 매트릭스
05_벡터와 매트릭스
 
05_STL컨테이너정리
05_STL컨테이너정리05_STL컨테이너정리
05_STL컨테이너정리
 
05_동기화_개요
05_동기화_개요05_동기화_개요
05_동기화_개요
 

07_Visual Shader Editor

  • 1. Visual Shader Editor 2007.06.23 김성익 noerror@hitel.net http://www.gamecode.org
  • 2. 개요 • 셰이더의 발전과 대중화 • HLSL 코드 작성의 어려움 – 활용도가 높아짐에 따라 다수의 셰이더 코드 를 관리하기가 힘들어짐 => 동적인 셰이더 코드 조합식 방식으로 접근
  • 3. 개요 – 아티스트들이 접근하기 어려움 => 아티스트를 위한 HLSL 도구 등장 • 차세대 엔진의 기본 구성 요소
  • 4. 그래프 인터페이스 • 다양한 셰이더 코드를 쉽게 생성 • 아티스트들이 작성 가능 • 직관적이고 편리함 • 도입사례 – ShaderFX – Unreal3 – Project Offset
  • 5. ShaderFX • Autodesk 3ds Max 플러그인 • 아티스트를 위한 셰이더 에디터
  • 6. ShaderFX • 실시간 확인 가능 • FX 파일로 export 가능 – 일반 엔진에서 사용 가능 • 확장 가능 • 저렴 • 명령어 단위의 노드들 • (참고동영상) • http://www.lumonix.net/
  • 7. Unreal3 • 언리얼3 엔진 전용 • http://www.unrealtechnology.com/ • (참고영상)
  • 8. Project Offset • 엔진 전용 • http://www.projectoffset.com • (참고영상)
  • 9. 셰이더 에디터 구현 • 자체 엔진을 위한 inhouse 툴 사례 소개 • (universal graph편집 사용한 shader edit) • 사전준비 – 노드 베이스의 그래프를 렌더링할 툴 킷 작성 (개발 초기 단계임) – hlsl shader 코드 적용 가능한 그래픽 엔진 작 성 (개발 초기 단계임) – xml 기반의 데이터 엔진
  • 10. 셰이더 에디터 구현 이슈 • 기본 이슈 – HLSL 함수의 구성 분석 – 그래프화 (노드화)
  • 11. • 베이스가 될만한 기본 셰이더 코드
  • 12. • HLSL 코드는 공통 적으로 다음과 6 부분으로 구성됨
  • 13. • 버텍스 입력과 관 련 있는 부분
  • 14. • 텍스처 출력과 관 련 있는 부분 – 버텍스 셰이더에 입력이 픽셀 셰이 더에 출력이 있음 – 버텍스 셰이더 출 력 데이터를 통해 서 전달
  • 15. • 출력과 관련 있는 부분 – 최종 버텍스 값도 출력 함수 노드에 포함
  • 16. HLSL특성 • 실제 셰이더 코드는 컴파일 되어 생성 • HLSL 단계에서는 최적화 불필요 • 아래 두 코드 동일한 결과
  • 18. • 중간 변수를 사용해 서 다시 정리해본 셰 이더 코드 • 각 함수 분리 가능
  • 19. 그래프화 • 노드 – 각 노드는 서브 노드 input node, out node 를 가짐 – 고유 id 를 가지고 있음 (중간 변수 등에 사용됨)
  • 20. 노드 구성 • 입력 노드 구성
  • 21. 노드 구성 • 텍스처 출력 노드 구 성
  • 22. 노드 구성 • 출력 노드 구성
  • 23. 그래프화 • 링크 – Output node -> input node – 노트 연결 제한 • 같은 데이터형 • VS->VS, PS->PS – 노드간 임시 변수를 사용해 전달
  • 24. 조합 • 각 노드별로 input node, output node를 정의하고 필요한 셰이더 코드를 작성 • 연결 순서에 맞도록 정렬 후 코드 생성
  • 25. 노드 정렬 • 최종 노드에서 출발 • 리스트에 있는 제일 앞 노드에서 추가 안된 입 력 노드를 사이에 추가 • 노드의 순서는 모든 노드에 대해서 (출력노드를 가진 노드 => 입력노드를 가진 노드)의 순서가 된다
  • 26. 셰이더 코드 조합 • 순서대로 정해진 코드를 조합 • %id 는 노드 고유 값으로 치환 • %(nodeid) 도 고유 값으로 치환 • 함수 부는 중복해서 더하지 않음
  • 27. • 합성 결과 • (데모시연)
  • 28. 기타 • n개의 출력 (RGB,RGBA, R, G, B) • 데이터 캐스팅 • 생략 가능한 입력 노드 • 멀티패스 • 셰이더 노드 추가 • 오브젝트 – 머트리얼 - 셰이더
  • 29. 기타 • 생성한 FX파일 3ds MAX 에서 import • http://sparks.discreet.com/knowledgebase/techdocs/searchable/techd oc_DXMaterialFormat/DxMaterial_Effect_format.htm
  • 30. 기타 • HLSL과 엔진 연동 이슈 segmantics, annontation • 셰이더 공유 • 다수의 technique (그림자 렌더링 등)