Alembic์ 3D ๋ฐ์ดํฐ๋ฅผ ๊ตํํ๊ธฐ ์ํด์ ๋ง๋ค์ด์ง Framework์ ๋๋ค. ์๋์ด๋ฏธ์ง์์ค์ ILM์ด ๊ฐ์ด ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค.
์๋ ์ํฉ์์ ์์ฃผ ์ฌ์ฉํฉ๋๋ค. ๋ฐ์ท : http://www.alembic.io
- ์ ๋๋ฉ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ฒ ์ดํฌํ์ฌ ๋ผ์ดํ , ๋ ๋๋ง ํ ๋
- ์ ๋๋ฉ์ด์ ๋ ํฌ๋ฆฌ์ณ ๋ฐ์ดํฐ์์ ์ท์ด๋ ํผ๋ถ๋ฅผ ์๋ฎฌ๋ ์ด์ ํ ๋
- ์ท, ํผ๋ถ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ฌ ๋ผ์ดํ , ๋ ๋๋ง ํ ๋
- ์ ๋๋ฉ์ด์ ๋ ๋ฌผ์ฒด๋ฅผ ๋ฌผ๋ฆฌ์์ง์ผ๋ก ๋๊ธธ ๋
- ๋ฌผ๋ฆฌ์์ง์์ ์ฐ์ฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ผ์ดํ , ๋ ๋๋ง์ผ๋ก ๋๊ธธ ๋
๋ง์ผ๊ฐ์ ํด์์ ์ด๋ฏธ abc ํ์ผ์ export ํ ์ ์์ต๋๋ค. ๋ํ ์ฐ๋ฆฌ๊ฐ ๋ฐฐ์ธ nuke์์๋ abcํ์ผ์ import ํ ์ ์์ต๋๋ค.
- Maya
- Katana
- Houdini
- 3dsmax
- Blender
- Unreal
- Nuke
- Gaffer
์์ค์ฝ๋ : https://github.com/alembic/alembic
abc๋ Ogawa, Hdf5 ๋๊ฐ์ง ํฌ๋ฉง์ ์ง์ํฉ๋๋ค. ๊ต์ก์ ํธ์์ฑ์ ์ํด์ ์์ค์ฝ๋๋ฅผ ์ด์ฉํ์ฌ Ogawa(๊ธฐ๋ณธ๊ฐ) ํ์๋ง ์ง์ํ๋๋ก ์ปดํ์ผ ํ๊ฒ ์ต๋๋ค. Ogawa ํ์ผ์ HDF5 ๋ณด๋ค ์ฉ๋์ด ์๊ณ ๋ ๋น ๋ฅด๊ฒ ๋ก๋๋ฉ๋๋ค. HDF5๋ ์์ ์ abc์์ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋๋ค. IlmBase ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ปดํ์ผ ์ค๊ฐ์ ์ฌ์ฉ๋๋ฉฐ OpenEXR ์ปดํ์ผ ํ ๋ ์ด๋ฏธ ์์ฑํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์์ ์ ๋๋ค.
์ฐธ๊ณ : ๋ธ๋ ๋๋ HDF5๋ก ์ ์ฅ๋ฉ๋๋ค.
์ปดํ์ผ์ค๊ฐ์ libatomic ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ฏธ๋ฆฌ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด๋ก๋๋ค.
$ yum install devtoolset-6-libatomic-devel -y$ cd ~/app
$ git clone https://github.com/alembic/alembic alembic_src
$ alembic_src
$ git tag
$ git checkout 1.7.10
$ cd ..
$ mkdir alembic_build
$ mkdir alembic
$ cd alembic_build
$ scl enable devtoolset-6 bash
$ ~/app/cmake-3.13.3/bin/cmake ../alembic_src -DILMBASE_ROOT=$HOME/app/IlmBase -DALEMBIC_SHARED_LIBS=OFF -DUSE_HDF5=OFF -DALEMBIC_LIB_USES_TR1=ON -DCMAKE_INSTALL_PREFIX=$HOME/app/alembic
$ make -j2
$ make install์ปดํ์ผ์ด ๋๋ฉด ์๋ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
-
abcdiff
2๊ฐ์ abc ํ์ผ์ ์ ๋ ฅํด์ ๋ค๋ฅธ ๋ถ๋ถ๋ง abcํ์ผ๋ก ์ถ๋ ฅ๋ฉ๋๋ค. ๋ค๋ฅธ ๋ถ๋ถ์ด ์๋ค๋ฉด
No differences detected๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.$ abcdiff input1.abc input2.abc output.abc
-
abcecho
.abcํ์ผ์ ๋ํ ์ผํ ์ ๋ณด๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
$ abcecho box.abc
AbcEcho for Alembic 1.7.10 (built Dec 5 2018 17:30:01) file written by: Blender using Alembic : Alembic 1.7.8 (built Sep 10 2018 16:59:10) written on : Wed Dec 5 19:56:39 2018 user description : untitled ScalarProperty name=.childBnds;interpretation=box;datatype=float64_t[6];arraysize=6;numsamps=250 Object name=/Cube CompoundProperty name=.xform;schema=AbcGeom_Xform_v3 ScalarProperty name=.inherits;interpretation=;datatype=bool_t;arraysize=1;numsamps=250 ScalarProperty name=.ops;interpretation=;datatype=uint8_t;arraysize=1;numsamps=250 ScalarProperty name=.vals;interpretation=;datatype=float64_t[16];arraysize=16;numsamps=250 ScalarProperty name=visible;interpretation=;datatype=int8_t;arraysize=1;numsamps=250 Object name=/Cube/CubeShape CompoundProperty name=.geom;schema=AbcGeom_PolyMesh_v1 ScalarProperty name=.selfBnds;interpretation=box;datatype=float64_t[6];arraysize=6;numsamps=1 ArrayProperty name=P;interpretation=point;datatype=float32_t[3];arraysize=8;numsamps=1 ArrayProperty name=.faceIndices;interpretation=;datatype=int32_t;arraysize=24;numsamps=1 ArrayProperty name=.faceCounts;interpretation=;datatype=int32_t;arraysize=6;numsamps=1 CompoundProperty name=.userProperties;schema= ScalarProperty name=meshtype;interpretation=;datatype=bool_t;arraysize=1;numsamps=1 CompoundProperty name=.arbGeomParams;schema= CompoundProperty name=uv;schema= ArrayProperty name=.vals;interpretation=vector;datatype=float32_t[2];arraysize=14;numsamps=1 ArrayProperty name=.indices;interpretation=;datatype=uint32_t;arraysize=24;numsamps=1 ArrayProperty name=N;interpretation=normal;datatype=float32_t[3];arraysize=8;numsamps=1 -
abcechobounds
.abc ํ์ผ ๋ด๋ถ ๋ฐ์ด๋ฉ ๋ฐ์ค์ ์ฌ์ด์ฆ ํฌ๊ธฐ๋ฅผ ๋ฐํํ๋ ๋ช ๋ น์ด ์ ๋๋ค.
$ abcechobounds box.abc
Output:
/Cube/CubeShape (-1 -1 -1) (1 1 1) / (-1 -1 -1) (1 1 1) -
abcls
.abc ํ์ผ ๋ด๋ถ์ ์๋ ์ค๋ธ์ ํธ ์ด๋ฆ์ ๋ฐํํฉ๋๋ค.
$ abcls box.abc
Output:
Cube
-
abcstitcher
๊ฐ ํ๋ ์๋ง๋ค ์ฐ์ฐ๋ .abc ํ์ผ์ ๋ฌถ์ด์ ํ๋์ .abcํ์ผ๋ก ๋ง๋ค์ด์ค๋๋ค. ํ๋ ์์์ญ์ด ๊ฒน์น๋ฉด
ERROR: overlapping frame range between์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ณดํต ๊ฐ๋ณ๋ก bake๋ ์๋ฎฌ๋ ์ด์ ํ์ผ์ ํฉ์น ๋ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.$ abcstitcher output.abc input.0001.abc input.0002.abc input.0003.abc ...
-
abctree
.abc ํ์ผ์ ๊ตฌ์กฐ๋ฅผ Tree ํํ๋ก ๊ทธ๋ ค์ฃผ๋ ๋ช ๋ น์ด ์ ๋๋ค.
$ abctree box.abc
Output:
ABC --Cube --CubeShape
3D ์ํํธ์จ์ด๊ฐ ์๋๋ผ๋ .abc ํ์ผ์ ๋ณผ ์ ์๋ค๋ฉด ํธ๋ฆฌํฉ๋๋ค. ๊ทธ ์ญํ ์ ํ๋ abcview๋ฅผ ์ปดํ์ผํด๋ณด๊ฒ ์ต๋๋ค.
- usd๋ฅผ ์ปดํ์ผํ๋ฉด usdview๊ฐ ์ค์น๋ฉ๋๋ค. usdview์์๋ abcํ์ผ๋ ๊ฐ์ด ๋ณผ ์ ์์ต๋๋ค.
- Gaffer ๋ฅผ ์ค์นํด๋ abc๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
- ๋ดํฌ์์๋ abc๋ฅผ ๋ก๋ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
$ usdview input.abcsudo yum install freeglut-devel -ysudo yum install python-devel -y์ฐธ๊ณ : usdview์๋ ์ด๋ฏธ abcํ์ผ์ ๋ณผ ์ ์์ต๋๋ค. ๊ฐ์ธ์ ์ผ๋ก usd๊ฐ ์ปดํ์ผ์ด ๋ ์๋์ด์ abcview ๋์ usdview๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์์ค์ฝ๋ : https://github.com/alembic/abcview
์ปดํ์ผ์ด ์์ง ๋์ง ์๋๋ค. ๊ธฐ์กด์ ์ปดํ์ผํ ๋ฆฌ์คํธ์ค ๋ค ํ์ฑํ ํ์ฌ ์ปดํ์ผ ํด๋ณด๊ธฐ.
$ cd ~/app
$ git clone https://github.com/alembic/abcview abcview_src
$ mkdir abcview
$ mkdir abcview_build
$ cd abcview_build
$ scl enable devtoolset-6 bash
$ cmake ../abcview_src -DBOOST_ROOT=$HOME/app/boost_1_66_0 -DILMBASE_ROOT=$HOME/app/IlmBase -DALEMBIC_LIB=$HOME/app/alembic/lib -DALEMBIC_INCLUDE_PATH=$HOME/app/alembic/incloud -DGLEW_INCLUDE_DIR=/usr/include -DGLEW_LIBRARY=/usr/lib64 -DUSE_PYTHON=OFF -DCMAKE_INSTALL_PREFIX=$HOME/app/abcview
-DPYTHON_ROOT=/usr/lib64/python2.7/config -DPYTHON_LIBRARY=/usr/lib64/python2.7/config/libpython2.7.so -DPYTHON_INCLUDE_DIR=/usr/include/python2.7
$ make -j2
$ make install
$ make help- 3Dํด์ ์ด์ฉํด์ abc ํ์ผ ์ ์.
- ๋ดํฌ์ ๋ก๋ฉํด๋ณด๊ธฐ
- ๋ช ๋ น์ด ์ค์ต
- centos/script์ ํ์ํ ์ฝ๋ ์ค์น ์๋ํ ์ถ๊ฐํ๊ธฐ