AWS Thinkbox Discussion Forums

Major Issue with Jigsaw rendering, 1 pixel gaps....

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

Thanks

Dave
full_render.rar (9.96 MB)
edge_issue_v002.rar (49.6 KB)

Reproduced, testing possible fixes…

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)

Save and see if these changes fix your problem.

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!

Privacy | Site terms | Cookie preferences