**Bella for Rhino** Version 22.3.0 [Bella for Rhino](../bella_rhino/index.html) | [Bella for Maya](../bella_maya/index.html) | [Bella for SketchUp](../bella_sketchup/index.html) | [Bella GUI](../bella_gui/index.html) | [Bella CLI](../bella_cli/index.html) | [Bella Core](../bella/index.html) | [Tutorials](../../tutorials) | [Node Definitions](../nodes/index.html) | [Main site](https://bellarender.com) | [Discord](https://discord.gg/DqCAvAXH6C) Introduction =================================================================================================== Bella for Rhino integrates Bella directly into Rhino, allowing for interactive rendering of scenes while they are being created and edited. The main way of using Bella inside Rhino is by setting a viewport to use the *Bella* display mode: ![Bella materials in the Rendered & Bella viewport modes](vp-materials.png) Though translation of native Rhino materials & textures is supported, you should prefer to use Bella materials and textures directly, for maximum control. The user interface for Bella materials has also been designed to avoid some of the lag commonly seen when using Rhino materials. It is possible to work entirely within Rhino, but the plugin also bundles the [Bella GUI](../bella_gui/index.html), for rendering outside of Rhino, which will generally yield superior rendering performance, and keep Rhino free, for you to keep working on your model. The currently-supported versions of Rhino are 6 and 7. Note that though Bella natively supports Apple Silicon, as of the time of this writing Rhino does not, so if you are on an Apple Silicon machine, you should definitely perform final rendering in Bella GUI. ## Scope This document pertains specifically to Bella for Rhino, and does not cover general Bella concepts, for which you should refer to the [core Bella](../bella/index.html) and [node definition](../nodes/index.html) documentation. For information on Bella licensing, and how to install your Bella license, see Licensing in the [Bella GUI](../bella_gui/index.html) documentation. Installation =================================================================================================== To install Bella for Rhino, download the package appropriate for you operating system (.zip for Windows, .dmg for MacOS) and follow these steps: ## Windows 1. Download the .zip file and unzip it on your desktop. 2. Double-click the *bella_rhino.rhi* file. 3. The Rhino Installer will be shown, follow the instructions. !!! If you encounter any error when attempting to start Bella GUI, download and install the Microsoft Visual C++ runtime from the [downloads page](https://bellarender.com/downloads). ## MacOS 1. Download the .dmg file and double-click to mount it. 2. Double-click the bella_rhino.macrhi file inside. 3. Rhino will install the plugin. 4. As instructed, close Rhino and restart it. Uninstallation =================================================================================================== Uninstallation involves some manual steps, since Rhino's installer engine does not provide for uninstallation. Alternatively, you can also just disable the plugin in Rhino's plugin manager. ## Windows Depending whether you chose to install for all users, the following folders may exist for each version of Rhino installed on the machine, and must be deleted: 1. **C:\Users\[user]\AppData\Roaming\McNeel\Rhinoceros\[version]\Plug-ins\Bella (813de3fb-18eb-405f-bfcd-b0b4d3da91fb)** 2. **C:\Program Files\Common Files\McNeel\Rhinoceros\[version]\Plug-ins\Bella (813de3fb-18eb-405f-bfcd-b0b4d3da91fb)** ## MacOS Simply delete this file: **~/Library/Application Support/McNeel/Rhinoceros/MacPlugIns/bella_rhino.rhp** If you are unable to find this, as the Library folder is hidden by default: 1. Click Finder menu > Go > Go to Folder. 2. In the box, enter **~/Library/Application Support/McNeel/Rhinoceros/MacPlugIns** and hit Enter. 3. Delete the **bella_rhino.rhp** file. If deleting the plugin appears not to work, try emptying the trash, and possibly even rebooting, as MacOS has been known to happily continue to use items even after they have been trashed. !!! It appears Rhino 6 has a bug in its Preferences > PlugIns panel, where it continues to show Bella even after it has been removed. Rendering =================================================================================================== The plugin supports rendering directly in Rhino viewport, via the Rhino *Render* command, and externally, in Bella GUI. ## In Viewport (IPR) ## To render in a viewport using Bella IPR (*Interactive Preview Render*), select *Bella* from the viewport menu: !(displaymode-menu.png) The scene will be processed and rendered in the viewport: ![Model by Jorgen Holo, using Rhino 7 SubDs.](displaymode-bella.png) As with any Rhino display mode, you may navigate the camera, add/remove/edit objects, apply modifiers, and so forth, with the model being updated interactively. !!! Though you can render to high quality directly in IPR, it is primarily intended for previewing as you work with the model. For final rendering it will usually be preferable to send the model to the Bella GUI. ## In Rhino ## To render inside Rhino, you may use the standard Rhino *Render* (or *RenderWindow/etc*) command. ![Render window](render-window.png) However, it is recommended to render outside Rhino in Bella GUI, since this allows you to keep working inside of Rhino, and because rendering performance is somewhat increased by doing so. !!! In Rhino 7, we have observed that the *Gamma* box may be checked by default, and should generally be un-checked, since Bella handles color space internally. ## In Bella GUI ## To send the model to Bella GUI, just make sure the desired viewport is selected, and click the only button in the Bella toolbar: !(toolbar.png) Left-clicking this will export the model to a BSX file and open it in Bella GUI, for production rendering. Right-clicking it does the same, but writes a BSZ file, which bundles the BSX file along with all referenced resources, so you can easily move it to another machine. Render Settings =================================================================================================== First of all, you should set the current renderer to Bella: !(render-settings.png) This ensures that Rhino will use Bella for rendering, generating material & texture previews, and so forth. ## Resolution Output resolution is controlled in the standard Rhino way, using the settings in the *Resolution & Quality* section. ## Backdrop When set to *Solid color* or *Gradient* the scene will be rendered using Bella's *Color Dome* in the background. When set to *360° Environment* the scene will be rendered using a translation of the chosen Rhino environment, which will be an *Image Dome* or *Color Dome* depending if an HDRI is set, or a physical sky, when set to use a *Bella Sky Dome* environment. It is possible to render with no background by choosing the *No Environment* option in the drop-down list, and it is possible to use a custom environment for reflections & refractions by checking the *Use custom environment for reflections* box. ## Lighting Sun in Bella is controlled using the *Sun* checkbox and settings. The date & time set in Rhino's sun settings will also be used to set the date & time of a *Bella Sky Dome* if one is used. If you do not check the *Skylight (360° env.)* box, then Rhino will create a directional light that *"looks over the camera's shoulder"*. This often does not look very nice, and we do not recommend it. Otherwise scene illumination will either use the same environment set in the *Backdrop* section, or a custom one, if you check the *Use custom environment for skylighting* box. ## Output & Solver Settings in this section control the production rendering (as opposed to IPR in the viewport). This applies both to rendering within Rhino using the *Render* command, and to rendering externally in Bella GUI. *Output Name* allows writing BSX/BSZ files to a name different from the current Rhino file. You may use the *$cam* macro here, to generate output names based on the name of view. Cameras =================================================================================================== Each Rhino viewport is given a corresponding set of Bella camera parameters: ![Bella camera settings](objprops-camera.png) It is generally recommended to use the automatic *A+S (Modulate ISO)* mode, which allows adjustment of EV, ISO, and fStop, without affecting the exposure. Since it operates by modifying the ISO, this also allows exposure adjustments without causing the IPR to restart. ![Cameras Tutorial](https://www.youtube.com/watch?v=TzvpMswNUEQ) ## Focus Mode The camera supports three focus modes: Pinhole, Manual, and Objects. ### Pinhole This completely disables DOF (Depth of Field) and causes all objects to render in focus. ### Manual when Distance is set to zero this uses the focus distance from the associated Rhino camera, and otherwise uses the specified focus distance. The distance may be picked from the model by clicking the small button at the right and choosing some point. ### Objects In this mode, focus distance is automatically computed from the distance of the camera to a set of selected objects. In this mode, the Distance value is used as a percentage for setting the focus distance to some point between the near & far distances of the specified objects. This mode is also interactive, in that it will recompute based on the current camera position, as you move the camera. Materials =================================================================================================== Rhino materials may be used, but it is recommended to use Bella materials: ![Main Bella material types](materials-main-types.png) More esoteric Bella materials are available by clicking the *More Types...* menu item: ![Main Bella material types](materials-all-types.png) As shown above, material types are categorized into *Bella Materials* and *Bella Material-related*. !!! NOTE: the RDK requires that a plugin represent its types as either *Environment*, *Material*, or *Texture*, and this is the reason we have various non-materials showing up as "materials". We realize this is confusing, but there is currently no way around it. !!! NOTE: if you edit a material in a popup window, by clicking a layer's material, or the material link in *Object Properties > Material* when set to *Use Layer Material*, then some bugs in Rhino's RDK will prevent successful editing of linked nodes (e.g. Scattering, textures, etc), which will be popped up in a 2nd floating window. The workaround is to always use *Main Menu > Render > Material Editor* to edit such linked nodes. ## Common attrs At the top of the interface, all materials expose a common set of attributes: Type | Info ---------------------|-------------------------- Opacity | Controls the overall opacity of the material as a whole. Normal | Connect a *Bump* or *Normal* map (OpenGL format) to produce bump effects across the material surface. Priority | Controls behavior for nested dielectrics. Material ID | Controls the color used for the *Material* pass. Viewport shader | Allows using any texture to override the appearance of the material in viewports. [Common material attributes.] ## Materials Various material types are provided, some being substrates typically used in conjunction with Bella Layer and other nodes, and others (PBR, Uber) exposing a typical standard material interface, familiar to users of other rendering software. !(materials.png) Type | Info ---------------------|-------------------------- Blend | This material allows blending and stacking of other materials, by percentage or texture. Conductor | An opaque substrate with roughness going from metallic to diffuse. Commonly used with high (e.g. 90%) roughness and a *Layer* to produce a plastic type material. Dielectric | A semi-opaque substrate that represents liquids, glasses, gems, etc. Supports use of a *Layer* which may be useful for adding fingerprints and such. Diffuse | An opqaue substrate that uses the Oren-Nayar model. This also supports addition of a *Layer*. Emitter | A material that emits light from meshes to which it is assigned. Output power may be specified in several types of real world units. PBR | A material that provides easy use of commonly-available PBR texture sets. Sheet | This is a *Layer* with no substrate, useful for windows with no refraction, etc. Subsurface | A translucent substrate that implements random walk subsurface scattering. This has a diffuse surface, over which may be added a *Layer*. Uber | A typical "Uber" type material that allows building a material by setting the weight of various sub-components. [Core materials.] ## Material-related These are not technically materials, but must be represented as such due to the design of Rhino's RDK. They are used in the process of building materials using the core material types. !(material-related.png) Type | Info ---------------------|-------------------------- Emitter Projector | May be referenced by an emitter, to focus emission within a given aperture angle. In some cases this can drastically reduce wasted effort, and speed up rendering. Filter Caustics | May be referenced by an emitter, to control which types of caustics it is allowed to produce. Layer | May be placed over a substrate, to simulate a thin dielectric layer, with realistic simulated micro-thickness, and optional subsurface scattering within the thin layer. Ramp In Out | May be referenced in an emitter, to control falloff. Scattering | May be referenced by a *Dielectric* or *Layer*, to add subsurface scattering. Thin Film | May be referenced by a substrate or *Layer*, to produce thin-film interference effects. [Material-related nodes.] Textures =================================================================================================== Bella provides several texture types: !(bella-textures.png) Some of these are self-explanatory, while others are used in conjunction with other textures. Where applicable, a texture has a *UV Coord* input, which may be connected to a *Texform* node, to allow altering repeat/offset/etc. Such textures also usually have a *UV Channel* input, which allows selecting a specific set of UV coordinates, for when an object has had multiple texture mappings applied. ## File Texture Though you may use a Rhino texture to reference a file, the *Bella File Texture* gives you control over several Bella-specific attributes: !(file-texture.png) ## Texform A *Texform* is not a texture, as such, and is rather used to apply specific repeat/offset/etc values to an actual texture. !(texform.png) ## RGB Xform Like *Texform*, *RGB Xform* is not a texture of its own, and is rather used to change hue/saturation/etc of another texture. !(rgbxform.png) ## Bump & Normal Map To use a bump or normal map it is necessary to connect a *Bump map* or *Normal Map* node to a material's *Normal* input. These are much like the file texture node, but they contain the code necessary for bending an object's normals according to the specified texture. Normal maps in Bella use OpenGL format, but you can easily use other formats by using the Flip R/G attributes on the Normal Map (or PBR material) node. !!! NOTE: For translated Rhino materials, which do not support such flipping, you can type "flipGreen" into the material Notes to tell Bella to apply Flip G in the translated material. Lights =================================================================================================== In addition to supporting mesh-based emitters through the *Emitter* material type, Bella for Rhino also supports most native Rhino light types: Type | Info ---------------------|-------------------------- Spot | Translated as a Bella *Spot* light. Point | Translated as a Bella *Point* light. Directional | Translated as a Bella *Directional* light. Rectangular | Translated as a Bella *Area* light. Linear | Not currently supported. [Rhino lights.] All of these are analytical Bella lights, with good rendering performance, as compared to mesh- based lights with non-trivial triangle counts. Object properties =================================================================================================== The plugin adds a Bella-specific page to Rhino's Object Properties window: !(object-props.png) Here, it is possible to use the *Render As* property to have Bella render a mesh not as a mesh, but as some other native built-in Bella type, such as sphere or plane. !!! NOTE: it can be especially advantageous to render mesh lights as planes or disks, for increased render speed. It is also possible to enable the various Bella Render Flags using this panel. ZBrush tutorial =================================================================================================== This is a short tutorial on one way of using ZBrush with Bella. Disclaimer: I (Jeremy) am not at all an experienced ZBrush user, so any corrections or tips are welcome. The final ZBrush file may be downloaded [here](zbrush/Jewelry_SignetRing2.zip). 1. Begin by opening *Project/Jewelry/Jewelry_SignetRing.zpr* from the Lightbox. We will begin by reducing the resolution of the mesh, so go to *Geometry > ZRemesher* and re-mesh the ring 3 times with *KeepCreases* and *CheckSeams* enabled. !(zbrush/zbsr-0.png) 2. Next, to create UVs for the mesh, go to *Zplugin > UV Master*, click *Unwrap*, and then enable *CheckSeams* to see how ZBrush has unwrapped the mesh. !(zbrush/zbsr-1.png) 3. Next, disable *CheckSeams*, go to *Geometry*, and click *Divide* 3 times: !(zbrush/zbsr-2.png) 4. Now, add some geometry details. !(zbrush/zbsr-3.png) 5. Next, enable *PolyPaint > Colorize* and paint a roughness texture on the ring. Black will be zero roughness, and white will be full roughness. !(zbrush/zbsr-4.png) 6. Next, we need to export our maps, so go to *Zplugin > Multi Map Exporter*. !(zbrush/zbsr-5.png) 7. Click *File names* and set output formats to TIF. !(zbrush/zbsr-6.png) 7. Set *Displacment map* values: *SubDiv Level* = 3, *Mid* = 0, *32bit exr* enabled. We are using subdiv level 3 to say we want the displacment map to represent the difference between our base mesh and subdiv level 3, so we can use the low-poly level 1 mesh and subdivide/displace it during rendering. We use 32bit EXR so that we have good depth resolution. !(zbrush/zbsr-7.png) 8. Set *Normal map* values: *SubDiv Level* = 4, *Tangent* enabled. Here we choose the full subdiv level of 4, to get the details between the level 3 we are using for our displacement, and the final level 4 subdivision of our ZBrush model. !(zbrush/zbsr-8.png) 9. Set *Mesh Export* values: *SubDiv Level* = 1, *Quad* enabled. As previously mentioned, we export the mesh at subdiv level 1 to keep the file small and easy to deal with, then subdivide & displace it only during rendering. !(zbrush/zbsr-9.png) 10. Click *Create All Maps* and choose the output directory. ZBrush should write these maps: !(zbrush/zbsr-10.png) 11. Going into Rhino, we can import the .OBJ mesh and apply a simple *Conductor* material with a *Complex IOR* node (set to *Type = Metal - Gold*) assigned to the *Reflectance* attribute. !(zbrush/zbsr-11.png) 12. Going to *Object Properties > Bella* we can set *Subdivision* to 2 to smooth the mesh. !(zbrush/zbsr-12.png) !(zbrush/zbsr-13.png) 13. Next, assign a Bella *File Texture* to the Conductor's *Reflectance*, and set the path to the map we created using ZBrush Polypaint. !(zbrush/zbsr-14.png) !(zbrush/zbsr-15.png) Here we can see the subtle differences in roughness on the large fields, as well as the smoother areas where we painted black on the raised regions, for example to simulate that those regions have been buffed or naturally worn smooth. Much more detail may be added here than we are using in this simple tutorial. !(zbrush/zbsr-16.png) 14. Next assign a new *Normal Map* to the Conductor's *Bump/Normal* attribute and set the path to the normal map ZBrush has created. !(zbrush/zbsr-17.png) !(zbrush/zbsr-18.png) Here we can see much surface detail already, just from the normal map. Note that enabling *Interpolation = Bicubic* can help smooth things if we have not exported extremely large maps from ZBrush. !(zbrush/zbsr-19.png) 15. Lastly, go to *Object Properties > Bella*, assign a new *Displacement Map*, and set its path to our EXR displacement map from ZBrush. !(zbrush/zbsr-20.png) !(zbrush/zbsr-21.png) Again here we have enabled *Interpolation = Bicubic* in the displacement map to smooth it a bit. And without making any further adjustments, we have our render-time subdivided, displaced, normal-mapped, and roughness-mapped ring. !(zbrush/zbsr-22.png) Different choices could have been made at various steps along the way, but this should give a general idea about how we can paint geometry & maps in ZBrush without needing to use extremely heavy meshes.