Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Upcoming SlideShare
The Producer
The Producer
Loading in …3
×
1 of 88

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

31

Share

Download to read offline

KGC 2013 강연자료입니다. 스페이스마린에서 사용했던 아티스트의 눈높이에 맞춘 3DS Max 우버 셰이더입니다.

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

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

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

×