SlideShare a Scribd company logo
1 of 31
Download to read offline
In-House 개발을 위한 Shader 통합
                    이창희
Self-Introduction
                      •現 CCR 엔진팀장



 E-mail:
 cagetu79@gmail.com
 Blog:
 cagetu@egloos.com
Shader-Driven
 Shader-Driven?


 Game Engine에서 Shader를 사용하여, Rendering을 처리
 하는 것이 일반화 됨.


 그렇다면, 과연 Shader를 사용하여
 Rendering을 효과적으로 처리하는 방법들
 에 대해서도 한번 고민해봐야 하지 않을까?
Shader-Driven(Cont’)
 Data-Driven과 비교해보면…


 Shader의 변경만으로 다양한 효과를 낼 수
 있으면 좋겠다.
  C++의 코드를 수정하지 않고…
Contents
   In-House Renderer의 개발 사례를 기반으로 Shader-
    Driven을 되돌아보자.

    •   Shader Variable Binding
    •   Shader/Material System
    •   Shader Generator (UberShader/Material Editor)
    •   Post-Processing
    •   후기
Shader Variable Binding
 처음 Shader를 작업한다면,
   Shader Code 작성->Shader의 Variable들을 C++ Code
    에서 설정해준다.

        C++                    Shader
        Logic                   Logic



 만약, 이런 식으로 계속적인 작업을 한다면…
   Shader에 변수들을 추가할 때마다, 매번
   C++ Code를 수정함.
Shader Code의 Shader Variable과
 C++ Code의 연결을 자동으로 할
 수는 없을까?
Shader Variable Binding(Cont’)
   Shader를 이용하여 새로운 기능을 구현하기 위해서,
    C++과 완전히 독립적일 수는 없다.
     • Normal-Map 기능 추가
       (vertex의 tangent (+binormal) 구현 필요)
     • GPU Skinning 기능 추가
       (vertex blend 정보 및 bone matrix들 구현 필요)
     • …

   하지만, 같은 기술 레벨의 기능을 추가하는 것은 C++
    을 수정하지 않고도 충분히 가능하다.
    • 또한, 변경에 대한 추가비용을 줄일 수 있다.
      (예, DOF의 장면Depth)
• C++과 완전 분리가 목표. (Data-Driven)
Shader Variable Binding(Cont’)
 Effect (.fx) 파일은 소스 파일이 아닌, Data로 본다면,
 C++과 Effect파일이 분리될 수 있어야 한다
  • Shader가 변경되어도, 자동을 Shader Variables와 C++
   Code를 연결할 수 있는 기능이 필요하다.
  상수는
   외부에서 설정 가능 한 것들(material 변수들, texture 등…)
   프로그램 내부에서 Bind해줘야 하는 것(matrix, 카메라 위치 등
    …)
사례
 Shader Variable의 Sementic이나 이름을 이용
    정의된 Sementic이라면, C++ Code에 Mapping!!!
Shader
 Shader의 사용 용도를 크게 나누어 보면,
1. Mesh나 Effect등에 재질을 표현하기 위해서 사용.
2. Post-Processing등에 사용되는 후처리 효과를 표현
   하기 위해 사용.
3. …


   1, 2번에 대해서 조금 더 자세히…
Shader-Material System
   재질을 표현하는 Shader를 조금 더 효과적으로 사용하기
    위해서, Shader를 포함한 더 큰 의미의 Material로 표현.

   Shader 기반의 Renderer를 작성하기 위해서는 Renderer
    의 기본이 되는 Shader(Material) System이 필요하다.

   Material의 구성
      Texture, Color, RenderState, Shader 등…



                      Shader
           Material
    Mesh                                        C++
사례
 Material을 이용하여, Shader에 넣어주어야 Shader
 Variable들에 값을 넣어주자.
Shader 제작
   현재 엔진에서 쉐이더를 작성하는 방법은 크게 3가지 정
    도로 나눌 수 있는데,
    • Shader Code를 작성 수작업으로 작성.
    • Shader 작성 Tool을 이용하여 작성.
      (FX composer, RenderMonkey, ShaderFX…)
    • Shader Editor (Material Editor)을 구현하여 작성.


   프로그래머가 C++에 Shader를 통합하는 방법이 경우에
    따라서는 좋은 선택이 될 수도 있다.
    • UberShader가 괜찮은 해법이 될 수도
Uber Shader
 하나의 Shader로 모든 기능 구현
 Super Shader라고도 불림
 Shader의 전처리기를 이용하여, Shader 작성
 그래프 편집과 비교
   몇 가지 기능 위주로 선택적으로 사용할 경우, 그래프 편집보다 편리
   아티스트의 셰이더 조합에 대한 스트레스 없이 기능을 적용
   지속적인 기능 추가를 위해선 전담 셰이더 프로그래머가 필요
   셰이더 종류가 한정적이이서 최적화에 유리

 Material System과 함께 이용하면, Material System에서
 설정된 값을 통하여, Shader의 다양한 조합을 설정할 수
 있음.
사례
 Material에서 GlowMap을 추가한다면,
툴과 연동
 On/Off 형태로 기능을 끄고 켤 수 있도록…
 Material + UberShader
 참고 영상: http://www.youtube.com/watch?v=utaMQFuwNHw&hl=ko
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
사례
 Fragment(Node)는   만들 수 있다.
    만든 노드를 순서대로 빌드하면, Shader Code를 뽑는
     것도 어려운 일이 아니다.
    단, Editor를 만드는 것은 GG.
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
Post-Processing
 Post-Processing의 패턴을 살펴보면, 다음 과정을 반
  복
1. RenderTarget 설정
2. 1번 타겟에 ScreenAlignedQuad에 장면 랜더링
    원하는 Shader 처리
3. 이전 랜더링된 텍스쳐(타겟)을 이용하여, 1번과 2번
   작업을 반복.
4. FrameBuffer에 최종 랜더타겟의 텍스쳐 출력
[ShaderX5. PostProcessing Effects in Design]
Post-Processing(Cont’)
 패턴화 된 형태를 C++ Code에서 처리할 수 있도록 해
 주고, xml등의 외부에서 Post-Processing에 대해서 규
 정한다면,
  Data-Driven 형태로, Post-Processing을 Shader와 xml
   을 수정만으로도 처리가 가능.

 Post-Processing 기능들의 On/Off에 대한 조합의 처
 리도 의외로 간단하게 처리할 수 있다.
  각 기능들을 하나의 Node와 같이 처리하자!
사례




     [Nebula3. frame/dx9default.xml]
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의 변경을 줄일 수 있
     다.
후기
 C++에서 Shader와 연결하는 깔끔한 인터페이스를 만
 드는 것이 매우 어렵더라
  Shader Logic과 C++ Logic 에서 처리할 것들을 잘 구
  분하면, 더 깔끔해질 수 있을 것 같다.
     Shader에서 처리하는 것이 그래도, 좀 깔끔한 듯.
  추가되는 기능에 대해 동일한 인터페이스를 유지하는
  것이 쉽지는 않다.
 어느 정도 Code가 쌓이면, xml파일과 fx파일을 이용
 해서, 왠만한 새로운 Shader의 추가 작업을 처리할 수
 있더라.
  Ex) NormalMap, SpecularMap 추가
In-House 랜더러를 개발한다면,
 자신에 상황이나 게임에 적합
 한 Shader작업 방식에 대해서
 한번 정도 고민해보자!!!
Shader Driven
 A/S 문의
    http://cagetu.egloos.com/5091227
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/
Shader Driven

More Related Content

What's hot

[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)NAVER D2
 
쉽게 풀어보는 WebGL
쉽게 풀어보는 WebGL쉽게 풀어보는 WebGL
쉽게 풀어보는 WebGLMyung Woon Oh
 
C++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaC++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaLazy Ahasil
 
Crawling with AWS Lambda
Crawling with AWS LambdaCrawling with AWS Lambda
Crawling with AWS LambdaSeungho Kim
 
[Tech meet up] 2018 프론트엔드 트렌드&인사이트
[Tech meet up] 2018 프론트엔드 트렌드&인사이트[Tech meet up] 2018 프론트엔드 트렌드&인사이트
[Tech meet up] 2018 프론트엔드 트렌드&인사이트NAVER D2
 
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기) FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기) YoungSu Son
 
RDS에서 Aurora PostgreSQL Migration한 후기
RDS에서 Aurora PostgreSQL Migration한 후기RDS에서 Aurora PostgreSQL Migration한 후기
RDS에서 Aurora PostgreSQL Migration한 후기Kyuhyun Byun
 
Docker와 DevOps에서 Serverless와 NoOps로의 여정
Docker와 DevOps에서 Serverless와 NoOps로의 여정Docker와 DevOps에서 Serverless와 NoOps로의 여정
Docker와 DevOps에서 Serverless와 NoOps로의 여정Kyuhyun Byun
 
The Future of C# and .NET Framework
The Future of C# and .NET FrameworkThe Future of C# and .NET Framework
The Future of C# and .NET Framework명신 김
 
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기복연 이
 
ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)
ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)
ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)SangHoon Han
 
당근마켓 고언어 도입기, 그리고 활용법
당근마켓 고언어 도입기, 그리고 활용법당근마켓 고언어 도입기, 그리고 활용법
당근마켓 고언어 도입기, 그리고 활용법Kyuhyun Byun
 
두근두근 ASP.NET 5!
두근두근 ASP.NET 5!두근두근 ASP.NET 5!
두근두근 ASP.NET 5!SangHoon Han
 
[1A3]지금까지 상상한 표현의 한계를 넘자 WebGL
[1A3]지금까지 상상한 표현의 한계를 넘자 WebGL[1A3]지금까지 상상한 표현의 한계를 넘자 WebGL
[1A3]지금까지 상상한 표현의 한계를 넘자 WebGLNAVER D2
 
[Td 2015]asp.net 5 깊게 파고들기(박용준)
[Td 2015]asp.net 5 깊게 파고들기(박용준)[Td 2015]asp.net 5 깊게 파고들기(박용준)
[Td 2015]asp.net 5 깊게 파고들기(박용준)Sang Don Kim
 
예제를 통해 쉽게_살펴보는_뷰제이에스
예제를 통해 쉽게_살펴보는_뷰제이에스예제를 통해 쉽게_살펴보는_뷰제이에스
예제를 통해 쉽게_살펴보는_뷰제이에스Dexter Jung
 
ALB+EC2 to API gateway + Lambda
ALB+EC2 to API gateway + LambdaALB+EC2 to API gateway + Lambda
ALB+EC2 to API gateway + LambdaKyuhyun Byun
 
모바일 개발자를 위한 ML Kit: Machine Learning SDK 소개
모바일 개발자를 위한 ML Kit: Machine Learning SDK 소개모바일 개발자를 위한 ML Kit: Machine Learning SDK 소개
모바일 개발자를 위한 ML Kit: Machine Learning SDK 소개Jeongkyu Shin
 

What's hot (20)

WebGL
WebGLWebGL
WebGL
 
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
[D2 CAMPUS] tech meet up(Back-end) - 교내 웹서비스 개발 일지 (박은찬님)
 
쉽게 풀어보는 WebGL
쉽게 풀어보는 WebGL쉽게 풀어보는 WebGL
쉽게 풀어보는 WebGL
 
C++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaC++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & Nana
 
Crawling with AWS Lambda
Crawling with AWS LambdaCrawling with AWS Lambda
Crawling with AWS Lambda
 
[Tech meet up] 2018 프론트엔드 트렌드&인사이트
[Tech meet up] 2018 프론트엔드 트렌드&인사이트[Tech meet up] 2018 프론트엔드 트렌드&인사이트
[Tech meet up] 2018 프론트엔드 트렌드&인사이트
 
Inside node.js
Inside node.jsInside node.js
Inside node.js
 
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기) FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
 
RDS에서 Aurora PostgreSQL Migration한 후기
RDS에서 Aurora PostgreSQL Migration한 후기RDS에서 Aurora PostgreSQL Migration한 후기
RDS에서 Aurora PostgreSQL Migration한 후기
 
Docker와 DevOps에서 Serverless와 NoOps로의 여정
Docker와 DevOps에서 Serverless와 NoOps로의 여정Docker와 DevOps에서 Serverless와 NoOps로의 여정
Docker와 DevOps에서 Serverless와 NoOps로의 여정
 
The Future of C# and .NET Framework
The Future of C# and .NET FrameworkThe Future of C# and .NET Framework
The Future of C# and .NET Framework
 
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
 
ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)
ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)
ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)
 
당근마켓 고언어 도입기, 그리고 활용법
당근마켓 고언어 도입기, 그리고 활용법당근마켓 고언어 도입기, 그리고 활용법
당근마켓 고언어 도입기, 그리고 활용법
 
두근두근 ASP.NET 5!
두근두근 ASP.NET 5!두근두근 ASP.NET 5!
두근두근 ASP.NET 5!
 
[1A3]지금까지 상상한 표현의 한계를 넘자 WebGL
[1A3]지금까지 상상한 표현의 한계를 넘자 WebGL[1A3]지금까지 상상한 표현의 한계를 넘자 WebGL
[1A3]지금까지 상상한 표현의 한계를 넘자 WebGL
 
[Td 2015]asp.net 5 깊게 파고들기(박용준)
[Td 2015]asp.net 5 깊게 파고들기(박용준)[Td 2015]asp.net 5 깊게 파고들기(박용준)
[Td 2015]asp.net 5 깊게 파고들기(박용준)
 
예제를 통해 쉽게_살펴보는_뷰제이에스
예제를 통해 쉽게_살펴보는_뷰제이에스예제를 통해 쉽게_살펴보는_뷰제이에스
예제를 통해 쉽게_살펴보는_뷰제이에스
 
ALB+EC2 to API gateway + Lambda
ALB+EC2 to API gateway + LambdaALB+EC2 to API gateway + Lambda
ALB+EC2 to API gateway + Lambda
 
모바일 개발자를 위한 ML Kit: Machine Learning SDK 소개
모바일 개발자를 위한 ML Kit: Machine Learning SDK 소개모바일 개발자를 위한 ML Kit: Machine Learning SDK 소개
모바일 개발자를 위한 ML Kit: Machine Learning SDK 소개
 

Viewers also liked

사회적경제센터 사업소개 2
사회적경제센터 사업소개 2 사회적경제센터 사업소개 2
사회적경제센터 사업소개 2 Small Biz
 
2nd ignite masan 이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이
2nd ignite masan   이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이2nd ignite masan   이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이
2nd ignite masan 이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이Ignite Masan
 
스크래치와 역사
스크래치와 역사스크래치와 역사
스크래치와 역사Seung Joon Choi
 
Subject Guide in Energy Engineering @ UNIST Library
Subject Guide in Energy Engineering @ UNIST LibrarySubject Guide in Energy Engineering @ UNIST Library
Subject Guide in Energy Engineering @ UNIST LibraryYulee Kwon
 
기본 회전 공식
기본 회전 공식 기본 회전 공식
기본 회전 공식 cancan21st
 
[0611 박민근] 신입 게임 개발자가 알아야 할 것들
[0611 박민근] 신입 게임 개발자가 알아야 할 것들[0611 박민근] 신입 게임 개발자가 알아야 할 것들
[0611 박민근] 신입 게임 개발자가 알아야 할 것들MinGeun Park
 
Data Structure - 1st Study
Data Structure - 1st StudyData Structure - 1st Study
Data Structure - 1st StudyChris Ohk
 
GPG Study 4.3 카메라 제어기법
GPG Study 4.3 카메라 제어기법GPG Study 4.3 카메라 제어기법
GPG Study 4.3 카메라 제어기법연우 김
 
실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬현찬 양
 
[1127 박민근] 일 잘하는 게임프로그래머 되기
[1127 박민근] 일 잘하는 게임프로그래머 되기[1127 박민근] 일 잘하는 게임프로그래머 되기
[1127 박민근] 일 잘하는 게임프로그래머 되기MinGeun Park
 
후처리알아보기
후처리알아보기후처리알아보기
후처리알아보기종규 우
 
3D 컴퓨터 그래픽스 기초
3D 컴퓨터 그래픽스 기초3D 컴퓨터 그래픽스 기초
3D 컴퓨터 그래픽스 기초Seung Joon Choi
 
[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들MinGeun Park
 
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기changehee lee
 
Light in screen_space(Light Pre Pass)
Light in screen_space(Light Pre Pass)Light in screen_space(Light Pre Pass)
Light in screen_space(Light Pre Pass)민웅 이
 
자동 동적 3차원 입체시각
자동 동적 3차원 입체시각자동 동적 3차원 입체시각
자동 동적 3차원 입체시각민웅 이
 

Viewers also liked (20)

사회적경제센터 사업소개 2
사회적경제센터 사업소개 2 사회적경제센터 사업소개 2
사회적경제센터 사업소개 2
 
Id142 plan
Id142 planId142 plan
Id142 plan
 
2nd ignite masan 이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이
2nd ignite masan   이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이2nd ignite masan   이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이
2nd ignite masan 이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이
 
스크래치와 역사
스크래치와 역사스크래치와 역사
스크래치와 역사
 
Mesh slice 1
Mesh slice 1Mesh slice 1
Mesh slice 1
 
Subject Guide in Energy Engineering @ UNIST Library
Subject Guide in Energy Engineering @ UNIST LibrarySubject Guide in Energy Engineering @ UNIST Library
Subject Guide in Energy Engineering @ UNIST Library
 
기본 회전 공식
기본 회전 공식 기본 회전 공식
기본 회전 공식
 
[0611 박민근] 신입 게임 개발자가 알아야 할 것들
[0611 박민근] 신입 게임 개발자가 알아야 할 것들[0611 박민근] 신입 게임 개발자가 알아야 할 것들
[0611 박민근] 신입 게임 개발자가 알아야 할 것들
 
Data Structure - 1st Study
Data Structure - 1st StudyData Structure - 1st Study
Data Structure - 1st Study
 
GPG Study 4.3 카메라 제어기법
GPG Study 4.3 카메라 제어기법GPG Study 4.3 카메라 제어기법
GPG Study 4.3 카메라 제어기법
 
실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬
 
카툰 렌더링
카툰 렌더링카툰 렌더링
카툰 렌더링
 
[1127 박민근] 일 잘하는 게임프로그래머 되기
[1127 박민근] 일 잘하는 게임프로그래머 되기[1127 박민근] 일 잘하는 게임프로그래머 되기
[1127 박민근] 일 잘하는 게임프로그래머 되기
 
Gpg study5.5
Gpg study5.5Gpg study5.5
Gpg study5.5
 
후처리알아보기
후처리알아보기후처리알아보기
후처리알아보기
 
3D 컴퓨터 그래픽스 기초
3D 컴퓨터 그래픽스 기초3D 컴퓨터 그래픽스 기초
3D 컴퓨터 그래픽스 기초
 
[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들
 
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기
 
Light in screen_space(Light Pre Pass)
Light in screen_space(Light Pre Pass)Light in screen_space(Light Pre Pass)
Light in screen_space(Light Pre Pass)
 
자동 동적 3차원 입체시각
자동 동적 3차원 입체시각자동 동적 3차원 입체시각
자동 동적 3차원 입체시각
 

Similar to Shader Driven

프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer ModelHan Lee
 
이펙트 쉐이더 1강 - Shader 기초 개념
이펙트 쉐이더 1강 - Shader 기초 개념이펙트 쉐이더 1강 - Shader 기초 개념
이펙트 쉐이더 1강 - Shader 기초 개념Jihoo Oh
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipelinechangehee lee
 
OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)Jinwook On
 
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013devCAT Studio, NEXON
 
How to build Design System?
How to build Design System?How to build Design System?
How to build Design System?John Kim
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스Sungik Kim
 
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례SangYun Yi
 
Decentraland Software Development Kit(SDK) 2.0 버전
Decentraland Software Development Kit(SDK) 2.0 버전Decentraland Software Development Kit(SDK) 2.0 버전
Decentraland Software Development Kit(SDK) 2.0 버전Jiseob Park
 
[0602 박민근] direct2 d
[0602 박민근] direct2 d[0602 박민근] direct2 d
[0602 박민근] direct2 dMinGeun Park
 
11_빠른 개발 가능한 레벨 편집 시스템
11_빠른 개발 가능한 레벨 편집 시스템11_빠른 개발 가능한 레벨 편집 시스템
11_빠른 개발 가능한 레벨 편집 시스템noerror
 
[NDC 2018] 테라 콘솔 포팅기 - 현세대 콘솔 이식을 위한 렌더링 최적화 여정
[NDC 2018] 테라 콘솔 포팅기 - 현세대 콘솔 이식을 위한 렌더링 최적화 여정[NDC 2018] 테라 콘솔 포팅기 - 현세대 콘솔 이식을 위한 렌더링 최적화 여정
[NDC 2018] 테라 콘솔 포팅기 - 현세대 콘솔 이식을 위한 렌더링 최적화 여정SangHyeok Hong
 
Html5 소개 가이드
Html5 소개 가이드Html5 소개 가이드
Html5 소개 가이드Jong-hyun Park
 
Create document automatically (1)
Create document automatically (1)Create document automatically (1)
Create document automatically (1)SangJune Ahn
 
20140514 team blender_v01 (Korean)
20140514 team blender_v01 (Korean)20140514 team blender_v01 (Korean)
20140514 team blender_v01 (Korean)Dongho Kim
 
Unity Surface Shader for Artist 01
Unity Surface Shader for Artist 01Unity Surface Shader for Artist 01
Unity Surface Shader for Artist 01SangYun Yi
 
Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나Amazon Web Services Korea
 
안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계Leonardo YongUk Kim
 

Similar to Shader Driven (20)

프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model
 
이펙트 쉐이더 1강 - Shader 기초 개념
이펙트 쉐이더 1강 - Shader 기초 개념이펙트 쉐이더 1강 - Shader 기초 개념
이펙트 쉐이더 1강 - Shader 기초 개념
 
Open Jig Ware
Open Jig WareOpen Jig Ware
Open Jig Ware
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipeline
 
OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)
 
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013
정희석, 셰이더 리소스 빌드 자동화 할 수 없나요?, NDC2013
 
How to build Design System?
How to build Design System?How to build Design System?
How to build Design System?
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스
 
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
 
Decentraland Software Development Kit(SDK) 2.0 버전
Decentraland Software Development Kit(SDK) 2.0 버전Decentraland Software Development Kit(SDK) 2.0 버전
Decentraland Software Development Kit(SDK) 2.0 버전
 
[0602 박민근] direct2 d
[0602 박민근] direct2 d[0602 박민근] direct2 d
[0602 박민근] direct2 d
 
11_빠른 개발 가능한 레벨 편집 시스템
11_빠른 개발 가능한 레벨 편집 시스템11_빠른 개발 가능한 레벨 편집 시스템
11_빠른 개발 가능한 레벨 편집 시스템
 
[NDC 2018] 테라 콘솔 포팅기 - 현세대 콘솔 이식을 위한 렌더링 최적화 여정
[NDC 2018] 테라 콘솔 포팅기 - 현세대 콘솔 이식을 위한 렌더링 최적화 여정[NDC 2018] 테라 콘솔 포팅기 - 현세대 콘솔 이식을 위한 렌더링 최적화 여정
[NDC 2018] 테라 콘솔 포팅기 - 현세대 콘솔 이식을 위한 렌더링 최적화 여정
 
Html5 소개 가이드
Html5 소개 가이드Html5 소개 가이드
Html5 소개 가이드
 
Create document automatically (1)
Create document automatically (1)Create document automatically (1)
Create document automatically (1)
 
20140514 team blender_v01 (Korean)
20140514 team blender_v01 (Korean)20140514 team blender_v01 (Korean)
20140514 team blender_v01 (Korean)
 
Unity Surface Shader for Artist 01
Unity Surface Shader for Artist 01Unity Surface Shader for Artist 01
Unity Surface Shader for Artist 01
 
Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
 
안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계안드로이드 빌드: 설탕없는 세계
안드로이드 빌드: 설탕없는 세계
 

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
 
모바일 엔진 개발기
모바일 엔진 개발기모바일 엔진 개발기
모바일 엔진 개발기changehee 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
 

More from changehee lee (20)

Visual shock vol.2
Visual shock   vol.2Visual shock   vol.2
Visual shock vol.2
 
Shader compilation
Shader compilationShader compilation
Shader compilation
 
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
 
아이폰에 포팅해보기
아이폰에 포팅해보기아이폰에 포팅해보기
아이폰에 포팅해보기
 

Shader Driven

  • 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의 다양한 조합을 설정할 수 있음.
  • 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에 최종 랜더타겟의 텍스쳐 출력
  • 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작업 방식에 대해서 한번 정도 고민해보자!!!
  • 29.  A/S 문의  http://cagetu.egloos.com/5091227
  • 30. 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/