HairMix_run程序

#!/bin/bash
# This script will install the dependencies for HairMix_run program on Ubuntu 16.04 LTS
# The script assumes that you have sudo privileges and internet connection

# Update the system

sudo apt-get update && sudo apt-get install build-essential

# Install OpenGL, GLEW, glfw3 and GLUT
sudo apt-get install mesa-common-dev libglu1-mesa-dev freeglut3-dev libglew-dev libglfw3-dev

# Install OpenCV
sudo apt-get install libopencv-dev

# Install OpenMP
sudo apt-get install libomp-dev

# Install OpenMesh-6.3
# Download the source code from the official website
wget https://www.openmesh.org/media/Releases/6.3/OpenMesh-6.3.tar.gz
# Extract the tar file
tar -xvzf OpenMesh-6.3.tar.gz
# Enter the directory
cd OpenMesh-6.3
# Create a build directory
mkdir build
cd build
# Configure the installation
cmake ..
# Compile the source code
make
# Install the library
sudo make install
# Go back to the original directory
cd ../..

# The script is done
echo "All dependencies are installed successfully."
  • 从hair_classes_folder中读取10个不同的头发风格的类别,每个类别包含了一些头发的图片,图片的名字和src_hair_data_folder中的头发数据的名字相同。
  • 对于每个类别中的每一对头发,程序会根据它们的导向缕(guide strands)来混合它们,生成新的头发。导向缕是从center_strands_folder中读取的,每个头发数据对应一个文件,文件中包含了5个导向缕,它们是通过聚类算法从源头发中提取出来的。

       首先,程序会从hair_classes_folder中读取一个类别的文件夹,例如HairClasses/Class1,这个文件夹中包含了一些头发的图片,例如hair1.jpg,hair2.jpg,hair3.jpg等。这些图片的名字和src_hair_data_folder中的头发数据的名字相同,例如hair1.data,hair2.data,hair3.data等。
然后,程序会对这个类别中的每一对头发进行混合,例如hair1和hair2,hair1和hair3,hair2和hair3等。对于每一对头发,程序会从center_strands_folder中读取它们的导向缕文件,例如cstrands/hair1.data,cstrands/hair2.data等。每个导向缕文件中包含了5个导向缕,它们是由一些三维坐标点组成的,表示头发的曲线形状。
接着,程序会根据导向缕来计算两个头发的混合比例,例如0.2和0.8,0.4和0.6,0.6和0.4,0.8和0.2等。这些比例表示从第一个头发和第二个头发中分别取多少比例的导向缕来混合。程序会按照顺序从第一个头发或第二个头发中选择导向缕,例如01001表示从第二个头发中选择第二个和第五个导向缕,从第一个头发中选择第一个,第三个和第四个导向缕。这样,程序可以生成32种不同的混合头发,每种混合头发都有一个二进制数表示选择导向缕的方式,例如00001,00010,00011等。
最后,程序会根据混合比例和选择方式来生成新的头发,方法是对每个导向缕的每个坐标点进行线性插值,得到新的导向缕,然后根据新的导向缕来生成新的头发。每个混合头发包含了10000根头发,它们的根部位置和法向量与rootPosition_new.txt文件中的数据相同。程序会将生成的混合头发保存到output_blended_hair_folder中,每个混合头发的名字是strands<hair1_id><hair2_id><binary_choice>.data,其中binary_choice是一个二进制数,表示选择导向缕的方式。

程序会从src_hair_data_folder中读取头发数据,例如hair1.data,hair2.data等。每个头发数据包含了一些三维坐标点,表示头发的曲线形状。
程序会根据导向缕来对头发数据进行重采样

  1. 5束主要丝确定了新头发的整体框架结构和主要生长方向。
  2. 利用这5束主丝作为引导,采样原始两种头发样式中的详细头发丝。
  3. 在采样详细头发丝时,优先选择方向和曲率与主要丝近似的头发丝。
  4. 然后按一定概率随机采样其他符合要求的头发丝,构建细节丰富的完整新头发。
  5. 生成的新头发既保持了原5束主丝的整体结构和方向,又融合了两种头发的细节特征。


程序会根据rootPosition_new.txt文件中的数据,将新的头发数据的根部位置和法向量替换为该文件中的数据,这样可以保证新的头发数据的根部位置和法向量与原来的头发数据相同。

  • 对于每一对头发,程序可以生成32种不同的混合头发,方法是按照顺序从第一个头发或第二个头发中选择导向缕。例如,01001表示从第二个头发中选择第二个和第五个导向缕,从第一个头发中选择第一个,第三个和第四个导向缕。00000表示只从第一个头发中选择导向缕,这样会生成一个和第一个头发几乎一样的新头发。输出的头发的名字是strands<hair1_id><hair2_id><binary_choice>.data,其中binary_choice是一个二进制数,表示选择导向缕的方式。k_start和k_end是binary_choice的十进制数,表示要生成的混合头发的范围。例如,给定k_start=1和k_end=3,会生成00001,00010和00011这三种混合头发。1<=K_start<=k_end<=31
  • 程序会将生成的混合头发保存到output_blended_hair_folder中,这是一个您需要先创建的文件夹。每个混合头发包含了10000根头发,它们的根部位置和法向量与rootPosition_new.txt文件中的数据相同。这个文件包含了每个头发的x,y,z坐标和法向量。
  • 程序生成的3D头发的单位是约0.82米。

猜你喜欢

转载自blog.csdn.net/u010087338/article/details/134548771
run