Welcome to WSL!

Make yourself at home, but before posting, please may I ask you to read the following topics.


Posting 101
Server space, screenshots, and you

Thank you!

PS. please pretty please:


Image

seamless spheres

Moderator: SecondMan

User avatar
andromeda_girl
Fusionista
Posts: 498
Joined: Sun Feb 21, 2016 6:25 am
Been thanked: 5 times

seamless spheres

#1

Post by andromeda_girl » Sun Nov 10, 2019 1:04 pm

i seem to be missing something too obvious just now :P

what is the trick to get a seamless image onto a sphere to the north and south poles are not pinching?

Image

but it isn't just the poles, it also stretches along the equator.
:O

User avatar
Shem Namo
Fusionista
Posts: 502
Joined: Sun Oct 06, 2019 9:15 pm
Location: North Israel
Real name: David Kohen
Been thanked: 13 times

Re: seamless spheres

#2

Post by Shem Namo » Sun Nov 10, 2019 9:21 pm

Try adding a transform set to flip vertically after the texture, apply a rectangle mask and soft edge. After that add a sphere map. And instead of applying the texture into the sphere use a replace material.

User avatar
asifbhushan
Posts: 39
Joined: Thu May 21, 2015 2:31 am

Re: seamless spheres

#3

Post by asifbhushan » Mon Nov 18, 2019 12:08 am

This was an issue which I have faced too. UV Texture works good. But randomly using any texture creates such problems.

Anyone with a solution for this would be great.
Normal_Texture.JPG
UV_TEXTURE.JPG
You do not have the required permissions to view the files attached to this post.

User avatar
Kristof
Fusionista
Posts: 760
Joined: Thu Aug 07, 2014 1:30 pm
Answers: 2
Been thanked: 15 times

Re: seamless spheres

#4

Post by Kristof » Mon Nov 18, 2019 5:40 am

You need a spherical map, so run those "square" tex patches (they need to be tillable of course) you have right now through a latlongpatcher and apply that result...

It's all about coordinate spaces.
Last edited by Kristof on Mon Nov 18, 2019 5:42 am, edited 1 time in total.

User avatar
AndrewHazelden
Fusionator
Posts: 1596
Joined: Fri Apr 03, 2015 3:20 pm
Answers: 9
Location: West Dover, Nova Scotia, Canada
Been thanked: 7 times
Contact:

Re: seamless spheres

#5

Post by AndrewHazelden » Mon Nov 18, 2019 5:41 am

Kristof wrote:
Mon Nov 18, 2019 5:40 am
You need a spherical map, so run those "square" tex patches you have right now through a latlongpatcher and apply that result...
For some texture patterns, I was thinking about the possibility of DIY triplanar mapping with seam blending at the edges to recreate the texture mode a lot of 3D texture projection tools have. Examples: VRayTriplanarTex node, or the DB&W LightWave Triplanar Mapper plugin

User avatar
svenneve
Fusioneer
Posts: 104
Joined: Fri Sep 12, 2014 1:47 am
Been thanked: 2 times
Contact:

Re: seamless spheres

#6

Post by svenneve » Mon Nov 18, 2019 6:52 am

The best way to solve this is by having a subdivided cube spherized (vertices normalized) and then use a program like Quixel Mixer or Substance (Painter) to create your texture.
This has the added bonus of having nice equally sized UV patches on your sphere.

Added in 21 minutes 13 seconds:

Code: Select all

{
	Tools = ordered() {
		CustomVertex3D1 = CustomVertex3D {
			Inputs = {
				SceneInput = Input {
					SourceOp = "Shape3D1",
					Source = "Output",
				},
				["Position.X"] = Input { Value = "px * i1", },
				["Position.Y"] = Input { Value = "py * i1", },
				["Position.Z"] = Input { Value = "pz * i1", },
				["Normal.Nest"] = Input { Value = 1, },
				["Normal.X"] = Input { Value = "px", },
				["Normal.Y"] = Input { Value = "py", },
				["Normal.Z"] = Input { Value = "pz", },
				["TexCoord.Nest"] = Input { Value = 1, },
				LUT1 = Input {
					SourceOp = "CustomVertex3D1LUT1",
					Source = "Value",
				},
				LUT2 = Input {
					SourceOp = "CustomVertex3D1LUT2",
					Source = "Value",
				},
				LUT3 = Input {
					SourceOp = "CustomVertex3D1LUT3",
					Source = "Value",
				},
				LUT4 = Input {
					SourceOp = "CustomVertex3D1LUT4",
					Source = "Value",
				},
				Intermediate1 = Input { Value = ".5 / sqrt(px*px + py*py + pz * pz)", },
			},
			ViewInfo = OperatorInfo { Pos = { 605, 148.5 } },
		},
		CustomVertex3D1LUT1 = LUTBezier {
			KeyColorSplines = {
				[0] = {
					[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
					[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
				}
			},
			SplineColor = { Red = 0, Green = 0, Blue = 0 },
			NameSet = true,
		},
		CustomVertex3D1LUT2 = LUTBezier {
			KeyColorSplines = {
				[0] = {
					[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
					[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
				}
			},
			SplineColor = { Red = 0, Green = 0, Blue = 0 },
			NameSet = true,
		},
		CustomVertex3D1LUT3 = LUTBezier {
			KeyColorSplines = {
				[0] = {
					[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
					[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
				}
			},
			SplineColor = { Red = 0, Green = 0, Blue = 0 },
			NameSet = true,
		},
		CustomVertex3D1LUT4 = LUTBezier {
			KeyColorSplines = {
				[0] = {
					[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
					[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
				}
			},
			SplineColor = { Red = 0, Green = 0, Blue = 0 },
			NameSet = true,
		},
		CustomTool1 = Custom {
			CtrlWZoom = false,
			Inputs = {
				NumberIn1 = Input { Value = 16, },
				LUTIn1 = Input {
					SourceOp = "CustomTool1LUTIn1",
					Source = "Value",
				},
				LUTIn2 = Input {
					SourceOp = "CustomTool1LUTIn2",
					Source = "Value",
				},
				LUTIn3 = Input {
					SourceOp = "CustomTool1LUTIn3",
					Source = "Value",
				},
				LUTIn4 = Input {
					SourceOp = "CustomTool1LUTIn4",
					Source = "Value",
				},
				Intermediate1 = Input { Value = "(x*n1)%1>=.5 | (y*n1)%1>=0.5) ", },
				Intermediate2 = Input { Value = "(x*n1)%1>=.5 & (y*n1)%1>=0.5) ", },
				Intermediate3 = Input { Value = "i1-i21", },
				RedExpression = Input { Value = "i3", },
				GreenExpression = Input { Value = "i3", },
				BlueExpression = Input { Value = "i3", },
				Image1 = Input {
					SourceOp = "Background1",
					Source = "Output",
				},
			},
			ViewInfo = OperatorInfo { Pos = { 385, 148.5 } },
		},
		CustomTool1LUTIn1 = LUTBezier {
			KeyColorSplines = {
				[0] = {
					[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
					[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
				}
			},
			SplineColor = { Red = 204, Green = 0, Blue = 0 },
			NameSet = true,
		},
		CustomTool1LUTIn2 = LUTBezier {
			KeyColorSplines = {
				[0] = {
					[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
					[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
				}
			},
			SplineColor = { Red = 0, Green = 204, Blue = 0 },
			NameSet = true,
		},
		CustomTool1LUTIn3 = LUTBezier {
			KeyColorSplines = {
				[0] = {
					[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
					[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
				}
			},
			SplineColor = { Red = 0, Green = 0, Blue = 204 },
			NameSet = true,
		},
		CustomTool1LUTIn4 = LUTBezier {
			KeyColorSplines = {
				[0] = {
					[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
					[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
				}
			},
			SplineColor = { Red = 204, Green = 204, Blue = 204 },
			NameSet = true,
		},
		Background1 = Background {
			Inputs = {
				Width = Input { Value = 1024, },
				Height = Input { Value = 1024, },
				["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
			},
			ViewInfo = OperatorInfo { Pos = { 275, 148.5 } },
		},
		Shape3D1 = Shape3D {
			Inputs = {
				Shape = Input { Value = FuID { "SurfaceCubeInputs" }, },
				MaterialInput = Input {
					SourceOp = "CustomTool1",
					Source = "Output",
				},
				["MtlStdInputs.MaterialID"] = Input { Value = 1, },
				["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 1, },
				["SurfaceCubeInputs.ObjectID.ObjectID"] = Input { Value = 2, }
			},
			ViewInfo = OperatorInfo { Pos = { 495, 148.5 } },
		}
	}
}