센로그

[UE5] text로 생성한 3D model의 품질 개선 본문

프로젝트

[UE5] text로 생성한 3D model의 품질 개선

seeyoun 2024. 1. 21. 23:32

◆ 프로젝트 개발 동기

  • 디자이너가 게임 제작에 필요한 3d mesh를 제작하기 위해서는 많은 시간이 필요합니다. 게임 개발자들 또한 디자이너가 시간 내에 asset을 제작하지 못하거나, 팀에 디자이너가 없어 에셋 스토어에서 원하는 3d assets을 구하지 못해 어려움을 겪기도 합니다.
  • 따라서 text 만을 입력해 일정 수준 이상의 3d mesh를 생성해낼 수 있다면 게임 개발자 및 디자이너의 초기 작업에 도움이 될 것 같아 본 프로젝트를 진행하게 되었습니다.

 


 프로젝트의 목적

  • text based 3D model의 quality 향상을 위한 post processing

 


 프로젝트 개요

제목 : Post Processing for text based 3D model

 소개 영상 : https://www.youtube.com/watch?v=zA-EHcZih1s

 

 


◆ 개발 기간 및 참여 인원

개발 기간 : 2023.09 - 2023.12 (4개월)

참여 인원 : 4명 (프로그래머 4)

 


◆ 프로젝트에서 나의 역할

  • Laplacian Smoothing을 통한 Coarse Surface 개선
  • DDMP을 통한 Coarse Surface 개선

 


개발 방법

✔ 개념

1. Diffusion Model

: Text to Image Generation
생성 모델의 일종으로 입력 데이터로부터 노이즈를 조금씩 추가하면서 최종적으로 데이터를 완전한 노이즈로 만듭니다. 그리고 이로부터 점차 노이즈를 제거해가며, 데이터를 복원해나가는 과정을 학습합니다.


그 중 Latent Diffusion Model은 Pixel space에서 학습을 진행하는 기존 Diffusion model과는 달리 더욱 저차원인 Latent space로 이미지를 임베딩해 노이즈를 제거하며 학습합니다. 이를 통해 빠른 속도와 저비용으로 다양한 이미지를 생성합니다.


2. NeRF

: Image to 3D Mesh Generation
다양한 관점에서의 이미지 입력으로부터 가상의 3D 공간에서 시선 상에 있는 RGB 값과 Density 값을 가진 점들을 합하면서 특정 관점에서의 View를 렌더링합니다. 이 View와 원본 2D 이미지 사이의 차이를 최소화하며 해당 3D 공간을 구성하는 모든 좌표의 RGB, Density값을 추정하고 최종적으로 3D 복원을 학습합니다.

이때, 2D image에서 3D data를 잘 생성했는가에 대한 지표가 필요합니다. 이 논문에서는 SDS라는 object function을 제시합니다. 이 object function을에서는, NeRF가 생성하고 있는 3D 데이터(혹은 그것의 렌더링 결과물)의 Volume이 정말 그 물체에 대한 정보를 잘 반영하고 있는지를 Diffusion Model에게 검사를 받는 구조로 정의되어 있습니다. 아래 그림에는 이 전체적인 과정에 대한 Overview가 담겨있습니다.

 

 

✔ DreamFusion 결과물의 문제점

초기 목표는 개발에 사용할 수 있는 3D mesh를 누구나 손쉽게 생성하도록 하는 것이었습니다. 그러나 DreamFusion이 요구하는 Computational Cost는 굉장히 높았습니다. 이로 인해 필요한 만큼 충분한 연산을 하지 못했고 예상한 것과 다른 low qualiy의 결과물이 나오게 되었습니다.


✔ Analysis & Solution

개선방향을 정하기 위해 깃허브를 비롯한 각종 커뮤니티에서 최근 이루어지고 있는 연구들을 살펴보았습니다. Text 기반 3d generation은 지속해서 발전해나가고 있는 분야로 활발히 논의가 이루지고 있었습니다. 그 중 Dreamfusion 의 후처리를 하는 다양한 개선방법들도 있었습니다. 여기에서 인사이트를 얻어 Dreamfusion 으로 제작한 3D mesh의 후처리를 통한 품질 개선으로 방향성을 잡아 프로젝트를 진행하였습니다.

생성된 3D mesh의 결과물이 low quality로 보이는 이유를 다음과 크게 두가지로 분석했습니다.



1. mesh가 가지는 거친 표면
2. 텍스처의 noise를 충분히 제거하지 못해 가시성이 떨어지는 것

이 두가지 문제에 초점을 맞추어 후처리 알고리즘을 통해 품질개선을 하였습니다




✅ Post-Processing 과정

위에서 정의한 두 문제점에 따라,
크게 Coarse Surface의 개선, Texture Noise의 개선이라는 두 단계로 나누어 후처리를 진행하였습니다.


✔ A. Improvement for Coarse Surface

1. Subdivision : Loop Subdivision


- 반복적으로 새로운 faces & vertexes를 만들어냄으로써 Resolution을 높이는 알고리즘
- Effect : 이어지는 Remeshing 과정에서 Resolution이 떨어지는 것을 대비해 vertices upsampling
- Reference : “Smooth Subdivision Surfaces Based on Triangles”, Charles Loop

2. Remeshing: Isometric Remeshing


- Edge를 분할하거나 제거함으로써, 불규칙한 모양의 삼각형들을 정삼각형에 가깝게 바꾸는 알고리즘
- Effect : 대상의 특징을 유지하면서, 거친 표면을 smoothing하는 효과
- Reference : “Generic remeshing of 3D triangular meshes with metric-dependent discrete Voronoi Diagrams”, IEEE 2008

3. Laplacian Smoothing


3.1. mesh의 각 vertex에 대해 라플라시안 연산자를 계산
- 라플라시안 연산자: 메쉬의 구조와 연결성을 나타내는 행렬로, 각 정점의 이웃과의 관계를 반영한다. 정점과 이웃 정점 간의 거리 또는 가중치를 사용하여 연산자를 계산한다.
3.2. Smoothing Iteration

  • 라플라시안 연산자를 사용하여 각 정점의 위치를 현재 위치와 인접한 정점의 평균값으로 업데이트
  • 업데이트된 정점 위치로 mesh를 업데이트
  • mesh의 현재 상태를 기반으로 다음 iteration에서 사용될 라플라시안 연산자를 업데이트

- Effect : 이웃 vertex의 평균값으로 현재 vertex를 update하며 모든 vertex를 순회하는 iteration을 돌면서 매끈한 표현을 얻을 수 있다.
- Reference : “Improved Laplacian Smoothing of Noisy Surface Meshes" J. Vollmer, R. Mencl, and H. Muller


4. DDMP


- Input : 단일 noisy한 mesh 및 smoothing된 mesh
- Process : 2개의 GCN(PosNet, NormNet)을 사용해, 서로 상호작용하며 mesh를 denoising

- Effect : 사전 훈련데이터나 Noise가 없는 원본 mesh없이도, noisy한 데이터로부터 형태 및 디테일을 최대한 보존하는 방식으로 denoising가능. (self-prior)
- 또한, noisy level에 따라 수동으로 denoising step을 지정할 필요가 없음.
- Reference : “Learning Self-prior for Mesh Denoising using Dual Graph Convolutional Networks”, ECCV2022


✔ B. Improvement for Texture Noise

1. Upscaling: ESPCN(Efficient Sub-Pixel Convolutional Neural Network)


- Texture 처리 시 형질(특질)보존을 위한 작업

2. Denoising : Non Local Mean Filter



3. Color Quantization : K-Means Clustering


- 가시성 보완을 위한 기술
- Pixel들의 Color값을 K-Means Clustering을 통해 정렬

 


◆ 기술 스택 및 사용한 도구

  • CUDA 11.2
  • torch 1.12.0

 

Comments