All250 Constant Buffer 관련 실수한 것 한 가지 | 메모리 정렬(alignment) Constant Buffer에 float3 타입 변수 2개를 저장할 일이 있었다. float이 3개짜리므로 12바이트 크기다. 상수 버퍼는 16바이트 단위로 정렬해줘야 한다는 것을 알고 있었지만 컴파일러가 알아서 패딩 데이터를 붙여준다고 생각했다. 위 상수 버퍼 구조체의 각 변수의 타입은 12바이트인데 두 바이트 블럭 사이에 알아서 패딩 데이터 4바이트가 붙을 줄 알았다. 그래서 괜찮겠지 하고 구조체 변수를 선언하여 사용하였다. 그런데 셰이더의 결과가 무언가 이상했다. 노랑색 픽셀이 나올만한 이유가 없는데 계속 노란색 픽셀이 등장했다. 그래서 무엇이 원인인지 찾다가 빛의 색상을 노란색으로 인식한다는 것을 알아냈다. 나는 분명 LightColor를 White(1.f, 1.f, 1.f)를 주었다. 그리고 아.. 2021. 8. 7. 세 종류의 라이팅 구현 (1) - 소개 | Directional Light, Point Light, Spot Light - Direction Light 구현 포스팅: https://woo-dev.tistory.com/270?category=941467 - Point Light 구현 포스팅: https://woo-dev.tistory.com/273?category=941467 - SpotLight 구현 포스팅: https://woo-dev.tistory.com/279?category=941467 게임 엔진에 구현된 대표적인 조명 3가지인 Directional Light, Point Light, Spot Light를 구현해볼 예정이다. 조명의 특징과 기능? 들은 언리얼 엔진을 참고할 예정. 세세한 기능보단 핵심적인 특징 구현에 집중할 계획이다.. 각 조명의 간단한 특징을 알아보면 다음과 같다. Directional Light.. 2021. 8. 5. [UE4] 액터가 게임에 참여할 때 호출되는 함수들 게임이 시작될 때 액터는 준비와 게임 참여, 퇴장의 과정을 거친다. 이러한 단계를 거칠 때마다 자동으로 호출되는 함수들이 있다. 액터는 여러가지의 컴포넌트(component) 조합으로 이루어질 수 있는데, 이러한 컴포넌트들을 모두 초기화 및 설정하는 과정은 준비 단계에서 이루어진다. 컴포넌트를 설정하기 전에 PreInitializeComponents라는 함수가 호출 되고, 이후에 InitializeComponents 함수가 호출되어 컴포넌트들을 초기화한다. 컴포넌트들의 초기화가 완료되면 PostInitializeComponents 라는 함수가 호출된다. 위의 준비 단계가 끝나면 액터는 게임에 참여하게 되고, 이때 최초로 1번 BeginPlay 함수가 호출한다. 이후 매 프레임마다 Tick 함수를 호출한다.. 2021. 7. 29. [UE4] UPROPERTY란? C++은 프로그래머가 직접 힙 메모리를 할당했을 경우, 해제까지 직접 해주어야 메모리 릭이 발생하지 않는다. 반면 언리얼 엔진에선 언리얼 실행 환경을 통해 객체가 더 이상 사용되지 않으면 할당된 메모리를 자동으로 소멸시켜주는 기능을 제공한다. 이러한 기능을 제공받기 위해서는 객체를 선언할 때 다음과 같이 UPROPERTY라는 매크로를 사용해주어야 한다. UPROPERTY() UStaticMeshComponent* Mesh; 하지만 이러한 기능을 모든 객체에 적용할 수 있는 것은 아니다. 언리얼 오브젝트라는 특별한 객체에만 사용이 가능한데, 다음과 같은 조건이 필요하다. UCLASS 매크로가 선언된 클래스 U혹은 A 접두사가 붙은 클래스 generated.h 헤더 include가 선언된 클래스 모듈명_AP.. 2021. 7. 23. [UE4] 언리얼 C++ 프로젝트의 컴파일과 실행 과정 언리얼 엔진에서 C++ 클래스를 생성하면 C++ 프로젝트로 확장되며 VS(Visual Studio)와 연동 된다. VS에서 컴파일을 진행하게 되면 언리얼 프로젝트 폴더에 다양한 파일들이 생성된다. 초기에 만들어진 .uproject 파일은 게임 프로젝트를 언리얼 에디터로 불러 들이기 위한 정보가 텍스트로 저장되어 있다. C++ 프로젝트가 컴파일 되면 .uproject 파일에 모듈 관련 내용이 추가 된다. 언리얼에서 모듈이란 dll 파일을 말한다. dll 파일은 컴파일 시 Binaries 폴더에 UE4Editor-[ProjectName].dll 이라는 이름으로 생성된다. 언리얼 엔진이 C++ 프로젝트를 로드할 때 uproject에 적힌 모듈의 내용을 보고 Binaries 폴더에서 해당 모듈을 찾아 로드하게 .. 2021. 7. 23. [UE4] 주요 기본 함수 및 타입 컴포넌트에 대한 포인터 타입을 선언하고, 해당 컴포넌트에 대한 메모리를 할당할 때 필요한 함수 -> CreateDefaultSubobject(): 템플릿 인자로 전달된 타입의 컴포넌트 포인터를 반환한다. 즉 컴포넌트를 생성하는 함수이다. 인자로 받는 문자열은 액터에 속한 컴포넌트를 구별하기 위한 해시 값 생성을 위한 용도. 따라서 중복되면 안된다. B 컴포넌트를 A 컴포넌트에 부착시킬 때 (B가 A의 하위 컴포넌트가 된다.) -> B->SetupAttachment(A) C++에서 해당 asset을 불러들일 때 필요한 함수 -> ConstructorHelpers::FObjectFinder MyAsset(AssetPath): 변수 MyAsset에 AssetPath로부터 가져온 에셋 오브젝트가 저장된다. As.. 2021. 7. 22. 이전 1 ··· 5 6 7 8 9 10 11 ··· 42 다음