Trademarks: Studio & BrickLink are trademarks of the LEGO Group.
Disclaimer: This howto is provided as is, without any warranty. My patches and sources are at least under the same licence as the sources they modify (so Apache 2.0 or (L)GPLv2 or more), and otherwise free to use and modify and re-distribute.
Everything is done on the command line. I didn’t try QtCreator or 😱 Visual Studio.
You first need to download Eyesight’s sources. Go to the Technical Notes help page, the link for Eyesight is at the bottom. (Or click here but the link may die…)
Needed space:
Needed RAM:
mkdir BuildEyesight cd BuildEyesight export WORKING_DIR=`pwd` mkdir libs
The variable WORKING_DIR is used all along this howto in order to help navigate the directories and to have full paths (with a / at the beginning and without typos) to give to commands.
Install the needed dependencies (mostly, Blender’s, except for ffmpeg and OpenCOLLADA that have modified versions for Eyesight, and except it’s Blender 2.79b, not the latest version).
Sorry, it’ll be a painful process but I haven’t noted all that’s needed, especially as I already had some -dev packages installed. So, besides the list below, check the result of Eyesight’s ‘cmake’ step (its whining about OpenGL or AntTweakBar are of no consequence). For cmake errors / missing packages, you need to clean and restart cmake. For linking errors (at 99% completion of step ‘make’), you just need to restart make.
In no particular order, on a Debian-based distribution, non-exhaustive:
nvidia-cuda-toolkit build-essential cmake git git-lfs nasm python3 libpython3.12-dev libboost-date-time-dev libboost-filesystem-dev libboost-regex-dev libboost-system-dev libboost-thread-dev libopenexr-dev libopenimageio-dev libsdl2-dev libx11-dev libxext-dev libxfixes-dev libxi-dev libxmu-dev libxrender-dev libxv-dev libxxf86vm-dev libasound-dev libbz2-dev libjpeg-dev liblzma-dev libpng-dev libpugixml-dev libsndio-dev libtiff-dev libxcb-dev libxcb-shape-dev libxcb-shm-dev libxcb-xfixes-dev libxcb-xv-dev libxml2-dev libz-dev libglut-dev libosd-dev libicu-dev libgl-dev libglew-dev libglu-dev
Notes: not sure Python is even used but it’s still in the cmake file. It’s more work to try and remove it than just to install unnecessary dependancies.
Every step below starts back in that ‘BuildEyesight’ directory.
It’s supposed that every file you download is placed in this directory too. (Otherwise, adapt the commands.)
cd "$WORKING_DIR" 7z x Eyesight.zip cd Eyesight
Git allows to test things and go back if it goes wrong so we don’t have to start from scratch. We’ll keep it very basic.
First, initialization:
cd "$WORKING_DIR" git init . git add . git commit -m "Official release"
When things go right:
cd "$WORKING_DIR" git add . git commit -m "Step XX successful"
When things go wrong, go back to the last “save”:
cd "$WORKING_DIR" git reset --hard HEAD git clean -f
cd "$WORKING_DIR" cd libs 7z x ../Eyesight/libSrc/AntTweakBar-1.16-mod.zip cd AntTweakBar/src make cd ../include ln -s ../src/*.h .
cd "$WORKING_DIR" cd libs 7z x ../Eyesight/libSrc/OpenCOLLADA-1.6.62-mod.zip
Edit OpenCOLLADA-1.6.62/CMakeLists.txt and add at line 168:
# Is an error now… ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_DANGLING_REFERENCE -Wno-dangling-reference )
Update June 2025: OpenCOLLADA doesn’t compile any more with the system’s libpcre (too recent). CMakeLists.txt needs to be edited to allow the use of the embedded copy in “externals” by commenting the test on line 264, like this:
#if (WIN32 OR APPLE)
message("WARNING: Native PCRE not found, taking PCRE from ./Externals")
add_definitions(-DPCRE_STATIC)
add_subdirectory(${EXTERNAL_LIBRARIES}/pcre)
set(PCRE_INCLUDE_DIR ${libpcre_include_dirs})
set(PCRE_LIBRARIES pcre)
#else ()
# message("ERROR: PCRE not found, please install pcre library")
#endif ()
Update June 2025: There’s also a couple files to edit to add “#include <cstdint>”, as indicated by gcc: DaeValidator.cpp & XmlDoc.cpp
mkdir OpenCOLLADA_build cd OpenCOLLADA_build cmake ../OpenCOLLADA-1.6.62
If there’s errors, it’ll be missing dependencies….
make sudo make install
Files are installed in /usr/local, which should be okay… unless you also have your distribution’s OpenCOLLADA installed.
Download the patch to allow to build FFMPEG with new ASM tools, and place it in your working directory. (It’s a patch picked from more recent versions of FFMPEG.)
cd "$WORKING_DIR" cd libs git clone https://git.ffmpeg.org/ffmpeg.git cd ffmpeg git checkout n4.4 patch -p1 < ../../ffmpeg44_new_nasm.patch ./configure --prefix="$WORKING_DIR"/libs/ffmpeg_inst make make install
‘--prefix’ defines where the files will be installed. We don’t want them in the system (we already have more modern versions there).
If there’s errors, it’ll be missing dependencies. Install them and relaunch ‘make’.
Download and edit the file 0001-Prepare-for-Linux-build-and-with-some-updated-libs.patch: search for “/home/sylvain” and replace the paths with your paths. There’s one for AntTweakBar and one for FFMPEG.
cd "$WORKING_DIR" cd Eyesight patch -p1 < ../0001-Prepare-for-Linux-build-and-with-some-updated-libs.patch
What the patch does:
cd "$WORKING_DIR" mkdir build cd build
Use the correct version of gcc/g++, the same as CUDA toolkit. The correct version should be pulled as a dependency when you install the toolkit. On my system, it’s 13, but it may be 12 or 14 on yours!
export CC=/usr/bin/gcc-13 export CXX=/usr/bin/g++-13
Prepare the compilation:
cmake ../Eyesight/EyesightSrc
First small hack: cmake can find the .h but not the .a, go figure….
cd "$WORKING_DIR/build/lib" ln -s ../../libs/ffmpeg_inst/lib/*.a .
Small hack: due to the other hacks, to not using cmake files for every dependency, and to other more obscure reasons, some dependencies are missing / wrong / out-of-order. This file adds them… and maybe too many.
You first need to edit the file to replace the full path for libAntTweakBar.a. Search for “sylvain”, there’s two occurences.
cd "$WORKING_DIR/build" cp ../intern_cycles_app_CMakeFiles_eyesight.dir_link.txt intern/cycles/app/CMakeFiles/eyesight.dir/link.txt
Now we can compile:
make -j 8
‘8’ is the number of processing units (“cores”) to use. Use ‘nproc’ to know how many you have. (8 is half my nproc number, I wanted to continue using the PC.)
make install
Eyesight and all its files are in build/bin now. You can move that bin directory elsewhere or rename it…. Only what’s in there is necessary for running Eyesight, you can archive all the rest.
Copy the .xml files from the latest Studio (otherwise, you’ll have missing colours):
cp "${WINEPREFIX:-~/.wine}"/drive_c/Program\ Files/Studio\ 2.0/PhotoRealisticRenderer/win/64/*.xml "$WORKING_DIR"/build/bin
WINEPREFIX is the directory for your Wine installation. If you used the default, then it’s ~/.wine (and the command above works), otherwise, adapt the command!
Only the files in "$WORKING_DIR"/build/bin are necessary to run Eyesight. You can move that bin directory anywhere you want and delete the rest of the whole WORKING_DIR.
Now you can run Eyesight from the command line.
Type ‘eyesight --help’ to get a list of options.
You’ll need to get COLLADA files from your models. You have two options:
We want to replace the Windows version of Eyesight with our native version. But there’s a few problems:
So, our option 2 earlier can be “makeshift” or “streamlined.”
We replace Studio’s eyesight.exe with a script to get the parameters and launch our native Eyesight.
Because of problem 2 above, that means Studio thinks Eyesight didn’t succeed, so the result image won’t be moved to its final location. So we need to do it ourself.
Good news: Studio is still waiting for Eyesight to finish, so the temporary files won’t be deleted until Studio is closed.
Bad news: rendering with the Queue does’t work, because, for Studio, the first job never finishes.
The script is eyesight_native_wrapper.exe.
First, edit and modify the script to your environment:
cd "${WINEPREFIX:-~/.wine}"/drive_c/Program\ Files/Studio 2.0/PhotoRealisticRenderer/win/64
mv eyesight.exe eyesight_orig.exe
cp "$WORKING_DIR"/eyesight_native_wrapper.exe eyesight.exe
chmod +x eyesight.exe
See the note about WINEPREFIX above.
We need to replace Studio’s eyesight.exe with a proper Windows program that will start a script (we still need to go through a script for reasons 0 and 1 above), and then wait for the rendered image before quitting.
The needed program is eyesight_win_wrapper.cc.
The needed script is (still) eyesight_native_wrapper.exe.
First, install mingw, that’s the package g++-mimgw-w64 or similar.
Then, edit and modify the script to your environment:
cd "${WINEPREFIX:-~/.wine}"/drive_c/Program\ Files/Studio 2.0/PhotoRealisticRenderer/win/64
mv eyesight.exe eyesight_orig.exe
cp "$WORKING_DIR"/eyesight_native_wrapper.exe .
chmod +x eyesight_native_wrapper.exe
x86_64-w64-mingw32-g++ -o eyesight_win_wrapper.exe -static "$WORKING_DIR"/eyesight_win_wrapper.cc
cp eyesight_win_wrapper.exe eyesight.exe
See the note about WINEPREFIX above.
Slight problem: Eyesight whines about not finding the images to fake scratches (textures/LEGO_ScratchTexture_[BS].JPG). It loads them correctly when it loads settings.xml but complains when it loads C:\ProgramData\Studio\CustomColorSettings.xml (Studio always adds both files as parameters). It seems the path changes when Linux version loads CustomColorSettings while it doesn’t change on the Windows version. Both versions use the full path, so I’m not seeing what’s wrong in the code 🤔
Anyway, a very simple solution is to link the ‘textures’ folder in ‘C:\ProgramData\Studio\CustomColors\’ 😁
cd "${WINEPREFIX:-~/.wine}"/drive_c/ProgramData/Studio/CustomColors
ln -s "$WORKING_DIR"/build/bin/textures .
Animations: The wrapper is very simple and waits for the file as indicated in its arguments. When doing animations, that’s not the result file. So Eyesight does its work correctly and quits but the wrapper is still waiting. The proper solution would be to parse the arguments more smartly and to wait for the correct file (animation or last .png). My solution is to close the wrapper when Eyesight quits 😝