ML Blog

雕刻时光
Sculpting in time

每一个故事都有起点与终点
Every story has a beginning and an end.

Run renderman compatible render engine aqsis on armv6

Running the Aqsis rendering engine on the Raspberry Pi 1B

6-Minute Read

reference

http://alvyray.com/Pixar/documents/Pixar_ImageComputer.pdf

https://ohiostate.pressbooks.pub/app/uploads/sites/45/2017/09/pixar-image-processor.pdf

Pixar Image Computer

What inspired me to write this article is that last month, March, I took a quick look at The Renderman Companion A Program’s Guide To Realistic Computer Graphics, which mainly describes how to use the Renderman C API interface to achieve 3D image rendering. The book was published in 1989, when Pixar had developed the Renderman rendering interface standard and implemented the PRMan PhotoRealistic Renderman implementation that is now widely used in the film industry. One of the interesting things is that in 1986 Pixar also developed a computer graphics hardware system similar to today’s Nvidia general-purpose graphics cards - Pixar Image Computer.

Before I learned about Pixar, I thought Nvidia was the first to make a graphics card, but it turns out there was an earlier Pixar Image Computer, which was used in a similar way to the current Nvidia graphics card, as an expansion card to communicate with the local computer, the local CPU sends data to the Pixar Image Computer for calculation,and then retrieves the calculated data from the Pixar Image Computer. The specific architecture is as follows:

The advantage of designing such an architecture lies in the following three points:

  1. the implementation of a generic hardware design

  2. parallel execution of image processing operations

  3. support for multiple CHAPs systems

Architecture design:

  • Pixel data structure: All Pixar Image System components are designed to accommodate the “Pixel data structure”, which contains the storage information of each channel of RGBA (Red Green Blue Alpha).

  • Chap(Channel Process): Chap contains four processors, which are used to process the data of the four channels of RGBA. CHAP is a single instruction multi-data processing machine, where the four core processors execute the same instructions on each of the four channels, and each processor processes the data of the corresponding channel.

The cyclic process of CHAP data processing:

ALU: Composed of AMD29116A chips, all four ALUs execute the same instructions on four channels of data for one pixel.

Multiplier: Data is entered by MBUS and the result is output to ABUS through multiplication processing.

Pbus buffer: Pixel data is exchanged between CHAP and image Memory.

Yapbus buffer: Data is exchanged between CHAP and CHAP.

Scratchpad: High-speed temporary storage of pixel data during program execution.

Write crossbar: Destination of ABUS, filtering controls which data can be written to Scratchpad.

Read crossbar: The source of SBUS, which classifies the read data.
  • Yapbus: Data exchange between CHAP and CHAP.

  • Picture Memory: Frame buffer, used to store picture information data.

  • Video Board: Read data from Picture Memory to send Scan lines to Monitor.

  • Memory Controller: Coordinates the transfer of data and allocates memory resources according to the first-come, first-served policy when CHAP and Video Board initiate memory requests.

About basic and advanced applications

To say a digression, the hottest topic in high-tech field is artificial intelligence and blockchain two fields, then these two fields in the industrial aspects of the landing project, this will require the efforts of the pioneer, most of the projects in the industrial field are very bottom, such as the quality inspection of products inside the factory, the damage of the parts, the application of artificial intelligence to the edge of the field is a deep cross-disciplinary, design Deep neural network developers need to understand the underlying architecture of the parts, need to understand the specific quality attributes of the product, these are not just rely on an artificial intelligence slogan can be solved, the same blockchain is not to say that the development of a chain can be called blockchain applications, to actually combine with the industrial system we need to remove the concept of suspicion of hype, specific to study a thing, its underlying, its core, its relationship with other things. So that our so-called artificial intelligence can be put on the ground, just like AlphaGo and AlphaFold developed by DeepMind, they are an industrial product used to solve the problems in the industrial field.

After this reflection, we can understand that the old technology is actually not obsolete, in the pursuit of new technology perhaps we forget what is the basis behind this technology, in the pursuit of high-performance computing equipment, whether our actual operation can make this machine’s high performance fully play out, in our inability to answer what the basis is, whether the performance has been played to the extreme, then please put down the so-called trendy technology, start to explore the basic science, so that when the foundation is solid, we have the ability to answer the above questions, to do a very precise example, there are many domestic projects to do artificial intelligence research and development but not MATLAB and Mathematica, because the former is a rough prototype of the framework can be understood as an airy building, the latter two are in various industrial fields, they are developed under the exploration of various industrial fields can be interpreted as a high-rise building that rises from the ground.

Aqsis on armv6

After the introduction of the Pixar Image System, I was curious to know that when Pixar was starting out they were able to make the best image system and movie animations in the world, so could the Aqsis rendering engine implemented by Renderman be installed on a Raspberry Pi 1B with only 512M RAM? After all, the Pixar Image System has a maximum memory of 192M, and I can use Aqsis to complete the C implementation in The Renderman Companion book.

I used the Raspberry Pi 1B armv6 hardware and downloaded the official Raspberry Pi os 32bit system Raspbian GNU/Linux 11 (bullseye).

Qt4 Version

git clone git://aqsis.git.sourceforge.net/gitroot/aqsis/aqsis aqsis
git submodule update --init

Patch:

diff --git a/include/aqsis/core/ioptions.h b/include/aqsis/core/ioptions.h
index 44946092..944a335a 100644
--- a/include/aqsis/core/ioptions.h
+++ b/include/aqsis/core/ioptions.h
@@ -34,7 +34,7 @@
 #include <aqsis/riutil/primvartype.h>
 #include <aqsis/ri/ritypes.h>
 #include <aqsis/math/vecfwd.h>
-
+#include <boost/shared_ptr.hpp>
 namespace Aqsis {

 class CqImagersource;
diff --git a/libs/core/texturing_old/shadowmap_old.cpp b/libs/core/texturing_old/shadowmap_old.cpp
index 1a22491c..11a2febf 100644
--- a/libs/core/texturing_old/shadowmap_old.cpp
+++ b/libs/core/texturing_old/shadowmap_old.cpp
@@ -176,7 +176,7 @@ void CqShadowMapOld::LoadZFile()
 	{
 		std::ifstream file( m_strName.c_str(), std::ios::in | std::ios::binary );

- if ( file ! = NULL )
+ if ( file )
 		{
 			// Save a file type and version marker
 			TqPchar origHeader = tokenCast(ZFILE_HEADER);
diff --git a/tools/displays/piqsl/piqsldisplay.cpp b/tools/displays/piqsl/piqsldisplay.cpp
index a4073902..3ae07741 100644
--- a/tools/displays/piqsl/piqsldisplay.cpp
+++ b/tools/displays/piqsl/piqsldisplay.cpp
@@ -37,7 +37,8 @@
 #include <boost/archive/iterators/transform_width.hpp
 #include <boost/archive/iterators/insert_linebreaks.hpp>
 #include <boost/shared_ptr.hpp>
-#define
+#define BOOST_PFTO_WRAPPER(T) T
+#define BOOST_MAKE_PFTO_WRAPPER(t) t
 #ifdef AQSIS_SYSTEM_WIN32
 	#include <winsock2.h>
 	typedef u_long in_addr_t;

Aqsis dependency installation and compilation: (Since apt source does not have qt4 support, only qt5 is installed here and piqsl cannot be enabled), the installation dependency can be found in INSTALL.

apt-get install build-essential make cmake wget zip unzip
apt install libboost-all-dev
apt install libtiff-dev libtiffxx5
apt install bison flex qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools qtcreator qtdeclarative5-dev zlib1g-dev libjpeg-devel libpng++-dev libpng-dev libilmbase-dev
apt install openexr openexr-viewers openimageio-tools libopenexr-dev

mkdir build && cd build && cmake . / && make

Of course you can also download my compiled version directly, which will only work on the Armv6 HardFloat platform.

aqsis-cmd-1.9.0.tar.gz binary download

Qt5 Version

git clone https://github.com/aqsis/aqsis.git
git submodule update --init

Patch:

diff --git a/tools/ptview/ptview.cpp b/tools/ptview/ptview.cpp
index 4d5c73e...41065b6 100644
--- a/tools/ptview/ptview.cpp
+++ b/tools/ptview/ptview.cpp
@@ -43,7 +43,7 @@
 #define NOMINMAX
 #include <OpenEXR/ImathVec.h>
 #include <OpenEXR/ImathMatrix.h>
#define NOMINMAX
+#include <GL/gl.h>
 #include "ptview.h"
 #include <MicroBuf.h>
 #include <RadiosityIntegrator.h>

Dependency installation and compilation: Same dependencies as Qt4 version

Of course you can also download my compiled version directly, which will only work on the Armv6 HardFloat platform.

aqsis-qt5-1.8.3.tar.gz binary download

Render test

Recent Posts

Categories

About

不断的学习思考, 保持好奇心
Keep thinking, Stay curious
始终保持对于新事物的敏感
Always be sensitive to new things