자동 빌드된 결과물 commit 하는 배치파일을 만들고 있다.


svn revision 을 로그로 남기고 싶어 조사해보니 svn info 나 svnversion 이라는 명령어를 이용해 가져올 수 있었다.


출력된 결과물을 파일로 리다이렉트해서 svn commit 시에 -F 옵션을 이용해도 된다.


파일로 출력하는게 실패할 가능성이 있어 환경변수로 설정하는 방법이 있나 찾아보니 for 를 이용하면 가능했다.


for /f "delims=" %%a in ('svnversion') do @set myvar=%%a



출처 : http://stackoverflow.com/questions/635632/can-i-set-an-environment-variable-with-the-svn-revision-number-of-a-project

728x90

Link 오류가 발생하는데 자세한 실행 옵션을 보고 싶었다. UnrealBuildTool 를 실행할 때 -verbose 옵션을 주는 법이 있는데 VS 에서 빌드로 실행할 때 보고 싶었다.


%appData%\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml 파일에 아래와 같이 설정할 수 있었다.


<?xml version="1.0" encoding="utf-8" ?><Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">

<BuildConfiguration>

<LogLevel>VeryVerbose</LogLevel>

</BuildConfiguration>

</Configuration>


LogLevel 은 7단계 인 것 같다.


public enum LogEventType

{

Fatal = 1,

Error = 2,

Warning = 4,

Console = 8,

Log = 16,

Verbose = 32,

VeryVerbose = 64

}


728x90

Win64 로 작업하던 프로젝트를  Win32 로 빌드해보니 링크 오류가 발생했다.


EXEC : fatal error C1905: 프런트 엔드와 백 엔드가 호환되지 않습니다. 같은 프로세서를 대상으로 해야 합니다.

LINK : fatal error LNK1257: 코드를 생성하지 못했습니다.


어떤 lib가 x86 가 아닌지 확인하는 방법을 검색해봤다.


Visual Studio 의 dumpbin 툴을 통해 지원여부를 확인할 수 있었다.


> dumpbin /headers <filepath> | findstr "magic machine"


14C machine (x86)



출처 : https://blogs.technet.microsoft.com/windowshpc/2009/03/26/how-to-tell-if-a-exe-file-is-a-32-bit-or-64-bit-application-using-dumpbin/

728x90

Daily Build 작업이 직접 실행했을 때는 40분 정도 걸리고 스케쥴러로 동작하면 1시간 반 정도 걸렸다. 작업 경로나 실행 사용자 문제로 SSD가 아닌 HDD 에서 작업이 되나 싶었는데 그건 아니었다.


한참 찾다가 스케쥴러가 돌 때 작업 관리자로 보니 프로세스 우선 순위가 '낮은 우선 순위' 였다.


속성에서 프로세스 우선 순위를 높이는 설정을 찾아봤으나 찾을 수가 없었다.


검색을 해보니 내보내기를 통해 xml 파일을 생성 후 Task > Settings > Priority 내 값을 수정 후 가져오기를 통해 새로 만들어야 했다.


    <WakeToRun>false</WakeToRun>

    <ExecutionTimeLimit>PT72H</ExecutionTimeLimit>

    <Priority>7</Priority>

  </Settings>


기본값은 7 'BELOW_NORMAL_PRIORITY_CLASS' 인데 4-6 사이의 NORMAL_PRIORITY_CLASS 로 지정하면 된다.


참고 : 


https://bdbits.wordpress.com/2010/04/29/setting-a-scheduled-task-process-priority/


TaskSettings.Priority property https://msdn.microsoft.com/en-us/library/windows/desktop/aa383512(v=vs.85).aspx

728x90

언리얼은 엔진 모듈을 에디터 모드일 때는 dll 형태로 관리한다. 게임 모듈도 dll 형태로 빌드되는데 Shipping 빌드 때는 monolithic 이라고 해서 static 하게 다시 빌드한다.


OnlineSubsystem 과 같은 모듈들을 추가할 때 플러그인 형태로 구현하는데 dll 형태라 class 사용 시 link 에러가 발생했다. 일반적으로는 __declspec(dllexport), __declspec(dllimport) 를 명시해주는데 엔진 코드에 이런 부분을 발견할 수가 없었다.


찾아보니 ONLINESUBSYSTEM_API 와 같이 (모듈이름)_API 라고 명시해 놓으면 UnrealBuildTool 이 알아서 dllexport, dllimport 를 붙여주는 것이었다.


언리얼은 여기저기 숨겨진 규칙들이 아직도 많은 것 같다.


출처 : https://docs.unrealengine.com/latest/INT/Programming/Modules/API/

728x90

엔진이 변경되거나 새로운 애셋이 대량으로 추가되면 ShaderCompile 에 시간이 오래 걸린다. IncrediBuild 를 이용하면 분산 처리하여 이 시간을 단축시킬 수 있다.


설정


: Engine/Config/Config/ConsoleVariables.ini 파일 중 아래 내용을 수정한다.


; Uncomment to enable XGE shader  compilation.
r.XGEShaderCompile  = 1


: 혹은 DefaultEngine.ini 파일에 아래 내용을 추가한다.


[SystemSettings]
r.XGEShaderCompile = 1


주의


: ShaderCompiler 가 ShaderWorkinDir 로 [UserTempDir]/UnrealShaderWorkingDir 을 사용한다.

: UserTempDir 는 기본은 C:\Users\XXX\AppData\Local\Temp 와 같은 경로다.

: C 용량이 부족하거나 SSD 가 아닌 경우 IncrediBuild 효과가 감소된다.

: UserTemp 경로를 적절하게 변경하자.

: 제어판 > 시스템 및 보안 > 시스템

: 고급 시스템 설정

: 고급 탭에서 '환경 변수' 버튼 클릭

: 사용자 변수 중 TEMP 와 TMP 의 값을 적절하게 변경한다.

: 빌더와 같이 여러 사용자가 사용하는 PC 의 경우 사용자마다 이 작업을 해줘야 한다.

: 아니면 엔진에서 ShaderWorkingDir() 를 수정하자.


효과


: 각 프로젝트마다 다르겠지만 6시간 정도 소요되던 작업이 1시간 30분 정도에 완료되었다. -_-)b


728x90

언리얼을 쓰다보면 엔진이 바뀌거나 맵 데이터가 변경되었을 때 셰이더 컴파일 시간이 굉장히 오려걸린다. 다른 컴퓨터에서 생성된 DDC 를 사용하면 그 시간을 줄일 수 있다.


1. 공유할 컴퓨터의 DerivedDataCache 폴더를 공유한다.

2. DefaultEngine.ini 파일에서 다음 내용을 수정한다.

; 엔진의 BaseEngine.ini 에서 로컬 빌드된 엔진 사용시에는 DerivedDataBackendGraph , 설치 버젼의 엔진을 사용중이라면 InstalledDataBackednGraph 섹션의 내용을 복사한다.

3. Hierachy 부분에 Shared 영역이 있는지 확인한다. 없다면 추가한다.

4. 아래와 같이 없으면 Shared 추가하고 Path 를 위에 공유한 PC의 폴더로 수정한다.


[DerivedDataBackendGraph]

MinimumDaysToKeepFile=7

Root=(Type=KeyLength, Length=120, Inner=AsyncPut)

AsyncPut=(Type=AsyncPut, Inner=Hierarchy)

Hierarchy=(Type=Hierarchical, Inner=Boot, Inner=Pak, Inner=EnginePak, Inner=Local, Inner=Shared)

Boot=(Type=Boot, Filename=%GAMEDIR%DerivedDataCache/Boot.ddc, MaxCacheSize=256)

Local=(Type=FileSystem, ReadOnly=false, Clean=false, Flush=false, PurgeTransient=true, DeleteUnused=true, UnusedFileAge=17, FoldersToClean=-1, Path=../../../Engine/DerivedDataCache)

Shared=(Type=FileSystem, ReadOnly=false, Clean=false, Flush=false, DeleteUnused=true, UnusedFileAge=19, FoldersToClean=-1, Path=\\mystudio.net\DDC, EnvPathOverride=UE-SharedDataCachePath)

AltShared=(Type=FileSystem, ReadOnly=true, Clean=false, Flush=false, DeleteUnused=true, UnusedFileAge=19, FoldersToClean=-1, Path=\\mystudio.net\DDC2, EnvPathOverride=UE-SharedDataCachePath2)

Pak=(Type=ReadPak, Filename=%GAMEDIR%DerivedDataCache/DDC.ddp)

EnginePak=(Type=ReadPak, Filename=../../../Engine/DerivedDataCache/DDC.ddp)



5. 에디터를 열어 열어본 적이 없는 맵을 열었을 때 셰이더 컴파일이 없는 것을 확인한다.


출처 : https://docs.unrealengine.com/latest/INT/Engine/Basics/DerivedDataCache/


728x90

여러 사람이 빌드 장비에서 UE4 패키징하다보면 C 드라이브의 용량이 부족한 경우가 있다. DerivedDataCache 가 유저별로 생성되어 사용자 수에 비례해서 용량을 잡아 먹고 있었다. 덤으로 해당 유저로 최초 패키징 시에 더 많은 시간이 걸리고 있었다.


Install 버전의 DerivedDataCache 경로를 변경하기 위해서는 다음 설정 파일을 수정해야 한다.


파일명 : Engine/Config/BaseEngine.ini


[InstalledDerivedDataBackendGraph] ; 섹션


( 변경 전 )


Local=(Type=FileSystem, ReadOnly=false, Clean=false, Flush=false, PurgeTransient=true, DeleteUnused=true, UnusedFileAge=34, FoldersToClean=-1, Path="%ENGINEVERSIONAGNOSTICUSERDIR%DerivedDataCache")


( 변경 후 )


Local=(Type=FileSystem, ReadOnly=false, Clean=false, Flush=false, PurgeTransient=true, DeleteUnused=true, UnusedFileAge=34, FoldersToClean=-1, Path="D:\DerivedDataCache")


%ENGINEVERSIONAGNOSTICUSERDIR% 라고 적혀 있으면 C:\Users\username\AppData\Local\UnrealEngine\Common 같은 경로를 가리키게 된다.


Config 파일 내 아래 keyword 들은 아래와 같이 교체된다.


// Replace %GAME% with game name.

// Replace %GAMEDIR% with the game directory.

// Replace %ENGINEUSERDIR% with the user's engine directory.

// Replace %ENGINEVERSIONAGNOSTICUSERDIR% with the user's engine directory.

// Replace %APPSETTINGSDIR% with the game directory.


728x90

언리얼 엔진 4.11 이후 부터 버젼 확인 방식이 바뀌었는지 솔루션 빌드 후 압축해서 배포했더니 DLL 버전 오류가 발생했다. 에픽에 배포버전 정식 빌드 절차를 물어봤지만 원하는 답변을 얻을 수는 없었다.

 

UE4 AnswerHub 에 같은 질문이 있길래 답변대로 해봤지만 BUILD FAILED 메시지가 보였다. (지금 와서 확인해보니 컴파일 에러가 있었다.)

 

참고 :  

https://answers.unrealengine.com/questions/393280/packaging-ue4-for-distributing-internally.html

 

언리얼 엔진 소스를 수정해서 사용하고 있는 관계로 원본 언리얼 엔진을 받아서 빌드해 봤지만 C4819 컴파일 오류가 발생했다.

 

인코딩 문제인데 영미권에서 사용하는 문자를 한국어(949) 코드페이지에서 인식하지 못해 발생하는 오류였다. 강제로 utf-8 인코딩으로 바꾸거나 문제가 되는 문자를 지워서 해봤지만 하나를 수정하면 다른 곳에서 문제가 발생했다.

 

그러다가 문제 없는 소스를 배포했을 거라는 생각에 윈도우 기본 인코딩을 바꿔보기로 했다.

 

'제어판' > '키보드 또는 기타 입력 방법 변경' 을 눌러 '국가 및 언어' 설정창을 연다.

'관리자 옵션' 탭에서 '유니코드를 지원하지 않는 프로그램용 언어' 영역에서 '시스템 로캘 변경' 버튼을 누른다.

'현재 시스템 로캘' 에서 '영어(미국)'을 선택한다.

재부팅이 필요하다.

 

그리고 빌드했더니 BUILD SUCCESS !!

몇일만에 빌드 성공인지...

 

복사해서 실행했더니 잘 되는 것 같다. 에디터가 삭제되는 경우가 1번 있었는데 재현되지 않았다. Saved 와 Intermediate 폴더를 삭제하고 Clean 상태에서 하면 문제가 발생하지 않는 것 같다.

 

배포버전 빌드 방법

  • 엔진소스를 받는다.
  • UE4Games.uprojectdirs 파일을 추가한다.
    • Samples/
    • Templates/
  • 시스템 로캘을 '영어(미국)'으로 변경한다.
  • Engine/Build/BatchFiles 폴더로 이동한다.
  • 명령창에 아래와 같은 명령어를 입력한다.
    • RunUAT.bat GUBP -Node=GatherRocket -TargetPlatforms=Win32+Win64 -NoDDC -CleanLocal -NoSign
  • BUILD SUCCESSFUL 을 확인한다.
  • LocalBuilds/Rocket/Windows 폴더를 묶어서 배포한다.!!
728x90

 

 

Visual Studio 로 언리얼 작업할 때 솔루션 구성 넓이가 좁아서 지금 선택한 솔루션이 'Development Editor' 인지 'Development' 인지 'Development Game' 인지 알기 힘들다.

 

 

도구 > 사용자 지정 메뉴를 선택한 후

명령 탭을 선택하고 도구 모음 > 표준을 선택한다.

아래에서 솔루션 구성을 선택하고 선택 사항 수정 버튼을 누른 후 너비를 200 정도로 수정하면 된다.

 

 

 

 

출처 : https://docs.unrealengine.com/latest/KOR/Programming/Development/VisualStudioSetup/index.html

728x90

+ Recent posts