23-07

Sandy·2024년 3월 6일

[Today I Learned]

목록 보기
7/18

230701_UE

Sound Attenuation

Attenuation Asset

Sound Queue

Reverb Effect

Audio Gameplay Volume

Game Ability System

기획자 조절하도록 하기 → 생산성 높아진다

Gameplay Ability System Effect

함수

서버에서 계산하면 잘 안 쓴다

Frame Budget

프로파일링 할 때

230704_GraphicsPipeline

역행렬

(AB)^-1 = B^-1A^-1

역함수와 비슷하다

렌더링 파이프라인

Local → World → View → Projection → Viewport

Transform Matrix

각 오브젝트가 월드의 위치에 대해 갖고있는 행렬

카메라 행렬 = View Matrix

카메라가 원점인 좌표계

카메라도 월드 공간상에 어딘가에 있다

Dir Up

카메라 돌리려고 하기 → 다른 오브젝트가 카메라의 월드 좌표만큼 역행렬 한다

Projection Matrix

X / Y : +-1 로 변환하기

Depth Z : 0 ~ 1로 변환하기

Motion Blur

픽셀을 정점의 속도벡터 방향으로 샘플링해서 blur 한다

Post Processing

파이프라인 나온 후 결과값 재 가공

Matrix decomposition

값이 결합되어있어서 완벽 분리 불가능

Homogenous Coordinate

마지막 1 : 점 마지막 0 : 벡터

Bone Animation

본의 월드 행렬의 역행렬을 구해서 버텍스에 곱한다

→ 버텍스가 본의 로컬 공간으로 들어간다

230705_Inheritance

std::move()

인자를 rvalue reference로 바꿔준다

explicit

변환 생성자 X 컴파일러가 알아서 안한다

parameter에 맞게 explicit하게 생성하기

상속할 관계

고양이 is a 동물 O

경찰 has a 총 X

protected

derived class에서 base의 변수를 사용할 수 있다

변수를 public으로 열지 않으면서도 자식 클래스에서 쓸 수 있도록 했다

Derived class 에서 Constructor

생성 / 소멸자는 상속하지 않는다

derived 에서 생성자를 호출할 때 Base() + Derived()가 호출된다

230706_Upcasting

Upcasting

Base* instance = new Derived() O

reference 가능한 영역이 작아진다

Downcasting

Derived* instance = new Base() X

Upcasting / Downcasting in Memory

new로 heap에 메모리 잡을 때

upcasting : derived로 잡으면 더 크게 잡는다

downcasting : base로 공간 잡으면 derived 영역 생성 안했는데 써서 문제 생긴다

Binding

function call을 function의 definition과 결합한다

230707_inheritance

Pure Virtual Function 필요한 이유

부모 클래스가 하는 역할이 구현이 아니라 설계할 때

자식 클래스에서 함수 override 안하면 객체 생성 못한다

→ 자식 클래스들이 같은 시그니처의 함수를 갖지만 각자 자신의 기능이 다르다

→ upcasting 해서 polymorphic 하게 쓸 수 있다

override final

derived에서 override 하지 않게 하기

abstract ↔ final

꼭 inherit 하기 ↔ 더이상 inherit 하지 말기

230708_UE

CDO (Class Default Object)

엔진이 initialize 될 때 생성된다

UClass 를 각 클래스에 만든다

JSON / CSV

JSON : key-value Map

CSV : 엑셀 시트 array

변경 많아서 json

Subsystem

engine component system

managed lifecycle

static manager class X

230711_Normal_Mapping

Shading

빛과 관련해서 입체감을 만든다

Ambient Light

전체에 깔려있는 빛

Lumen

ambient lighting

Dynamic Global Illumination / Reflection Method

Directional Light

방향 O 위치 X

Point Light

방향 X 위치 O

점에서 물체까지 벡터 구하고 그 벡터로 내적해서 빛 양 구하기

Nanite

mesh rendering

Specular = Phong Reflection

(ReflectionV * ViewV) ^Shiness

(시선 벡터 * 반사 벡터) ^ 범위 줄이기

2 (NormalV * LightV) NormalV - LightV

Half Angle Vector

정반사면 Half angle == Normal

Diffuse

산란 : 빛이 흩어진다

Normal Vector

Scale 있으면 Normal이 달라진다 Shear?

S * N = 0

Normal을 구할 때 Transform Matrix의 역전치행렬을 써야한다

A * B == A X (B ^T)

A B DotProduct == A X (B의 전치행렬)

Per Vertex Light

Vertex 기준으로 lighting 한다

Linear Interpolation

Source to Destination

Per Pixel Light

노말을 lerp해서 픽셀 세이더에 넘겨준다 X

→ Normal map 만들어서 계산 줄이기 O

Normal Mapping

0~1 → -1~1 → 0~254

RGB XYZ

Bump Mapping

bump_map : 요철

gray scale 로 높이 값 표현

Vertex → pixel

Mesh → pixel 로 최근 변했다

PBR

Specular : Smooth + Rough

BRDF Bidirectional Reflectance Distribution Function

표면에서 어떻게 빛이 반사하는지 나타내는 함수

MicroFacet (미세면 분포)

미세면 분포함수 / 기하감쇠 계수 / 프레넬 공식에 의한 반사계수 / 물체 표면의 반사벡터 / normal / light

schlick 근사값 프레넬 항

프레넬 항

물체의 경계면 나타내기

거친 표면이어도 측면으로 가면 빛이 반사한다

G 기하감쇠율 Geometric Attenuation Factor

masking + shadowing

D 미세면 분포 함수 Normal Distribution Function

roughness

GGX in unity

Object에 들어가는 mapping 종류

Texture : 2D 이미지로 3D 물체의 표면을 그린다

Normal : 폴리곤의 개수를 늘리지 않고 lighting 할 때 표면의 디테일을 높인다

Displacement : 표면에 geometric 디테일을 더한다

Light : static object의 빛 정보를 미리 계산해서 저장해 둔다

230712_StackUnwinding

상속하면 오버로딩 안한다

virtual 붙히면 overriding이다

함수 이름 같고 시그니쳐 다르면 overloading이다

Stack Unwinding

예외처리 하고 호출 함수에 예외 전달

return 처럼 작동한다

230714_Template

Operator Overloading이 Overloading 이라고 불리는 이유?

함수, 연산자에 대해 redefine X → 새로운 것 만들어서 추가하기만 가능

extending O replace X

템플릿 함수 ≠ 함수

자료형을 알지 못한다

함수를 만드는 템플릿

사용할 때 컴파일러가 만든다

Type parameter

T, U, V, K로 일반적으로 네이밍 한다

Template memory location, function calling?

일반적인 함수처럼 함수 포인터로 저장된 곳에서 static dispatch로 불러서 사용한다

Static Dispatch

argument와 signature로 어떤 함수를 부를지 컴파일 타임에 결정한다

일반적인 함수 호출 + overload 된 함수 + template 함수

Dynamic Dispatch

vptr로 vtable에 있는 함수를 runtime에 결정한다

Polymorphism

공통의 base 타입처럼 다른 타입을 묶어서 쓸 수 있게 한다

template instantiation

컴파일러가 template로 실제 c++ 함수를 만들어낸다

호출되면 만든다

Template 키워드 class == typename

전에 그렇게 만들어놨다 typename으로 쓰기

auto in template

auto 형 자동 추론, 완전하지 않다

decltype(auto)

템플릿에서 형식 관리하는 키워드

auto

형식을 그대로 받지 않는다 const

Declare / Define 차이?

.h / .cpp

nullptr?

std::nullptr_t의 prvalue 이다

Prvalue (Pure Rvalue)

temporary object

다른 object와 연관되지 않은 값

230715_UE_Anim

Anim Sequence

스켈레탈 메시에서 재생 가능한 단일 애니메이션

몽타주

편집된 애니메이션

Anim Notify

애니메이션이 재생되면 호출된다

Anim Instance

애니메이션 창고 / Manager

Pawn이 들고 있다

Multi Threaded Animation

각각 Anim Instance 가 실행한다

번개표시 유지하려면 앞에 연산 두면 안된다

Optimize Anim Blueprint Member Variable access

Root Motion

movement component 가 처리한다

multi thread animation이 깨진다

SRP 위반?

Single Responsibility Principle

230719_erase(remove())

Erase–remove idiom

items.erase(remove(items.begin(), items.end(), item), items.end());

remove()

item 을 뒤로 보내고 end() 반환하기

Iterator

컨테이너 순회하는 포인터

Constructor calling / call member initalizer

T a = T();

T b = T{};

230725_NormalMapping

Normal Mapping

normal들을 텍스쳐에 입힌다

Tangent space Normal Mapping [O]

Object space Normal Mapping [X]

노말맵이 파란색인 이유 → Z 축이 1이다

Tangent space == Vertex space == 접선 공간

vertex 하나마다 공간을 갖는다

동일한 면에 대해서 하나만 갖고있으면 그냥 쓸 수 있다

관절 부위는 늘어나고 접힌다 → normal vector 뒤틀린다 → tangent space 써서 라이팅하기

라이팅 연산을 할 떄 tangent space로 가져와서 한다

그람 슈미트 과정

직교하는 벡터들 생성하기

project vector 이용

Gaussian Blur

가우시안 함수를 이용해서 가우시안 필터로 사진을 흐리게 만든다

230728_stable_sort

remove()가 stable하게 작동하는지?

stable : 제거 안된 것은 동일하게 남아있다

stl에서 stable 한 것과 아닌 것 구분하기?

앞에 stable 붙어 있으면 그렇다. 문서 찾아보기

stable 한 필요성 있는 이유?

정렬 기준대로 했을 때 다른 요소들이 섞이지 않고 유지되게 하기 위해서

230729_UE

Derived Data Cache

리소스 빌드, 로딩 시간 줄이는 방법

쿠킹했던 데이터 공유

사운드

PIE bottleneck

Sync

DDC를 key로 서버에서 찾아본다

없으면 포포스에서 컴파일에서 DDC에 넣는다

헤더만 갖고 온다

Virtual Assets → Cloud DDC

동시성 프로그래밍

2개 이상의 프로세스가 계산 중 상태이다

Memory Ordering

메모리 읽기 쓰기 수행하는 순서

compare_exchange

Load Link / Store conditional

volatile

코드 최적화 안함

멀티 스레드 동기화에서 사용 X

atomic

메모리 오더 지정

mutex

Mutal Execution

크리티컬 섹션 실행하는 프로세스 1개로 제한

barrier

모인 후에 실행 동기를 구현하는 것

Reader-Writer Lock

Writer 1개만 Read 여러 개 Reader/Writer 같이 락 획득 X

ABA

compare and swap 공유 객체에 대한 변화 감지 못함

Atomic → Mutex → Message Queue → Task

프로세스

= 스레드

Task

스레드 풀에서 task 실행

Coroutine

call / return + suspend / resume

0개의 댓글