꾸준히 개발하자

고정 헤더 영역

글 제목

메뉴 레이어

꾸준히 개발하자

메뉴 리스트

  • 홈
  • 태그
  • 방명록
  • 분류 전체보기 (115)
    • Computer Graphics (58)
      • SCOP (9)
      • HumanGL (9)
      • Graphics Pipeline (10)
      • ALEngine (21)
      • Hiking (9)
    • 자료구조와 알고리즘 (43)
      • 백준 (14)
      • 자료구조, 알고리즘 (29)
    • Java 공부 (5)
      • Java 공부 (1)
      • Java 주차별 공부 (3)
      • 더 자바, 코드를 테스트하는 다양한 방법 (1)
    • 리눅스 (8)
      • 리눅스 기초 (8)

검색 레이어

꾸준히 개발하자

검색 영역

컨텐츠 검색

Computer Graphics

  • FT_Newton: sleep 상태 추가 및 solve constraint 반복 수정 - (13)

    2025.02.12 by Banjosh

  • FT_Newton: 메모리 풀 구현 - (12)

    2025.02.07 by Banjosh

  • FT_Newton: 최적화를 통해 FPS 방어하기 - (11)

    2025.02.04 by Banjosh

  • FT_Newton: Cylinder 와 Capsule 충돌 - (10)

    2025.01.16 by Banjosh

  • FT_Newton: Sphere 와 Box 충돌 - (9)

    2025.01.16 by Banjosh

  • FT_Newton: Physics Loop의 마지막 단계 Solve - (8)

    2025.01.16 by Banjosh

  • FT_Newton: Narrow Phase / Clipping - (7)

    2025.01.15 by Banjosh

  • FT_Newton: Narrow Phase / EPA - (6)

    2025.01.15 by Banjosh

FT_Newton: sleep 상태 추가 및 solve constraint 반복 수정 - (13)

이번에 물리 엔진을 메모리 최적화하면서 성능이 확 올라갔는데, 이게 오히려 새로운 문제를 만들었다.  성능이 좋아지다 보니 duration(물리 연산에 사용하는 시간 단위)을 크게 설정했는데, 7 x 7 x 7의 박스 탑에서 이상한 현상이 벌어졌다.   duration이 커서 중력 영향을 크게 받게 되니까, 박스들이 서로 요동치면서 건드리지도 않았는데 스스로 무너져버렸다.나는 이 문제를 정지 접촉(Rest Contact) 쪽 이슈라고 판단했고, 그래서 Sleep 상태와 Awake 상태를 추가해서 해결을 시도했다. 1. Sleep 상태먼저 setSleep() 함수를 살펴보면:void Rigidbody::setSleep(float duration){ if (m_canSleep) { m_sleepTime +..

Computer Graphics/ALEngine 2025. 2. 12. 02:50

FT_Newton: 메모리 풀 구현 - (12)

이번 글에서는 메모리 풀 구현에 대해 알아보자.  우선, 왜 메모리 풀을 써야 할까에 대한 의문이 먼저 생길 수 있다.  C에서는 malloc, C++에서는 new 연산자를 통해 메모리를 할당받아 사용한다. 물론 명시적으로 malloc이나 new를 호출해 메모리를 할당할 수도 있지만, vector와 같은 동적 자료구조를 사용할 경우 내부적으로 메모리 할당이 수시로 일어나게 된다. 즉, new와 malloc을 통해 쉽게 메모리를 할당받을 수 있다는 장점이 있지만, 자주 사용하게 되면 다음과 같은 단점들이 발생한다.시스템 콜 오버헤드malloc과 new는 메모리를 할당하기 위해 내부적으로 시스템 콜을 사용하는데,시스템 콜은 사용자 모드에서 커널 모드로 전환되는 비용이 크므로 자주 호출하면 성능이 저하된다.복..

Computer Graphics/ALEngine 2025. 2. 7. 22:01

FT_Newton: 최적화를 통해 FPS 방어하기 - (11)

저번 글까지 기본적인 기능은 완성되었지만, 매우 느린 물리 엔진이라는 사실을 확인할 수 있었다.이번 글에서는 그 느렸던 물리 엔진의 FPS 방어 과정을 적어보려 한다.  물리 엔진의 기본 기능이 확보된 후, 게임 엔진 개발 팀원들에게 받은 미션은 100 x 100의 박스를 생성하고 FPS 60 방어선을 지키는 것이었다. 2 x 2 크기의 박스 충돌에서도 느렸던 내 물리 엔진을 어떻게 최적화할지 고민한 끝에 다음 과정을 거치기로 했다. 1. 현재 상태 파악2. Visual Studio Profiler를 이용한 분석 및 문제 가정 3. 문제 가정에 따른 해결 방법 모색 4. 해결 방법 적용 후 다시 테스트   1. 현재 상태 파악   최적화를 진행하기 위해 일단 고정된 테스트 박스의 개수를 정한 뒤 현재 ..

Computer Graphics/ALEngine 2025. 2. 4. 01:10

FT_Newton: Cylinder 와 Capsule 충돌 - (10)

이번에는 기존 충돌 로직에 Cylinder Shape과 Capsule Shape을 추가해보았다. GJK/EPA 알고리즘을 사용했기 때문에 Shape 추가는 크게 어렵지 않았고, collider와 support 함수, clipping 함수만 추가로 더 만들어 주기만 하면 된다. Cylinder 충돌  Capsule 충돌  이렇게 기본 Shape 들에 대한 구현이 끝났고 다음은 여러 Shape의 충돌을 구현한 영상이다. 아직 최적화를 하지 않아서 오브젝트가 많아지면 금방 느려지지만, 충돌 구현은 잘 되어있는 것을 볼 수 있다.

Computer Graphics/ALEngine 2025. 1. 16. 13:33

FT_Newton: Sphere 와 Box 충돌 - (9)

지금까지 구현한 로직을 바탕으로 Sphere Shape, Box Shape에 대한 충돌을 구현하였다 Sphere 충돌  Box 충돌 이렇게 Sphere Shape과 Box Shape에 대한 충돌 구현을 해봤고 다음 글에서는 Cylinder Shape과 Capsule Shape에 대한 충돌을 살펴볼 예정이다.

Computer Graphics/ALEngine 2025. 1. 16. 13:18

FT_Newton: Physics Loop의 마지막 단계 Solve - (8)

Physics Loop의 마지막 단계인 Solve에 대해 알아보자이전 단계인 Narrow Phase를 통해 우리는 충돌마다 Manifold들을 생성할 수 있었다.struct Manifold{ float seperation; // 충돌 깊이 glm::vec3 normal; // 충돌 방향 glm::vec3 pointA; // 오브젝트 A의 충돌 지점 glm::vec3 pointB; // 오브젝트 B의 충돌 지점}; Solve 단계에서는 위 정보를 토대로 VelocityConstraints와 PositionConstraints를 처리한다.VelocityConstraints와 PositionConstraints란?1. VelocityConstraints..

Computer Graphics/ALEngine 2025. 1. 16. 11:41

FT_Newton: Narrow Phase / Clipping - (7)

이번에는 Narrow Phase의 마지막 단계인 Clipping에 대해 알아보자.Clipping이란? Clipping은 EPA에서 찾은 충돌 방향과 충돌 깊이를 바탕으로 충돌점(Contact Point)을 생성하는 방법이다.초기에는 Clipping 없이 충돌당 1개의 충돌점만 계산했지만, Sphere 충돌과 달리 Box 충돌에서는 여러 개의 충돌점이 필요했다. 이를 해결하기 위해 Clipping 방식을 도입하여 다수의 충돌점을 구하는 방법으로 변경했다.Clipping 과정오브젝트 A와 B의 충돌면 선택오브젝트 A, B와 충돌 방향 dir이 주어진 상태.오브젝트 A에서 dir 방향으로 가장 멀리 떨어진 면 a를 충돌면으로 설정.오브젝트 B에서 −dir 방향으로 가장 멀리 떨어진 면 b를 충돌면으로 설정.충..

Computer Graphics/ALEngine 2025. 1. 15. 21:28

FT_Newton: Narrow Phase / EPA - (6)

이번에는 지난 글에서 다룬 GJK 이후, 충돌 방향과 충돌 깊이를 찾아주는 EPA 알고리즘에 대해 알아보자.EPA란?EPA(Expanding Polytope Algorithm)는 두 도형 A, B의 Minkowski Difference를 활용해 충돌 해소의 최소 깊이와 충돌 방향을 찾아주는 알고리즘이다.이 알고리즘은 GJK에서 생성된 4개의 simplex로 이루어진 사면체에서 시작한다.GJK에서 충돌이 감지된 경우에만 EPA 단계를 진행하기 때문에, 사면체 내부에 원점이 포함된 상태가 확정적이다.이후, 아래의 과정을 반복하며 충돌 깊이와 충돌 방향 벡터를 계산한다.EPA 알고리즘 과정원점에서 다면체의 평면까지의 거리 계산현재 simplex로 이루어진 다면체의 모든 평면에 대해, 원점에서 각 평면까지의 거..

Computer Graphics/ALEngine 2025. 1. 15. 18:51

추가 정보

인기글

최신글

페이징

이전
1 2 3 4 5 6 ··· 8
다음
TISTORY
꾸준히 개발하자 © Magazine Lab
페이스북 트위터 인스타그램 유투브 메일

티스토리툴바