Digital Art Zone

 
   
2 of 5
2
Scripted multipass render to add outlines?
Posted: 19 September 2012 06:06 AM   [ Ignore ]   [ # 16 ]
Addict
Avatar
RankRankRankRank
Total Posts:  2760
Joined  2007-12-25

Yes, that’s the kind of script I had in mind. Is there a reference example you can point me to?

(Octane, eh? I should look into that sometime….)

 Signature 

Shop Zigraphix @ DAZ3D

Profile
 
 
Posted: 23 September 2012 08:46 PM   [ Ignore ]   [ # 17 ]
Member
Rank
Total Posts:  116
Joined  2004-10-23

Works great for DS4.5 too

Image Attachments
Newoctane4.5_.jpg
Profile
 
 
Posted: 24 September 2012 11:51 AM   [ Ignore ]   [ # 18 ]
Addict
Avatar
RankRankRankRank
Total Posts:  2760
Joined  2007-12-25

Cool, I hope to test it tonight. :)

 Signature 

Shop Zigraphix @ DAZ3D

Profile
 
 
Posted: 03 November 2012 08:10 PM   [ Ignore ]   [ # 19 ]
Addict
Avatar
RankRankRankRank
Total Posts:  2760
Joined  2007-12-25

Back again.

The part I’m trying to work on now is the render script. What I need to do is combine the features of two existing scripted renderer examples: “Outline” and “Standard Example.” I need to create an ordinary render as in Standard Example, but I also need to insert a pass to render the outlines and save to a file in a known location.

I thought this was probably something I could manage, but I’m having trouble. I pulled up both sets of scripts in jEdit and used diff to locate the points of departure. I decided to use the Standard Example as the base for my new script and essentially copied all the parts of Outline that were different into Standard Example, then created a new pair of directories (in Scripts and in Resources) and saved. (Actually I moved the originals out of the way so I wouldn’t have to fuss with paths).

Edited—initially I had a crash on render problem, but in looking through the logs, I found the variable I hadn’t defined correctly. Now my outline files are created correctly, and my normal render occurs… but it doesn’t seem to produce the correct final render. I’m looking through the logs again… I suspect I’ll have another question. But no point in leaving all this code in the thread.

 Signature 

Shop Zigraphix @ DAZ3D

Profile
 
 
Posted: 03 November 2012 08:13 PM   [ Ignore ]   [ # 20 ]
Addict
Avatar
RankRankRankRank
Total Posts:  2760
Joined  2007-12-25

Argh. Never mind.

 Signature 

Shop Zigraphix @ DAZ3D

Profile
 
 
Posted: 04 November 2012 09:39 AM   [ Ignore ]   [ # 21 ]
Addict
Avatar
RankRankRankRank
Total Posts:  2760
Joined  2007-12-25
ketthrove - 10 September 2012 03:02 PM
zigraphix - 02 September 2012 02:02 PM

2 - Assuming I have a Shader Mixer camera that can layer the images, and it is the active camera, how do I assign the parameters of that camera to the appropriate filenames generated previously from within this script? Or should I not be using Shader Mixer, and instead write that part of the imager in the script?

Thanks in advance for any pointers!


2. For this:
  a. Name the images properties you want to set for your camera something original using the
  properties tab in shader mixer
b. Get the active camera
c. Call find property with your original name from step a
d. Set the image on the property
e. Render final pass

Ok, I think this is where I’m stuck now. My script generates outlines, I save them to a known location, my camera can take in the outline file and composite it over the render… but when I’m using the Scripted Render, it doesn’t seem to use the active camera, so the composition doesn’t occur (and neither do any of the other camera effects).

If I can get this to work, we can have cameras that do this without modifying the materials of any object in the scene:

 

Image Attachments
tooncam.jpg
 Signature 

Shop Zigraphix @ DAZ3D

Profile
 
 
Posted: 04 November 2012 11:10 AM   [ Ignore ]   [ # 22 ]
Addict
Avatar
RankRankRankRank
Total Posts:  2760
Joined  2007-12-25

It seems to me that the bit of code I need to modify is in this section:

// Set up the camera
Renderer.cameraProjectCamerasizeRender.widthsizeRender.height );

// Set up crop window
Renderer.setCropWindowoHandler );

// Set up the display(s)
Renderer.doDefaultDisplay();

// Set the background color; from the active viewport
if( BackDrop && BackDrop.getTexture()  ){
 Renderer
.renderBackDropBackDropsizeRender.widthsizeRender.height );
else // TODO: Check for DzShaderCamera & DzBrickCamera with Imager
 
var oViewportMgr MainWindow.getViewportMgr();
 var 
oViewport oViewportMgr.getActiveViewport();
 var 
o3DViewport oViewport.get3DViewport();
 
 
aTokens "color bgcolor" ];
 
//aParams = [ [o3DViewport.background.red, o3DViewport.background.green, o3DViewport.background.blue] ];
 
aParams [ o3DViewport.background ];
 
Renderer.riImager"background"aTokensaParams );

In particular, I suspect the ” // TODO: Check for DzShaderCamera & DzBrickCamera with Imager” notation is referencing what I need. However, I’ve been through the DAZ Script 2 documentation for DzShaderCamera and DzBrickCamera and I don’t see a way to get the active camera there. I suspect the global variable “Camera” has this information, because the line to set up the camera uses this variable, as do many other parts of the code, and they all work correctly. Shadow maps are correctly generated, for example. I think somehow the first line in this code snippet needs to be changed to reflect that I’m using a Brick Camera. I’m just not finding the documentation of how to do that….

 Signature 

Shop Zigraphix @ DAZ3D

Profile
 
 
Posted: 04 November 2012 02:46 PM   [ Ignore ]   [ # 23 ]
Addict
Avatar
RankRankRankRank
Total Posts:  2760
Joined  2007-12-25

I finally came across a reference to getActiveCamera in the DS3 documentation for DzBasicCamera:

file:///C:/Program Files/DAZ 3D/DAZStudio3/docs/DAZScript/class_dz_basic_camera.html#272ecc3f25e54ecb4efb2e3ef6e26b6c

I added this to the beauty pass:

//get the active camera
 
var oViewportMgr MainWindow.getViewportMgr();
 var 
oViewport oViewportMgr.getActiveViewport();
 var 
o3DViewport oViewport.get3DViewport();
 var 
oActiveCamera o3DViewport.getActiveCamera();

// Set up the camera
Renderer.cameraProjectoActiveCamerasizeRender.widthsizeRender.height ); 

and now when I render, I get the “outlineid” version of the render, rather than rendering through the camera as defined in the scene. This looks the same as it would in the scripted renderer example for outlines.

Of course, this isn’t the render I want. At a guess, the “active camera” changes during the outline render pass, and I need to switch it back to the original camera after that completes….

 

Image Attachments
toon_outline_color_ids.jpg
 Signature 

Shop Zigraphix @ DAZ3D

Profile
 
 
Posted: 04 November 2012 08:25 PM   [ Ignore ]   [ # 24 ]
Addict
Avatar
RankRankRankRank
Total Posts:  2760
Joined  2007-12-25

I have now confirmed that the “Standard Example” does not support Brick Cameras. Without an updated set of docs for the scripting dev kit that includes the brick functions, I think I’m stuck. :( Here’s hoping someone out there has a version of a scripted renderer that supports a Shader Mixer “Brick Camera.”

 Signature 

Shop Zigraphix @ DAZ3D

Profile
 
 
Posted: 05 November 2012 06:26 PM   [ Ignore ]   [ # 25 ]
Addict
Avatar
RankRankRankRank
Total Posts:  2760
Joined  2007-12-25

I found a reference to some DS 4.5 scripting here:

http://docs.daz3d.com/doku.php/public/software/dazstudio/4/referenceguide/scripting/start

Unfortunately, it’s not complete yet. The Object Index hasn’t been written. A sample script explains how to render to the viewport here:

http://docs.daz3d.com/doku.php/public/software/dazstudio/4/referenceguide/scripting/api_reference/samples/rendering/render_to_viewport/start

but this seems to have been written specifically for the regular 3Delight renderer, not the scripted renderer, and I can’t see how to integrate any of what I see here with the script bits I already have. In particular, there is a call that seems to be about getting the active camera, but I’m not convinced it gets a brick camera—I tried inserting it in a couple of places in my code and I still just get a render from the viewpoint of the current camera, but ignoring the brick-based camera shader I’ve defined. :(

Supposing that there is some analogy between DzBrickCamera and DzShaderCamera, do I maybe want to use something like this?

file:///C:/Program Files/DAZ 3D/DAZStudio3/docs/DAZScript/class_dz_shader_camera.html#cc29733a690be9cee94bf379bf0e54e4

e.g.

oCamera.setDisplay(nametypemodeaTokensaParams

Or maybe it should be Camera, not oCamera:

These methods affect the camera at render-time, and are provided for the render-time script only. Calling these functions from outside the render-time script will have no effect. A global transient variable named Camera - refering to the current DzShaderCamera - exists for the duration of the render-time script. Referencing this variable from outside a render-time script will result in an error.

I’m sorry to keep asking these clueless questions, but without docs, I’m kind of stuck. The brick shaders being a particular feature of Daz Studio, I don’t think any other references are likely to help, are they?

 Signature 

Shop Zigraphix @ DAZ3D

Profile
 
 
Posted: 06 November 2012 01:17 PM   [ Ignore ]   [ # 26 ]
Member
Rank
Total Posts:  62
Joined  2004-12-26

The oCamera is the current camera the user is looking through in the viewport.  If you want to check if the camera is a spesific subclass you can use inherits(“classname”).  If you want to use a particular brick camera or shader camera you need to ensure it in the scene and then find it with the methods on Scene, or instruct the user to insert it and make it active before rendering.

Profile
 
 
Posted: 06 November 2012 05:54 PM   [ Ignore ]   [ # 27 ]
Addict
Avatar
RankRankRankRank
Total Posts:  2760
Joined  2007-12-25
ketthrove - 06 November 2012 01:17 PM

The oCamera is the current camera the user is looking through in the viewport.  If you want to check if the camera is a spesific subclass you can use inherits(“classname”).  If you want to use a particular brick camera or shader camera you need to ensure it in the scene and then find it with the methods on Scene, or instruct the user to insert it and make it active before rendering.

Ok, all that is good to know, but when I am looking through a brick camera in the viewport, and then I use the Standard Example with the scripted renderer, the render uses some kind of default camera from that angle, not the brick camera that should be the active camera. Is this a bug? Or is there something I need to do to let the script know that the active camera is a brick camera?

 Signature 

Shop Zigraphix @ DAZ3D

Profile
 
 
Posted: 06 November 2012 07:08 PM   [ Ignore ]   [ # 28 ]
Addict
Avatar
RankRankRankRank
Total Posts:  2760
Joined  2007-12-25

Steps to reproduce:

Start DS4.5

add some content to the scene, e.g. a sphere

open Shader mixer tab

File->New Shader, select Camera

Add Imager root, Toon brick, Backdrop brick (see attached screenshot)

Create camera

Select camera

Render - note toon shading (see tooncamtest1)

Open Render Settings tab

Select Render Engine: Scripted 3Delight

Select Render Script: Standard Example

Render - note that there is no toon shading (see tooncamtest2)

If you switch back to the non-scripted 3Delight renderer, the toon functionality of the Shader Mixer camera returns.

So, is this a bug in the scripted renderer function, or does the script need to explicitly support a Shader Mixer camera?

Image Attachments
SimpleToonCam.pngtooncamtest1.jpgtooncamtest2.jpg
 Signature 

Shop Zigraphix @ DAZ3D

Profile
 
 
Posted: 07 November 2012 09:45 AM   [ Ignore ]   [ # 29 ]
Member
Rank
Total Posts:  62
Joined  2004-12-26
zigraphix - 06 November 2012 05:54 PM
ketthrove - 06 November 2012 01:17 PM

The oCamera is the current camera the user is looking through in the viewport.  If you want to check if the camera is a spesific subclass you can use inherits(“classname”).  If you want to use a particular brick camera or shader camera you need to ensure it in the scene and then find it with the methods on Scene, or instruct the user to insert it and make it active before rendering.

Ok, all that is good to know, but when I am looking through a brick camera in the viewport, and then I use the Standard Example with the scripted renderer, the render uses some kind of default camera from that angle, not the brick camera that should be the active camera. Is this a bug? Or is there something I need to do to let the script know that the active camera is a brick camera?

Sorry I forgot to mention something, you need to edit this section:

// Set the background color; from the active viewport
if( BackDrop && BackDrop.getTexture()  ){
 Renderer
.renderBackDropBackDropsizeRender.widthsizeRender.height );
else // TODO: Check for DzShaderCamera & DzBrickCamera with Imager
 
var oViewportMgr MainWindow.getViewportMgr();
 var 
oViewport oViewportMgr.getActiveViewport();
 var 
o3DViewport oViewport.get3DViewport();
 
 
aTokens "color bgcolor" ];
 
//aParams = [ [o3DViewport.background.red, o3DViewport.background.green, o3DViewport.background.blue] ];
 
aParams [ o3DViewport.background ];
 
Renderer.riImager"background"aTokensaParams );

You need to remove it or move it before “Renderer.cameraProject..” if you are tying to keep the imager as specfied in the Brick/Shader camera

Oh and I missed remembered “Camera” not “oCamera” is the current camera.

Profile
 
 
Posted: 07 November 2012 01:06 PM   [ Ignore ]   [ # 30 ]
Addict
Avatar
RankRankRankRank
Total Posts:  2760
Joined  2007-12-25
ketthrove - 07 November 2012 09:45 AM

You need to remove it or move it before “Renderer.cameraProject..” if you are tying to keep the imager as specfied in the Brick/Shader camera

Oh and I missed remembered “Camera” not “oCamera” is the current camera.

Ok, I’ll try that tonight. Thanks!

 Signature 

Shop Zigraphix @ DAZ3D

Profile
 
 
   
2 of 5
2