.. _intro-introduction:

Introduction
============

Welcome to the NUKE Developer Guide. This is intended for use with the bundled NUKE Developer Kit (or NDK), which allows writing and compilation of C++ plug-ins (essentially shared libraries) for use inside of `NUKE <https://www.foundry.com/products/nuke>`_. The Developer Guide is designed as a getting started walkthrough for many common areas of plug-in writing, from constructing your first simple PixelIop, through to the esoterics of particle behaviours, 3D ops and more. It is not intended to be a replacement for the class reference documentation provided as part of the NDK, but rather as a complementary document. It is also not intended as an introduction to C++, and will throughout assume a good working knowledge of the language. If you are coming to the NDK without a working knowledge of the language, there are a wide variety of getting started texts available, including Scott Meyers' "Effective C++" and "Effective STL" for good practice guidelines.
 
.. note::
  
  This guide, and the NDK as a whole, is not intended for plug-in writers looking to utilise the OpenFX (OFX) API. The OFX API is designed for commercial plug-in writers looking to write and compile a plug-in once and have them run across a number of hosts, and host versions. The NDK, on the other hand, offers a far greater degree of access to underlying NUKE functionality, but does require recompilation of plug-ins far more frequently due to API changes. The OFX API is documented on the `OFX SourceForge site <http://openfx.sourceforge.net/>`_.

.. note::

  Throughout this guide, we'll refer to NUKE. NUKE can be taken to mean either NUKE or NUKEX, since NUKEX is essentially the same package with options unlocked by different types of license.

.. _intro-how-to-use-this-guide:

Pre-requisites
--------------

To develop NUKE plug-ins you will need:

* A working knowledge of C++
* A compiler for your platform(s), set up as per :ref:`appendixa-index`
* A licensed up to date copy of NUKE (note the PLE version will not load non-bundled plug-ins - it must be a licensed version of NUKE or NukeX)

How to Use This Guide
---------------------

Using this guide effectively entirely depends on your current NDK knowledge level. Those with exposure to the API already should just be able to dip in and out of the sections covering their intended plug-in's operating area. For those without previous exposure, the sections are laid out to follow the suggested reading order. Major plug-in areas also have exercises associated with them for those looking for a more 'cookbook' approach to aid inhouse training. This guide does not replace the class reference documentation which appears alongside it. By referring to class reference and header files and experimenting with the examples provided, you should be able to gain an indepth knowledge of the areas introduced in this document.

All users should set up their compiler as per :ref:`appendixa-index` if they haven't done so already, and follow along with the various examples as they are introduced.

Online versions of this guide can be found on the `NUKE Developer site <https://www.foundry.com/products/nuke/developers>`_, and may be more up to date than this version, which was built on |today|. 

Info
----

NDK Developer Guide. Copyright © 2016 The Foundry Visionmongers Ltd. All Rights Reserved. Use of this Developer Guide and the NUKE software is subject to an End User License Agreement (the "EULA"), the terms of which are accessible in the NUKE User Guide included in the NUKE product bundle. This Developer Guide and the NUKE software may be used or copied only in accordance with the terms of the EULA. This Developer Guide, the NUKE software and all intellectual property rights relating thereto are and shall remain the sole property of The Foundry Visionmongers Ltd. ("The Foundry") and/or The Foundry's licensors.

The EULA can be read in the NUKE User Guide Appendices.

The Foundry assumes no responsibility or liability for any errors or inaccuracies that may appear in this Developer Guide and this Developer Guide is subject to change without notice. The content of this Developer Guide is furnished for informational use only.

Except as permitted by the EULA, no part of this Developer Guide may be reproduced, stored in a retrieval system or transmitted, in any form or by any means, electronic, mechanical, recording or otherwise, without the prior written permission of The Foundry. To the extent that the EULA authorizes the making of copies of this Developer Guide, such copies shall be reproduced with all copyright, trademark and other proprietary rights notices included herein. The EULA expressly prohibits any action that could adversely affect the property rights of The Foundry and/or The Foundry's licensors, including, but not limited to, the removal of the following (or any other copyright, trademark or other proprietary rights notice included herein):

NUKE compositing software © 2016 The Foundry Visionmongers Ltd. All Rights Reserved. 

NUKE is a trademark of The Foundry Visionmongers Ltd. 

Digital Domain® is a registered trademark of Digital Domain, Inc. 

In addition to those names set forth on this page, the names of other actual companies and products mentioned in this Developer Guide (including, but not limited to, those set forth below) may be the trademarks or service marks, or registered trademarks or service marks, of their respective owners in the United States and/or other countries. No association with any company or product is intended or inferred by the mention of its name in this Developer Guide.

Linux® is a registered trademark of Linus Torvalds.

Windows® is the registered trademark of Microsoft Corporation.

Mac, Mac OS X, Shake, Final Cut Pro and QuickTime are trademarks of Apple, Inc., registered in the U.S. and other countries.

Adobe® and Photoshop ® are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries.

Maya® is a registered trademark of Autodesk, Inc., in the USA and other countries. 

Houdini® is a registered trademark of Side Effects Software, Inc. 

Boujou is a trademark of 2d3 Ltd. 

3D-Equalizer is a trademark of Science.D.Visions.

OpenGL® is a trademark or registered trademark of Silicon Graphics, Inc., in the United States and/or other countries worldwide.

RenderMan® is a registered trademark of Pixar. CineonTM is a trademark of Eastman Kodak Company.

With thanks to Anil Kokaram and Trinity College Dublin.

Written by (in no particular order): Vilya Harvey, Abigail Brady, Dan Ring, Jack Binks, Jon Wadelton, Michael Hughes & Lucy Wilkes.




