We’re finally using Jigsaw Tile Rendering in production and we’ve noticed a few times recently that we’ve been getting a thin line of blank pixels with no alpha. I guess it’s some kind of rounding error.
Fairly easy to reproduce
Set image to 4x4 tiles
Split Tiles to Regions
select one of the new regions,
Set the region to 3x3
Split Tiles to Regions.
Render a large image at 7500x5625
3dsmax file attached, screengrab of my tiles setup, and a full size 7.5k render with red put behind the render to highlight where the alpha’d pixels were.
I’ll have a go at fixing it myself tomorrow but would appreciate it if anyone can look at it urgently whilst we’re offline tonight!
We’re still on Deadline 8.0.7.3, rendering with 3dsmax 2016 and VRay 3.4
Give this a try. In SubmitMaxToDeadline_Functions.ms, locate this code block (I used a Deadline 8 script for the snippets below):
-------------------------------------------------------------------------
--SINGLE FRAME, MULTI-REGION RENDERING
-------------------------------------------------------------------------
if SMTDSettings.RegionRenderingMode == #singleFrameMultiRegion do
(
try(SMTD_MainRollout.Ui_report (">Single Frame Multi Region Data Preparation..."))catch()
renderDimensions = SMTDFunctions.getRenderDimensions() --#(renderWidth,renderHeight,renderPixelAspect)
local currentIndex = 0
for aData in SMTDSettings.MultiRegionData where aData[1] == True do
(
for y = 1 to aData[7] do
(
for x = 1 to aData[6] do
(
theTileWidth = aData[4]/aData[6]
theTileHeight = aData[5]/aData[7]
tempLeft = (floor ((aData[2]+(theTileWidth*(x-1)))*renderDimensions[1])) as integer
tempTop = (floor ((aData[3]+(theTileHeight*(y-1)))*renderDimensions[2])) as integer
tempRight = (floor ((aData[2]+(theTileWidth*x))*renderDimensions[1])) as integer
tempBottom = (floor ((aData[3]+(theTileHeight*y))*renderDimensions[2])) as integer
append tileLefts tempLeft
append tileBottoms (renderDimensions[2] - tempBottom)
and modify the following lines:
tempRight = (floor (((aData[2]+(theTileWidth*x))*renderDimensions[1])+0.5)) as integer
tempBottom = (floor (((aData[3]+(theTileHeight*y))*renderDimensions[2])+0.5)) as integer
Then do the same for the corner2X and corner2Y of animation regions in the code block
for t in framesList do --loop through all frames
(
local theAnimRegionValue = SMTDFunctions.interpolateAnimatedRegion aData t
local theTileWidth = theAnimRegionValue[4]/aData[6]
local theTileHeight = theAnimRegionValue[5]/aData[7]
local corner1X = ((floor ((theAnimRegionValue[2]+(theTileWidth*(x-1)))*renderDimensions[1])) as integer)
local corner1Y = ((floor ((theAnimRegionValue[3]+(theTileHeight*(y-1)))*renderDimensions[2])) as integer)
local corner2X = ((floor ((theAnimRegionValue[2]+(theTileWidth*x))*renderDimensions[1])) as integer)
local corner2Y = ((floor ((theAnimRegionValue[3]+(theTileHeight*y))*renderDimensions[2])) as integer)
should be
local corner2X = ((floor (((theAnimRegionValue[2]+(theTileWidth*x))*renderDimensions[1])+0.5)) as integer)
local corner2Y = ((floor (((theAnimRegionValue[3]+(theTileHeight*y))*renderDimensions[2])+0.5)) as integer)
Finally look for the assembly submission code
if MultiRegionRendering then
(
local theIndex = 0
for aData in SMTDSettings.MultiRegionData where aData[1] == True do
(
for y = 1 to aData[7] do
(
for x = 1 to aData[6] do
(
try(windows.processPostedMessages())catch()
theLeftsBottomsCounter+=1
if (SMTDSettings.RemovePadding and rendTimeType == 1) then
format "Tile%FileName=%\n" theIndex inputImageFilenames[(i * tileCount)+theIndex+1] to:draftConfigFile
else
format "Tile%FileName=%\n" theIndex (SMTDFunctions.replaceFrameNumber inputImageFilenames[(i * tileCount)+theIndex+1] f) to:draftConfigFile
local theAnimRegionValue = SMTDFunctions.interpolateAnimatedRegion aData f
local theTileWidth = theAnimRegionValue[4]/aData[6]
local theTileHeight = theAnimRegionValue[5]/aData[7]
local corner1X = ((floor ((theAnimRegionValue[2]+(theTileWidth*(x-1)))*renderDimensions[1])) as integer)
local corner2Y = renderDimensions[2] - ((floor ((theAnimRegionValue[3]+(theTileHeight*y))*renderDimensions[2])) as integer)
format "Tile%X=%\n" theIndex corner1X to:draftConfigFile
format "Tile%Y=%\n" theIndex corner2Y to:draftConfigFile
theIndex += 1
)
)
)
)
and modify the Corner2Y to
local corner2Y = renderDimensions[2] - ((floor (((theAnimRegionValue[3]+(theTileHeight*y))*renderDimensions[2])+0.5)) as integer)
Thanks Bobo, that has done the trick! Glad you looked at it as I was sure the bug was in the split-tiles code! I would have been completely in the wrong place!