분류 전체보기
-
객체 지향 프로그래밍 캡슐화 객체 지향 프로그래밍에서는 클래스를 통해 데이터와 함수를 효과적으로 응집시킨다. 이런 데이터와 함수에 정보 공개 여부에 대한 은닉성을 띠기 때문에 보다 효과적으로 캡슐화할 수 있다. 상속 기존 C에서는 구조체가 힙영역에서 직렬화되면 선언 순서에 따라 같은 데이터를 가르킬 수 있다는 점을 이용해 상속과 비슷한 기능을 하도록 구현했다. C++에서는 이 부분을 이용해 보다 쉽게 사용자가 상위 개념의 데이터를 참조하고, 사용할 수 있도록 상속이라는 개념을 제시했다. 다형성 C에서 우리가 자주 사용하는 함수 포인터 개념을 객체 단위로 옮긴 것이다. (물론 생성자에서 vtable을 파생 클래스의 함수로 덮는 수고스러움을 덜어줘서 너무나도 고맙다.) 의존성 역전 사실상 이 의존성 역전이 ..
[틈새 독서] 클린 아키텍처 - 객체 지향 프로그래밍객체 지향 프로그래밍 캡슐화 객체 지향 프로그래밍에서는 클래스를 통해 데이터와 함수를 효과적으로 응집시킨다. 이런 데이터와 함수에 정보 공개 여부에 대한 은닉성을 띠기 때문에 보다 효과적으로 캡슐화할 수 있다. 상속 기존 C에서는 구조체가 힙영역에서 직렬화되면 선언 순서에 따라 같은 데이터를 가르킬 수 있다는 점을 이용해 상속과 비슷한 기능을 하도록 구현했다. C++에서는 이 부분을 이용해 보다 쉽게 사용자가 상위 개념의 데이터를 참조하고, 사용할 수 있도록 상속이라는 개념을 제시했다. 다형성 C에서 우리가 자주 사용하는 함수 포인터 개념을 객체 단위로 옮긴 것이다. (물론 생성자에서 vtable을 파생 클래스의 함수로 덮는 수고스러움을 덜어줘서 너무나도 고맙다.) 의존성 역전 사실상 이 의존성 역전이 ..
2021.11.04 -
SOLID 원칙 목적 유연한 소프트웨어 구조 변경 이해하기 쉬운 소프트웨어 구조 설계 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트 설계의 기반 기원 2000년 초반 저자 (로버트 C 마틴)는 안정화된 원칙을 고안했으나, 2004년 무렵 마이클 페더스가 각 원칙을 재배열하면 SOLID라는 단어를 만들 수 있다해서 그렇게 했다 아 ㅋ 원칙 종류 SRP : 단일 책임 원칙 콘웨이 법칙에 따른 따른정리로, 소프트웨어 시스템이 가질 수 있는 최적 구조는 시스템을 만드는 조직의 사회적 구조에 커다란 영향을 받는 것이다. 따라서 각 소프트웨어 모듈은 변경 이유가 단 하나여야 한다. OCP : 개방-폐쇄 원칙 버트란트 마이어에 의해 고안된 원칙, 기존 코드 수정보다는 반드시 새로운 코드를 추가하는 방식으로 시스템..
[틈새 독서] 클린 아키텍쳐 <SOLID - SRP, OCP>SOLID 원칙 목적 유연한 소프트웨어 구조 변경 이해하기 쉬운 소프트웨어 구조 설계 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트 설계의 기반 기원 2000년 초반 저자 (로버트 C 마틴)는 안정화된 원칙을 고안했으나, 2004년 무렵 마이클 페더스가 각 원칙을 재배열하면 SOLID라는 단어를 만들 수 있다해서 그렇게 했다 아 ㅋ 원칙 종류 SRP : 단일 책임 원칙 콘웨이 법칙에 따른 따른정리로, 소프트웨어 시스템이 가질 수 있는 최적 구조는 시스템을 만드는 조직의 사회적 구조에 커다란 영향을 받는 것이다. 따라서 각 소프트웨어 모듈은 변경 이유가 단 하나여야 한다. OCP : 개방-폐쇄 원칙 버트란트 마이어에 의해 고안된 원칙, 기존 코드 수정보다는 반드시 새로운 코드를 추가하는 방식으로 시스템..
2021.11.04 -
오랜만에 사이드 프로젝트 유니티 버전을 2019->2020으로 올려봤더니... 기존에 작성해둔 커스텀 라이팅이 깨져부렀다.. 이에 URP의 라이팅 hlsl 파일을 뜯어보니 다음과 같은 변경사항을 적용해야 했다. 1. 구 URP 에서 Shader Graph Preview에 대한 전처리 선언은 #if SHADERGRAPH_PREVIEW 였지만, #if defined(SHADERGRAPH_PREVIEW)로 바뀌어 모두 바꿔줘야 한다. 2. 구 URP 에서 AdditionalLight에 대한 정보를 얻기 위해서는 별다른 전처리 확인이 필요 없었지만, #ifdef _ADDITIONAL_LIGHTS에 대한 확인이 필요해졌다. 추가적으로 확인이 필요한 부분은, com.unity.render-pipelines.univ..
[Unity] URP 7.x -> 10.x 로 올릴때 커스텀 라이팅 주의사항오랜만에 사이드 프로젝트 유니티 버전을 2019->2020으로 올려봤더니... 기존에 작성해둔 커스텀 라이팅이 깨져부렀다.. 이에 URP의 라이팅 hlsl 파일을 뜯어보니 다음과 같은 변경사항을 적용해야 했다. 1. 구 URP 에서 Shader Graph Preview에 대한 전처리 선언은 #if SHADERGRAPH_PREVIEW 였지만, #if defined(SHADERGRAPH_PREVIEW)로 바뀌어 모두 바꿔줘야 한다. 2. 구 URP 에서 AdditionalLight에 대한 정보를 얻기 위해서는 별다른 전처리 확인이 필요 없었지만, #ifdef _ADDITIONAL_LIGHTS에 대한 확인이 필요해졌다. 추가적으로 확인이 필요한 부분은, com.unity.render-pipelines.univ..
2021.10.30 -
* 학습 레퍼런스 - https://www.youtube.com/watch?v=DqqQ_wiWYOw&t=827s - https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/GameplayArchitecture/Gameplay/ 게임플레이 모듈 DLL 에 컴파일되는 게임 프로젝트에 속하는 게임플레이 클래스 모음입니다. docs.unrealengine.com * 모듈 생성을 위한 실전압축 요약 1. 프로젝트 생성을 위해 '모듈명.build.cs' 파일생성 - 파일 내용 예시 (플러그인은 uplugin 파일을 통해 빌드 툴에 의한 종속성 보장이 되지만, 모듈은 아님으로 차후 메인 모듈에 종속성을 추가해줘야 빌드가 된다는 점을 유의하자.) using Sys..
[UE4/Module] 커스텀 모듈 제작 및 레퍼런스* 학습 레퍼런스 - https://www.youtube.com/watch?v=DqqQ_wiWYOw&t=827s - https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/GameplayArchitecture/Gameplay/ 게임플레이 모듈 DLL 에 컴파일되는 게임 프로젝트에 속하는 게임플레이 클래스 모음입니다. docs.unrealengine.com * 모듈 생성을 위한 실전압축 요약 1. 프로젝트 생성을 위해 '모듈명.build.cs' 파일생성 - 파일 내용 예시 (플러그인은 uplugin 파일을 통해 빌드 툴에 의한 종속성 보장이 되지만, 모듈은 아님으로 차후 메인 모듈에 종속성을 추가해줘야 빌드가 된다는 점을 유의하자.) using Sys..
2021.10.22 -
상황 절차적으로 생성한 폴리지 중 제거해야 하는 폴리지의 위치에 스트리밍되는 BP를 설치하는데, 해당 BP는 직렬화 되어 저장까지 된다. 해당 BP에서 같은 위치에 같은 메쉬를 갖는 폴리지 인스턴스를 찾는 탐색 로직을 수행한다. 이 탐색 로직에서 검출되지 않는 폴리지 인스턴스가 존재한다. 이런 폴리지 인스턴스가 서버와 클라 각가에서 서로 다르게 생기기에 클라에선 고스팅 되는 폴리지가 발생, 서버에서는 새로운 폴리지 인스턴스가 생성되어 보이는 문제가 생긴다. 기즈모를 통해 확인한 결과, 같은 메쉬를 갖고있다고 판단하지 않아 몇몇 폴리지 인스턴스들이 제거되지 않고 있었다. 예상 원인 폴리지는 하이어라키적인 트리를 통해 관리되며, 파괴 생성시 이 트리가 재구성된다. (옵션 플래그에서 자동 재구성을 끄고 메뉴얼..
[UE4/Foliage] 절차 생성 폴리지 인스턴스 제거 후 세이브/로드시 이슈상황 절차적으로 생성한 폴리지 중 제거해야 하는 폴리지의 위치에 스트리밍되는 BP를 설치하는데, 해당 BP는 직렬화 되어 저장까지 된다. 해당 BP에서 같은 위치에 같은 메쉬를 갖는 폴리지 인스턴스를 찾는 탐색 로직을 수행한다. 이 탐색 로직에서 검출되지 않는 폴리지 인스턴스가 존재한다. 이런 폴리지 인스턴스가 서버와 클라 각가에서 서로 다르게 생기기에 클라에선 고스팅 되는 폴리지가 발생, 서버에서는 새로운 폴리지 인스턴스가 생성되어 보이는 문제가 생긴다. 기즈모를 통해 확인한 결과, 같은 메쉬를 갖고있다고 판단하지 않아 몇몇 폴리지 인스턴스들이 제거되지 않고 있었다. 예상 원인 폴리지는 하이어라키적인 트리를 통해 관리되며, 파괴 생성시 이 트리가 재구성된다. (옵션 플래그에서 자동 재구성을 끄고 메뉴얼..
2021.10.22 -
그래픽스에서 공부했던 지식을 사용해야 하는 순간이다. Transform Matrix의 연산에는 순서가 중요하다. Scale * Rotate * Translation의 순서를 지키지 않으면, 원점에서 이뤄지는게 아닌 다른 계에서의 움직임이 적용되기 때문이다. 여기서 Unreal은 한가지를 더 생각해줄 필요가 있다. 그건, 언리얼은 유독 독특한 좌표계를 가진다느 점인데, 이는 이전 게시글에서 어떤식으로 처리하는지 알 수 있다. (https://develop-4-art.tistory.com/85) 따라서, 작업 순서를 Mirrored 된 Bone의 정상화 -> Scaling -> Rotate -> Translation 과정을 거쳐야 맥스나 마야와 같은 타 모델링 소프트웨어에서의 결과물을 얻을 수 있다. ※ 기..
[UE4/Mesh/Bone] 뼈대 변환 순서그래픽스에서 공부했던 지식을 사용해야 하는 순간이다. Transform Matrix의 연산에는 순서가 중요하다. Scale * Rotate * Translation의 순서를 지키지 않으면, 원점에서 이뤄지는게 아닌 다른 계에서의 움직임이 적용되기 때문이다. 여기서 Unreal은 한가지를 더 생각해줄 필요가 있다. 그건, 언리얼은 유독 독특한 좌표계를 가진다느 점인데, 이는 이전 게시글에서 어떤식으로 처리하는지 알 수 있다. (https://develop-4-art.tistory.com/85) 따라서, 작업 순서를 Mirrored 된 Bone의 정상화 -> Scaling -> Rotate -> Translation 과정을 거쳐야 맥스나 마야와 같은 타 모델링 소프트웨어에서의 결과물을 얻을 수 있다. ※ 기..
2021.10.12