Fuge Posted July 12 Share Posted July 12 Hey Guys... I don't see Object selectors for a viewport's Indirect Light and Ambient occlusion.. on the developer site.. but I know.. that doesn't always mean it doesn't exist 🤭 Anyone figure out, or know of undocumented selectors or some other means of setting these two? TIA... Dave Quote Link to comment
MullinRJ Posted July 13 Share Posted July 13 Dave, I haven't tried these, but give them a whirl. They look promising. SetObjectVariableBoolean(LYRhand, 150, True/False); { Layer Ambient On/Off } SetObjectVariableReal(LYRhand, 151, ###); { Layer Ambient Brightness - 0-100?; you'll have to figure out the range. } SetObjectVariableBoolean(VPhand, 1302, True/False); { Ambient Occlusion On/Off } SetObjectVariableReal(VPhand, 1303, ###); { AO Strength - 0.0-1.0? or 0-100?; you'll have to figure out the range. } SetObjectVariableReal(VPhand, 1304, ###); { AO Size - you'll have to figure out the values. } HTH, Raymond 1 Quote Link to comment
MullinRJ Posted July 13 Share Posted July 13 @Fuge, REDO... Now that I have played with it a little, I'm going to revise my previous guess. With ObjectVariables 1014 and 1015, I can read and write to both Viewport variables: VP_Amb := GetObjectVariableBoolean(VPhand, 1014); { Viewport Ambient } VP_Amb_Bright := GetObjectVariableReal(VPhand, 1015); { Viewport Ambient Brightness } SetObjectVariableBoolean(VPhand, 1014, True/False); { Viewport Ambient On/Off } SetObjectVariableReal(VPhand, 1015, 0.37); { Viewport Ambient Brightness - 0.0-1.0 } However, I can read and write to ObjectVariable 1302. AO_On := GetObjectVariableBoolean(VPhand, 1302); { Ambient Occlusion } SetObjectVariableBoolean(VPhand, 1302, True/False); { Ambient Occlusion On/Off } But, I can only read ObjectVariables 1303, and 1304. AOStrength := GetObjectVariableReal(VPhand, 1303); { Ambient Occlusion Strength - 0-100 } AOSize := GetObjectVariableReal(VPhand, 1304); { Ambient Occlusion Size } If I change the values for "Ambient Occlusion Strength" and "Ambient Occlusion Size" in the Lighting Options dialog box, I can read my manual changes, but if I try to set the values by script, the settings do not take. More on the "Indirect Lighting" setting in the next post. HTH, Raymond Quote Link to comment
MullinRJ Posted July 13 Share Posted July 13 Here's a partial map of the Object Variable numbers for the Viewport Lighting Options dialog. ObjVars 1014 and 1302-1304 are described above. ObjVar 1269 is clear as mud. ObjVar 1269 is another object variable that you can read, but cannot set. Or at least I have not found a successful way to set it. If you read it with GetObjectVariableInt(), or GetObjectVariableLong(), you will get the numbers 0-3, or 5 which correspond to the settings shown below. If you try to set the object variable, the values and the menu don't change. I assume the inability to write to variables 1269, 1303, and 1304 is a bug and I'll report it in the morning. If I find out it's WAD, I'll post back so you know, otherwise I'll post back when it gets fixed. Sorry this didn't turn out better. Raymond Quote Link to comment
Fuge Posted July 13 Author Share Posted July 13 Hey Ray - @MullinRJ, Thanks for spending so much time on this, much appreciated. At least I got 50% of what I was hoping figured out 😜 Yeah, I think you're correct, If you can GET it.. you should be able to SET it... Quick summary and test script below... if helpful to anyone else.. and for later reference.. Have a great day! Dave Procedure SetSelectedVPLighting; CONST KIndirectLightIndex = 3; { 0, 5, 1, 2, 3 - For type in order } KAmbInfoONOFF = TRUE; { Boolean True/False } KAmbInfoBrightNess = 0.85; { Number in decimal for percentage } KAmbOcclusionONOFF = TRUE; { Boolean True/False } KAmbOcclusionStrength = 0.50; { Number in decimal for percentage } KAmbOcclusionSize = 100; { Real Number for size } VAR viewportHandle :HANDLE; BEGIN viewportHandle := LSActLayer; { Last selected object , Select a viewport } SetObjectVariableLongInt(viewportHandle,1269,KIndirectLightIndex); { Bug - runs but doesn't set - Indirect Lighting Index, 0, 5, 1, 2, 3 } SetObjectVariableBoolean(viewportHandle,1014,KAmbInfoONOFF); { Ambient Info On/Off } SetObjectVariableReal(viewportHandle,1015,KAmbInfoBrightNess); { Ambient Info Brightness } SetObjectVariableBoolean(viewportHandle,1302,KAmbOcclusionONOFF ); { Ambient Occlusion } { SetObjectVariableReal(viewportHandle,1303,KAmbOcclusionStrength); { Broken - fails - Ambient Occlusion Strength % } { SetObjectVariableReal(viewportHandle,1304,KAmbOcclusionSize); { Broken - fails - Ambient Occlusion Size } END; Run (SetSelectedVPLighting); Quote Link to comment
JBenghiat Posted July 14 Share Posted July 14 Here's some additional selectors: ovRenderStyleQualityGeometry = 1261; //Short ovRenderStyleQualityAntiAliasing = 1262; //Short ovRenderStyleQualityIndirectLighting = 1263; //Short ovRenderStyleQualitySoftShadows = 1264; //Short ovRenderStyleQualityBlurriness = 1265; //Short ovRenderStyleQualityEnvLighting = 1266; //Short ovRenderStyleMaxReflections = 1267; //Short ovRenderStyleApplyLighting = 1268; //Boolean ovRenderStyleIndirectLighting = 1269; //Long ovRenderStyleHDRIRefNumber = 1270; //Long ovRenderStyleHDRIOption = 1271; //Long ovRenderStyleHasHDRIOption = 1272; //Boolean ovRenderStyleEnableAmbient = 1273; //Boolean ovRenderStyleAmbientBrightness = 1274; //Real ovRenderStyleAmbientColorR = 1275; //Real ovRenderStyleAmbientColorG = 1276; //Real ovRenderStyleAmbientColorB = 1277; //Real ovRenderStyleEmitterBrightness = 1278; //Long ovRenderStyleWhiteColorTemp = 1279; //Long ovRenderStyleApplyBackground = 1280; //Boolean There seems to be two selectors, one that's ovRenderStyleQualityIndirectLighting and one called ovRenderStyleIndirectLighting. You can see if the former will work to set the option. You may also have to set ovRenderStyleApplyLighting to true, or instead/additionally use ovRenderStyleMaxReflections to set the number of reflections. Quote Link to comment
Fuge Posted July 14 Author Share Posted July 14 Much appreciated @JBenghiat I'll report my findings.... 🤠 thanks for passing this along.... Quote Link to comment
Fuge Posted July 17 Author Share Posted July 17 Well after going down the rabbit 🐇 hole on this one .. I can't say I've made much progress on it. Some of the additional Selectors work, for example 1278 for ovRenderStyleEmitterBrightness, however nothing works for setting Indirect Lighting with any combination of selectors as Josh suggested. I then thought... Hmm what if I set a Render Style for the Background Render that best matches Shaded since it would have it's Lighting preset under Lighting Options for the Viewport. If you do a GET for it, when a Render Style is chosen it returns 15, however if you do a SET with 15, it sets it to Custom Renderworks instead 😆. Of course there doesn't seem to be a way to select which Render style you'd want anyhow, from what I can discern. I'd only have one in this particular template file. So for the time being it appears to be a no go. Hopefully in the future there will be a bit more clarity and object sectors for this. In my case.. it would really be helpful for automating assembly instructions. Quote Link to comment
Vectorworks, Inc Employee JustinH Posted July 18 Vectorworks, Inc Employee Share Posted July 18 i noticed some of the SetObjectVariable calls take a RenderStyleHandle instead of a ViewportHandle. Try this: BEGIN viewportHandle := LSActLayer; { Last selected object , Select a viewport } renderStyleHandle := GetObjectVariableHandle(viewportHandle, 1281); { ovRenderStyle=1281 } SetObjectVariableLongInt(renderStyleHandle,1269,KIndirectLightIndex); SetObjectVariableBoolean(viewportHandle,1014,KAmbInfoONOFF); SetObjectVariableReal(viewportHandle,1015,KAmbInfoBrightNess); SetObjectVariableBoolean(renderStyleHandle,1302,KAmbOcclusionONOFF ); SetObjectVariableReal(renderStyleHandle,1304,KAmbOcclusionSize); END 2 Quote Link to comment
Fuge Posted July 19 Author Share Posted July 19 Hey Thanks @JustinH that works 👍 and helps connect the dots... Much appreciated... Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.