Cortex-VFX 开发环境安装及配置说明

这是2011年测试cortrex的一些总结,现在已经不研究这项目了,仅供参考。
(cortex-vfx是国外的一个影视动画的特效开发包 https://code.google.com/p/cortex-vfx/)                                                                                                                                 
热身准备:
linux平台可以选择ubuntu,也可以选择centOS.
需要先安装些必要的库:建议先用系统的软件安装与卸载功能来查看下这些库是否已经安装,没有安装的需要去官网下载源码编译安装
         
ubuntu 的新立得很强大对应源码包不再列举,在安装centos系统时,要选择软件开发工作站模式安装,库比较全

库                                               centos6.0对应   源码包
tbb                                       tbb22_20090809oss_src.tgz
boost                                    boost_1_42_0.tar.bz2                              
OpenEXR                              ...
tiff                                         tiff-3.9.4.tar.gz
jpeg                                        ...
png                                         ...
glew                                       glew-1.7.0.tgz
glut                                        glut-3.7.tar.gz
freetype2

####
第三方软件的支持好需要事先安装好软件并在scons的配置文件中制定好路径
3delight
maya
houdini
nuke
这些都是可选择性的安装或者不安装,也可在编译完cortex内核后分别安装编译


关于软件编译安装;linux的软件大部分都可以通过查看软件自身所带的README INSTALL 等安装说明来进行安装
大概的步骤就是:
./configure    配置 默认的安装路径为/usr/local
make            编译
make install    安装,需要sudo权限


cortex编译工具scons说明:
cortex的工程编译是用scons来执行的,检查系统是否已经安装了scons, 没有的需要下载编译安装。scons需要一个名字为SConstruct
的配置文件,它所在位置是cortex的主目录下,通过gvim或者gedit等文本编辑器打开进行配置。

#编译器及编译环境
linux的软件编译器是gcc,检查好系统是否满足了所需的编译器的环境。
ubuntu下可以通过新立得安装 build essential,或者通过命令执行安装:sudo apt-get install build-essential
centos 下应该已经装好了相应的编译器gcc


SConstruct的配置说明            ******START*********

此文件的语法属于python的语法范畴


注意如果你已经安装了houdini的话 需要在开始部分,在import完一坨模块之后,定义一个os的houdini变量

#add houdini path
os.environ.setdefault("HFS","/opt/hfs11.1.22")

接下来就是检查各库的include路径和lib路径要和你安装的相一致。
比如说适当修改下面的黑体部分:

注:如果是系统已经安装好了的软件,那么它的库的存放位置 ,ubuntu的默认为  /usr/lib  , centOs 的为 /usr/lib64


# TBB options

o.Add(
    "TBB_INCLUDE_PATH",
    "The path to the tbb include directory.",
    "/usr/local/include/tbb",     
)

o.Add(
    "TBB_LIB_PATH",
    "The path to the tbb library directory.",
    "/usr/local/lib",
)

#关于boost部分的修改,注意黑体部分:

# Boost options

o.Add(
    "BOOST_INCLUDE_PATH",
    "The path to the boost include directory.",
    "/usr/local/include/",
)

o.Add(
    "BOOST_LIB_PATH",
    "The path to the boost library directory.",
    "/usr/local/lib",
)

o.Add(
    "BOOST_LIB_SUFFIX",
    "The suffix appended to the names of the boost libraries. You can modify this "
    "to link against the debug versions of the libraries, or to link against "
    "unversioned libraries.",
    "-${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION}_${BOOST_PATCH_VERSION}",要把此处设置成空,
不要再进行版本的检查,否则会报错提示找不到相应的版本库
)


#你可以修改下面的黑体部分,用来改变编译完安装的lib库的位置,注意ubuntu下,动态库默认的搜索路径为 /usr/lib , /lib.  CentOS则为 /lib64,/usr/lib64.

# General path options

o.Add(
    "CPPPATH",
    "A colon separated list of paths to search for headers on.",
    "/usr/include",这个是安装了一个头文件的副本到系统路径下
)

o.Add(
    "LIBPATH",
    "A colon separated list of paths to search for libraries on.",
    "/usr/lib",这个是系统需要搜索的动态库的位置,一般情况下,ubuntu设置成 /usr/lib , centOs设置成/lib64 
)

#注意修改关于opengl部分,

###sudo gedit cortex/SConstruct

try :
    o.Add(
        BoolVariable( "WITH_GL", "Set this to build the IECoreGL library.", False ),
    )

False改成True

#如果已经安装了houdini,那么做以下修改,此改动仅针对houdini11.1.22版本,其他也可能凑效
在SConstruct中找到如下部分,按下面添加修改CXXFLAGS
###########################################################################################
# Build, install and test the coreHoudini library and bindings
###########################################################################################
houdiniEnvSets = {
    "IECORE_NAME" : "IECoreHoudini",
    "CXXFLAGS" : [
        "$HOUDINI_CXX_FLAGS", "-DMAKING_DSO", "-DNEED_SPECIALIZATION_STORAGE"
    ],
}
添加黑体部分如下
houdiniEnvSets = {
    "IECORE_NAME" : "IECoreHoudini",
    "CXXFLAGS" : [
        "$HOUDINI_CXX_FLAGS", "-DMAKING_DSO", "-DNEED_SPECIALIZATION_STORAGE","-DDLLEXPORT= ",
                "-DVERSION="10.0.554"","-D_GNU_SOURCE","-DLINUX","-DAMD64","-m64","-fPIC","-DSIZEOF_VOID_P=8",
                "-DSESI_LITTLE_ENDIAN","-DENABLE_THREADS","-DUSE_PTHREADS","-D_REENTRANT","-D_FILE_OFFSET_BITS=64"
                
    ],
}
##

并且还要修改下houdini提供的api中的部分头文件,如下操作

##1
UT_NTStreamUtil.h
$sudo cp /opt/hfs11.1.22/toolkit/include/UT/UT_NTStreamUtil.h /opt/hfs11.1.22/toolkit/include/UT/UT_NTStreamUtil.h.bak #先备份
$sudo gedit /opt/hfs11.1.22/toolkit/include/UT/UT_NTStreamUtil.h

修改
    #include <strstream.h>

    #include <strstream>

##2
GB_GenericData.h
$sudo cp /opt/hfs11.1.22/toolkit/include/GB/GB_GenericData.h /opt/hfs11.1.22/toolkit/include/GB/GB_GenericData.h.bak #先备份
$sudo gedit /opt/hfs11.1.22/toolkit/include/GB/GB_GenericData.h
修改

    L258 #define STATIC_INLINE_SPECIALIZATION static inline


    L258#define STATIC_INLINE_SPECIALIZATION inline

#####################
如果已经安装了maya,仅做如下修改,把安装路径替换掉黑体部分即可

# Maya options

o.Add(
    "MAYA_ROOT",
    "The path to the root of the maya installation.",
    "/usr/autodesk/maya",
)

#如果安装了3delight, Scontruct配置下renderman部分,也可以是prman的安装
# Renderman options

o.Add(
    "RMAN_ROOT",
    "The directory in which your RenderMan renderer is installed.",
    "/usr/local/3delight-9.0.84/Linux-x86_64/",
)
##############
             ************END*************
##############


##关于cortex的procedural要在3deligth中渲染那么
cortex/src/rmanProcedural/python/Procedural.cpp 必须要编译正确,源代码此文件不能正确的编译出动态库,需要修改如下:

$sudo gedit cortex/src/rmanProcedural/python/Procedural.cpp

###############

#include "boost/python.hpp"

#include <dlfcn.h>//添加此行

#include <iostream>

#include "ri.h"

#if defined(_WIN32)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT
#endif

using namespace std;
using namespace boost::python;

/// We use a static instance of this struct to initialise python when the dso is first loaded.
struct PythonInitialiser
{
    PythonInitialiser()
    {
        // start python

                dlopen( "libpython2.6.so", RTLD_LAZY | RTLD_GLOBAL); ///添加此行

        Py_Initialize();
        PyEval_InitThreads();
        
            try
            {
            
                mainModule = object( handle<>( borrowed( PyImport_AddModule( "__main__" ) ) ) );
                mainModuleNamespace = mainModule.attr( "__dict__" );


#################################################

开始编译

#IECore
cortex内核部分的编译及安装:
   
  我的习惯是把cortex6.0源码包放到 /opt 下面,
  
 命名为cortex,然后进入/opt/cortex目录,执行命令 ls 查看一下目录结构

src 是用来存放源代码的,include头文件包,lib是存放编译完成生成的动态库的,python是用来存放生成的python模块的,mel是存放脚本的, rsl是
renderman材质的头文件,glsl是opengl的头文件及材质的,contrib是存放houdini的源码,test是用来测试的python脚本的,SConstruct是配置文件

在配置好SConstruct文件后开始进行编译,你可以先不配置3delight,maya,houdini等软件的目录,单独编译 IEcore
执行命令如下:
$ sudo scons
 编译开始,首先scons会根据配置文件所提供的依赖库的include,lib的路径进行检查是否存在,如果关键依赖库不存在则停止,你就要检查下路径是否正确
如果依赖库没有问题,scons就开始进行编译。
如果编译没有问题那么继续执行
$sudo scons install
这步scons会把生成的动态库安装到指定的路径下面,包括lib动态库和对应的python模块,还会把头文件包copy到指定路径下,还会在指定路径下比如
/usr 下安装houdini,maya,rmanProcedural等文件夹,里面有生成相应的插件脚本图标之类,只要把对应的文件copy到软件所需要的路径即可,

测试:在终端执行python,进入python控制台执行命令
import IECore 回车
不报错的话 恭喜 成功了~

#IECoreRI
如果配置文件中写了rendreman的安装路径3delight或者prman ,那么会生成相应的动态库和python模块
libIECoreRI.so
_IECoreRI.so(python)

#IECoreMaya
如果配置文件中写了maya的安装路径 ,那么会生成相应的动态库和python模块,及插件,在/usr下生成maya文件夹
libIECoreMaya.so
_IECoreMaya.so(python)
执行如下命令:
$sudo cp -r /usr/maya/mel/*  /usr/autodesk/maya/scripts
$sudo cp /usr/maya/icons/*  /usr/autodesk/maya/icons
$sudo cp /usr/maya/plugins/* /usr/autodesk/maya/bin/plug-ins

还要copy生成的python模块到maya的python的lib库下,命令
$sudo cp -r /opt/cortex/python/*  /usr/autodesk/maya/lib/python2.6/site-packages/

测试:
打开maya,加载ieCore.so插件,查看是否能够正确加载。
打开脚本编辑器python面板输入
import IECore
import IECoreMaya
查看是否能正确导入

ex: 关于tbb的错误,一般情况下是maya的tbb库与系统的库冲突导致的,因为我们编译cortex时是用的系统的tbb库编译的,解决
办法,备份maya的tbb库 ,然后把系统的tbb库copy到maya的库下面

#IECoreHoudini
如果配置文件中写了rendreman的安装路径3delight或者prman ,那么会生成相应的动态库和python模块
libIECoreHoudini.so
_IECoreHoudini.so

拷贝/usr/houdini/下面文件夹内的文件到houdini的安装目录下对应的文件夹内


#cortex的环境变量 
用户主目录下的隐藏文件.bashrc 是该用户的配置文件,一些软件的环境变量的设置都在此文件中。设置完成后,必须重启终端才能生效。
ops和procedural的配置,执行命令

$cd  进入用户主目录
$gedit .bashrc
添加如下语句

#procedural
export IECORE_PROCEDURAL_PATHS=~/procedurals

#ops
export IECORE_OP_PATHS=~/ops

下面给出了我的.bashrc添加的内容供参考:

#############.bashrc
#3delight
export DELIGHT=/usr/local/3delight-9.0.84/Linux-x86_64
source /usr/local/3delight-9.0.84/.3delight_bash

#houdini
#export HFS=/opt/hfs11.1.22
source /opt/hfs11.1.22/houdini_setup_bash

#PATH
export PATH=$PATH:/opt/hfs11.1.22/bin:/opt/massive/bin

#procedural
export IECORE_PROCEDURAL_PATHS=~/procedurals

#ops
export IECORE_OP_PATHS=~/ops

#massive
export MSERVER=ltc
export MASSIVE_HOME=/opt/massive

#cor hair
export HAIR_MODIFIER_PATHS=~/modifiers/hair

#python
export PYTHONPATH=/opt/MsvTools
####


###############################
                3delight的安装配置
###############################
按照README or INSTALL or 帮助文件 安装好,并在.bashrc文件中做了变量的声明,如上。设置完重启终端
在终端输入render按TAB 如果能自动补齐为 renderdl的话  则说明变量成功声明。
在安装目录下的maya的文件夹内存放着3deligth for maya的插件
把生成的 /usr/rmanProcedurals/iePython.so 拷贝到3deligth的安装路径下的lib目录,这是就可以渲染cortex的procedural的东东了
测试:打开maya,加载ieCore.so和3delightformaya2011的插件,从cortex菜单创建一个procedural的物体 sphereProcedural 然后从3deligth菜单
创建一个fulllayer,设置save选项为save rib ,然后点render. 这样就保存了一个含有cortex  procedural的rib场景文件,在终端用renderdl进行渲染
执行命令

$renderdl ~/maya/projects/default/3delight/untitled/rib/untitled_fullRenderPass.rib

如果渲染成功,则cortex和maya,3delight的工作环境便搭建好了。 


#######################
       关于centOS安装maya的破解说明
#######################

首先先把所需要的rpm包准备好:

安装
sudo rpm -i adlmapps-1.3.34-0.x86_64.rpm adlmflexnetclient-1.3.34-0.x86_64.rpm adlmflexnetserver-1.3.34-0.x86_64.rpm Maya2011_0_64-2011.0-372.x86_64.rpm Maya2011_0-docs_en_US_64-2011-88.x86_64.rpm

1   ./crack
2    gvim dummy.c
然后编辑dummy.c里的内容,
int main (void) 
{

return 0;

}

然后保存,
运行命令gcc dummy.c 如果顺利会生成一个a.out文件
复制a.out到/usr/bin/rpm  
命令:sudo cp a.out /usr/rpm  之前要备份好rpm, sudo mv rpm rpm.bak

3.运行setup
命令./setup
安装序列号要填serial:666-42943644 product key :657C1。
只选择adlm3个包 和maya ,maya的文档包安装即可

接着给maya搞个临时文件夹,给与权限。命令:
sudo mkdir /usr/tmp
sudo chmod 777 /usr/tmp

4.把/bin下的rpm.bak还原
$ sudo mv /bin/rpm.bak /bin/rpm

5.运行maya, 会提示缺少libXp.so 的错误,运行Add/Remove SoftWare 安装liXp的开发包就行了。


再罗嗦几句
#############
关于C++的数据类型 数组array 封装到python 对应的类型
#############
需要安装PyUblas 库和numpy 模块, 下载安装PyUblas-2011.1.tar.gz, numpy可以通过新立得(ubuntu),   Add/Remove SoftWare(centos)来获得。
pyublas安装完成后copy它的头文件包到/usr/include下 再把对应的python的模块包放到python的lib下的site-packages或者dist-packages下。
如果想在maya中的python也能使用 怎把pyublas的python模块包也放到对应的路径下。

在编译pyublas时,会遇到一个找不到libboost_python库的错误,但是库已经存在 只不过是名字不一样,所以到库所在位置建立一个 编译所要的库的软连接即可

使用时
import pyublas
import numpy



#############
关于centOS的nvidia官方显卡驱动的安装
#############
默认centos下nvidia卡的驱动是民间写的,貌似没有硬件加速,所以安装完maya的时候会发现旋转视窗的时候很慢的原因。
下载与机器显卡相对应的官方驱动
执行以下命令:

$sudo gedit /etc/modprobe.d/blacklist.conf  
加入一行  blacklist  nouveau  屏蔽掉默认的驱动

重新建立initramfsimage文件,执行

$ sudo mv /boot/initramfs-$(uname-r).img /boot/initramfs-$(uname -r).img.bak
$ sudo dracut -v/boot/initramfs-$(uname -r).img $(uname -r)

修改开机启动模式
$sudo gedit /etc/inittab
5表示图形模式  3表示文本模式,把 id:5:initdefault:  里面的5改成3

重新启动
$reboot

在系统进入文本模式后,安装官方的驱动
$sudo sh NVIDIA-x-xx-.run

安装完后,再改回启动图形模式

$sudo gedit /etc/inittab
把 id:3:initdefault:  里面的3改成5

重启reboot

注意linux每次升级内核,都要对initramfsimage重新编译。
 
我的一个毛发测试示例:
http://www.cnblogs.com/litiecheng/
原文地址:https://www.cnblogs.com/litiecheng/p/3369990.html