24
Shader Compose material 합성 IMC Games 최지웅 1

셰이더 합성

Embed Size (px)

Citation preview

Shader Composematerial 합성

IMC Games 최지웅 !1

Who are you?

프로그래밍 5년차

IMC Games 엔진팀

@mczombie

!2

Shader를 합성할 순 없을까?

있지... 안되는 게 어디있나?

누군가가 떠올렸다.

!3

Shader 합성?

정확하게 표현하자면 Material 합성.

기본 Material에 추가적인 효과.

하나의 효과를 모든 오브젝트에 사용하고 싶다.

!4

근데 왜 합성하고 싶을까?

그냥 만들면 되는 거 아녀?!5

왜?

몬스터가 얼음 스킬에 몸이 얼어버린 효과를 작업.

어라? 다른 몬스터도 작업해줘야 하네?

그냥 하지 뭐....

그렇게 50여 마리에 작업이 완료.

!6

왜?

기획쪽에서 불에 타는 효과를 작성해 달라는 요청.

...으잉? 50마리 전부요?

이 때부터는 노가다가 시작된다.

독, 슬립, 고통... 등등 작업량이 많아짐.

!7 그래서...

하나의 효과를 돌려쓰면 안될까?

됨!8

그래서 만들었습니다Pow시연er

!9

기존 Shader의 구조

NodeShader라 칭합니다

먼저 알아야할 지식

!10

NodeShader

다들 아시는 언리얼 엔진의 그것!

각각의 슬롯이 원하는 정보를 디자이너가 만들어서 연결

프로그래머는 슬롯의 정보를 가지고 라이팅 등의 추가 처리.

!11

SLOT?

프로그래머와의 약속된 값.

각각의 슬롯에 특성에 맞게 프로그램에서 처리.

노멀맵은 라이팅에 사용한다던지...

!12

!13

공용 Vertex Shader

공용 Pixel Shader

디자이너가 제작한 Shader

그림으로 살펴보면...

약속된 슬롯 정보.

그러면 슬롯을 한 번 더 거치게 할 순 없을까?이게 Shader 합성의 핵심

!14 이 개념을 그림으로...

!15

공용 Vertex Shader

공용 Pixel Shader

디자이너가 제작한 Shader

다른 디자이너가 제작한 Shader

슬롯 정보를 캐치

연결을 끊는다.

슬롯 정보를 변형

구현

!16

구현해야 할 사항

shader include 문제.

...말고는 모두 쉬운 문제.

그냥 열심히 하면됩니다.

!17

Shader Include

include 순서는?

Vs -> design ps -> add ps -> ps

어떻게 중간을 연결시킬 것인가?

파일 이름은 다르다.

!18

D3DXINCLUDE

DirectX 클래스.

Shader code에서 메모리 로딩을 위한.

Shader Code에서 include "쏼라쏼라"를 캐치.

상속 받아서 구현하면 "쏼라쏼라"의 문자을 넘겨준다.

!19

D3DXINCLUDE

약속된 문자열.

그것이 들어오면 구현 클래스에서 다른 파일을 로딩.

해결 완료.

!20

!21

뭐 대단한 게 있는 것 같지만 이걸로 끝

단점

합성될 Shader를 최대한 일반화.

미리 컴파일 할 수가 없음. ...있을지도.

!22

장점

한 번 구현해 놓으면 노가다가 없어집니다.

인스턴싱 하기에는 조금 힘들어요.

만들기도 쉬움.

!23

!24