개발
-
파라미터 Tex : Texture2D UV : float2 float4 luminance = float4(0.30, 0.59, 0.11, 1); float2 dim; Tex.GetDimensions(dim.x, dim.y); float texH = dim.y; float texW = dim.x; // TOP ROW float s11 = dot(Texture2DSample(Tex, TexSampler, UV + float2(-1.0f / texW, -1.0f / texH)), luminance); float s12 = dot(Texture2DSample(Tex, TexSampler, UV + float2(0, -1.0f / texH)), luminance); float s13 = dot(Texture2DS..
[HLSL] Edge Detection - Sobel파라미터 Tex : Texture2D UV : float2 float4 luminance = float4(0.30, 0.59, 0.11, 1); float2 dim; Tex.GetDimensions(dim.x, dim.y); float texH = dim.y; float texW = dim.x; // TOP ROW float s11 = dot(Texture2DSample(Tex, TexSampler, UV + float2(-1.0f / texW, -1.0f / texH)), luminance); float s12 = dot(Texture2DSample(Tex, TexSampler, UV + float2(0, -1.0f / texH)), luminance); float s13 = dot(Texture2DS..
2021.09.16 -
float3 getNormalFromTexture(Texture2D t, SamplerState s, float strength, float2 offset, float2 uv) { offset = pow(offset, 3) * 0.1f; float2 offsetU = float2(uv.x + offset.x, uv.y); float2 offsetV = float2(uv.x, uv.y + offset.y); float normalSample = t.Sample(smp, uv).a; float uSample = t.Sample(s, offsetU).a; float vSample = t.Sample(s, offsetV).a; float3 va = float3(1.0f, 0.0f, (uSample - norma..
[HLSL] Simple Texture Normalfloat3 getNormalFromTexture(Texture2D t, SamplerState s, float strength, float2 offset, float2 uv) { offset = pow(offset, 3) * 0.1f; float2 offsetU = float2(uv.x + offset.x, uv.y); float2 offsetV = float2(uv.x, uv.y + offset.y); float normalSample = t.Sample(smp, uv).a; float uSample = t.Sample(s, offsetU).a; float vSample = t.Sample(s, offsetV).a; float3 va = float3(1.0f, 0.0f, (uSample - norma..
2021.09.16 -
아래는 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