반응형

전체 글 286

[Unreal] 언리얼 리플렉션

앞서 이 포스팅은 이득우의 언리얼 프로그래밍 Part1을 수강하고 작성한 내용입니다. 개요 리플렉션은 프로램이 실행시간에 자기 자신을 조사하는 것이다. 시리얼라이제이션, 가비지 컬렉션, 네트워크 리플리케이션 등이 리플렉션을 토대로 만들어졌다. 리플렉션 시스템에 보이도록 했으면 하는 유형이나 프로퍼티에 주석을 달아주면, Unreal Header Tool이 프로젝트 컴파일 시에 해당 정보를 수집해 소스 코드를 생성해준다. 예시로, 멤버 변수에는 UPROPERTY(), 멤버 함수에는 UFUNCTION()라는 매크로를 사용하면 UHT가 이것들을 확인한 뒤 Intermediate 폴더 내부에 필요한 코드를 생성해준다. UPROPERTY를 선언해주면 다음과 같은 기능을 갖는다. 1. 특정 속성들의 기본값을 설정해주..

[백준 2108] 통계학 C++

문제 백준 2108 통계학 C++ 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 풀이 예전에 재채점으로 틀렸었는데 여유될 때 다시 풀어보았다. 먼저 수를 입력받은 뒤 오름차순 정렬한다. 1. 산술평균 : 루프를 돌면서 계산하면 된다. 반올림 주의 2. 중앙값 : 원소 개수가 홀수일 때와 짝수일 때를 나눠서 계산한다. 3. 최빈값 : 이게 제일 귀찮았는데, 다음과 같은 과정을 거친다. 3-1. 먼저 가장 자주 등장한 횟수를 0으로 초기화해 준다. 3-2. 루프를 돌면서 현재값의 등장 횟수를 1 증가시킨다. 3-3-1. 현재..

알고리즘/백준 2023.12.23

[Unreal] 언리얼 오브젝트

앞서 이 포스팅은 이득우의 언리얼 프로그래밍 Part1을 수강하고 작성한 내용입니다. 개요 C++과 C#이나 JAVA와 같은 하이레벨 언어를 비교하면 다음과 같다. C++의 특징 메모리를 직접 제어 캐시 활용 극대화 저수준 API 호출 복사 작업 최소화 하이레벨 언어의 특징 유지보수성 향상 크래시로부터 보호 자동 메모리 관리 고질적 실수 예방 언리얼 오브젝트 언리얼 C++은 C++의 특징을 가지면서도 하이레벨 언어의 장점을 흡수하고자 했다. 이런 내부적인 기능을 자동으로 만들어질 수 있도록 UClASS() 매크로를 사용해줘야 한다. UCLASS()에는 클래스를 정의하는 프로퍼티와 함수 세트가 들어있다. 언리얼에서는 일반 C++ 오브젝트와 언리얼 오브젝트 모두 사용 가능하다. 일반 C++ 오브로젝트에는 접..

[홍정모의 그래픽스 새싹코스 Part2] 삼각형 레스터화

앞서 이 포스팅은 홍정모의 그래픽스 Part2를 수강하고 작성한 내용입니다. 강의의 세부 코드는 첨부하지 않고, 결과와 이론 위주로 포스팅했습니다. 개요 까맣게 칠해져있는 화면이 있다. 이전에 레이트레이싱을 응용해서 그렸던 (https://gamedoridori.tistory.com/293) 삼각형을 이번엔 레스터화를 응용해 그려볼 것이다. 이전에는 시점에서 모든 픽셀 방향으로 Ray를 쏴 충돌한 오브젝트를 그려줬다. 하지만 이런 방법은 모든 픽셀을 순회해야 하고, 충돌한 오브젝트마다 거리를 비교해줘야 한다는 점에서 느리다. 따라서 이번엔 레스터화를 사용한다. 레스터화는 반대로 물체의 vertex에서 시점방향으로 Ray를 쏴준다. 그리고 스크린에 충돌한 지점을 기준으로 삼각형을 그리고, 각 픽셀이 삼각형..

CS/그래픽스 2023.12.21

[Unreal] 언리얼 C++ 코딩 표준

클래스 체계 public을 선언 후 private 구현이 따라야 한다. -> 읽는 사람의 대부분은 클래스의 public 인터페이스를 사용하기 때문 명명 규칙 언리얼 엔진은 대부분 파스칼 케이싱을 사용, 단어 사이의 언더스코어( _ )를 사용하지 않음. 타입 이름에는 대문자로 이루어진 접두사를 포함하여 변수 이름과 구분함. 예를 들어서, FSkin은 타입 이름이고, Skin은 FSkin의 인스턴스임. 예시 UObject를 상속받으면 접두사 U를 사용 AActor를 상속받으면 (Actor는 UObject를 상속받았지만) 접두사 A 사용 SWidget(UI 관련)에서 상속받으면 접두사 S를 사용 추상 인터페이스 클래스에는 접두사 I를 사용 템플릿 클래스는 T 열거형은 E사용 bool변수는 예외적으로 소문자 b..

[홍정모의 그래픽스 새싹코스 Part1] 투명한 물체와 빛의 굴절

앞서 이 포스팅은 홍정모의 그래픽스 Part1을 수강하고 작성한 내용입니다. 강의의 세부 코드는 첨부하지 않고, 결과와 이론 위주로 포스팅했습니다. 개요 투명한 구를 그리고자 한다. 아직 투명한 물체를 어떻게 렌더링할 지 코드가 작성되지 않았기 때문에 까맣게만 뜨는 모습이다. 투명한 물체에서의 빛의 굴절 투명한 구를 바라봤을 때, 구에 들어갈 때 한 번, 구에서 나올 때 한 번, 총 두 번 빛의 굴절이 일어나게 된다. 이때 굴절이 얼마나 일어나는지는 다음 과정을 통해 구할 수 있다. 벡터 d가 구로 들어갈 때 이전 강의에서처럼 전반사되는 경우도 있고, 지금처럼 매질이 다른 경우 벡터 t 방향으로 꺾이기도 한다. 굴절된 빛을 t라고 하자. 공기중에서 유리로 빛이 들어가면 밀도가 빽빽해지므로 -n 방향으로 ..

CS/그래픽스 2023.12.17

[홍정모의 그래픽스 새싹코스 Part1] 빛의 반사

앞서 이 포스팅은 홍정모의 그래픽스 Part1을 수강하고 작성한 내용입니다. 강의의 세부 코드는 첨부하지 않고, 결과와 이론 위주로 포스팅했습니다. 개요 위 이미지의 구에 반사 효과를 주고자 한다. 반사 효과를 넣게 되면 아래 배경도 비춰질 것이고, 옆의 구 또한 비춰질 것이다. 반사 효과 어떤 충돌 지점 hit가 있을 때, d는 관측 지점에서 hit까지 오는 벡터이고 n은 hit에서의 노말벡터라고 하자. 우리가 구해야 하는 것은 d가 hit에 도달한 뒤, 같은 각도로 반사되는 벡터 r인데, r은 2m -d로 구할 수 있다. m을 구하는 방법은 -d의 n 위로의 그림자 벡터를 구하고, d와 그림자 벡터를 더하면 m을 구할 수 있다. 위 과정을 거치면 r 벡터를 구할 수 있고, hit 지점에서 다시 r 방..

CS/그래픽스 2023.12.15

[홍정모의 그래픽스 새싹코스 Part1] 수퍼 샘플링

앞서 이 포스팅은 홍정모의 그래픽스 Part1을 수강하고 작성한 내용입니다. 강의의 세부 코드는 첨부하지 않고, 결과와 이론 위주로 포스팅했습니다. 개요 위와 같은 화질 낮은 이미지가 있다. 구의 이미지가 계단식으로 많이 깨지는 것을 볼 수 있다. 슈퍼샘플링을 사용하면 이런 계단 현상을 완화할 수 있다. 다만, 슈퍼샘플링에는 더 많은 Ray 연산이 들어가기 때문에 당연하게도 렌더링 속도가 느려진다. 따라서 실시간 그래픽스파이프라인에서는 슈퍼샘플링보다는 블러를 사용해 계단 현상을 해결하는 경우도 있다고 한다. 원리 원래라면 관찰자에서 픽셀로 하나의 Ray만 쏴서 컬러를 결정하지만, 슈퍼샘플링에서는 여러 Ray를 쏴주고, 이 Ray에서 충돌한 색깔의 평균값으로 픽셀의 색깔을 결정하게 된다. Ray를 쏘는 방..

CS/그래픽스 2023.12.13

[홍정모의 그래픽스 새싹코스 Part1] 텍스처링

앞서 이 포스팅은 홍정모의 그래픽스 Part1을 수강하고 작성한 내용입니다. 강의의 세부 코드는 첨부하지 않고, 결과와 이론 위주로 포스팅했습니다. 개요 텍스처링이란, 픽셀의 색깔을 정할 때 색깔을 단순히 다른 이미지의 색깔에서 가져오는 방법이다. 정교한 3차원 모델을 쓰는 것 보다, 단순한 vertex에 그냥 이미지를 덧씌운게 더 사실적으로 보일 수가 있기에 텍스처링을 자주 사용한다. 덧씌울 때에는 uv좌표를 interploation하면서 사용하는데, 앞서 포스팅한 무게중심좌표계를 알고 있다면 uv좌표 보간 과정을 더 쉽게 이해할 수 있다. DirectX에서는 uv좌표의 좌상단이 (0, 0), 우하단이 (1, 1)이 된다. 텍스쳐 좌표에서 어떤 색깔 값을 가져오는 과정을 샘플링(Sampling)이라고 ..

CS/그래픽스 2023.12.11

[홍정모의 그래픽스 새싹코스 Part1] 무게중심좌표계 (Barycentric coordinates)

앞서 이 포스팅은 홍정모의 그래픽스 Part1을 수강하고 작성한 내용입니다. 강의의 세부 코드는 첨부하지 않고, 결과와 이론 위주로 포스팅했습니다. 개요 삼각형에 색깔을 넣고자 한다. 현재에는 파란색으로만 색칠되어 있는데, 왼쪽 아래부터 꼭짓점부터 시계 방향으로 각각 빨간색, 초록색, 파란색으로 설정한 뒤 그 사이는 색깔들을 보간해서 나타내고자 한다. 그렇다면 빨간색 꼭지점에 가깝다면 빨간색의 비율이 높을 것이고, 파란색 꼭짓점에 가깝다면 파란색 비율이 높을 것이란 추측을 할 수 있는데, 삼각형 내부 P의 색깔은 어떻게 결정해줘야 할까? 무게 중심 좌표계(Barycentric coordinates) 삼각형의 각 꼭지점에서 내부의 점 P에 선을 그으면 작은 삼각형 3개를 만들 수 있다. 위 그림에서 A1을..

CS/그래픽스 2023.12.11
반응형