Skip to content

Instantly share code, notes, and snippets.

@tnydwrds
Created January 15, 2018 04:01
Show Gist options
  • Save tnydwrds/f920c3c9dfe804024df9eb95d0018699 to your computer and use it in GitHub Desktop.
Save tnydwrds/f920c3c9dfe804024df9eb95d0018699 to your computer and use it in GitHub Desktop.
Dirty MEL script to fix odd orthographic camera clipping planes with some scene units in Maya LT
/**
* Fix for system orthographic camera clipping planes not taking into account
* scene unit changes from centimeters.
*/
global proc foccp_fixOrthoCameraClippingPlanes() {
float $offset_amount = 100,
$near_clip_plane,
$far_clip_plane,
$cur_far_clip_plane,
$center_of_interest;
string $log_header = "foccp: ",
$ortho_camera;
for ($ortho_camera in `listCameras -orthographic`) {
// Assumes the camera's center of interest reliably represents its
// current distance from the scene's origin.
$center_of_interest = `camera -query -centerOfInterest $ortho_camera`;
$cur_far_clip_plane = `camera -query -farClipPlane $ortho_camera`;
if ($cur_far_clip_plane < $center_of_interest) {
// Far clipping plane is set first to make sure setting the near
// won't be set to an out of bounds value.
$far_clip_plane = $center_of_interest + $offset_amount;
camera -edit -farClipPlane $far_clip_plane $ortho_camera;
$near_clip_plane = $center_of_interest - $offset_amount;
camera -edit -nearClipPlane $near_clip_plane $ortho_camera;
print `format -s $log_header -s $ortho_camera "^1s \"^2s\" camera center of interest is outside clipping plane bounds\n"`;
print `format -s $log_header -s $center_of_interest "^1s Center of interest: ^2s\n"`;
print `format -s $log_header -s $cur_far_clip_plane "^1s Far clipping plane: ^2s\n"`;
print `format -s $log_header -s $near_clip_plane -s $far_clip_plane "^1s Clipping planes adjusted to ^2s (near), ^3s (far)\n"`;
print "\n";
}
}
}
scriptJob -event NewSceneOpened "foccp_fixOrthoCameraClippingPlanes";
@tnydwrds
Copy link
Author

Quick fix for an odd issue in Maya LT 2018 discussed here. Changing scene units for new scenes to something other than centimeters could cause default orthographic cameras' clipping planes that do not encompass the scene correctly.

It (incorrectly) assumes a camera's center of interest is camera's distance away from origin. If that value is greater than the distance of the far clipping plane, will adjust clipping planes with a default offset of 100 units from the origin.

Intended use is to copy and paste into your userSetup.mel.

Mostly written to learn some basic MEL scripting.

@tnydwrds
Copy link
Author

If you've never mucked with userSetup.mel before there is a gotcha when interacting with other scripts. Specifically I ran into an issue with this script and Unity's FBX Exporter.

In the documentation for userSetup.mel, the following (version specific) paths are mentioned:

  • Windows: ..\My Documents\maya\<version>\scripts
  • Mac OS X: ~/Library/Preferences/Autodesk/maya/<version>/scripts
    (where ~ is your home folder)

The Unity FBX Exporter bootstraps itself from what appears to be location that would apply to all Maya installs:

  • Windows: ..\My Documents\maya\scripts
  • Mac OS X: ~/Library/Preferences/Autodesk/maya/scripts

Turns out this won't get run if there is a version specific userSetup.mel as noted on Unity's FBX Exporter thread. So have to add the following line to the version specific setup script:

if(`exists unitySetupUI`){ unitySetupUI; }

Or I guess update your global(?) setup script, which already has Unity's bootstrap.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment