midas+son의 크리에이티브(creative) 이야기


얼마만에 구입한

새 운동화인지

커플운동화!!!


제품명은

아키클래식 오딧세이


저렴한 편이지만

이쁘다.

그리고 가볍다.


단점이 하나 있는데

발이 좀 덥다.

보기보다 환풍이 안되는 듯?

'개인사 > 개인' 카테고리의 다른 글

인터넷이 이렇게 빠를 수 없습니다.  (1) 2017.05.29
SSD 너무 늦게옴  (0) 2017.05.04
노트북 설치 프로그램 목록  (0) 2017.04.28
발렌타인♥  (0) 2017.02.14
키보드 구입  (0) 2017.01.14

수학이나 물리에 대해 깊이 공부를 안했었는데

연휴를 맞아 이 책을 훑어보고 

다시금 공부할때엔 깊게 파고들어야 한다는 것을 깨달았다.


게임 개발을 하고 싶다는 학생이나 초급 프로그래머들은 

필독서가 아닐까 생각이 된다.


아래는 내가 몰랐거나 충격을 받았건 부분들에 대한 정리이다.

이 외에 서점에 가서 보면 알겠지만 처음부터 끝까지 좋은 지식 및 정보들로 가득하다.

(더 깊이 궁금한데 짧게 줄인 부분도 있어서 좀 아쉬운 부분도 몇 있긴하다.)

======================

부동소수점의 원리, 오차 - 오차가 있다는 건 알았는데 왜 그런지는 부동 소수점의 원리에 있었다. 초반부터 크리티컬한 뇌 두드림이었다.

FPU - 부동소수점 처리 장치...처음 들어본 약자

비트연산 응용 - 이 부분보고 if문을 길게 썼던 과거에 이불킥

status |= 석화;         //석화 상태이상 추가

status &= (~석화);    //석화 해제

atan2 - 아크탄젠트2가 있었다는 것과 그 유용성에 대해 처음 알았다.

프래임 드롭대책 - 4가지나 방법이 있는데 하나만 알고 있었다.

벡터 w 성분 - 3차원에서 사용하는 벡터의 4번째 인자의 존재와 1, 0이었을 때의 차이를 이미 알고 있었지만 자세히 설명되어있다.

충돌(선분, 구, 평면, 삼각형) - 한번 보고 이해 못했다. 하지만 중요한 개념이고 다른 곳에서도 꽤 사용될 수학적 지식이라 판단된다.

난수 - 지금까지 알던 rand는 가짜 난수. 진짜 난수란 무엇일까? 난수에 대한 심오함에 새로 공부하게 된다.(끝부분에 급하게 마무리 해서 아쉬운 부분)

======================

노트북에 SSD 추가 예정 - OS부터 재설치
메인 드라이버로 사용하던 HDD는 서브로 변경
현재 HDD에 설치되어있는 것 중 
SSD에 새로 설치 할 목록 작성

=============================

Visual Studio 2015 Community
Unity 5.6
Unreal 4.15.1(& 4.12.5)

Android SDK tools
Java8
IIS 10.0 Express
DirectX SDK (June 2010)
RenderMonkey 1.82(셰이더)
Photoshop CS6
TexturePacker(이미지 패키징툴)
ImageMagick 6.9.3-4 Q8(tga파일 읽어서 Export 가능한 툴)
Blender(3D디자인 툴)
Autodesk 3ds Max 2010(3D디자인 툴)

Notepad++
WinMerge(문서 비교)

Erlang OTP 19(8.1)

Git ver 2.10.1
SourceTree
TortoiseSVN 1.9.2.26806(64bit)
VisualSVN 5.1.2

Adobe Actobat Reader
Adobe AIR
Bonjhour(ipad 관련)
iTunes
Chrome
V3 Lite
곰플레이어
곰오디오
반디집
카카오톡

CoreAAC Audio Decoder
DTS+AC3 필터
MPEG2코덱

Daum 팟 인코더
oCam
자막 한방에

ATK Package(Asus 터치패드)
ELAN Touchpad 11.5.19.2_X64_WHQL(터치패드)

NVIDIA 그래픽 드라이버 381.65
인텔 그래픽드라이버


'개인사 > 개인' 카테고리의 다른 글

SSD 너무 늦게옴  (0) 2017.05.04
새 신을 신고 뛰어보자  (0) 2017.05.03
발렌타인♥  (0) 2017.02.14
키보드 구입  (0) 2017.01.14
벤큐 24인치 모니터 구입  (0) 2017.01.13

Unreal4로 3~4개월 만든 시뮬레이션(Windows PC용)을

Web에서 돌리고 싶다는 Needs가 있어서(왜 있는지 모르겠지만)

시도는 해보았다.


여러가지 문제가 발생 하였는데

정리를 하자면

1. 윈도우용 lib, exe, #include <Windows.h> 등 사용 불가 Error

2. #pragma once 가 cpp에 있으면 Error(h헤더 파일은 당연히 OK)

3. TEXT("한글") Error

4. Runtime으로 메시를 지원해주는 ProceduralMeshComponent 사용불가

5. Plugin으로 쓰고 있던 RamaSaveComponent 사용불가

6. struct 내부에 있는 생성자나 함수 앞에 struct명:: 이 있으면 Error(예로 들면 struct A{ A::A(){} } 이건 Error, struct A{ A(){} } 이건 OK)

7. strtok_s 사용 불가


위의 문제는 어떻게 해서 cpp문제는 다 잡았다.


프로젝트 셋팅에서 타겟 디바이스를 모바일용으로 바꾸고 퀄리티도 낮추었다.


하지만 결국은 LogPlayLevel: BUILD FAILED

PackagingResults:Error: 오류 실행 실패! Unknown Error


눈에 띄는 출력 로그는 아래와 같다.

LogPlayLevel: UnrealBuildTool: INFO:root:Closure compiler (C:\Program Files\Epic Games\UE_4.15\Engine\Extras\ThirdPartyNotUE\emsdk\emscripten\incoming\third_party\closure-compiler\compiler.jar) does not exist, check the paths in C:\Program Files\Epic Games\UE_4.15\Engine\Intermediate\Build\HTML5\.emscripten

LogPlayLevel: UnrealBuildTool: INFO:root:closure compiler will not be available

LogPlayLevel: UnrealBuildTool: error: Linking globals named '_Z14UELinkerFixupsv': symbol multiply defined!

LogPlayLevel: UnrealBuildTool: Traceback (most recent call last):

LogPlayLevel: UnrealBuildTool:   File "C:\Program Files\Epic Games\UE_4.15\Engine\Extras\ThirdPartyNotUE\emsdk\emscripten\incoming\emcc", line 13, in <module>

LogPlayLevel: UnrealBuildTool:     emcc.run()

LogPlayLevel: UnrealBuildTool:   File "C:\Program Files\Epic Games\UE_4.15\Engine\Extras\ThirdPartyNotUE\emsdk\emscripten\incoming\emcc.py", line 1531, in run

LogPlayLevel: UnrealBuildTool:     final = shared.Building.llvm_opt(final, link_opts, DEFAULT_FINAL)

LogPlayLevel: UnrealBuildTool:   File "C:\Program Files\Epic Games\UE_4.15\Engine\Extras\ThirdPartyNotUE\emsdk\emscripten\incoming\tools\shared.py", line 1633, in llvm_opt

LogPlayLevel: UnrealBuildTool:     assert os.path.exists(target), 'Failed to run llvm optimizations: ' + output

LogPlayLevel: UnrealBuildTool: AssertionError: Failed to run llvm optimizations:

LogPlayLevel: UnrealBuildTool: ERROR: UBT ERROR: Failed to produce item: C:\Users\apex\Desktop\gcsvc2_WebGL_\Binaries\HTML5\gcsvc.js

LogPlayLevel: UnrealBuildTool: Total build time: 353.94 seconds (Local executor: 0.00 seconds)


구글링 해보니 환경변수 얘기도 있고 추측글들이 난무하는데

다른 글을 찾아보니 언리얼에서 버그 fix된 것을 발견했다.

https://issues.unrealengine.com/issue/UE-36717

4.16에 고칠 예정이라니...(현재 최신 버전 4.15.1)

찾아보니 더 전에도 같은 버그 report가 있었는데

재현이 안된다고 안 넘어갔었나보다.


==================================

//결론

어짜피 언리얼이나 유니티나 Web용은 아직 최적화가 안되고 신경도 많이 쓰고 있지 않아서

안 될 줄 알고 있었다.

==================================

언리얼 서밋 2017에서 철권의 디렉터 하라다 류 님의 강의 내용을 정리 했습니다.


1. 타겟(사랑받고자 하는 대상, 고객, 유저)에 대해 알아가기

- 타겟을 확실히하자

- 타겟을 좁히고 정하자

- 인기 있게 되려는 노력을 꾸준히 해야 한다.


2. 가설을 세운다

- 어떠한 타겟에 있기가 있을지 가설을 자세히 세운다.

- 가설 없이 캐릭을 만들면 노하우 축적이나 활용 이론을 남기기 어렵다.


3. 피드백 받자

- 개발 중 피드백을 받아도 좋다.(외부 공개가 안될 경우 다른 지사나 다른 팀에 요청)

- 발매 후 대중들의 리서치

- 원하는 결과로 유도하지 말자.


4. 결과를 통계 데이터로 검증

- 수치화 할수 있는 데이터는 전부 수치화 하여 비교 분석한다.


5. 다음 캐릭에 활용

- 1~4 공정을 계속 거치면 노하우가 축적된다.


//사실 인기 순위와 사용률까지 가설을 세워서 개발한다.

//모든것이 계획 대로 되지 않는다.

//캐릭터의 생김새나 취향보다 능력이 좋아 사랑받을 수 도 있고

//사용률이나 인기 순위가 낮아도 너무 개성이 강하면 없앨 수도 없다.


세션1 : 모바일 MOBA 제작 1
 - 언리얼 지원 네트워크 수준 MMORPG를 만드는 것은 힘듦
 - 3:3이나 4:4정도 수준
 - 하나의 PC에서 멀티 테스트 중 한 Client에서 Level이 변경되면 다른 Client는 화면이 검게 변함.(초기 레벨의 변경만 있는 게임에서의 팁 Console 명령어 사용)
 - 그 외 매뉴얼에 있는 네트워크 설정법

세션2 : 모바일 MOBA 제작 2
 - 애니메이션 관련 용어 설명
 - 애님 몽타쥬 설명
 - 그 외 매뉴얼에 있는 애니메이션 관련 기능 설명

세션3 : 모바일 제작팁
 - Android Plugin 설정법(잘 안된다)
 - IOS Plugin 설정법(잘 안된다)
 - Android Studio 로 Native 개발 이용(소스가 바뀌면 매번 다시 빌드하고 다시 임포트해야 함)

세션4: 튜토리얼만 쌓여가는 유니티 개발자들을 위한 가이드
 - 기초 적인 가이드.
 - 유니티 개발자가 언리얼 개발에 익숙해 지지 못하는 이유
 - 언리얼 엔진의 철학
 - BP의 한계
 - 자유를 위한 대가, C++을 사용해야 하는 이유


'개인사 > 취미' 카테고리의 다른 글

20170505_고양국제꽃박람회  (0) 2017.05.05
20170422_언리얼 서밋 2017 - 오전 기조연설  (0) 2017.04.22
20170408_서울숲 나들이  (0) 2017.04.10
20170301,20170302_산정호수  (0) 2017.03.02
20170225_오이도 여행  (0) 2017.02.25

언리얼 서밋 2017
코엑스에서 진행중이다.

오전에 통합 세션에서 들은 내용 중
제일 괜찮았던건
철권을 만든 하라다 류 디렉터 님의 발표였다.
캐릭터란 무엇인가부터 어떤 캐릭터가 사랑 받는지, 어떻게 인기있는 캐릭터를 만드는지, 타깃을 정하고 리서치하고 가설을 세워 수치화하여 노하우를 쌓자는 내용까지...
생각대로 진행안되는 사례까지....
일본인 이신분이 한글로 ppt를 만들어오신데다가 이해 쉽게 얘기해 주셨다.
재미도 있으셨다.

에픽 본사 사장님이나 언리얼의 추후 계획을 발표해주신 분은 영어 ppt에 웃음기 없어서 좀 졸뻔했다.
4.16이 5월 중순 나온다는 것과
WebGL2 적용,
시퀀서 실시간 녹화,
모바일 최적화 메테리얼 등등
4.16을 기대하게 만드는 내용은 유익했다.
버그없이 잘나온다면 좋겠다.

나눠주는 도시락 점심 먹고
이제 곧 2시부터 개별 세션 들을 시간이다.

모바일 1,2,3 듣고 마지막 시간엔 이득우 대표님의 트랙으로 갈 예정이다.

'개인사 > 취미' 카테고리의 다른 글

20170505_고양국제꽃박람회  (0) 2017.05.05
20170422_언리얼 서밋 2017 - 오후 세션 정리  (0) 2017.04.23
20170408_서울숲 나들이  (0) 2017.04.10
20170301,20170302_산정호수  (0) 2017.03.02
20170225_오이도 여행  (0) 2017.02.25

[마라샹궈 & 하얼빈맥주]

신촌에서 저녁약속
지난번 마라탕 먹은곳에서
이번엔 마라샹궈 주문

100g에 3000원이고
15000원 이상 담아야 주문가능

마라탕은 국물요리지만
마라샹궈는 볶음요리다

그 수고에따라 2배정도 비싼가보다.
맛은 탕이랑 비슷했는데
볶은만큼 톡 쏘는 매움이 더 독하다.
간만에 음식을 남겨버렸다ㅋㅋ
맛은 없진 않은데 각오하고 먹어야할듯

하얼빈 맥주 첨먹어봤는데
부드럽고 괜찮았다.

'개인사 > ' 카테고리의 다른 글

20170525_싸와디캅 조식 + 스벅  (0) 2017.05.25
20170505_족발  (0) 2017.05.06
20170420_편도  (0) 2017.04.20
20170417_편도  (0) 2017.04.17
20170414_라멘  (0) 2017.04.16

Pawn을 움직이는 방법은 여러가지가 있다.

대표적으로 Actor를 강제로 움직이거나,

MovementComponent(CharacterMovementComponent)를 이용하는 방법.

전자는 물리 적용이 되지 않고 좌표에 맞게 움직이는 것이다.

SetActorRelativeLocation(FVector)를 보통 사용한다.(World도 있다.)


하지만 기본적으로 물리가 적용안되니 떨어지거나 언덕을 오르는데 무리가 있다.

후자인 MovementComponent를 사용하는 것은

간편하지만 고려되어야 할게 좀 있다.

이 글은 어떠한 점을 고려해야 하는지에 대한 글이다.


1.

튜토리얼이나 docs를 보면 간단하게 MovementComponent를 가지는 Pawn에서

AddMovementInput(Direction, Val)함수를 호출하면 알아서 이동하는 것을 볼 수 있다.

튜토리얼들은 기본적으로 PlayerController가 그 Pawn에 들어가 있기에 가능한 것이다.


문제는 캐릭터 시점에서 컨트롤 하지 않거나 여러 캐릭을 컨트롤해야 할 경우

즉, 해당 Pawn에 Possess하지 않거나 DefaultPawn으로 설정 하지 않을 경우 AddMovementInput가 동작 안한다.


이럴 경우에는 설정을 하나 더 해주어야 한다.

블루프린트에서는 위와 같은 디테일 창에서 찾으면 된다.

Auto Possess AI가 기본적으로는 Palced in World로 되어있다.

이 옵션을 SpawnedPlaced in World or Spawned로 바꾸어 주자.

그러면 이제서야 AddMovementInput이 동작하는 것을 볼 수 있다.


2.

AddMovementInput 함수의 인자값에 대한 얘기를 해보자.

(FVector WorldDirection, float ScaleValue, bool bForce /*=false*/)

이렇게 3가지 인자가 들어간다.

1번째는 방향 벡터, 

2번째는 스케일값, 

3번째는 false 일 경우 !IsMoveInputIgnored()를 같이 체크하고, true일경우 ControlInputVector에 바로 움직일 값이 들어간다.


문제는 1, 2번째 인자 값이다.

1번째는 방향 Direction인데 어떠한 큰 값을 적용해도

나중에는 크기 1의 단위 벡터로 되어버린다.

2번째 인자값 스케일도 -1.0f~1.0f 값 사이만 적용이 되어야 한다.

아무리 크게 주어도 더 빨리 움직이지 않는다.

여기서 중요한 규칙이 있다.

단위 벡터화 되는 것이 1번째와 2번째 인자를 곱하고 나서 나중이기 때문에

1번째가 단위 벡터가 아니고 2번째가 -1.0f~1.0f이 아니라면

나중에 계산될 단위 벡터가 스케일을 제대로 따라 가지 않게 된다.

이는 중요하게 입력값 제한을 두어야 한다.

설정에 따른 속도 변화와 부드러운 움직임을 원한다면

1번째는 단위벡터, 2번째는 -1.0f~1.0f를 넣자.(큰값을 넣어봤자 의미도 없고 나중 계산이 달라지므로...)

따라야 한다.


3.

2번 문제처럼 값을 받는다면 도대체 어디에서 속도를 제어 할 수 있는가?

그 값은 CharacterMovementComponent에 있다.

컴포넌트 내부에 MaxWalkSpeed, MaxAcceleration 등등의 float값이 있고

아래처럼 초기값이 들어간다.

...

MaxFlySpeed = 600.0f;

MaxWalkSpeed = 600.0f;

MaxSwimSpeed = 300.0f;

MaxCustomMovementSpeed = MaxWalkSpeed;

...

MaxAcceleration = 2048.0f;

BrakingFrictionFactor = 2.0f; // Historical value, 1 would be more appropriate.

BrakingDecelerationWalking = MaxAcceleration;

...

위의 float값들을 직접 변경하면 속도를 컨트롤 할 수 있다.

Character의 움직임 속도는 가속도를 따른다.

Max Speed를 넘기지 않는 선에서 가속도에 따라 속도가 차츰 올라간다.

적절히 변경해 원하는 속도대로 가게 만들자.


이상... 

여러 캐릭터를 움직이게 프로그래밍하면서 알게 된 내용을 정리해보았다.

나름 시간을 들여 알아보았는데 단순하다.

위와 같은 단순하고 필요한 내용들이 튜토리얼이나 docs에 없었다는게 아쉬울 따름이다.