Download - 아티스트에게 사랑받는 3DS Max 우버쉐이더
아티스트에게 사랑받는3DS MAX 우버 셰이더
Pope KimRendering Engineer, EA Sports FIFA
Korea Game Conference 2013
이유가 불분명한 난이도 조절용 설문조사
• 프로그래머 vs 아티스트 vs 테크니컬 아티스트?
• 현업개발자 vs 지망생?
• 셰이더가 뭔지 아시는 분 vs 모르시는 분?
• 우버 셰이더(uber shader)가 뭔지 아시는 분 vs 모르는 분?
발표자 소개 - 현재
• EA 스포츠 FIFA 팀, 렌더링 엔지니어 (PS4, Xbox One)
• 서강대 게임개발 교육원 초빙교수
• 컨퍼런스 발표: 시그래프 2012, KGC 2011/2012/2013
• 저자
• 셰이더 프로그래밍 입문 (한빛미디어): 현재 영문판 집필중
• (게임개발자가 대우받는) 북미취업 가이드 (연두미디어)
• 감수자
• HLSL Shader Cookbook (영문, Packt Pub)
• 게임 매니악스 – 슈팅 게임 알고리즘 (한빛미디어)
발표자 소개 - 과거
• 첫 게임개발시작: 1993년 정도
• 중간 외도 기간: 6년 (연세대 법학과 졸업 및 고시준비 -_-;;)
• 최근 회사들: 아이도스/스퀘어 에닉스 몬트리올, 렐릭/세가/THQ, 캡콤 밴쿠버
• 과거 개발한 플랫폼들: Xbox 360, PS3, PS2, PSP, Wii, PC
• 캐나다 AI대학 셰이더 프로그래밍 선생질: 3년 (part-time)
발표자 소개 - 기타
• 마이크로소프트 Visual C++ MVP
• 게임개발 포에버 얼굴마담 (www.gamedevforever.com)
• 포프TV(www.youtube.com/user/KimPopeTV), 블로그(kblog.popekim.com),
• 트위터 @BlindRendererKR (한국어) @BlindRenderer (영어)
• 올해는 꽃미남 드립 생략 -_-;;;
• 출시한 게임수: 많음…
많음 -_-;
오늘의 발표
• KGC 2011/ 2012 보단 덜 기술적
• Uber Shader는 이미 잘 알려진 것
• 하지만 프로그래머와 아티스트에게 모두 나름 문제있던 기법
• 2008년에 스페이스마린 프로젝트(Relic)에서 그 문제를 해결한 방법 소개
• 주로 아티스트의 효율성을 높이는 방법 (이유: 아티스트 시간이 제작비의 대부분)
• 아티스트들이 보고 프로그래머에게 “이거 해주세요~” 라고 하길…
셰이더란?
• HLSL 셰이더 프로그래밍 입문: (당연 제 책 광고)
“셰이더란 화면에 출력할 픽셀의 위치와 색상을 계산하는 함수”
• Ndoors의 테크니컬 아티스트 디렉터 정종필 부장님:
“셰이더는 재질(때깔)이다”
게임만드려면 셰이더가 몇개나?
• 갈팡질팡
• 그래픽 프로그래머 / 아티스트 중에 목소리 높은 팀 맘대로 일지도… -_-;;;
• 아니면 그냥 남이 하는게 더 멋져 보여서… -_-;;;
• 3가지 예
• 아트마다 하나씩
• 대충 종류별로 하나씩
• 그리고 Uber Shader
아트마다 하나씩
• 장점
• 필요에 따라 셰이더를 자유로이 만들 수 있음
• 언리얼 등을 비롯 노드기반 셰이더를 지원하는 프로그램도 있음 (요즘 추세)
• 단점
• 셰이더 관리
• 성능
• 생각보다 아티스트(테크 아티스트가 아닌)가 배우기 힘듬
아트마다 - 단점
• 노드기반으론 이런 만행이 쉬움 -_-
출처: http://warby.bitproll.de/
대충 종류별로 하나씩
• 게임에 들어가는 아트 종류별로 셰이더를 하나씩 만듬
• 캐릭터 셰이더, 소품 셰이더 등등
• 장점
• 셰이더 관리가 쉬움
• 성능
• 단점
• 새로운 실험을 하거나 셰이더를 새로 만들기 힘듬
• 안쓰는 패러미터의 기본값 설정하기 귀찮음… -_-
UBER SHADER
• 셰이더 하나로 모든걸 처리. 무수히 많은 ON/OFF 스위치
• 장점
• 실험하기 정말 쉬움
• 게임 셰이더 관리도 쉬움 (하나뿐이니 -_-)
• 단점: 전에 설명했던 방법들의 모든 단점의 총집함
• 아티스트 고문
• 성능
UBER SHADER - 단점
UBER SHADER - 단점
1. 아티스트 고문문제 해법
• 한 번 해보죠 (고문말고.. 해결… -_-;;;)
정작 모든 셰이더 시스템의문제점은..
• 프로그래머 위주의 생각…
• 아티스트에게 프로그래머 위주의 생각을 강요. (예: 이건 수학적으로 원래 그렇게
작동하는거니 이렇게 이해해서 해요 -_-+ )
• 물론 아티스트가 징징 거릴땐 귀찮음 -_-;;;;
• 아티스트가 좋아하는 툴만 주면 그거 만지면서 신나서 조용해짐..(응?)
아티스트가 생각하는 방법 1/2
• 렐릭 테크니컬 아티스트와 수많은 미팅 (Thanks, Nick Carota!)
• 5가지 큰 카테고리로 생각
• Diffuse: 표면의 색은 어떤가?
• Bumpiness: 표면이 얼마나 울퉁불퉁한가
• Reflectance: 표면의 반사정도는?
• Lighting: 조명 관련
• Etc: 기타 잡다한것, 생각하기 싫은것, 꼴도 보기 싫은 것.. (응?)
아티스트가 생각하는 방법 2/2
• 이것저것 시도(experiment)를 할 수 있어야함
• 단 주관식보단 객관식이어야 함
• 결론:
• 아티스트에겐 직관적인 객관식 UI
• 3DS Max 내에서 실시간 실험이 가능하도록 속은 Uber Shader
UI 뜯어고치기 – ITERATION 1
• 아티스트가 생각하는 category별로 UI 제공
• 게임에서 보는 것처럼 셰이더 기법의 실시간 프리뷰 가능(WYSIWYG)
카테고리별 UI
• Lighting
• Diffuse
• Normal
• Reflectance
• 기타 등등
DIFFUSE
• UV 채널 선택
• Tint / Emissive 색상
• Ambient 색상
• 기타 등등
DIFFUSE
• 16가지 기법 드롭다운
• 기법따라 각종 UI 활성화 /
비활성화
• 다양한 블렌딩 모드 지원
• 알파
• 버텍스
• 마스크 등등
PLAY TIME!!
NORMAL
• Local / Tangent 공간
• Channel 선택
• 텍스처 Reload 버튼
NORMAL
• 4가지 기법 드롭다운
• None도 옵션
• 한 때 Parallax Map 지원
• 하지만 아무도 안써서 지움
• 성능도 별로였음
• UI 활성화/비활성화
PLAY TIME!!
REFLECTANCE
• 뭔가 반사한다는 뜻 (이름은
아직도 맘에 안듬 -_-)
• Specular Map
• Multiply 색상
• 거울반사효과
• 기타 온갖 parameter들
REFLECTANCE
• 7 Reflectance 기법
• None 도 옵션
• Derived Specular: 디퓨즈
맵으로부터 계산한 Spec 맵
• UI 활성화 / 비활성화
LIGHTING
• Light Property Map
• Roughness 채널뿐
• 오렌 네이어 조명에 쓰임
• 사실 다른채널도 쓰였었으나
• 마지막에 최적화로 다 제거
• 두가지 라이트 프리뷰
• 맥스 라이팅
• 게임 라이팅
PLAY TIME!!
기타
• 물리 성질
• 오디오 등에 이용
• 블렌딩 모드
• 컬링 모드 등등
• 소팅 바이어스
UI 뜯어고치기 – ITERATION 2
• 3DS Max의 DirectX 머테리얼이 지원하는 UI Interaction 모두 지원
• 버튼 위에 텍스처 파일 끓어놓기
• 오른쪽 버튼복사오른쪽 버튼붙여넣기 지원
• 버튼 위에 오른쪽 마우스 버튼 눌러 파일 경로열기
• 등등등….. 정말로 온갖 잡다한 것들…. -_-
• Max 자체 컨트롤로 지원 불가능좌절Max에서 .NET Object 지원
• 단 3DS Max 9에서 .NET 컨트롤을 함수인자로 못건냄복붙복붙 3874라인 코드 -_-
오른쪽 버튼 액션
UI 뜯어고치기 – ITERATION 3
• 게임 조명 Preview
• 캐릭터 기법도 포함별도의 category
게임조명 PREVIEW
• 별도의 UI
• 게임속 대표 레벨들의 조명세팅을
3개의 라이팅 정보로 저장
• 근사치일 뿐
• 게임은 디퍼드
• 맥스는 포워드
캐릭터 기법
• 싱글/멀티플레이어용 캐릭터 구분
• 멀티플레이어일 경우 3가지 페인트
색상으로 프리뷰 가능
• Preset으로 색상을 프리뷰할수 있는
별도의 UI도 존재
캐릭터 기법
• 게임속에서는 데칼, 페인트 색 등을
유저 커스터마이제이션에서 받아옴
• 멀티플레이어 레벨 로드시 텍스처
조합 및 페인트 적용 후 실시간 DXT
압축
• 따로 강연을 할 정도의 방대한 양이니
이걸로 생략….
프로그래머를 위한(?) 내부구현 원리
• 3DS Max UI는 Uber Shader의 각 스위치를 끄고 켜는 역할이 주
• pNormalOn = 1
• pDiffuse2On = 1
• pTintColourOn = 0
• 텍스쳐 등 기타 parameter를 대입하기도 함
• pDiffuseColour = vector4(1, 0, 0.2, 0.5);
• pDiffuseTexture = LoadTexture(“c:\pope\ImSoSexy.png”);
2. 성능 문제 해결
• 아티스트가 선택한 옵션에 따라 게임 셰이더와 매핑 (예: Diff2_Norm_Spec.shd)
• 하지만 정말 창의적인 아티스트가 아직 게임속에 없는 셰이더를 만들면?
Diff2UV01_VtxTint_Norm2_Spec2 셰이더가
없습니다. 핫핑크 셰이더로 대체하겠습니다.
이 셰이더를 추가하려면 셰이더 문지기를
찾아주세요~
게이트 키퍼?
• 어떤 셰이더를 게임속에 넣을건지 결정하는 렌더링 프로그래머
• 스페이스마린 프로젝트에선 발표자(포프)가 게이트키퍼였음
• 존재이유: 아티스트의 필요와 성능상의 밸런스 유지
• 간단히 말해 노드기반 셰이더 제작의 단점 해결
• 아티스트가 비슷비슷한 수천개의 셰이더를 만드는 것을 방지
• 성능이 확~ 떨어지는 셰이더 제작을 방지
검토 가이드라인
• 셰이더 하나에 쓸 수있는 텍스처는 5개 (술 사주면 6개까지 허용 -_-)
• 이미 존재하는 기법중에 UV 채널만 바뀐 게 있나 확인
• 좀 더 최적화된 셰이더를 이용할 수 있는지 검토
• 예: 텍스처 대신 일반 변수 하나로 처리할 수 있는 경우
• 검토에 걸리는 시간은 5분 미만
• 결과에 따라 결정은 둘 중 하나
아무 문제 없을 경우
오오~ 정말 필요한 셰이더구만.
성능도 문제없고 아트도 정말
이쁘고…
응응~ 내가 5분안에 추가해줄께~
잠만 기둘려~
꺄아~ o(^_^)o
문제가 있을 경우
주.글.래? -_-+
…..는 농담이고
자~
이 셰이더는 이런이런 문제가 있으니 그
대신 이걸 이렇게 고쳐봐요.
그럼 괜찮을거에요.
그걸로 안되면 다시 찾아와요~
너무 무서우니 좀 웃어도 주고…
자~
이 셰이더는 이런이런 문제가 있으니 그
대신 이걸 이렇게 고쳐봐요.
그럼 괜찮을거에요.
그걸로 안되면 다시 찾아와요~
사랑한다고도 좀 해주고…(응?)
자~
이 셰이더는 이런이런 문제가 있으니 그
대신 이걸 이렇게 고쳐봐요.
그럼 괜찮을거에요.
그걸로 안되면 다시 찾아와요~
굳이 3DS MAX에서 이짓을 한이유는?
• 아트품질 향상
• Tech Artist가 아닌 일반 아티스트가 Uber Shader로 실험 가능
• 실험 중에는 게임 셰이더에 제한받지 않음
• 3DS 맥스는 아티스트가 가장 좋아하고 온갖 꼼수를 다 부릴 수 있는 툴
• 게임으로 export해서 테스트하는 데 낭비하는 시간이 없음무한 Iterations
• 아티스트게임 중간에 Gate Keeper를 둠으로써 성능문제도 해결
다른 각도에서 재정리
다른 게임의 워크플로
모델링
(MAX)
아트 툴
다른 게임의 워크플로
모델링
(MAX)
텍스처링
(포토샵)
아트 툴
다른 게임의 워크플로
모델링
(MAX)
텍스처링
(포토샵)
< 5 초0초
아트 툴
다른 게임의 워크플로
모델링
(MAX)
텍스처링
(포토샵)
< 5 초0초
아트 툴
게임 or 엔진툴
미리보기
다른 게임의 워크플로
모델링
(MAX)
텍스처링
(포토샵)
< 5 초0초
아트 툴
게임 or 엔진툴
라이팅
미리보기
다른 게임의 워크플로
모델링
(MAX)
텍스처링
(포토샵)
< 5 초0초
아트 툴
게임 or 엔진툴
라이팅
미리보기
0초0초
다른 게임의 워크플로
모델링
(MAX)
텍스처링
(포토샵)
< 5 초0초
아트 툴
게임 or 엔진툴
라이팅
미리보기
0초0초
몇초
?
다른 게임의 워크플로
모델링
(MAX)
텍스처링
(포토샵)
< 5 초0초
아트 툴
게임 or 엔진툴
라이팅
미리보기
0초0초
몇초
?메쉬변환
다른 게임의 워크플로
모델링
(MAX)
텍스처링
(포토샵)
< 5 초0초
아트 툴
게임 or 엔진툴
라이팅
미리보기
0초0초
몇초
?메쉬변환
텍스처압축
다른 게임의 워크플로
모델링
(MAX)
텍스처링
(포토샵)
< 5 초0초
아트 툴
게임 or 엔진툴
라이팅
미리보기
0초0초
몇초
?메쉬변환
텍스처압축
마테리얼생성
등등
다른 게임의 워크플로
모델링
(MAX)
텍스처링
(포토샵)
< 5 초0초
아트 툴
게임 or 엔진툴
라이팅
미리보기
0초0초
~1분이상
메쉬변환
텍스처압축
마테리얼생성
등등
다른 게임의 워크플로
모델링
(MAX)
텍스처링
(포토샵)
< 5 초0초
아트 툴
게임 or 엔진툴
라이팅
미리보기
0초0초
~1분이상
메쉬변환
텍스처압축
마테리얼생성
등등
다른 게임의 워크플로
모델링
(MAX)
텍스처링
(포토샵)
< 5 초0초
아트 툴
게임 or 엔진툴
라이팅
미리보기
0초0초
~1분이상
메쉬변환
텍스처압축
마테리얼생성
등등
~수십번
다른 게임의 워크플로
모델링
(MAX)
텍스처링
(포토샵)
< 5 초0초
아트 툴
게임 or 엔진툴
라이팅
미리보기
0초0초
~1분이상
메쉬변환
텍스처압축
마테리얼생성
등등
~수십번
가끔 크래쉬
= 재부팅
= 몇분?
스페이스마린의 워크플로
모델링
(MAX)
텍스처링
(포토샵)
< 5 초0초
아트 툴
게임 or 엔진툴
라이팅
미리보기
0초0초
~1분이상
메쉬변환
텍스처압축
마테리얼생성
등등
~수십번
스페이스마린의 워크플로
모델링
(MAX)
텍스처링
(포토샵)
< 5 초0초
아트 툴
게임 or 엔진툴
라이팅
미리보기
0초0초
~1분이상
메쉬변환
텍스처압축
마테리얼생성
등등
스페이스마린의 워크플로
모델링
(MAX)
텍스처링
(포토샵)
< 5 초0초
아트 툴
게임 or 엔진툴
라이팅
~1분이상
메쉬변환
텍스처압축
마테리얼생성
등등
미리보기
0초 0초
낭비하는 시간 비교
(텍스처 수정 20회, 프리뷰 10회)
• 다른엔진: 20 x 5초 + 10 x 1분 = 11분 40초
• 스페이스마린: 20 x 5초 + 1 분 = 2분 40초 4.375배 빠름!
낭비하는 시간 비교
예: (텍스처 수정 20회, 프리뷰 100회)
• 다른엔진: 20 x 5초 + 100 x 1분 = 101분 40초
• 스페이스마린: 20 x 5초 + 1 분 = 2분 40초 38.125배 빠름!
낭비하는 시간 비교
예: (텍스처 수정 20회, 프리뷰 100회)
• 다른엔진: 20 x 5초 + 100 x 1분 = 101분 40초사실상 불가능!
• 스페이스마린: 20 x 5초 + 1 분 = 2분 40초 38.125배 빠름!
하지만 문제는 있었다.
• 게임 출시를 몇 달 앞두고 다른 팀에서 아티스트들을 많이 빌려옴
• 하지만 출시가 임박해서 더 이상 새로운 셰이더 추가 불가
• 더 이상 실험(experiment)는 의미가 없음
• 기존에 있던 셰이더를 골라서 사용하는 게 더 일반적인 workflow가 되었음
간단한 꼼수
• 맥스 우버세이더 머테리얼에 새로운
rollout 추가
• 현존하는 셰이더를 하드에서 검색
• 셰이더 이름 토큰따라 맥스
우버셰이더의 옵션을 키고 꺼줌
게임 / MAX간의 차이
• 디퍼드 / 포워드 라이팅 차이
• SSAO
• World Space AO (http://kblog.popekim.com/2011/11/blog-post.html 참조)
• 색상 보정 (Color Correction)
• 기타 Full-screen 효과들
• 그래도 90프로 이상 매치!!
정리 / FUTURE WORK / 주의할 점
• 테크니컬 아티스트의 중요성: VISION!
• Future Work: 비슷한 셰이더들을 모아서 공통된 부모 셰이더로 합쳐주기
• 이럼 Category별로 셰이더 만들어 주는것과 비슷함
• 셰이더 스위칭에 따른 성능저하 방지 (라고 하나 이젠 별 의미 없을지도…?)
• 주의할 점:
• 새 맥스 뷰포트에선 작동안함(preference viewport choose driver Direct 3D
• fx파일의 pass에서 SRGBWriteEnable 지원안됨(Max 2012) 셰이더 코드로 변환
그냥 재밌는(?) 통계
• Max 우버셰이더: 1940줄 (자체 셰이더 노드 에디터로부터 생성)
• 머테리얼용 맥스 스크립트 : 3873줄 (.NET 버튼 Object등을 인자로 못넘겨서 복붙)
• 최종 셰이더 수: 107개
• 컴파일된 셰이더 크기: < 8MB
• 아티스트 Iteration 횟수: 수없이 많이, 아마 게임사상 최고일지도 -_-
• 아티스트의 포팅 요청: 새로운 게임팀에 갈 때마다…
SPECIAL THANKS
• 발표 허락해준 현/전 회사: EA 스포츠 FIFA, Relic Entertainment(SEGA)
• 같이 이 셰이더 UI를 발명한 렐릭의 전 테크니컬 아티스트 Nick Carota
• 멋진 셰이더 정의를 훔쳐 쓰게 허락해주신 Ndoors의 정종필 부장님
• 강연자료 검토 및 피드백 주신 이현정님
• 제 블로그와 유튜브를 즐겨 봐주시는 분들
• 라고님, 이네노님 ( 이유는 다음 장에… -_-;;;; )
꽃미남드립 대신 팬아트 보여주며 질문받기(응?)