전체 글
정리하는 습관을 기르기 위해 시작한 기술 블로그입니다.
-
아래는 ShaderED에서 사용하기 위한 함수 float2 random2(float2 p) { return frac(sin(float2(dot(p, float2(127.1f, 311.7f)), dot(p, float2(269.5f, 183.3f))))*43758.5453f); } float3 voronoiNoise(float2 uv, float scale, float2 resolution, float animateOffset) { float3 color; float2 st = uv * (resolution.x/resolution.y) * scale; float2 i_st = floor(st); float2 f_st = frac(st); float m_dist = 1; for (int y=-1;y
[HLSL] Noise - Voronoi Shader아래는 ShaderED에서 사용하기 위한 함수 float2 random2(float2 p) { return frac(sin(float2(dot(p, float2(127.1f, 311.7f)), dot(p, float2(269.5f, 183.3f))))*43758.5453f); } float3 voronoiNoise(float2 uv, float scale, float2 resolution, float animateOffset) { float3 color; float2 st = uv * (resolution.x/resolution.y) * scale; float2 i_st = floor(st); float2 f_st = frac(st); float m_dist = 1; for (int y=-1;y
2021.09.16 -
UE4는 액터를 스폰하는 방식이 두가지로 나뉜다. 첫 번째는 즉시 스폰 시키는 SpawnActor를 사용하는 방법 두 번째는 액터에 필요한 초기화를 선행한 후 BeginPlay로 넘길 수 있는 DeferredActorSpawn 함수를 사용하는 방법이 있다. 두 함수의 차이점은, SpawnActor를 수행하면 바로 Actor의 Construction과 PostActorConstruction이 수행되지만 DeferredActorSpawn을 사용하는 경우, 액터에 추가적으로 필요한 초기화 과정을 수행한 이후 'FinishSpawning'함수를 호출해 임의로 생성자 호출 순서를 조정할 수 있다. DeferredActorSpawn 내부를 보면 아래와 같이 생성자를 호출하고 있다. { FEditorScriptExe..
[UE4] DeferredActorSpawn 과 초기화UE4는 액터를 스폰하는 방식이 두가지로 나뉜다. 첫 번째는 즉시 스폰 시키는 SpawnActor를 사용하는 방법 두 번째는 액터에 필요한 초기화를 선행한 후 BeginPlay로 넘길 수 있는 DeferredActorSpawn 함수를 사용하는 방법이 있다. 두 함수의 차이점은, SpawnActor를 수행하면 바로 Actor의 Construction과 PostActorConstruction이 수행되지만 DeferredActorSpawn을 사용하는 경우, 액터에 추가적으로 필요한 초기화 과정을 수행한 이후 'FinishSpawning'함수를 호출해 임의로 생성자 호출 순서를 조정할 수 있다. DeferredActorSpawn 내부를 보면 아래와 같이 생성자를 호출하고 있다. { FEditorScriptExe..
2021.09.03 -
리펙토링 Ctrl + R + M : 메소드 추출 Ctrl + R + S : 시그니쳐 변경 Ctrl + R + R : 이름 변경 포맷 Ctrl + K + F 북마크 Ctrl + K + K : 북마크 추가/해제 Ctrl + K + N : 다음 북마크 이동 Ctrl + K + W : 북마크 목록 도시 탐색 Ctrl + T : 솔루션 내 검색 Ctrl + F : 스크립트 내 검색 Ctrl + Shift + F : 파일 내 검색 Ctrl + H : 문자 교환 Alt + \ : 파일 내 심볼 검색 편집 Ctrl + X : 한 줄 제거 및 복사하기 Ctrl + L : 한 줄 제거 Ctrl + W : 단어/문장 선택 F9 : 중단점 추가/해제 실행/빌드 Ctrl + F5 : 실행 Alt + F5 : 디버깅 시작 Shi..
[Resharper] 자주사용하는 단축키 정리리펙토링 Ctrl + R + M : 메소드 추출 Ctrl + R + S : 시그니쳐 변경 Ctrl + R + R : 이름 변경 포맷 Ctrl + K + F 북마크 Ctrl + K + K : 북마크 추가/해제 Ctrl + K + N : 다음 북마크 이동 Ctrl + K + W : 북마크 목록 도시 탐색 Ctrl + T : 솔루션 내 검색 Ctrl + F : 스크립트 내 검색 Ctrl + Shift + F : 파일 내 검색 Ctrl + H : 문자 교환 Alt + \ : 파일 내 심볼 검색 편집 Ctrl + X : 한 줄 제거 및 복사하기 Ctrl + L : 한 줄 제거 Ctrl + W : 단어/문장 선택 F9 : 중단점 추가/해제 실행/빌드 Ctrl + F5 : 실행 Alt + F5 : 디버깅 시작 Shi..
2021.08.26 -
TMap은 Key/Value Pair로 이뤄져 있으며, GetHashType 함수를 통해 내부에 갖고 있는 Key 타입에 대한 리플렉션을 찾는다. 때문에,사용자가 임의로 만든 struct를 키 타입으로 명시하고 GetHashType을 override하지 않고 빌드를 수행하면, 컴파일 에러가 난다. 이럴 때 struct 안에 'friend uint32 GetTypeHash(const FMyClass& MyClass)' 를 선언하면 되는데, 여기서 주목해야 할 점은 'friend' 키워드를 사용했다는 점이다. 이 이유는 언리얼엔진은 리플렉션 계층을 따로 구현하고 있는데, 이 때문에 언리얼에서 명시하는 클래스는 모두 GetTypeHash를 갖고 있으며 이는 한정자에 상관없이 리플렉션 계층에서 접근할 수 있어야..
[UE4] TMap과 Structure (GetTypeHash)TMap은 Key/Value Pair로 이뤄져 있으며, GetHashType 함수를 통해 내부에 갖고 있는 Key 타입에 대한 리플렉션을 찾는다. 때문에,사용자가 임의로 만든 struct를 키 타입으로 명시하고 GetHashType을 override하지 않고 빌드를 수행하면, 컴파일 에러가 난다. 이럴 때 struct 안에 'friend uint32 GetTypeHash(const FMyClass& MyClass)' 를 선언하면 되는데, 여기서 주목해야 할 점은 'friend' 키워드를 사용했다는 점이다. 이 이유는 언리얼엔진은 리플렉션 계층을 따로 구현하고 있는데, 이 때문에 언리얼에서 명시하는 클래스는 모두 GetTypeHash를 갖고 있으며 이는 한정자에 상관없이 리플렉션 계층에서 접근할 수 있어야..
2021.08.26 -
https://docs.unrealengine.com/4.26/en-US/API/Runtime/CoreUObject/UObject/UObjectBaseUtility/IsA/ Actor 클래스에는 함수 'bool IsA(Other class type)' 을 통해 쉽게 사용할 수 있다. DynamicCast 함수인 Cast를 통해서도 확인할 수 있지만, Cast에선 다이나믹 캐스트에 실패하면 내부적으로 IsA를 호출해 리플렉션 기반으로 베이스 클래스를 탐색해 결과를 도출한다. 따라서, IsA를 그냥 사용해도 크게 다를 것은 없다.
[UE4/Tip] 액터 클래스 타입 비교https://docs.unrealengine.com/4.26/en-US/API/Runtime/CoreUObject/UObject/UObjectBaseUtility/IsA/ Actor 클래스에는 함수 'bool IsA(Other class type)' 을 통해 쉽게 사용할 수 있다. DynamicCast 함수인 Cast를 통해서도 확인할 수 있지만, Cast에선 다이나믹 캐스트에 실패하면 내부적으로 IsA를 호출해 리플렉션 기반으로 베이스 클래스를 탐색해 결과를 도출한다. 따라서, IsA를 그냥 사용해도 크게 다를 것은 없다.
2021.08.25 -
키워드 목록 프로그래밍 패러다임 구조적 프로그래밍 데이크스트라의 해로운 성명서 goto의 해로움 OO 프로그래밍 3요소 : 상속, 캡슐화, 다형성 의존성 역전 : 인터페이스를 통한 모듈간 의존성 역전된 상호작용 가능 => 모듈간 독립성과 자유로운 의존 함수형 프로그래밍 변수의 불변성 그리고 아키텍처 : 다수의 쓰레드와 프로세스간 문제는 가변성에 의한 문제, 함수형의 장점 가변성의 분리 : 불변 컴포넌트에선 순수 함수형 언어 사용, 가변 컴포넌트에 불변 컴포넌트를 의존, 가변 컴포넌트에선 트랜잭션 메모리 참조 결론 구조적 프로그래밍 : 제어흐름의 직접적인 전화에 부과되는 규율 객체 지향 프로그래밍 : 제어흐름의 간접적인 전환에 부과하는 규율 (이는 virtual table 그리고 3요소 참고) 함수형 프로..
[틈새 독서] 클린 아키텍쳐 - 1, 2장키워드 목록 프로그래밍 패러다임 구조적 프로그래밍 데이크스트라의 해로운 성명서 goto의 해로움 OO 프로그래밍 3요소 : 상속, 캡슐화, 다형성 의존성 역전 : 인터페이스를 통한 모듈간 의존성 역전된 상호작용 가능 => 모듈간 독립성과 자유로운 의존 함수형 프로그래밍 변수의 불변성 그리고 아키텍처 : 다수의 쓰레드와 프로세스간 문제는 가변성에 의한 문제, 함수형의 장점 가변성의 분리 : 불변 컴포넌트에선 순수 함수형 언어 사용, 가변 컴포넌트에 불변 컴포넌트를 의존, 가변 컴포넌트에선 트랜잭션 메모리 참조 결론 구조적 프로그래밍 : 제어흐름의 직접적인 전화에 부과되는 규율 객체 지향 프로그래밍 : 제어흐름의 간접적인 전환에 부과하는 규율 (이는 virtual table 그리고 3요소 참고) 함수형 프로..
2021.08.20