Attenuation Asset
Audio Gameplay Volume
기획자 조절하도록 하기 → 생산성 높아진다
함수
서버에서 계산하면 잘 안 쓴다
프로파일링 할 때
(AB)^-1 = B^-1A^-1
역함수와 비슷하다
Local → World → View → Projection → Viewport
각 오브젝트가 월드의 위치에 대해 갖고있는 행렬
카메라가 원점인 좌표계
카메라도 월드 공간상에 어딘가에 있다
Dir Up
카메라 돌리려고 하기 → 다른 오브젝트가 카메라의 월드 좌표만큼 역행렬 한다
X / Y : +-1 로 변환하기
Depth Z : 0 ~ 1로 변환하기
픽셀을 정점의 속도벡터 방향으로 샘플링해서 blur 한다
파이프라인 나온 후 결과값 재 가공
값이 결합되어있어서 완벽 분리 불가능
마지막 1 : 점 마지막 0 : 벡터
본의 월드 행렬의 역행렬을 구해서 버텍스에 곱한다
→ 버텍스가 본의 로컬 공간으로 들어간다
인자를 rvalue reference로 바꿔준다
변환 생성자 X 컴파일러가 알아서 안한다
parameter에 맞게 explicit하게 생성하기
고양이 is a 동물 O
경찰 has a 총 X
derived class에서 base의 변수를 사용할 수 있다
변수를 public으로 열지 않으면서도 자식 클래스에서 쓸 수 있도록 했다
생성 / 소멸자는 상속하지 않는다
derived 에서 생성자를 호출할 때 Base() + Derived()가 호출된다
Base* instance = new Derived() O
reference 가능한 영역이 작아진다
Derived* instance = new Base() X
new로 heap에 메모리 잡을 때
upcasting : derived로 잡으면 더 크게 잡는다
downcasting : base로 공간 잡으면 derived 영역 생성 안했는데 써서 문제 생긴다
function call을 function의 definition과 결합한다
부모 클래스가 하는 역할이 구현이 아니라 설계할 때
자식 클래스에서 함수 override 안하면 객체 생성 못한다
→ 자식 클래스들이 같은 시그니처의 함수를 갖지만 각자 자신의 기능이 다르다
→ upcasting 해서 polymorphic 하게 쓸 수 있다
derived에서 override 하지 않게 하기
꼭 inherit 하기 ↔ 더이상 inherit 하지 말기
엔진이 initialize 될 때 생성된다
UClass 를 각 클래스에 만든다
JSON : key-value Map
CSV : 엑셀 시트 array
변경 많아서 json
engine component system
managed lifecycle
static manager class X
빛과 관련해서 입체감을 만든다
전체에 깔려있는 빛
ambient lighting
Dynamic Global Illumination / Reflection Method
방향 O 위치 X
방향 X 위치 O
점에서 물체까지 벡터 구하고 그 벡터로 내적해서 빛 양 구하기
mesh rendering
(ReflectionV * ViewV) ^Shiness
(시선 벡터 * 반사 벡터) ^ 범위 줄이기
2 (NormalV * LightV) NormalV - LightV
정반사면 Half angle == Normal
산란 : 빛이 흩어진다
Scale 있으면 Normal이 달라진다 Shear?
S * N = 0
Normal을 구할 때 Transform Matrix의 역전치행렬을 써야한다
A B DotProduct == A X (B의 전치행렬)
Vertex 기준으로 lighting 한다
Source to Destination
노말을 lerp해서 픽셀 세이더에 넘겨준다 X
→ Normal map 만들어서 계산 줄이기 O
0~1 → -1~1 → 0~254
RGB XYZ
bump_map : 요철
gray scale 로 높이 값 표현
Vertex → pixel
Mesh → pixel 로 최근 변했다
Specular : Smooth + Rough
표면에서 어떻게 빛이 반사하는지 나타내는 함수
미세면 분포함수 / 기하감쇠 계수 / 프레넬 공식에 의한 반사계수 / 물체 표면의 반사벡터 / normal / light
schlick 근사값 프레넬 항
물체의 경계면 나타내기
거친 표면이어도 측면으로 가면 빛이 반사한다
masking + shadowing
roughness
GGX in unity
Texture : 2D 이미지로 3D 물체의 표면을 그린다
Normal : 폴리곤의 개수를 늘리지 않고 lighting 할 때 표면의 디테일을 높인다
Displacement : 표면에 geometric 디테일을 더한다
Light : static object의 빛 정보를 미리 계산해서 저장해 둔다
virtual 붙히면 overriding이다
함수 이름 같고 시그니쳐 다르면 overloading이다
예외처리 하고 호출 함수에 예외 전달
return 처럼 작동한다
함수, 연산자에 대해 redefine X → 새로운 것 만들어서 추가하기만 가능
extending O replace X
자료형을 알지 못한다
함수를 만드는 템플릿
사용할 때 컴파일러가 만든다
T, U, V, K로 일반적으로 네이밍 한다
일반적인 함수처럼 함수 포인터로 저장된 곳에서 static dispatch로 불러서 사용한다
argument와 signature로 어떤 함수를 부를지 컴파일 타임에 결정한다
일반적인 함수 호출 + overload 된 함수 + template 함수
vptr로 vtable에 있는 함수를 runtime에 결정한다
공통의 base 타입처럼 다른 타입을 묶어서 쓸 수 있게 한다
컴파일러가 template로 실제 c++ 함수를 만들어낸다
호출되면 만든다
전에 그렇게 만들어놨다 typename으로 쓰기
auto 형 자동 추론, 완전하지 않다
템플릿에서 형식 관리하는 키워드
형식을 그대로 받지 않는다 const
.h / .cpp
std::nullptr_t의 prvalue 이다
temporary object
다른 object와 연관되지 않은 값
스켈레탈 메시에서 재생 가능한 단일 애니메이션
편집된 애니메이션
애니메이션이 재생되면 호출된다
애니메이션 창고 / Manager
Pawn이 들고 있다
각각 Anim Instance 가 실행한다
번개표시 유지하려면 앞에 연산 두면 안된다
Optimize Anim Blueprint Member Variable access
movement component 가 처리한다
multi thread animation이 깨진다
Single Responsibility Principle
items.erase(remove(items.begin(), items.end(), item), items.end());
item 을 뒤로 보내고 end() 반환하기
컨테이너 순회하는 포인터
T a = T();
T b = T{};
normal들을 텍스쳐에 입힌다
Object space Normal Mapping [X]
노말맵이 파란색인 이유 → Z 축이 1이다
vertex 하나마다 공간을 갖는다
동일한 면에 대해서 하나만 갖고있으면 그냥 쓸 수 있다
관절 부위는 늘어나고 접힌다 → normal vector 뒤틀린다 → tangent space 써서 라이팅하기
라이팅 연산을 할 떄 tangent space로 가져와서 한다
직교하는 벡터들 생성하기
project vector 이용
가우시안 함수를 이용해서 가우시안 필터로 사진을 흐리게 만든다
stable : 제거 안된 것은 동일하게 남아있다
앞에 stable 붙어 있으면 그렇다. 문서 찾아보기
정렬 기준대로 했을 때 다른 요소들이 섞이지 않고 유지되게 하기 위해서
리소스 빌드, 로딩 시간 줄이는 방법
쿠킹했던 데이터 공유
PIE bottleneck
DDC를 key로 서버에서 찾아본다
없으면 포포스에서 컴파일에서 DDC에 넣는다
헤더만 갖고 온다
2개 이상의 프로세스가 계산 중 상태이다
메모리 읽기 쓰기 수행하는 순서
Load Link / Store conditional
코드 최적화 안함
멀티 스레드 동기화에서 사용 X
메모리 오더 지정
Mutal Execution
크리티컬 섹션 실행하는 프로세스 1개로 제한
모인 후에 실행 동기를 구현하는 것
Writer 1개만 Read 여러 개 Reader/Writer 같이 락 획득 X
compare and swap 공유 객체에 대한 변화 감지 못함
= 스레드
스레드 풀에서 task 실행
call / return + suspend / resume