The PRMan SDK

The PRMan SDK

March, 2008

Introduction

The PRMan Software Developers Kit (SDK) is a collection of interfaces that allows users of RenderMan to extend the capabilities of the software in many varied and powerful ways. This document will provide an overview of each of the interfaces and detail how the SDK can be used on each of the platforms that supports Pixar's RenderMan.

There are two categories of interfaces in RenderMan: the first is plugins and the second is stand-alone applications. With plugins the interface can be bidirectional, meaning that the plugin will be expected to provide an entry point for the renderer to call into and the plugin can also make calls into entry points exposed by the renderer. Stand-alone programs will always simply make calls into entry points exposed by the renderer.

This is why providing a shared library that supports all the needs of the plugin interfaces and the stand-alone applications has great appeal. With a shared library, the executable prman simply loads the shared library at runtime and all plugins resolve their exported entry points against the shared library. Stand-alone programs can also resolve against the same shared library and can even embed the RenderMan renderer themselves. (A good example of this is the prman_for_python extension.) The downside of this is that stand-alone programs will now have to load the dynamic runtime library; however, all operating systems provide many mechanisms to meet this requirement and it is a small price to pay for the added flexibility it affords.


Plugin Interfaces

The following interfaces are only valid when used in the context of a plugin that is loaded by prman. Some of the calls could potentially be made by a standalone program, but for the most part they rely on some context provided by the renderer itself once it loads a plugin.


Application Interfaces

The following interfaces can be used in a stand-alone program outside the context of the renderer. However, this does not prevent plugins from utilizing these interfaces. For example, it might be very desirable to access a deep texture map within an RSL plugin.