Phantom Scatter P R O C E D U R A L Software user manual I N S T A N C I N G T E C H N O L O G Y Author / owner Company Manual version Software version Publication date Copyright Guus Thissen Phantom Technology 4.4 1.6 b 19-12-2014 ©2014 Table of contents Introduction An introduction to Phantom Scatter. Page 6 01 02 03 1 of 37 Support Information about system requirements, OBJ model support and troubleshooting. Page 7 Licensing Information about obtaining a license, the End-User License Agreement (EULA) and activating the Phantom Scatter software. Page 8-10 Setup Short tutorial on how to setup Phantom Scatter correctly before running the software for the first time. Page 11 Table of contents Graphical user interface (GUI) Information about the panels in the GUI and the individual functions. Page 11-12 Functions & controls A list of all the available functions. Every function gets a brief explanation. Also contains a list of the key bindings used in Phantom Scatter. Page 13-18 AREA-scatter Step-by-step tutorial to help you create your first AREA-scatter. Page 19-21 Advanced AREA-scatter Tutorial on how to do multiple scatter objects on a single material's geometry Page 22-23 04 05 06 07 2 of 37 Table of contents 08 09 10 PER TRI-scatter Tutorial to help you understand per-triangle mode for precise instancing. Page 24-25 3D AREA-scatter A short tutorial that shows you how to make a 3D AREA-scatter. Page 26 RAY-scatter (rain effect) A tutorial that shows you how to create a rain effect in your scene using the RAYscatter type. The rain contains instances for raindrops in the air and instances for rain impacts on the scene itself. They are created as individual scatter objects. Page 27 11 3 of 37 CURVE-scatter A tutorial on how to deal with CURVE-scatter objects. For advanced users. Page 28-29 Table of contents Custom object placement using CURVE-scatter Apart from scattering along curves, CURVE-scatter can be intelligently used to create individual instance objects in your scene, for example to easily place chairs or other objects. 12 Page 29 BRUSH-scatter Tutorial to help you understand brush scatter mode for hand-painted instancing. Page 30 Software changelog A list that contains the changes to the software seperated per major update. Page 31-36 13 14 Final word A word about the software in general and the development team. Page 37 4 of 37 5 of 37 Introduction Proper instancing can be a frustrating and time consuming process. If you're a SketchUp user such as myself, it takes a lot of effort and time to get proper instancing in your model. Instance data has to be exported one component type at a time. It clogs up the model, increasing model size and slows down the PC. It's also incredibly time consuming. I've come up with a tool to tackle these problems and provide an easy instancing solution to your workflow. To make this work, I'm developing a program called Phantom Scatter. Phantom Scatter is a program that can procedurally generate instancing data for your scenes in Octane Render. This can be very useful for creating organic looking vegetation in a matter of seconds, but also static repeated models such as cars and streetlights. Phantom Scatter nestles itself in your workflow between OBJ export and Octane Render. It can scan the contents of your OBJ model and generate the instancing data for that OBJ scene in a matter of seconds. Automatizing instancing data like this doesn't just save time, but thanks to all the available features it looks amazing too! Guus Thissen Phantom Scatter lead developer 6 of 37 01 | Support System requirements Troubleshooting Phantom Scatter has the following system requirements: Should you run into any problems, please contact me at [email protected]. • The software is designed for the Microsoft Windows platform. It's tested and working on Windows Vista, Windows 7, Windows 8 and Windows 8.1. It will probably also run on Windows XP should you want to. • A problem in the ArchiCAD OBJ exporter can cause it to export incorrect normals in the OBJ. When this happens, try exporting your model into Google SketchUp first. Then export it as OBJ using TIG’s plugin. • An active internet connection is required so the software can validate your registration. This only happens when the program is launched. • If you possibly get the error “MSVCP100.dll is missing”, it means you need to install the Microsoft Visual C++ 2010 Redistributable package. • The software is designed to cooperate with Octane Render. This software is obviously required to make usage of Phantom Scatter. link: http://www.microsoft.com/enus/download/confir mation.aspx?id=5555 • OBJ model support OBJ models should work flawlessly as long as the faces that make up the model are triangles (3 vertices/face) and/or quads (4 vertices/face). Faces with 5 vertices or more are not supported. If your OBJ models have 5 vertices or more, try triangulating them. I am trying to deliver broad OBJ support. If your modeling package creates OBJs that are not compatible, please contact me. Users have tested and tried with the following modeling packages: ArchiCAD, Blender, SketchUp, Rhino, Maya, Lightwave, DAZ, Artlantis, 3DS Max, Revit, Softimage and ZBrush. 7 of 37 DirectX9.0c is required. You will need to install this if you run into problems. Newer DirectX versions are not backwards compatible. Installing DirectX9.0c will not interfere with your other DirectX installations. An application always automatically picks one to use. link: http://www.microsoft.com/nlnl/download/details.aspx?id=34429 • I've received a report where the software did not get data loading/writing permissions from Windows. I suspect Microsoft UAC (User Account Control) was blocking it. I recommend to run the software as administrator when this happens, that should solve it. 02 | Licensing Obtaining a license A license can be obtained for the price of € 20* and will last 365 days (1 year). A license is valid for a single PC. Once you've activated the software, the software will be locked to that PC. As long as you have a valid license, you will always get the latest version of the software. To request a license, please contact me at the following e-mail address: [email protected] You will be given a link to PayPal, where you can make the transaction. As soon as I see the transaction has been completed, I will send you a reply to your e-mail with your personal username, registration key and download link to the software. Activating the Phantom Scatter software When first running the Phantom Scatter software, you will be asked to enter your username. This will be the e-mail address you requested the license with, unless I specifically give you another username (this can be requested). Enter your username and press OK. A new window pops up, requesting your registration key. Enter your registration key (I recommend copypasting it) and press OK. The software should now be registered and ready for use! By downloading and/or using the software, you agree to the End-User License Agreement (EULA). The EULA can be read on the next two pages of this manual. Should you upgrade your PC, then you can contact me for a new license key. Your old key will be deactivated. Please check the system requirements before buying. *excluding government taxes 8 of 37 End-User License Agreement (EULA) 9 of 37 10 of 37 03 | Setup Creating the library Before the program can be used, it has to be setup correctly. 1. Go to your C:/ drive. 04 | Graphical user interface (GUI) Please check out figure 04.1 on the next page. (1) Preview size Your 'C:/Phantom Scatter' folder should contain the following files: When dealing with AREA and TRI scatter previews, preview instances are only calculated on triangles up to a defined range. This value is set by the preview size. Clicking the arrow down or the arrow up will change the value. If you have a lot of instances going on, decreasing the preview size might improve performance. The preview size is only relevant inside the preview window. When exporting, every triangle in the OBJ will get checked for instance calculations. • Phantom Scatter.exe (2) Performance information • EULA.txt (End-User License Agreement) • [optional] A folder called 'library'. Phantom Scatter will create this folder itself if it doesn't exist yet. This is where all your material/scatter object settings will be saved. Shows the current performance of the program. If performance drops below 30 fps, consider disabling MOTION BLUR, AA and/or VSYNC. 2. Create a folder called 'Phantom Scatter'. Phantom Scatter runs sandboxed, which means the library needs a fixed location. 3. Unzip the contents of 'Phantom Scatter.zip' and place them in the created folder. • [optional] The 'tutorial' folder. This folder includes the files which are used during the tutorial in this manual. figure 03.1: Example setup of Phantom Scatter. In this example image the 'tutorial' folder is not included. The smaller your scene, the faster the program can work. So if you export a seperate OBJ for Phantom Scatter with just the geometry you want to scatter on, you can dramatically increase performance. (3) Camera position The camera position is shown in meters. The indicators show the relative position on the model. The reset button brings the camera back to the origin (0, 0, 0). (4) Scatter source/range preview This UI element only shows when dealing with AREA scatters. When designing such scatter, it is important to know how the source and range settings react. It is best displayed with a 3D heightmap. The source controls the heights of the map. The range determines which heights of the map are used for the scatter. A range min of 0% and a range max of 100% would use the entire heightmap for the scatter. (5) 3D Map The 3D map displays the OBJ you are currently viewing from above. You can use it to move around the scene with more oversight. The scale of the map is determined by the preview size setting, see (1) Preview size. figure 03.1 11 of 37 1 3 2 5 4 6 7 (1) Preview size, (2) Performance information, (3) Camera position, (4) Scatter source/range preview, (5) 3D map, (6) Compass, (7) Toolset. figure 04.1 (taken from Phantom Scatter 1.5) (6) Compass The compass allows you to navigate to the origin of the scene (0,0,0). (7) Toolset This is where you operate the functions. Phantom Scatter works with scatter modes. Every scatter type gets its own mode. When selecting a mode (the MODE setting in the module MAIN) the toolset will change to that scatter type. An AREA-scatter will have different settings compared to a RAYscatter. 12 of 37 05 | Functions & controls MAIN MODE (all modes) Determines the type of scatter object that you want to work on and/or export. DIRECTORY (all modes) Allows you to export the CSV files either alongside the OBJ, or to a directory of your choosing. The directory chosen will be saved to the options file. MOTION BLUR (all modes) Determines the use of per-pixel motion blur in the 3D view. Greatly enhances visual quality. Performance will take a hit. Note: due to WinAPI being the worst, I can't make it snap to the current export directory for your convenience. ANTI ALIASING (all modes) Determines the use of anti-aliasing in the 3D view. Makes 3D geometry very smooth to look at. Performance will take a hit. VERTICAL SYNC (all modes) Determines the use of vertical synchronisation. GPUs do not run at the same speed as monitors. Enabling this makes the GPU wait for the next monitor update. Prevents screen tearing. Performance will take a hit. VISUAL THEME (REMOVED / OBSOLETE) Choose a colorset that is used in the interface. WIREFRAME (all modes) Displays the wireframe of the imported OBJ, which helps to identify the OBJ structure. Especially useful when dealing with BRUSH-scatter. I highly recommend putting ANTI ALIASING on 4X when this feature is set to ON. IMPORT / EXPORT IMPORT SCALE (all modes) Determines the factor that scales an OBJ when it is imported in Phantom Scatter. Being a factor, it means a value of 1 means the OBJ would be imported at 100 % of its size. A factor of 0.001 means the OBJ is imported at 0.1 % of its size. Important: Phantom Scatter is designed to work with meters. That means 1 unit equals 1 meter. IMPORT OBJ (all modes) This allows you to browse to your OBJ file of choice and import it. Please note that an OBJ's content is analaysed on import so it might take a while, depending on the size of the OBJ. 13 of 37 ARCHICAD FIX (all modes) This is a fix for ArchiCAD users who want to use PER-TRIANGLE scatter. Prevents downward facing instances from exporting. EXPORT CURRENT (all modes) Initiates the exporting sequence. A CSV file will be generated for all scatter objects of the current mode, that are enabled for the currently selected material. The CSV file(s) will be placed in the same folder as the imported OBJ. Please be careful with AREA and PER-TRI scatters: All respective CSV files will be overwritten. This can cause problems when a scatter object is enabled for multiple materials. In that case use EXPORT ALL for the final scene. EXPORT ALL (AREA, PER-TRI, CURVE) Exports CSV data for all materials in the imported OBJ. All respective CSV files will be overwritten. PROJECTS PROJECT (CURVE, BRUSH) Determines the current active project. Scatter objects are shared among all projects, but actual placed curves in the scene are project-specific. CREATE BY NAME (CURVE, BRUSH) Allows you to create a new project by entering its name. Must be unique. RENAME (CURVE, BRUSH) Allows you to rename the currently selected project. Must be unique. Be careful that this also goes for hidden scatter objects. DELETE (CURVE, BRUSH) Deletes the currently selected project. This is permanent. Deleting a project will also delete the project's contents (the placed curves in the scene). MATERIALS MATERIAL (AREA, PER-TRI) Determines the currently selected material. Materials that exist within the OBJ are marked with *. CREATE BY NAME (AREA, PER-TRI) Allows you to create a new material by entering its name. Must be unique. CREATE FROM OBJ (AREA, PER-TRI) Allows you to create a new material by selecting one from the list. The list contains all detected materials inside the imported OBJ except the materials that are already inside Phantom Scatter. Must be unique. RENAME (AREA, PER-TRI) Renames the currently selected material. Must be unique. RENAME FROM OBJ (AREA, PER-TRI) It has come to my attention that not everyone always carefully names their materials (for AREA and PER-TRI scatter objects). For that purpose I'm now introducing the tool 'rename from OBJ', which allows you to simply pinpoint a face in the scene, and the selected material will be renamed to the material of the face you just selected. DELETE (AREA, PER-TRI) Deletes the currently selected material. This is permanent. SCATTER OBJECTS SCATTER (all modes) Determines the currently selected scatter object. Scatter objects that are enabled for the currently selected material are marked with *. Only scatter objects of a particular mode are shown here. For example if your MODE is set to AREA SCATTER, only scatter objects of that type are shown. SCATTER ENABLE (AREA, PER-TRI) Determines whether the currently selected scatter object is enabled for the currently selected material. SCATTER DISABLE (RAY) With this function you can prevent RAY scatter objects from scattering on certain materials. Useful when you don't want RAY impacts on your grass for example. This is only applicable when 'place on face' is set to 'on'. PREVIEW VISIBILITY (AREA) This function allows you to hide very demanding scatters from the preview (but still export them). PREVIEW RADIUS (BRUSH) PREVIEW HEIGHT (BRUSH) Brush instances can be previewed using cone indicators. To use this, set PREVIEW RADIUS as well as PREVIEW HEIGHT greater than 0 m. CREATE BY NAME (all modes) Allows you to create a new scatter object by entering its name. Must be unique. Be careful that this also goes for hidden scatter objects. DUPLICATE (all modes) Duplicates the currently selected scatter object. You must enter an unique name. Be careful that this also goes for hidden scatter objects. RENAME (all modes) Allows you to rename the currently selected scatter object. Must be unique. Be careful that this also goes for hidden scatter objects. DELETE (all modes) Deletes the currently selected scatter object. This is permanent. PROPERTIES OCTAVE START (AREA, BRUSH) The starting octave of the Perlin noise algorithm. You should play around with different octave start/end and seed values to get an understanding of the kinds of patterns you can achieve. Values accepted 1-7. Must always be lower than the OCTAVE END. OCTAVE END (AREA, BRUSH) The ending octave of the Perlin noise algorithm. You should play around with different octave start/end and seed values to get an understanding of the patterns you can achieve. Values accepted 1-7. Must always be higher than the OCTAVE START. 14 of 37 RANDOM OCTAVES (AREA, BRUSH) Sets a random octave start and octave end. • At 50%, the source/range pattern defines a space of 5 x 5 = 25 m². SEED (AREA, RAY, BRUSH) Sets a specific seed number. The randomness of the scatter is entirely based on this value. • At 100%, the source/range pattern defines a space of 10 x 10 = 100 m². • At 200%, the source/range pattern defines a space of 20 x 20 = 400 m². RANDOM SEED (AREA, RAY) Sets the seed to a random value. 3D (AREA) Enables the use of true 3D Perlin noise scatter. Very useful in cases where the regular (2D, planebased) scatter won't be suitable. This is more demanding so only use it when necessary. RANGE MIN (AREA) Set the minimum amount of the range. Values between 0-100%. You should play with different settings to get an understanding of how this works. A minimum range of 0% and a maximum range of 100% means full range. A good range is essential to a good scatter. Try a minimum range of 40% and a maximum range of 60% for example. RANGE MAX (AREA) Set the maximum amount of the range. Values between 0-100%. You should play with different settings to get an understanding of how this works. A minimum range of 0% and a maximum range of 100 % means full range. A good range is essential to a good scatter. Try a minimum range of 40% and a maximum range of 60% for example. RANDOM RANGE (AREA) Sets a random range min and range max. POPULATION (AREA, RAY) Defines the amount of instances are placed over 100 m² of space when there is full range. When making grass this amount should be very high. When making trees this amount should be low. It totally depends on what you want. When working with a very high amount I suggest you keep the size of the preview area down to prevent possible performance issues. AREA SCALE (AREA, BRUSH) Determines the scale the octave/range pattern is mapped to inside the scene. This is useful to scale the noise pattern to be smaller (such as small gardens) or larger (large tree forests). 15 of 37 DRAW DISTANCE (AREA, RAY, BRUSH) This feature is incredibly useful to decrease rendertime and system load. It determines the maximum distance from the Phantom Scatter camera in which scatter objects are exported. Position your Phantom Scatter camera to match your Octane Render camera and then export your scatter. To create a smooth transition, instances will be gradually scaled down towards 0% over the defined draw distance. That way you won't have a clearly visible edge. Enter a value of '0' to disable draw distance for that scatter object entirely. COLLISION RADIUS (AREA, CURVE, BRUSH) Upon export, instances are put in the 'collision pool', where instances check their radius against each other to check if they will be removed or not. Useful to prevent instance overlap. When 'collision radius' is set to '0', collision checking is ignored and objects will not be entered in the 'collision pool'. So basically you would want to enter trees and bushes in the collision pool so they don't intersect each other, but for grass you would disable it as it doesn't really matter (doing this for grass would be extremely, extremely demanding anyway). SCALE MIN (all modes) The minimum scale for an instance in %. When instances are scattered they are given a random scale between the minimum and maximum scale. SCALE MAX (all modes) The maximum scale for an instance in %. When instances are scattered they are given a random scale between the minimum and maximum scale. NORMAL ON FACE (AREA, BRUSH) This determines whether to set the normal of the instance perpendicular to the triangle it’s on. This feature is useful to for example let grass curve along with the terrain. XY-MARGIN (RAY) The margin around the imported OBJ model in the XY-plane that defines the plane the rays are casted from. The smaller the steepness of the rays you're casting, the higher this margin should be. RANDOM Z-ROTATION (AREA, PER-TRI, CURVE, BRUSH) Determines whether to have random rotation (360°) around the Z-axis. Useful to for example let trees be randomly rotated when scattered. Z-MARGIN (RAY) The margin above the imported OBJ model in the Z-axis that defines the plane the rays are casted from. A high value means the rays are casted from a greater height. RANDOM Z-VARIATION (AREA, PER-TRI, CURVE, BRUSH) The angle to randomly yaw the instance compared to it’s normal. Great for creating even more diversity. X-AXIS ROT MIN (RAY) The minimum angle around the X-axis that the rays have. Rays that go straight down have an angle around the X-axis of 90 degrees. When rays are casted they are given a random angle around the X-axis between the minimum and maximum. RANDOM XY-FLIP (AREA, PER-TRI, CURVE, BRUSH) Determines whether to randomly flip (mirror) the instances over their X-axis and/or Y-axis. Useful to create even more diversity. RANDOM XY-VARIATION (AREA, PER-TRI, CURVE, BRUSH) The angle to randomly pitch or roll the instance compared to it’s normal. Great for creating even more diversity. This function was previously called 'random xyrotation' but has been renamed for consistency with function 'random z-variation'. VARIANTS (all modes) When set to 2 or higher, CSV instances will be divided among the variants on export. '_variantX' will be added to CSV filenames, where X is the variant index. So basically this creates multiple CSV files for the same scatter object, allowing you to link different models to them, to create richer diversity. WEIGHTED SCATTER (AREA, BRUSH) Turning this on will enable a modifier will make the random minimum/maximum scale take the power of the source (perlin noise) into account. ROTATION CORRECTION (PER-TRI, CURVE) Allows you to correct the angle around the Z-axis the instance is oriented. X-AXIS ROT MAX (RAY) The maximum angle around the X-axis that the rays have. Rays that go straight down have an angle around the X-axis of 90 degrees. When rays are casted they are given a random angle around the X-axis between the minimum and maximum. Y-AXIS ROT MIN (RAY) The minimum angle around the Y-axis that the rays have. Rays that go straight down have an angle around the Y-axis of 90 degrees. When rays are casted they are given a random angle around the Y-axis between the minimum and maximum. Y-AXIS ROT MAX (RAY) The maximum angle around the Y-axis that the rays have. Rays that go straight down have an angle around the Y-axis of 90 degrees. When rays are casted they are given a random angle around the Y-axis between the minimum and maximum. PLACE ON FACE (RAY) Determines whether the instances are placed on the impact faces or in mid-air along the paths of the rays. NODE OFFSET (CURVE) When placing a node on the geometry of the scene, this value creates an offset along the normal of the chosen position. For example if this value is set to 1 m, selecting a position on a flat plane will actually place the node 1 m above it. 16 of 37 POPULATION (2) (CURVE) Warning: this property is different from the 'population' property that deals with AREA and RAY scatter objects. This value determines the amount of instance placing attempts along the curve over a distance of 10 m. INTERVAL (CURVE) As opposed to randomly scattering along the curve with population, you can also place instances along a fixed interval, starting at the origin of the curve. This is particularly handy when you would want to place streetlights for example. You can freely combine population and interval if you wish to do so. NORMAL ON LINE (CURVE) This property has 3 different options and determines how instances are oriented on the curve: Upward Instances will be oriented straight upwards no matter what. Slope Instances will be oriented upwards but will follow the curve. Random Complete random along the curve. POPULATION (3) (BRUSH) Determines the amount of instance placing attempt within 1 m² of the mouse 3d-cursor when using the function BRUSH MULTIPLE. CURVES CREATE BY NODES (CURVE) Allows you to place 2 nodes to form a curve. When placing a node, you can hover the mouse over an existing node to snap to that node, or you can click on a position on the geometry in the scene. COPY (CURVE) Copy the current select of bezier curves into computer memory. PASTE (CURVE) Paste the copied bezier curves in the scene. Copy/paste is ideal for quickly duplicating curves or transferring them into another scatter object and/or project. 17 of 37 DELETE (CURVE) Delete the curves that belong to the current selection of nodes. STRAIGHTEN (CURVE) Turn the current selection into straight lines. This does not affect the begin and end nodes of a curve, but it does change the 2 control nodes. FLIP ORIGIN (CURVE) Allows you to flip the origin of the curve. Useful when using the 'interval' property, because the very first instance starts at the origin of the curve. ALIGN TO CONTROL NODE (CURVE) Align the current selection of control nodes in the same orientation as the control node you choose. OPPOSE TO CONTROL NODE (CURVE) Allows you to align the current selection of control nodes to the opposite orientation as the control node you choose. Ideal for connecting curves seamlessly. ALIGN X (RED AXIS) (CURVE) Align the X component of nodes to an X point on the geometry in the scene or an existing node. ALIGN Y (GREEN AXIS) (CURVE) Align the Y component of nodes to an Y point on the geometry in the scene or an existing node. ALIGN Z (BLUE AXIS) (CURVE) Align the Z component of nodes to an Z point on the geometry in the scene or an existing node. POSITION TRANSFORM TOOL (CURVE) Position the transform tool on a position on the geometry of the scene or snap to an existing node. SELECT ALL (CURVE) Select all nodes in the scene (of the currently active scatter object) SELECT NONE (CURVE) Deselect all nodes in the scene (of the currently active scatter object). INVERT SELECTION (CURVE) Select all nodes that are not selected. Deselect all nodes that are selected (both of the currently active scatter object). BRUSH TOOLS CONTROLS BRUSH MULTIPLE (BRUSH) Allows you to spray-paint multiple instances directly on the geometry of your scene. The amount of instances painted is determined by the property POPULATION. Use the mousewheel (or the up/down arrow keys) to change the size of the brush. Hit the escape button while painting to cancel the painted instances from being place in the scene. ACCESSING FUNCTIONS Buttons in the interface are always pressed with the left mouse button. Press the ESC button to close a menu. BRUSH SINGLE (BRUSH) Allows you to place a single instance on the geometry of your scene. BRUSH SINGLE (CUSTOM Z) (BRUSH) Allows you to place a single instance on the geometry of your scene, while also being able to determine a custom Z-rotation of the instance. The Z-rotation can be modified by using the mousewheel or arrow keys while placing or moving the instance (using MOVE SINGLE). Note that the property NORMAL ON FACE will be ignored when placing instances using this function. CAMERA Use WASD to move around on the XY-plane. Use QE to make the camera go up or down. Hold SHIFT to speed up movement. Hold CTRL to slow down. Hold the right mouse button to look around. FULLSCREEN MODE Press SPACEBAR to toggle fullscreen on/off. MENU SCROLLING When you notice a little white triangle in the menus, it indicates you can scroll in the list to display other available features. To do this, hover your mouse inside a module and then use the mouse scroll wheel or arrow keys to go up or down. ERASE MULTIPLE (BRUSH) Allows you to erase instances from the scene that use the currently enabled scatter object as their host. Use the mousewheel (or the up/down arrow keys) to change the size of the eraser. MOVE SINGLE (BRUSH) Allows you to re-locate an existing BRUSH scatter instance. When pinpointing using your mouse custor, the nearest instance (in 3d-space) will be selected and colored red. When this instance has been placed using BRUSH SINGLE (Z-CUSTOM), you can use the mousewheel (or the up/down arrow keys) to change the z-rotation aswell. Hit the escape button while moving to cancel moving entirely. The selected instance will not change. MATCH PROPERTIES (BRUSH) Allows you to change the host of exising BRUSH scatter instances to the currently selected scatter object. Use the mousewheel (or the up/down arrow keys) to change the size of the brush. 18 of 37 06 | AREA-scatter Scene understanding It is important that you setup your scenes correctly if you want to do proper scattering. It is of vital importance that you keep organised and understandable material names cross-project. That will save you a lot of time! The figure below, figure 06.2, shows a screenshot of our scene, 'tutorial_scene.obj'. The scene contains geometry with 4 different materials: • • • • A material called 'grid_lightgray' A material called 'grid_yellow' A material called 'grid_green' A material called 'grid_purple' The figure to the right, figure 06.1, shows a screenshot of the model we're going to scatter around, called 'tutorial_tallgrass.obj'. Objective The objective of this tutorial is to scatter 'tutorial_tallgrass.obj' across the surface of material 'grid_yellow'. IMPORTANT | Notice how the grass model is placed right at the origin in the scene. This will make sure the model is correctly placed when scattering it around! figure 06.1 figure 06.2 19 of 37 Setup Open up Phantom Scatter. Make sure MODE is set to AREA SCATTER. Model First we're going to load in the OBJ mesh. Go to IMPORT / EXPORT › IMPORT OBJ. Browse to the file 'tutorial_scene.obj'. I made a little mistake in exporting this model. Phantom Scatter has backside culling to improve performance. I accidentally oriented the base plane downward. This can affect the normals of objects placed on that base plane. (Move the camera below the model and look up to see it). It does not influence this tutorial. Try to move around the scene. Use WASDQE to move the camera. Hold the right mouse button to look around. I'm going to assume you're on a beast PC right now. Let's go to MAIN › MOTION BLUR and turn it ON. Try looking around again! Hold the SHIFT key to speed up movement. Hold the CTRL key to slow down movement. Just like a first person shooter. Maybe I'll add some enemies and guns. That'd be awesome. Please ignore the tree and grass models in the scene, I forgot to take them out. The models we're going to scatter are in seperate OBJ files. What needs to be done next is create a material inside Phantom Scatter. This material must be named similarly to the material name inside your OBJ you want to scatter on. That way Phantom Scatter can detect exactly where you would want to scatter, and where you would not. If you're smart, you'll work with a material database you use cross-project, in both Phantom Scatter and in your modeling tool. That will save you a lot of work in time, because you will be able to re-use your scatter settings in multiple projects. So if you have a new project, you could use the same grass scatter you used in another. I know it saved me a lot of time during my 3D work, I hope it will for you aswell. Material Go to MATERIALS › CREATE FROM OBJ. A list will pop up with the available materials in the OBJ. Select 'grid_yellow'. Notice how the color on some of the geometry in the scene has changed. This means that these triangles belong to the currently selected material. Which is the material you just created. Scatter object Time to create an actual scatter object. Go to SCATTER OBJECTS › CREATE BY NAME and enter a nice and clean name. I chose 'tutorial_tallgrass'. You will notice how there are not popping up any preview instances on the geometry in the scene. This is because the newly created scatter object has not been enabled to be used on the currently selected material yet. Let's do this right away so you can see what you're doing. Go to SCATTER OBJECTS › SCATTER ENABLE and put it to ON. Your glorious creation should now look like the one displayed in figure 06.3. figure 06.3 (taken from Phantom Scatter 1.5) 20 of 37 Scatter settings The total setup should look like figure 06.5. Let's define some settings so the scatter looks somewhat interesting. Now click on the Geometry Group and it should start rendering the scene with the scatter objects on it. It should look like figure 06.7. Notice that the render kernel is set to pathtracing in my screenshot. Remember that the Z-axis is up! • Go to PROPERTIES › SEED and enter a value of 97474. • Go to PROPERTIES › RANGE MIN and enter a value of 55. • Go to PROPERTIES › RANGE MAX and enter a value of 70. • Go to PROPERTIES › POPULATION and enter a value of 4000. • Go to PROPERTIES › SCALE MIN and enter a value of 60. • Go to PROPERTIES › RANDOM XY-ROTATION and enter a value of 20. When a Scatter needs to be refreshed, use the little button next to the 'load' button, with the green curved arrow on it. That will re-load the CSV file. So what you can do while designing is finetune the scatter in Phantom Scatter, hit either EXPORT CURRENT or EXPORT ALL and then hit the refresh button in Octane on a Scatter node to see the result. Protip: when you have a lot of nodes to refresh, simply save the scene in Octane, then go to File › Recent Files and then select your scene. Octane will reload the scene and will also load all the Scatter nodes. CSV export Let's export some actual scattering data. Go to IMPORT / EXPORT › EXPORT CURRENT. This will generate CSV data only for the currently selected material. Take a look at the tutorial folder in Windows. It should now contain a file called 'tutorial_tallgrass.csv'. It is named like this because the scatter object created was called 'tutorial_tallgrass'. CSV files are always exported to the same folder as your OBJ. Rigging scatter data in Octane figure 06.5 Almost got a first real result. Open up Octane Render. Create a Geometry Group. Load up 'tutorial_scene.obj' and rig it up to the Geometry Group. Now load up 'tutorial_tallgrass.obj'. Create a Scatter node and load up tutorial_tallgrass.csv. Notice the little button in figure 06.6. Rig the Scatter node up to the Geometry Group. figure 06.6 21 of 37 figure 06.7 07 | Advanced AREA-scatter Objective The objective of this tutorial is to scatter 'tutorial_tallgrass.obj' across the surface of 'grid_purple' and 'tutorial_tree.obj' over 'grid_green' as well as 'grid_purple'. 'tutorial_tree' has turned to OFF. But we want it enabled for this material aswell, so set it to ON. Now go to SCATTER OBJECTS › SCATTER and select 'tutorial_tallgrass'. Turn SCATTER ENABLE to ON so this scatter object is also used on 'grid_purple'. Scatter settings If you closed Phantom Scatter between the previous tutorial and this one, import the OBJ 'tutorial_scene.obj' again. Make sure the scatter object 'tutorial_tree' is selected. Setup • Go to PROPERTIES › RANGE MIN and enter a value of 0. The range is now 0-100 %, which means the Perlin noise is ignored effectively and the scatter object will be placed randomly over the entire surface. • Go to PROPERTIES › POPULATION and enter a value of 50. • Go to PROPERTIES › NORMAL ON FACE and make sure it is set to ON. What this means is that the scattering instances will be placed perpendicular to the surface. • Go to PROPERTIES › RANDOM XY-ROTATION and enter a value of 10. Materials We need two new materials. Go to MATERIALS › CREATE FROM OBJ and select 'grid_purple'. Do the same for 'grid_green'. Scatter objects Create a scatter object called 'tutorial_tree'. Select the material 'grid_green'. Go to SCATTER OBJECTS › SCATTER ENABLE and set it to ON. Next we're going to enable both scatter objects for material 'grid_purple'. Go to MATERIALS › MATERIAL and select 'grid_purple'. You will notice that the SCATTER ENABLE property for scatter object 22 of 37 CSV export / rig in Octane Quote from the previous tutorial: This time we're going to export scatter data for two materials at the same time: materials 'grid_green' and 'grid_purple' When a Scatter needs to be refreshed, use the little button next to the 'load' button, with the green curved arrow on it. That will re-load the CSV file. This time scatter objects are shared among multiple materials so to get correct CSV files we will need to export them all at once. Go to IMPORT / EXPORT › EXPORT ALL. After processing, it should have renewed the file 'tutorial_tallgrass.csv' and created a new file called 'tutorial_tree.csv'. Protip: when you have a lot of nodes to refresh, simply save the scene in Octane, then go to File › Recent Files and then select your scene. Octane will reload the scene and will also load all the Scatter nodes. Alright, now go back to Octane Render again. Go to the Geometry Group node and tell it to add another input pin. Load up 'tutorial_tree.obj' and rig it to a Scatter node. Load up 'tutorial_tree.csv' for this Scatter node. Rig the Scatter node up to the Geometry Group node. Your rigging setup should now look like figure 07.1. Since 'tutorial_tallgrass' is also scattered over 'grid_purple' now, the Scatter node that's linked up to 'tutorial_tallgrass.csv' needs to be renewed. Select this Scatter node and press on the 'Renew' button in Octane Render. All done! Your result should look like figure 07.2. Notice how the trees follow the curve of the material 'grid_purple'. Extra assignment: see if you can make the trees point upward and make the grass follow the curve of 'grid_purple' instead! figure 07.1 IMPORTANT | Similarly to 'tutorial_tallgrass.obj', the model 'tutorial_tree.obj' also has its geometry right at the origin (0,0,0) of the scene. This will make sure the model is correctly placed when scattering it around! figure 07.2 figure 07.3 23 of 37 08 | PER-TRI (per-triangle) scatter Objective The objective of this tutorial is to scatter 'tutorial_car.obj' on the triangles of 'tutorial_scene2.obj' using per-triangle scatter. A screenshot of this scene can be seen in figure 08.1. This is the same scene as 'tutorial_scene.obj', with the addition of the orange triangles, whose material is called 'tutorial_orange'. Those are the triangles we want to scatter our car model on. Understanding per-triangle scatter figure 08.1 vertex With per-triangle scatter, each triangle gets a single instance placed on it. The instance is placed at the center of the triangle, as seen in figure 08.2. This center is determined by the intersection of the dotted lines, which go from vertex to edge midpoint. The orientation of the instance is determined by the length of the triangle's edges. Phantom Scatter will orient these instances depending on how the triangle is pointing. In the example of figure 08.3, the triangle is pointing towards the right. The edges with length a are greater than length b, so the edge at length b is seen as the 'back' of the triangle. triangle center edge midpoint figure 08.2 length Material Create a new material called 'tutorial_orange'. leng Scene Import the OBJ 'tutorial_scene2.obj' into Phantom Scatter. Move around the scene a bit. You will notice the backfaces of OBJ geometry is now drawn. This is a performance decision. th b Setup length figure 08.3 Scatter object The car scatter object has to be of the type PERTRI, not of the type AREA. What we need to do is set Phantom Scatter into the PER-TRI mode. Go to MAIN › MODE and select PER-TRI SCATTER. The tools menu will have adjusted itself to the current mode and will only show the relevant functions to you. Create a scatter object called 'tutorial_car'. Turn SCATTER ENABLE to ON so the scatter object is activated for the material 'tutorial_orange'. 24 of 37 figure 08.4 a a Scatter settings Rig in Octane Make sure the scatter object tutorial_car is selected. We only need to export instances for 'tutorial_orange' now. Go to IMPORT / EXPORT › EXPORT CURRENT. • Go to PROPERTIES › RANDOM Z-ROTATION and make sure it is set to OFF. Random Z-rotation is useful for randomized instances like trees but for a precisely placed object like a car it should not be enabled. That way the cars will be oriented towards the pointing direction of the triangles. • Go to PROPERTIES › RANDOM XY-FLIP and make sure it is set to OFF. Random XY-flip is useful for randomized instances like trees but for a precisely placed object like a car it should not be enabled. We don't want it to be randomly mirrored all over the place in this case. • Rig up the scene just like the previous tutorials. You will notice that 'tutorial_scene2.obj' will have those orange triangles floating around in the scene. Since they were used solely to generate the scatter data, they have to be disabled. We do this by selecting the material tutorial_orange inside Octane and then setting it's opacity to 0. Octane Render can have problems with this so what I suggest is to create a seperate OBJ from your modeling tool to do the scattering on. Then inside Octane use your real OBJ scene combined with the scattering data. figure 08.4: Scene rigged in Octane. figure 08.5: The final result. Notice that the render kernel is set to pathtracing. Go to PROPERTIES › ROTATION CORRECTION and set it to a value of 180. This function is useful to correct the rotation of the model you're scattering over the Z-axis. In this case it's necessary, otherwise a value of 0 would suffice. figure 08.5 25 of 37 09 | 3D AREA-scatter Objective The objective of this tutorial is to scatter 'tutorial_tallgrass.obj' on the triangles of 'tutorial_frame.obj' using a 3D AREA-scatter. Understanding 2D versus 3D AREA-scatter Regular AREA-scatter works only on a 2D-plane basis. While this is great for terrains and other (semi-) flat surfaces, it doesn't work in all cases. That's why a true 3D AREA-scatter is needed. It is ideal to scatter naturally on any kind of 3D shape. It is also useful when scattering on multiple different floors, where you want every floor to be different. Setup Scene Import the OBJ 'tutorial_frame.obj' at this point you are probably wondering why there aren't any scatter instances appearing on the sides of the framework. They are actually there, but they are all standing up so they are overwritten by the surfaces of the triangles. (This has to do with the Z-buffer in DirectX) • Go to PROPERTIES › NORMAL ON FACE and make sure it is set to ON. • Go to PROPERTIES › RANDOM XYROTATION and enter a value of 20. • Go to IMPORT / EXPORT › EXPORT CURRENT to let it generate the CSV file. Finalize Load up 'tutorial_frame.obj' in Octane. Use the CSV file to scatter 'tutorial_tallgrass.obj' around. Be careful, the scatter file is called 'tutorial_tallgrass_3d.csv' this time! Material Create a new material called 'framework'. Scatter object Set the MODE back to AREA SCATTER. Create a scatter object called 'tutorial_tallgrass_3d'. Enable it for the material 'framework'. • Go to PROPERTIES › POPULATION and set it to 25000. Move the camera around a bit and let it generate the scatter preview. You will notice how the scatter pattern seems the same along the Z-axis (up-axis). • Go to PROPERTIES › 3D and make sure it is set to ON. It will behave the same as a regular AREA-scatter object, except it's in true 3D now (and a bit more demanding). • Go to PROPERTIES › RANGE MIN and enter a value of 50. • Go to PROPERTIES › POPULATION and enter a value of 500. • Go to PROPERTIES > SCALE MIN and enter a value of 50. figure 09.1 26 of 37 10 | Rain effect using RAY-scatter Objective • The objective of this tutorial is to create a rain effect in a scene. We will be using the RAY-scatter type. This scatter type is NOT related to materials, because it is a 'global' effect. For that reason, there is just one export function for this type of scatter object: EXPORT CURRENT. Scatter object 2/2 Create a scatter object called 'rain_impact'. This scatter object will be used for the rain particles that impact the scene. The rain effect will consist of two RAY-scatter objects. For rain particles in the air we will use 'rain_drop.obj'. For rain particles that hit the ground we will use 'rain_impact.obj'. Understanding RAY-scatter A RAY-scatter object can be interpreted as particle system. Rays are casted from the sky, downward onto the model. Phantom Scatter will test these rays against the triangle data, and will automatically detect collisions. You can choose to either scatter along the paths of these rays or the impact points on the triangles of the model. Setup Scene Import the OBJ 'rainscene.obj'. This time we need to do is set Phantom Scatter into the RAY SCATTER mode. Go to MAIN › MODE and select RAY SCATTER. The tools menu will have adjusted itself to the current mode and will only show the relevant functions to you. Scatter object 1/2 Create a scatter object called 'rain_drop'. This scatter object will be used for the rain particles in mid-air. • Go to PROPERTIES › POPULATION and enter a value of 15000. Go to PROPERTIES › SCALE MIN and enter a value of 50. • Go to PROPERTIES › POPULATION and enter a value of 2500. • Go to PROPERTIES › SCALE MIN min and enter a value of 50. • Go to PROPERTIES › PLACE ON FACE make sure it is set to ON. Finalize First select the scatter object 'rain_drop'. Go to IMPORT / EXPORT › EXPORT CURRENT. A file called 'rain_drop.csv' will be created. It may take a little while because when exporting a RAY-scatter object, raycasting calculations will be done. Select scatter object 'rain_impact'. Export this one too. Open up Octane Render. I've created a scene for you already, called 'tutorial_rainscene.csv'. Load it up. Ignore the message about a missing texture. Import the CSV files into the scatter nodes and that's it! I've noticed myself that the focus point of the camera is very important when rendering rain particles. Use the AF tool to select a focus point and then try playing with the aperture setting inside your camera. That way you can make really close rain particles be a bit blurry. It actually kind of gives them a sense of speed too! figure 09.2 (taken from Phantom Scatter 1.5) 27 of 37 11 | CURVE-scatter Introduction The nature of CURVE scatter objects is different from AREA, PER-TRI and RAY scatter objects. A CURVE scatter object contains properties, but is not actually placed in the scene. Instead, you place 'child objects' of it in the scene. These are not procedural like the other scatter types, but placed by you, the end user. This means you will have different curves placed in each project (or none at all, ofcourse). That's why you must manage your different projects using the 'projects' module. Project management My recommendation is that you leave the standard project (called 'default_project') as it is. It gives you a nice testing arena where you can try things out without messing with your actual projects. Curves you place in the scene will be saved automatically to the corresponding project. If you delete a project, all the placed curves in that project will be lost. Phantom Scatter will remove lines with length of 0 m automatically. Your curve is now placed! This particular tool will operate indefinately unless you specifically exit from it (notice the arrows in the tooltip information forming a continuous loop). To exit at any time from any tool, press the ESCAPE button. Do this now. Understanding the curve Take a look at your curve. You should see some instances placed on it already. But it's not really a curve is it? It's a straight line! This is because of the curve's control nodes. Move the camera closer to the curve. Three different types of nodes can be recognised: Filled circle These nodes determine the begin and end of the curve. Dot inside circle These nodes are the control nodes of the curve and will determine the trajectory of the curve. Let's first load up an OBJ scene. For the sake of the tutorial, load up 'tutorial_frame.obj'. This model is very suitable. Empty circle These nodes can be selected to instantly select all 4 nodes that make up a curve. Go to MAIN › MODE and make sure it is set to CURVE SCATTER if you haven't done so already. Node selection We're going to place a curve. Go to CURVES › CREATE BY NODES. This function is a tool. That means that on the bottom-left corner on the screen, tooltip information will be displayed to guide you in your process. You will also notice that the mouse cursor will have changed to a targeting crosshair. When this happens, you can either: Node selection is very important when dealing with curves. It works similarly to Real-time Strategy games. Simply click and hold the left mouse button to create a selection box. Drag the mouse to the position you want to go, then let go of the left mouse button. Nodes inside the selection box will be selected. Be careful with selecting empty circle nodes. Curve creation • Click on a position on the geometry in the scene. • Snap to an existing node in the scene by hovering the mouse over one. Click on a position in the scene. You will have placed the first node. Notice how the accent in the tooltip information has changed. Now you must place the second node. Select another location with the mouse. You can freely move the camera if you wish. Do not snap to the first node. This will create a curve with a length of 0 m. 28 of 37 When just dragging a new selection box, the previous selection will be gone. However, you can press & hold the SHIFT button while doing so to add the nodes in the selection box to the current selection. You can also press & hold the CTRL button to subtract nodes from the current selection. When selecting nodes, you will notice a 3D gizmo popping up at the center position of the selection. This is called the Transform tool. Whenever the current selection changes, the Transform tool will be placed at the center of that selection. Transform tool The transform tool allows you to move or rotate the current selection of nodes around. X, Y, Z Click and drag one of these to translate the selection over the X-, Y- or Z-axis. RX, RY, RZ Click and drag one of these to rotate the selection over the X-, Yor Z-axis. Origin Select one of them (2). Now go to CURVES › OPPOSE TO CONTROL NODE. Select the control node of the other curve that you want to oppose to (3). What this means is that Phantom Scatter will take the distance of the node-control node (4), then orient that vector similarly to the control node you chose. When you first increase this distance, and then use OPPOSE TO CONTROL NODE, you can create more fluent curves. It's entirely up to you. Take a look at figure 11.1. 3 1 2 Click and drag this to move the selection to a new position in the scene. When dragging this the mouse will raytrace the scene so you can chose a 3D position of your liking. 4 Creating a connected line Let's create a second line, connected to the first line. Go to CURVES › CREATE BY NODES again. Now instead of clicking a position on the geometry in the scene, hover the mouse to an existing node and then place the node at that same position. Select one of the nodes of the newly created line and go to CURVES › DELETE. Now let's do it another way. Go to CURVES › CREATE BY NODES and use it to place a curve in the scene, but don't snap to the existing nodes. Now use the selection box to select either the begin or the end node of the curve. You will see the Transform tool pop up. Click & hold the origin of the transform tool. Now drag it towards the begin or end node of the first curve you created. Let the transform tool snap and release the left mouse button. The nodes have connected, but the line now has an actual curve to it. That's because the control nodes didn't move. Select one of the nodes of the newly created curve and go to CURVES › STRAIGHTEN. The control nodes will be placed so that the line is straight again. figure 11.1 (taken from Phantom Scatter 1.5) 12 | Custom object placement using CURVE-scatter THIS FUNCTION HAS BECOME OBSOLETE WITH THE INTRODUCTION OF BRUSH-SCATTER. It's possible to abuse the CURVE-scatter system to place projectspecific individual instances like chairs or street lights for example. Simply place some curves and make sure POPULATION is set to 0 and INTERVAL is set to a value that far exceeds the lengths of the curves you will place. I used 100 m. That way only a single instance per curve will placed. When doing this, I recommend to put NORMAL ON LINE to UPWARD, RANDOM Z-ROTATION to OFF and RANDOM XY-FLIP TO OFF too. Making the curves continuous You have two curves placed, but it'd be nice if they formed a continuous line. This is done by opposing the control nodes. Determine the position of the 2 connecting nodes (1) . Each curve will have a control node near it. figure 12.1 (taken from Phantom Scatter 1.5) 29 of 37 13 | BRUSH-scatter Introduction Visual indentification BRUSH-scatter allows you to paint instances on OBJ geometry in your scene. Unlike other scatter objects, they are not tied to materials in your scene. You are free to place them where you like. This makes them ideal for placing plants, but I would recommend to still use AREA-scatter for things like lawn grass, which require an even distribution to look good. When placing BRUSH-scatter objects, they will show up as regular instances (a little line). Only when you use the function BRUSH SINGLE (CUSTOM Z), will instances display a little green line to display their orientation. Project management Similarly like CURVE-scatter objects, BRUSHscatter objects tie in with the PROJECT system. This allows you to create different projects, and have differently placed BRUSH-scatter instances in each of them. Note that the scatter object PROPERTIES are cross-project, which means that if you put some effort in creating a proper setup, you will save yourself a ton of time. For example, you can create a scatter object for a nice green shrub, and be able to place that in all of your projects with ease. Placing instances All you have to do to place instances is select the scatter object type you want to place, and then select a tool from the BRUSH TOOLS (see page 1718). Don't forget that the POPULATION property of a BRUSH scatter object determines how many instances will be placed when using the function BRUSH MULTIPLE. Interface performance When you paint or erase BRUSH scatter instances, they will be saved automatically in the Phantom Scatter folder in your C:/ drive, inside the respective project folder. When you want to scatter an insane amount of instances using BRUSH-scatter, I highly recommend to equip your PC with an SSD drive so loading/saving happens extremely fast. Furthermore, the greater the complexity of your OBJ scene, the more demanding it will be to place instances -- the brush tools do raycasting on your geometry to determine where instances will be placed. So if you can remove certain unnecessary elements from the OBJ that you import in Phantom Scatter, that will really help. 30 of 37 To help you distinguish geometry in your scene, I've introduced the feature WIREFRAME as a graphical option. This will outline the geometry so can clearly see what you're looking at. I highly recommend to put the ANTI ALIASING function to 4X when using this, so the 3D view of your scene is very nice to look at. Enabling ANTI ALIASING means your GPU will have to work a little harder, but this is only the case when the Phantom Scatter interface refreshes. As an Octane Render user you probably have a very powerful GPU anyway so it won't really matter performance-wise. 14 | Software changelog Phantom Scatter 1.0 (BETA 5.1) Phantom Scatter 1.1 • The entire interface has been redesigned to be more intuitive and faster to work with. Productivity is greatly increased. • Fixed a memory leak where file reading wasn't closed after import. • • When creating a new material, you will now be prompted to enter the name. The new material will be automatically selected in the material list. • Added a function to be able to duplicate the currently selected material. AREA-scatter objects now have the ability to calculate in true 3d. That means it's now possible to create scatters on all kinds of surfaces, even vertical combined with horizontal ones. This is also useful when scattering on multiple floors where you'd want every floor to have a different looking scatter. • Added a function to be able to duplicate the currently selected scatter object. • • Added a function to be able to import material names from an OBJ so you don't have to manually type them. The AREA-scatter calculations are now interpolated from the source instead of using solely the range image -- scatter quality at very high density/scale is now drastically improved. • Internal improvements in memory management. • • Added visual-only scrollbars to help navigate easier in the Materials and Scatter objects lists. You can now zoom out more in the 3D preview window. • The function 'Export scatter CSV' has been renamed to 'Export all AREA / TRI CSV'. Rewrote the GUI engine to be a lot less demanding. • Added the ability to see multiple AREA scatter objects in the same preview window. New scatter object type: RAY. Cast rays down onto the scene geometry and detect impact points. Useful to create rain. • New export function: Export single RAY CSV. • RAY-related functions: XY-margin, Z-margin, X-axis min, X-axis max, Y-axis min, Y-axis max, Place on face. • To prevent performance issues, the amount of instances in the preview window has been limited to 10000. The window will display a message when the limit is hit. • A new all-in-one matrix formula, combined with improved exporting speed, makes up for a speed boost for AREA-scatter instances for up to +600% speed • • • Fixed a problem with XY-rotation. • Small improvement in the 0-1 curve on the scatter source. • Improvements to perlin noise-generation speed. • New file system: loading/saving is much faster but older library files are now obsolete. • When renaming a material, it won't break the link between material and scatter objects anymore. • Wrote a new software manual, which includes new tutorials. Phantom Scatter 1.2 31 of 37 Phantom Scatter 1.3 • Fixed a slight rendering bug that occured when selecting scatter objects. • New preview mode that allows you to fly through your OBJ scene and preview your scatter(s). Works for AREA-type scatter objects. Select and hold the left mouse button in the OBJ preview view. Move the mouse to look around. Use the WASD keys to move the camera over the XY-plane. Use the Q and E keys to move over he Z axis. Hold the SHIFT-button to move faster. Hold the F key to enable the wireframe. • Rotating the camera in the preview window now locks the mouse in place when rotating (and hides the mouse cursor) » New buttons to define the scatter preview drawing distance in OBJ preview: 10 m, 25 m, 100 m. preview that gives more insight in how the scatter is constructed. • Interface addition: new 3D map allows you to move through your OBJ model with more oversight. • Interface addition: compass allows you to locate the 3D origin more easily. • Phantom Scatter is now fully oriented around the imported OBJ; the square preview window is now obsolete and removed. • Use WASD + mouse + SHIFT + CONTROL to fluently move around your OBJ. Left mouse button is used to select things in the interface. Right mouse button is used to look around with the camera. • The maximum distance for the preview inside the OBJ scene can now be altered (now called preview size): this will also influence the size of the 3D map, for your convenience. • PER-TRI and RAY scatters can now also be previewed inside the OBJ scene. Note that with RAY-scatters, the actual raycasting on the OBJ will only be done when exporting. • The preview window now displays either the currently selected size or scatter drawing distance. • Fixed a very rare issue where incredibly small triangles caused a memory problem, resulting in a crash. • Fixed a problem that occured when importing quads inside OBJs. • New OBJ loader: 50-100X faster performance. • The software window can now be resized/maximized. • Ability to enable per-pixel motion blur. • Ability to enable anti-aliasing (OFF, 2X, 4X) • Ability to enable vertical synchronization. • Ability to choose a visual theme (different colors). • Fixed a problem when selecting a scatter object in the scatter object list. • 'Import names from OBJ' is replaced by 'create from obj' allowing you to create a material by selecting a desired material from the imported OBJ's materials. Phantom Scatter 1.4 • Brand new Next Generation interface. Major overhaul to improve user experience and prepare for future functionality. • Interface elements are now contextual and change depending on the selected scatter mode. This means that when 'area scatter' mode is selected, 'per-tri' and 'ray' scatter objects will be hidden. This should keep everything more tidy and organized. • Interface windows 'source' and 'range' are replaced by a 3D (heightmap-like) scatter 32 of 37 • For broad compatability, material names may only contain the characters: 0-9 A-Z a-z _ • New function 'random octaves'. • New function 'random range'. • Function 'random xy-rotation' is now fixed and can add even more variety to your scatters. • Exporting is changed and now handled by the functions 'export current' and 'export all' for AREA as well as PER-TRI scatter objects. RAY-scatter objects are covered by 'export current'. Note that these functions are contextual to which scatter mode is active and what scatter object is selected. This is a lot cleaner than the method in used in 1.3. • • • • • • For the RAY scatter preview, when 'place on face' is disabled, instances will come up as small particles. Otherwise they will come up as straight lines. Note that with RAYscatters, the actual raycasting on the OBJ will only be done when exporting. To ensure good performance, drawing of Backfaces is disabled on the imported OBJ. The preview instances will be calculated when the camera stops moving. Move around as you wish and when you stop, a new preview will be calculated automatically. If you're using Phantom Scatter and Octane Render simultaneously, it's a good idea to let Windows, Octane Render and Phantom Scatter run on one GPU, and let Octane Render use the other GPUs available to do the CUDA calculations. Hit the spacebar to make the program go fullscreen. Personally this is my preferred way to use the program. Phantom Scatter 1.5 • Added feature 'preview visibility', allowing you to hide very demanding scatters from the preview (but still export them). • Added feature 'draw distance' for AREA scatter objects. Instances will gradually scale down to 0% at the maximum defined range. Instances beyond that will not be exported. A setting of 0 will cause no draw distance to be calculated at all. • Unactive menus will now fade black. • Right click to exit menu has been removed; instead Escape is now used to exit from menus as well as tools. • HUD element added to provide tooltip information. • Fixed the colors and orientation of the 3 origin axis. • Decreased camera field of view a little. • The HUD now shows when the preview is done computing. • Fixed memory leak issues in PER-TRI and AREA scatter objects. • New scatter object: CURVE scatter, a scatter type that allows you to place custom curves in the scene on a per-project basis. • New PROJECTS module allows you to manage your different projects. Every project will store curve positioning seperately. • Added function 'create by nodes', allowing you to place 2 nodes to form a curve. Can be placed on geometry or snap to existing nodes. • Added function 'select all', allowing you to select all nodes in the scene. • Added function 'select none', allowing to to deselect all nodes in the scene. Fixed something in the EULA, just incase. 33 of 37 • Added function 'invert selection', allowing you to select unselected nodes, and unselect selected nodes. • Added function 'straighten', allows you to turn the current selection of curves into straight lines. • You can now rectangle-select nodes by clicking and dragging the left mouse button. Similar to a realtime strategy game. • Added function 'align to control node', allows you align the current selection of control nodes in the same orientation as the control node you choose. • Hold the SHIFT-key while making a rectangle-selection to add nodes to the existing selection. • Added function 'oppose to control node', allows you to align the current selection of control nodes to the opposite orientation as the control node you choose. Ideal for connecting curves seamlessly. • Added a popup that displays a message if a problem occurs. • Added scatter object property 'variants' for AREA, PER-TRI, RAY and CURVE scatter objects. When set to 2 or higher, CSV instances will be divided among the variants on export. '_variantX' will be added to CSV filenames, where X is the variant index. • It has come to my attention that not everyone always carefully names their materials (for AREA and PER-TRI scatter objects). For that purpose I'm now introducing the tool 'rename from OBJ', which allows you to simply pinpoint a face in the scene, and the selected material will be renamed to the material of the face you just selected. • Added 'draw distance' property for RAYscatter objects. • Added 'seed' property for RAY scatter objects, with the function 'seed' to set a custom seed. • Added function 'random seed' for RAY scatter objects. • Fixed a problem with material renaming. • Added module 'materials' to RAY scatter objects. • • Hold the CTRL-key while making a rectangle-seleciton to remove nodes to the existing selection. When one or more nodes are selected, the Transform tool will appear. Use the clickable axis/rotation/origin elements. • Transform tool: click and hold one of the axis elements to drag along a respective axis (X, Y, Z). • Transform tool: click and hold one of the rotation elements to rotate along a respective axis (RX, RY, RZ). • Transform tool: click and hold the origin element to drag the Transform tool to a new position on the geometry, wherever you want it. Takes into account the 'node offset' property of the currently selected scatter object. Also has the ability to snap to existing nodes. • Added function 'position transform tool', allows you to position the transform tool on a position on the geometry or an existing node. • • • Added function 'copy', allows you to copy the current select of bezier curves into computer memory. Added function 'paste', allows you to paste the copied bézier curves in the scene. Copy/paste is ideal for quickly duplicating curves or transferring them into another scatter object and/or project. Added function 'delete', allows you to delete the current selection of curves. 34 of 37 • Added function 'scatter disable' to exclude scatter objects on certain materials. This is only applicable when 'place on face' is set to 'on'. • • Fixed division by 0 error for RAY-scatter objects. The orientation angle of RAYscatter objects is now limited between 45135. This prevents problems and still provides enough orientation freedom. Phantom Scatter 1.6 (most recent) • • Added function 'directory', allowing you to export the CSV files either alongside the OBJ, or to a directory of your choosing. The directory chosen will be saved to the options file. Note: due to WinAPI being the worst, I can't make it snap to the current export directory for your convenience. Added function 'random z-variation' for AREA, PER-TRI and CURVE scatter objects. • Added function 'weighted scatter' for AREA scatter objects. Turning this on will enable a modifier will make the random minimum/maximum scale take the power of the source (perlin noise) into account. • Added functions 'align x', 'align y' and 'align z' to align the nodes of CURVE scatter objects to a point on the geometry in the scene or an existing node. • • • Fixed information text for function 'scatter'. • You will now be able to set max 20 variants instead of max 10 for function 'variants'. • Added the foundation for a new scatter type: BRUSH-scatter. The BRUSH scatter is used to custom-paint instances in your scene, wherever you want. You are able to spray instances randomly as well as place individual ones. The BRUSH scatter objects have support for weighting based on perlin noise (octaves). • Added the following properties for BRUSH scatter: 'population', 'area scale', 'draw distance', 'collision radius', 'scale min', 'scale max', 'normal on face', 'random z-rotation', 'random z-variation', 'random xy-flip', 'random xy-variation', 'variants', 'weighted scatter', 'octve start', 'octave end', 'random octaves', 'seed, 'random seed'. • Added the following tools for BRUSH scatter: 'brush multiple', 'brush single', 'brush single (custom z)', 'erase multiple', 'move single', 'match properties'. • You will now be given a confirmation popup message whenever you export CSV. It will also display how many instances have been exported. • Upgraded popup message graphics. • Upgraded 3D graphics quality of the interface. • You will now be given a popup message that warns you when trying to add a scatter object with a name that already exist in another scatter type. This also applies to material and project names. Function 'random xy-rotation' has been renamed to 'random xy-variation'. • Added function 'flip origin' for CURVE scatter objects, allowing you to flip the origin of the curve. Useful when using the 'interval' property, because the very first instance starts at the origin. Added function 'collision radius' for AREA and CURVE scatter objects. Upon export, instances are put in the 'collision pool', where instances check their radius against each other to check if they will be removed or not. Useful to prevent instance overlap. When 'collision radius' is set to '0', collision checking is ignored. The problem where the software crashed when clicking in screen 2 when the software was fullscreen in screen 1 has been fixed. 35 of 37 • Add function 'archicad fix'. Apparently ArchiCAD cannot export single sides faces (placed for PER-TRI scatter). This function prevents downward pointing instances from exporting, effectively removing the unnecessary doubles. • Fixed the host property of curve objects when renaming their host scatter object. • Deleting a scatter object instance will delete all brush instances that use this scatter object as host in all of your projects. • Removed function 'visual theme', to be replace by a single cohesive and representative style. • Added feature 'wireframe', this displays the wireframe of close-up geometry in your OBJ model. Helpful for precise BRUSHscattering. The drawing distance of the wireframe ties in with the preview draw distance setting. 36 of 37 Final word I hope that Phantom Scatter technology provides a quick & easy instancing solution in your rendering workflow. My aim is to provide a high quality product. The software is designed to exceed in areas where Octane Render and modeling tools fall short. To fill in a gap in the workflow. The development team consists of three people: Guus Thissen (lead developer), Jack McCallum (DLL support) and Zachary Reedy (DRM support). If you have any suggestions or feature requests, please contact me at [email protected]. Guus Thissen Phantom Scatter lead developer 37 of 37
© Copyright 2024 ExpyDoc