교내 활동 12

게임그래픽엔진심화 14강 - 샘플러, UV 회전, Diffuse Wrap, 굴절, 반사, Normal Map

※ 이 게시글은 6월 15일 작성 되었습니다. (원본 링크) 14강 내용 정리 SAMPLER 매크로 이 매크로에 대해서 알아보자면, 크게 두가지로 나눌 수 있다. 예시 이미지(강의자료) TRANSFORM_TEX - 유니티 define 매크로 처리로 _BaseMap 키워드를 기준잡아 _ST로 자동 변환 되어 사용한다. SAMPLER - 샘플러에서 _BaseMap 이름을 기준으로 미리 약속된 처리를 자동으로 알아서 한다. 연결된, 혹은 분리된 텍스처와 샘플러 왼쪽 공은 컴바인 상태. 오른쪽 공은 세퍼레이티드. 분리되어 있는 방식이다. 양쪽 공은 서로 셰이더 불러오는 방식이 다르다. 왼쪽 공은 HLSL로 불러온다.샘플러와 텍스처가 하나로 묶여 있다. 오른쪽 공은 전처리 지시어로 매크로 되어 있고, 샘플러 따로..

게임그래픽엔진심화 13강 - 아웃라인 셰이더, BRDF, Lambert, Half Lamb···, Blinn Phong, Fresnel, 버텍스 라이팅, IBL, SH, Blending

※ 이 게시글은 6월 8일 작성 되었습니다. (원본 링크) 지난 강의 보충 유니티 클립공간의 특징 클립공간 이외의 공간에서는 w 값이 1이다. 변환의 결합 스케일, 회전, 이동 순서 회전 후 이동은 문제가 없지만 이동 후 회전은 문제가 발생한다. = MRS 12강 아웃라인 셰이더 월드 노멀 방식과 스크린 노멀 방식으로 카메라 거리의 따른 원근 교정이 들어가면 멀어질 수록 아웃라인이 두꺼워지고, 가까워질 수록 얇아지게 된다. Universal Rendering Examples (출처) Post Effect에서 아웃라인 셰이더 - 장점: 버텍스 노멀 방식의 폴리곤이 갈라지는 현상이 없다. - 단점: 포스트 이펙트 태생적인 문제로 모바일에서 느리다. BRDF BRDF는 양방향반사도분포함수 라고 불린다. 두개의..

게임그래픽엔진심화 12강 - 행렬, MVP 변환과 아웃라인 셰이더

※ 이 게시글은 6월 1일 작성 되었습니다. (원본 링크) 지난 강의 보충 벡터의 뺄셈 마이너스 벡터를 덧셈하는 것과 같다. 교환 법칙이 성립하지 않아서 빼는 순서에 의해 방향이 달라진다. 12강 동차 좌표 2D공간과 3D공간과의 크기를 제어하는 행렬은 대각선에 있다. 평행 이동을 하는 위치 변환을 기존 행렬의 곱셈 규칙에 적용하기 위해서는 새로운 축이 더 필요하다. 이것을 동차 좌표라고 한다. 왜 하나의 축이 더 추가되었을까? 그것은 이동을 위해서 추가된 것이라고 말할 수 있다. 동차 좌표를 적용한 크기 행렬의 곱셈 행렬의 곱셈을 이용한 이동 행렬 벡터는 원점에서 뻗어 나가는 벡터의 개념과 충돌된다. 가상의 차원을 늘려서 밀기 변환하고 남는 차원은 버린다. 좌표에 이동 값을 더하면 쉽게 이동이 가능하다..

게임그래픽엔진심화 11강 - 벡터, 기저벡터와 변환, 행렬

※ 이 게시글은 5월 25일 작성 되었습니다. (원본 링크) 벡터(Vector) 벡터 공간에 떠있는 입체 화살표이다. 2차원과 3차원 공간 좌표. 유니티 화면 오른쪽에 보면 이런식으로 길이값을 조정해 시각화할 수 있다. 일종의 방향 정보이며, 렘버트라이팅 연산을 하기 위해서도 필요하다. 방향 벡터 구할 때도 사용된다. 때로는 공중에 떠 있기도 한다. 하지만 그럼에도 원점을 기준으로 하는 것은 동일하다. 스칼라 - 각각의 숫자, 거리 램버트, 아웃라인 벡터의 덧셈 벡터의 덧셈은 어느 위치에 있든 상관없이 값을 더해주면 된다. 사진을 봐보자. 무브라고 되어 있는 곳을 보면, 바라보는 방향(더해주는 값)이 현재 빨간공이고 그것이 곧 원점에서부터 네모 체크박스까지의 위치가 된다. 중요한 개념 - 노말라이즈(no..

게임그래픽엔진심화 10강 - 함수와 구조체, 시멘틱, 전처리, 네이밍 관례, if분기, 좌표계

※ 이 게시글은 5월 18일 작성 되었습니다. (원본 링크) 지난 강의 보충 함수의 매개변수와 인수 선언과 사용을 동시에 한다. 함수의 선언이라는 것은 함수가 어떤 데이터 파일이고 어떤 값을 받아들이느냐가 중요하다. #pragma 지오메트리 셰이더 10강 [HLSL] 시멘틱(Semantics) 변수가 어떤 의미인지를 알려주기 위한 표시를 나타낸다. 함수 반환값이 의미하는 것을 직관적으로 보여준다. OpenGL, DirectX등 파이프라인이 있다. Attributes 구조체는 최초로 셰이더를 엔진에 받아온다. 버텍스 셰이더에서 중요한 것들이다. 주요 시멘틱 입력 멤버 변수의 의미를 명시할 필요가 있다. - 포지션: POSITION0, POSITION1, POSITION2 ... - UV 좌표: TEXCOO..

게임그래픽엔진심화 9강 - ShaderLab, 함수와 구조체

※ 이 게시글은 5월 10일 작성 되었습니다. (원본 링크) 9강 내용 정리 Pass의 선택적 작업들 크게 이렇게 나눠볼 수 있다. Pass - Name - Tags - Commands (안에는 약 11가지의 커맨드들이 존재한다) - 셰이더 코드 작성 Pass - Name 패스는 각자의 이름을 가진다. 주로 UsePass나 C# 패스를 인식할 때 사용한다. 프로그래머들이 제어가 가능하다. Pass - Tags 패스의 태그는 어딘가 익숙하다. 바로 서브셰이더에서의 태그에서도 나온다. 태그라는 이름을 같이 사용하기 때문에 햇갈리는 경우가 많다. 미리 정의된 태그 값을 사용하며 언제 패스가 렌더링 되는지 결정한다. 커스텀 태그를 사용하고 C#코드에 접근가능하다. 다만 패스 태그는 서브셰이더와 호환이 안된다. ..

게임그래픽엔진심화 8강 - Lambert 셰이더 맛보기, ShaderLab

※ 이 게시글은 5월 4일 작성 되었습니다. (원본 링크) 지난 강의 보충 반투명 오브젝트 소팅 - 2Pass ZWrite 1번은 라이트모드 활성화 2번은 Transparnt 2Pass 활성화 두 방법 모두 반투명하지만 Z-Buffer에도 존재한다. . 2번 방법. 앞에 공은 존재하지 않음. 디폴트 릿 셰이더 URP방식 중 특정 LightMode 태그 셰이더만 패스 추가 벡터곱 7강 내용에서 HLSL 벡터의 곱셈은 이름이 벡터과 비슷하다. 하지만 벡터곱은 cross이며 완전 다른 연산이다. 내적(dot))(V1·V2)도 아니다. 8강, 셰이더 코드 실습 - UV 스크롤 ShaderLab (2021.2) 유니티의 셰이더 언어이며, HLSL, CG기반으로 작동한다. Custom Shader 커스텀 쉐이더의 ..

게임그래픽엔진심화 7강 - [코드로만드는 셰이더2] - 자료형, HLSL의 연산자

※ 이 게시글은 4월 26일 작성 되었습니다. (원본 링크) 변수(6강 이어서) 자료형 쉽게 말해 그릇의 크기라고 생각하면 된다. 메모리 단위 중 가장 작은 단위인 비트(bit)가 있고 약 8비트 = 1바이트 정수형(int) 정수. 수학시간에 많이 들어봤을 것이다. 말 그대로 1, 2, 3, 4, 5... 등을 나타낸다. 유니티 셰이더에서는 int형 프로퍼티를 지원하지 않는다. 된다고 해도 float로 작동한다. [HLSL] float형 (32b 2진수) 1, 1.0, 1.0f 모두 float형으로 작동한다. (12.345) 여기서 1.0f에 f는 소수점 자리만 제외하고 모두 같은 숫자 숫자가 커지면 정밀도가 낮아지는 실수 (소수점) 가수부(24b) fioat & half 테스트 float - 32비트면..

게임그래픽엔진심화 6강 - Sorting, 렌더큐, [코드로 만드는 셰이더1] - 변수

※ 이 게시글은 4월 12일 작성 되었습니다. (원본 링크) 지난 강의 보충된 내용 정리 인풋 - 지오메트리 안에 중요 노드들 - Position - Screen Position - UV - Vertex Color - Normal Vector Position 픽셀의 위치 값이며, 어떤 식으로 볼지 Object, View, World, Tangent 네가지의 옵션이 있다. 전에부터 궁금증은 가지고 있었지만 비슷하다고 생각해 별 대수롭지 않게 여겼던 World와 Absolute World의 차이! Absolute World는 모든 SRP에서 절대적인 월드값을 말한다. 그렇지만 World는 다르다! 어떤 파이프라인이냐에 따라 명칭이 달라진다고 생각하면 된다. URP에서는 Absolute World지만 HDRP..

게임그래픽엔진심화 5강 - 셰이더 일반, 반투명, Z-Buffer

※ 이 게시글은 4월 5일 작성 되었습니다. (원본 링크) 4강 추가 내용 복습 5주차 수업 정리에 앞서 4강의 추가된 내용이 있어 정리해 보고자 합니다. + 벡터 내용 추가 벡터 초록 화살표 (5, 2)를 보면 아래 사진은 공중에 떠 있는 것 처럼 보이지만 실제로는 벡터가 허공에서 그려져 있다고 해도 위 첫번째 사진처럼 값은 똑같다. 원래라면 좌표 값은 항상 원점을 기준으로 한다. +코사인 내용 추가 Cos = 가로 / 빗변 Sin = 세로 / 빗변 (다 아는 내용(?) 이니까 빠르게 넘어가자) +라이팅이 왜 Cos인가 리니어 그라데이션. 길이가 서로 다르다. +정규화(Nomalize) 빛방향 벡터와 픽셀 노멀벡터는 벡터의 내적은 길이가 1이 아니어도 된다. 셰이더 그래프 노드에서는 이미 정규화가 되어..

게임그래픽엔진심화 4강 - 키워드, 커스텀 라이팅

※ 이 게시글은 3월 29일 작성 되었습니다. (원본 링크) 1. 셰이더 그래프 심화 셰이더 그래프 UV심화 ScrollOut ScrollOut 방식의 텍스처는 검은 색으로 마무리 되어야 한다. (파티클의 Vertex Alpha와 연동되는 Scroll) 스크롤 아웃은 이펙트 작업을 좀 더 용이하게 해준다. 셰이더에서의 나눗셈은 되도록 곱셈으로 계산하는 것이 좀 더 가볍다. x * 0.5 (x / 2 대신) 곱셈보다 나눗셈의 연산이 더 무겁기 때문이다. 그래서 할 수 있다면 최적화의 관점에서 하는 편이 좋다. 가능하면 가급적이면 곱셈을 쓰도록 하자. 키워드 (Keyword) 정적 분기를 만들 수 있다. 키워드에서의 정적 분기란? 키워드에 의해 발생되는 분기를 뜻한다. 변수 혹은 함수, Class에 정적 속..

게임그래픽엔진심화 3강 - 색을 숫자로 생각하기, UV

※ 이 게시글은 3월 23일 작성 되었습니다. (원본 링크) 1. 색을 숫자로 나타내보기 엔진 쉐이더에서는 보통 색을 표현할 때 RGB컬러값을 사용한다. 다른점이라면 포토샵에서 보통 그래픽 아티스트들이 사용하는 컬러값은 HSB 컬러로, 0~255까지를 나타내는 반면, RGB는 0~1까지의 색을 표현한다. 쉽게 말해서 0에 가까울수록 검은색이 되고, 1에 가까울수록 흰색이 되어가는 것이다. (RGB는 가산 혼합 방식임.) Red Green Blue, 말 그대로 빨강, 초록, 파랑 이 세가지 색상이 서로 합쳐져 더 밝은 색을 만들어 낸다. 이것을 가산 혼합 방식이라고 부른다. 하지만 결국에는 서로 같은 개념인 것이다. (HSB) 0~255 = (RGB) 0~1 포토샵의 컬러 피커. HSB와 RGB가 같이 표..