본문 바로가기
정리필요

[그래픽스2]

by imitme 2018. 4. 22.
반응형
 [이전시간]
-컴퓨터 구조얘기
-쉐이더

[컴퓨터 용어]
-
-GUP / 사이에 North South 브릿지. 요즘은 CPU안에 들어있다.
-NVidia,  >고수준 언어
-고수준언어 > 저수준 언어 = 컴파일러
-잘못된거 찾아주는거 = 디버깅
-화면에 그려지기 위해서 짜는 언어 = 쉐이더 = 화면에 어떻게 그려질지 정하는 코드
-그래픽스 라이브러리 : 그중 대표적인것은 window기반인 DirectX , 그래픽하드웨어 제조사 그룹인 크로노그룹의 OpenGL , 모바일하드웨어용인 OpenGLES(Embeded System)
-쉐이더 용어들이 이것을 기반으로 태어났다. 이것은, DirectX 기반의 HDSL, OpenGL 기반의 GLSL, 그리고 Nvidia 라는 그래픽스 제조사에서 만든것이 CG 라는 것이 있다.
-유니티는 CG언어 쉐이더기반으로 되어 있다. CGProgram / EndCG 로 끝난다. 그 언어도 쓸 수 있다. 그 외에도 쓸 수 있다. GLSLProgram으로 되어 있고, 끝날때 EndGLSL로 쓰인다. 유니티2018.1나오면, HDSLProgram이 들어온다. SRP
"용어 친숙해야 한다." "외울필요는 없지만 기본 개념"
-유니티 쉐이더는 유니티쉐이더랩은 3가지 구조를 가진다. 전통적인 구조, Fixed fuction, 프레그먼트,
 쉐이더 언어는 3가지 , 이 3가지는 GLSL로 나오고, 게임빌드할 떄 심어진다. 

-빌드는 하나의 실행파일로 만드는 것. 리소스만드는 것은 개발과정. 개발과정에서 실행파일로 만드는것. 빌드파일만든다는 것은 실행파일 만드는것. 빌드만들떄, 유니티에서 짠 쉐이더들은 다 GLSL코드로 컴파일 되어서 들어간다. 

-유니티는 CG언어에서 파생된 언어고, CG로는 컴파일이 되지 않는다. 그래서 쉐이터 코드눌러보면 'show 제너레이티트 코드'라고 실제 코드가 컴파일 된 것을 볼 수 있고, 컴파일 & 쇼코드 눌러보면, 각각의 플랫폼에 맞춰서 DirectX3, OpenGL2.0, 3.0 해서, 쉐이더 코드 하나 짜면, 그 코드하나를 그대로 쓰는 것이 아니고 저 코드 싼것이 여러가지 종류로 만들어준다.(컴파일 해준다.) 밑에 48베리언츠라고 쓰인것은 쉐이더 하나에 48개의 파생쉐이더가 만들어 진다는 것이다. (경우의 수가 있다. 그림자를 그렸을때, 그림자를 받을 때 등) 그래서 유니티쉐이더는 네이티브쉐이더언어가 아닌기에 플랫폼에 맞춰 파생쉐이더를 자동으로 만들어 변환해 준다. 그래서 보면, 컴파일코드를 눌러보면, Directional, Directional Light, ShodowScreen, Light Probe 등등 많다. 이것들이 다 포인트 디렉셔널 스팟, 즉, 라이트를 받았을 떄, 어떻게 계산할지, 그림자를 그렸을 떄, 라이트맵을 썼을 떄, 디퍼드일때, 포워드일때, 각각 경우에 맞춰 쉐이더 분기를 만들어 준다. 코드에서 각 분기를 표시해 준것이다.
-분기는, 구가 있고, 그림자가 지는 것이 있는데, 그리기위한 쉐이더는 들어있는데, 이것뿐만아니라, 카메라 렌더링 옵션에 포워드인지 디퍼드인지, 그림자를 그릴지, 라이트맵을 쓸때, 등 모든 경우의 수가 있는데, 이 쉐이더 하나가 그때그때 만든것들을 쉐이더 다 따로 들고있고, 그 떄에 맞춰서 쉐이더를  따로 쓴다. 실제 빌드할때! 그때그때 맞춰서 따로 들어간다.

-화면에 렌더링되는것이 렌더링 파이프라인에 맞춰서, ....
-대략적인 플랫폼.....


-모바일플랫폼....모바일보면, 제일 많이 쓰는것은 안드로이드, 아이폰, 윈도우모바일이 있다. 지금은 윈도우 많이 쓰지 않기에 아이폰과 윈도우에 대해 본다.
-모바일에도 cPU와 GPU가 있다. 중심이 되는 칩셋은 AP(어플리케이션 프로세스). 이 안에 GPU가 있다. 그래픽관련된 것을 하기에 모바일 GPU가 중요하다.
-안드로이드는 아드레노, 말리. IOS는 파워브이알, 에플자체설계(IOE?).
-모바일에 쓰이는 그래픽스 라이브러리는 OpenGLES= 그래픽스API.
OpenGLES 1.0 2.0 3.0 3.1 3.1+AEP Metal VulKan 3.2 이 있다. 1.0은 안쓴다. 2.0과 호환되지 않기 떄문에. 
-유니티 쉐이더랩구조 3가지가 있다. 픽스트펑션, 프레그먼트쉐이더, 서피스쉐이더 있다.
-픽스트펑션이 ___를 대응해서 쓴다.? 지금잘안씀.
-OPenGL 2.0, 아드레노 GPU 스페스픽케이션. -나무위키검색.
CPU AR 말리 T880????// 아드레노이니까 말리를 찾는다?? 말리GPU, 말리를 들어가보면, T880이 있으니까,아드레노 T880, OpenGL 불칸1.0/3.2버전 존재. 
-중요한이유는, 2.0과 3.0 기술적인 이슈가 있다. 3.2 AP와 갭이 있다. 하드웨어 관심자들이 아는것인데, DirectX9와 10,11과 비슷하다.
-우리나라는 DirectX9기준으로 많이 진행되어 있는데, 갤럭시S3, S4일부
3.0 이 S4, S5정도, S7, S8....

-그래서 모바일에서 중요하는 것은 S4냐 S5, 6쓰느냐가 중요하다.
-대한민국 안드로이드 점유율 95%정도인데, 최저사양이 무엇이냐에 따리 개발에 영향을 준다.
- 앱 개발할떄에도, AEC 앱 개발할때, 어느정도사양까지 지원하냐에 갈린다.

-코비가 노트5, 3.1정도는 대부분사용가능. 3.2 지원가능????

-모바일 VR은 하드웨어 스펙 지원하돼 많이 못쓴다.

-개발자 컴퍼런스에 이런 얘기가 많다.

-쉐이더짜는것은 알아야 하니까, .......
-폴백 = 그림자.



-조명모델에 대해 설명할것이다. 라이팅 계산을 어떻게 할 것인지에 대해. 
-일단, 로컬스페이스 , 로컬, 월드, 뷰, 프로젝션, 백스페이스, 컬링, 라이팅, 크리칭, 프로젝션......
-버텍스쉐이터, 픽셀쉐이더에 대한 설명 : 게임 내 폴리곤, 메쉬들은 뭘로 생성되어 있는가? 삼각형으로 ! 점들이 어디 찍힐지 계산하는 것이 버텍스쉐이더. 레스터라이즈는 화면해상도에 옮겨 배치하는 작업이고, 픽셀쉐이더는 최종적으로 점에 무슨색이 찍히는지 계산하는 것이다.
-로컬스페이스, 오브젝트가 갖고 있는 공간을 설정하는 것이 로컬공간이고, 그걸 월드공간(게임엔진 공간상에서의 좌표), 뷰스페이스틑 게임화면내에서 보여지는 공간의 좌표, 프로젝션은, 원근있는것. 
-공간변환에는 행렬을 사용하는데, 그 이유는 오브젝트의 위치정보값(포지션, 로테이션, 스케일)을 한번에 계산하기 위해 행렬을 사용하는 것이다.
-쉐이더 랩은 픽스트 펑션 구조로 되어 잇다. 
쉐이더 이름정하는 것이랑 속성정하는 것은 같아. 계산이 들어가는것을 키워드로 계산하기에 간단하게 보인다.
-프레그먼트쉐이더는 행변환을 직접해야하기에 어렵지만, 기존의 언어체계와 유사하기에 최적화좋고, 공부하기 좋다. GLSL쓸수 있고,
-서피스쉐이더. 버텍스쉐이더 따로 있진않지만, 전처리가 되어 있어, 코드가 짧고 살펴보기 편하다.
"유니티쉐이더랩은 위 3가지(픽시드쉐이터, 프레그먼트 쉐이더, 서피스쉐이더)를 사용하는데, 뭘 쓰든지 내부적으로 , GLSL로 컴파일 된다. "
프레그먼트쉐이더가 이전에 네이티브코드와 유사하기 떄문에, 익숙한사람들(프로그래머)은 쓰기 편한데, 처음 접하기가 어렵다. 그래서 서피스쉐이더를 쓴다.
나중에 프레그먼트를 짜는것이 좋은데, PBR 들어가기 세피스가 ??좋다???
-코드짠것이 GLSL로 바뀌는데, 이 과정을 통해 바뀐다. HRSL CG 서피스쉐이더 코드를 짜면, 한번은 풀CG쉐이더코드로 바뀐다음에, _GLSL?_코드로 변화된다. 자동최적화되고, 다시한번 더 파일_GLSL?_코드로 ___CPU군기???가 발생한다.

-왼쪽이 서피스 쉐이더로 코드를 짠 것이고, 오른쪽이 프레그먼트쉐이더로 쓴 코드이다. 왼쪽이 더 가볍다. 짧고, 짧은이유는 전처리가 대부분되어 있기에 픽셀쉐이더계산 안해줘도 된다. 그래서 짧다.  

-전처리는 ? 윈도우 라이팅 보면, fog가 있는데,

- 쉐이더코드짤때 규칙은, /(20배) > - > *, +. 나누기는 20배 느렴. *나 +기만 쓰기!!!!!
- add 는 더하기, 텍스처 a,b 더한다. 
- RGB 값(0~1)은 더하면 더할수록, 밝아진다. 곱하면(1 보다 작은 값이기에) 어두워진다. 나누기해도 어두워진다. 

- 프로퍼티, 서브쉐이더, UV, 텍스쳐, 디파인...../ 채널타입은.... / 쉐이더 계산은.......

ㅁ프로퍼티에 들어가는 자료형 타입찾고,UnityShaderProperties'/ 쉐이더랩의 properties. 옆에 범위 range, 2D , color, 등등.... 이거말고도 검색하면 좀 더 나온다.
2D, range, color, cube, ......
ㅁ 구조체선언. UV쓰기에 Main texture....나오고??? 

-구조체선언에는 texture1,2 해서 나온다???????? 쓸것들 찾아 넣는다. Half, 픽스트, 플롯트.

-실제로 안보일 뿐,  피스쉐이더 코드는 structure 인풋이 있고, structure surface 아웃풋있고, 출력어떻게 할지 정하는것이 있다. 서페이스 아웃풋은 라이팅쉐이더파일?이 선언되어 있음, 그래서 또 하면 안된다. 램버트?가 미리 선언되어 있기 떄문에. 

-진짜 다르게 쓰고 싶다면, 이름 바꿔 쓸 수 있다. 

ㅁ properties 자료타입 /  서피스서프 void 서프했잖아. 서프는 출력물 붙임, 램버트 = 조명. 유니티 서피스쉐이더는 변수 프로퍼티 존재하고, .... 라이팅과 쉐이더 컴파일? 
중간에 보면 #pragma surface surf .... 밑에 lambert써있는데, 그 위치에 램버트, 브린프?, 스텐다드가 총 3가지 조명모델이 유니티안에 설정되어 있다. 이것에 대해서 최대한 찾아오기!!!!!!!!!!


"유나이트 프레젠테이션 앞부분 유니티 소개에 대한 것.. 간단하게 시연 설명??"

반응형

댓글