아티스트에게 사랑받는
3DS MAX 우버 셰이더
Pope Kim
Rendering 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:popeImSoSexy.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의 정종필 부장님
• 강연자료 검토 및 피드백 주신 이현정님
• 제 블로그와 유튜브를 즐겨 봐주시는 분들
• 라고님, 이네노님 ( 이유는 다음 장에… -_-;;;; )
꽃미남드립 대신 팬아트 보여주며 질문받기(응?)

아티스트에게 사랑받는 3DS Max 우버쉐이더

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