Objetivo: Compilar una versión optimizada de Blender 2.49b, para ser ejecutado en Ubuntu 9.10 o cualquier otra distribución derivada de Debian (también puede aplicarse a otras distribuciones).
Como el tutorial se trata de compilar Blender en Ubuntu se asumirá que se tiene conocimientos en el manejo e instalación de paquetes en esta distribución.
Aunque el titulo de este tutorial indica que es con Ubuntu, también he realizado este método con Debian 5 y funciona prefectamente.
Requisitos:
1.Descargar el código fuente: http://www.blender.org/download/source-code/
2.Instalar los siguientes paquetes:
- scons
- build-essential
- yasm
sudo apt-get install scons build-essential yasm
Librerías necesarias:
Es muy importante tener instaladas todas la librerías para que no ocurran errores durante la compilación. Esto en versiones anteriores de Ubuntu era problemático ya que había que instalar a mano cada una de las dependencias. Versión tras versión los nombres de los paquetes pueden cambiar y hay que buscar el nuevo nombre lo cual complica mucho las cosas, pero ahora ese problema se a solventado, ahora como en Debian podemos hacer lo siguiente:
sudo apt-get build-dep blender
Con este comando de apt-get se instalan las dependencias necesarias que necesita Blender para poder compilarse.
Preparando los archivos:
En este paso descomprimimos por el método que más nos guste el archivo con el código fuente que se descargo de la página de Blender. Es recomendable hacerlo en nuestro directorio personal, si descomprimimos el archivo ahí se nos creará una carpeta cuyo nombre será blender-2.49b.
Compilación sin optimización:
Para esto abrimos una consola y nos posicionamos en la carpeta donde descomprimimos el código fuente, en mi caso realizo esto:
gustavo@maxigus:~$ cd /home/gustavo/blender-2.49b
oprimo enter y ya estaré posicionado en la carpeta, en la cosola se mostrará esto:
gustavo@maxigus:~/blender-2.49b$
Aquí viene la parte divertida solo escribimos el comando “scons” y comenzará la compilación:
gustavo@maxigus:~/blender-2.49b$ scons
Y si todo sale bien después de unos 10 a 20 minutos dependiendo de nuestra máquina tendremos en nuestra carpeta personal una carpeta llamada build y otra llamada install, y en esta última encontramos otra subcarpeta llamada linux2 y dentro de esta nuestros ejecutables.
Compilación con optimización:
Bueno para tener nuestra versión optimizada hay que modificar un archivo de texto que encontramos en la carpeta config que esta dentro de la carpeta del código fuente, el archivo que debemos modificar es el que se llama linux2-config.py, pero cuidado, no hay que modificar ese archivo, si no copiarlo y pegarlo en la carpeta raíz, es decir en la carpeta blender-2.49b, y ya que lo pegamos ahí le cambiamos el nombre a user-config.py, y aquí haremos varias modificaciones tanto para optimizar así como para quitar algunas opciones si es que ocurren errores en la compilación.
Abrimos el archivo user-config.py en el editor de textos de nuestra preferencia, y este archivo viene dividido en varias secciones, describiremos las mas importantes:
WITH_BF_VERSE = ‘false’
Este es para activar la compilación del ejecutable de Verse, se puede desactivar poniendo ‘false’ si nos da problemas a la hora de compilar, o poner ‘true’ si queremos y no tenemos problemas.
BF_PYTHON_VERSION = ’2.5′
Esta es para poner la versión de python que se desea usar, si se quiere usar la 2.6 solo cambiar el valor en BF_PYTHON_VERSION =’2.6′
El archivo linux2-config.py en la versión 2.49b de Blender, viene modificado para detectar que versión de python tenemos instalada o cual es la que usa por defecto el sistema, así que probablemente no tenga que preocuparse por modificar esta línea. En Ubuntu 9.10 la versión instalada de python por defecto es la 2.6
WITH_BF_GAMEENGINE=’true’
Aquí decidimos si queremos el motor de juegos o no, por default viene activado, a mucha gente le da problemas a la hora de compilar así que la desactivan, si no hacemos uso de esta característica podemos poner ‘false’.
WITH_BF_FFMPEG = ‘true’ # -DWITH_FFMPEG
Aquí habilitamos o deshabilitamos la característica del uso de las librerías FFMPEG como salida del render, y con audio multiplexado y archivos listos para DVD, si así lo deseamos, es aconsejable dejarlo en ‘true’ pero si no queremos usarlo o tenemos problemas a la hora de compilar se puede desactivar poniendo el valor en ‘false’.
WITH_BF_STATICOPENGL = ‘false’
Esta parte es muy importante, ya que decidimos si queremos usar a tope la tarjeta de video y hacer uso del Direct Rendering y así optimizar el desempeño en el tiempo real al usar Blender, si tenemos una tarjeta de video bien configurada lo ideal será dejar el valor en ‘false’ pero si se tienen problemas con su tarjeta de video se puede poner el valor en ‘true’ para hacer uso de una versión estática de blender, donde el motor de Blender se ejecuta enteramente por software, esto mermará mucho el desempeño, pero nos dejará usar el programa. Pero en Ubuntu generalmente se configuran bastante bien las tarjetas así que no modifiquen este valor para obtener así un buen desempeño.
Nota: Si tienen una tarjeta de gráficos ATI o NVIDIA usen envy-ng para instalar los más recientes controladores de nuestra tarjeta de gráficos, sin mucho esfuerzo, instalen el programa con sudo apt-get install envyng-core envyng-gtk y luego vayan al menú Aplicaciones–>Herramientas del Sistema–>Envy NG
Ahora vamos a la parte más importante la de la optimización, a continuación veremos la configuración que viene por defecto:
##
CC = ‘gcc’
CXX = ‘g++’
##ifeq ($CPU),alpha)
## CFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing -mieee
CCFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing']
CPPFLAGS = ['-DXP_UNIX']
CXXFLAGS = ['-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing']
REL_CFLAGS = ['-O2']
REL_CCFLAGS = ['-O2']
Esta configuración nos asegura que funcionará en cualquier máquina, pero si queremos explotar al máximo nuestra máquina y procesador a la hora del render podemos hacer unas modificaciones, a continuación muestro la configuración para un procesador Athlon X2:
##
CC = ‘gcc’
CXX = ‘g++’
##ifeq ($CPU),alpha)
## CFLAGS += -pipe -fPIC -funsigned-char -fno-strict-aliasing -mieee
CPPFLAGS = ['-DXP_UNIX']
CCFLAGS=['-march=athlon64','-fomit-frame-pointer','-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-fno-inline']
CXXFLAGS=['-march=athlon64','-fomit-frame-pointer','-pipe','-fPIC','-funsigned-char','-fno-strict-aliasing','-fno-inline']
REL_CFLAGS = ['-O2']
REL_CCFLAGS = ['-O2']
En esta parte de la configuración hay dos partes importantes:
La primera es la referente a CCFLAGS y CXXFLAGS, donde encontramos el siguiente flag:
‘-march=atlhon64′
Este flag le dice al compilador el tipo de procesador para el que se desea generar un código optimizado. ¡Atención con esto! Al realizar la optimización de esta manera, estamos seleccionado un procesador o conjunto de procesadores específicos, es decir, si produzco un programa con código optimizado para un procesador AMD con soporte 3DNow!, este no funcionará en un procesador Intel, ya que ningún procesador de esta familia soporta las instrucciones 3DNow!
Aunque mucha gente también pone el tag -mtune, este muchas veces esta de más ya que -march, generalmente implica a -mtune.
También se agregaron los siguientes flags:
‘-fomit-frame-pointer’,'-pipe’,'-fPIC’,'-funsigned-char’,'-fno-strict-aliasing’,’-fno-inline’
Estos aunque no actúan directamente sobre el resultado, preveen errores durante la compilación, y en especial el flag -pipe ayuda a acelerar un poco el proceso de compilación, pero cuidado, si estamos realizando esta operación en computadoras con poca memoria RAM, el proceso puede ser más lento. El único estrictamente necesario es -fno-inline, que en caso de no estar la compilación puede fallar.
Nota: Es importante que tanto CCFLAGS y CXXFLAGS tengas exactamente los mismos parámetros.
Es obvio que en estas etiquetas debemos cambiar el athlon64 que yo tengo en mi configuración por el flag correspondiente al de su procesador. Aquí tenemos una tabla en la que se muestran los flags que podemos usar dependiendo de nuestro procesador:
|
Tag
|
Procesador
|
|
i386
|
Intel i386 y compatibles
|
|
i486
|
Intel i486, AMD 486
|
|
i586
|
Intel Pentium (sin mmx)
|
|
pentium-mmx
|
Intel Pentium con soporte de instrucciones MMX
|
|
pentiumpro
|
Intel Pentium Pro
|
|
i686
|
Procesadores basados en Pentium Pro
|
|
pentium2
|
Intel Pentium II basados en Pentium Pro y soporte de instrucciones MMX
|
|
pentium3, pentium3m
|
Intel Pentium III basados en Pentium Pro con soporte instrucciones MMX y SSE
|
|
pentium-m
|
Intel Centrino con soporte de instrucciones MMX, SSE y SSE2
|
|
pentium4, pentium4m
|
Intel Pentium 4 con soporte de instrucciones MMX, SSE y SSE2
|
|
prescott
|
Intel Pentium 4 con soporte de instrucciones MMX, SSE, SSE2 y SSE
|
|
nocona
|
Intel Pentium 4 con extensión de 64bits con soporte de instrucciones MMX, SSE, SSE2 y SSE3
|
|
core2
|
Intel Core2 con extensión de 64bits y soporte de instrucciones MMX, SSE, SSE2, SSE3 y SSSE3
|
|
k6
|
AMD K6 con soporte de instrucciones MMX
|
|
k6-2, k6-3
|
AMD K6-2 y AMD k6-3 con soporte de instrucciones MMX y 3DNow!
|
|
athlon, athlon-tbird
|
AMD Athlon y AMD Thunderbird con soporte de instrucciones MMX, 3DNow!, enhaced 3DNow! y soporte parcial de SSE
|
|
Athlon-4,athlon-xp, athlon-mp
|
AMD Athlon XP y Semprom con soporte de intrucciones MMX, 3DNow, enhaced 3DNow! y SSE
|
|
k8, opteron, athlon64, athlon-fx
|
AMD K8, Opteron, Athlon 64, Athlon FX, Semprom 64, Athlon X2 con soporte de instrucciones x86_64 (este tag setea automáticamente el soporte para las instrucciones MMX, 3DNow!, SSE, SSE2, enhaced 3DNow! E instrucciones de 64 bits)
|
|
k8-sse3, opteron-sse3, athlon64-sse3
|
Opteron, AMD Athlon 64, Athlon 64 X2 con soporte de instrucciones SSE3
|
Para averiguar que tipo de procesador tenemos (si es que no conocemos sus caracteristicas)
debemos abrir una consola y ejecutar lo siguiente:
cat /proc/cpuinfo
Este comando no dara información sobre el nombre del procesador, carterisicas generales, asi como los tags que soporta, en mi caso el resultado el el siguiente:
gustavo@gustavo-casa:~$ cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 15
model : 75
model name : AMD Athlon(tm) 64 X2 Dual Core Processor 4200+
stepping : 2
cpu MHz : 1000.000
cache size : 512 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy
bogomips : 2009.19
TLB size : 1024 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management: ts fid vid ttp tm stc
processor : 1
vendor_id : AuthenticAMD
cpu family : 15
model : 75
model name : AMD Athlon(tm) 64 X2 Dual Core Processor 4200+
stepping : 2
cpu MHz : 1000.000
cache size : 512 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
apicid : 1
initial apicid : 1
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good extd_apicid pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy
bogomips : 2009.19
TLB size : 1024 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management: ts fid vid ttp tm stc
Aquí he resaltado con negritas la parte de los flags que soporta mi procesador, y me doy cuenta que soporta MMX, SSE, SSE2, 3Now!, MMX Extendido y 3DNow! Extendido, así que puedo usar sin problemas el flag athlon64; aparece dos veces la información por que mi procesador tiene doble núcleo, obviamente cada núcleo tiene características idénticas.
Aquí la página de referencia del compilador gcc 4.4 que se instala con el metapaquete build-essential en Ubuntu 9.10.
http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options
o en su defecto ejecutar en una consola el comando man gcc, que nos llevará a las páginas man de ayuda de gcc.
La segunda parte en importancia es la siguiente:
REL_CFLAGS = ['-O2']
REL_CCFLAGS = ['-O2']
Aquí se se indican niveles de optimización, por default es -O2, si somos aventureros y queremos máxima optimización se puede hacer uso de -O3, la compilación tardará mucho más, no en todas las máquinas funciona y se corre el riesgo de tener un programa inestable, y segun la guía de gcc 4.4 ya no se obtiene una gran ventaja de rendimiento entre -O2 y -O3
Bueno y guardamos el archivo y realizamos la acción para compilar que se explico al principio.
Si desean mas información sobre la optimización de Blender y otros programas, pueden encotrar una explicación detallada en la siguiente página:
http://www.gentoo.org/doc/es/gcc-optimization.xml
Nota: En algunos casos se me ha presentado el siguiente error:
Linking library ==> ‘libextern_libmp3lame.a’
yasm -Iextern/xvidcore/src/image/x86_asm/ -I../../src/ -f elf -DMARK_FUNCS -o /sources/blender-2.5-22645/build/linux2/extern/xvidcore/src/image/x86_asm/colorspace_yuyv_mmx.o extern/xvidcore/src/image/x86_asm/colorspace_yuyv_mmx.asm
yasm: FATAL: unable to open include file `nasm.inc’
scons: *** [/sources/blender-2.5-22645/build/linux2/extern/xvidcore/src/image/x86_asm/colorspace_yuyv_mmx.o] Error 1
scons: building terminated because of errors.
La solución a esto es lo siguiente:
Abrir una consola y luego teclear lo siguiente:
cd blender2.49b/extern/xvidcore/src/
find . -type d -exec cp -v nasm.inc '{}' \;
Con en primer comando entramos a la carpeta donde se encuentra el código fuente, donde blender2.49b es la carpeta que descomprimimos al principio, si la descomprimimos en una carpeta distinta a la raíz de nuestro home, habrá que indicarlo.
El segundo comando find es el comando en Linux que nos permite buscar archivos, en este caso configurado para que solo busque archivos en la carpeta, así encuentra el archivo perdido y corrige el error.
Espero haber sido claro y que les sea de utilidad.
Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.
Continuing the Discussion
-
Compilar Blender 2.46 y 2.47 en Ubuntu 8.04 Hardy con Scons y Python 2.5 – MDT Blog
[...] http://www.maquinadeltiempo.com.mx/wordpress/?p=47 [...]
November 12, 200915:54
Hola que tal Excelente Guia amigo, pero tengo una duda, yo tengo un procesador AMD Phenom QuadCore 9950, que Tag deberia de usar? Esto es la info del procesador, miro los tags pero no estoy seguro de cual usar.. Te agradeceria me dieras una recomendacion.
processor : 0
November 30, 2009 at 20:35vendor_id : AuthenticAMD
cpu family : 16
model : 2
model name : AMD Phenom(tm) 9950 Quad-Core Processor
stepping : 3
cpu MHz : 1300.000
cache size : 512 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs
bogomips : 5224.61
TLB size : 1024 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 48 bits physical, 48 bits virtual
power management: ts ttp tm stc 100mhzsteps hwpstate