Polar Coordinates Cheat Sheet in Copernicus

   307   1   1
User Avatar
Member
25 posts
Joined: 3月 2025
オフライン
If you're a beginner and tried to convert an image to polar coordinates and back in Copernicus, your brain might explode. To prevent that, I'll leave you a cheat sheet here. It'll help you convert back and forth, of course, keeping in mind the quantization defects around 0.

The most important and strange thing is the mess with spaces, otherwise nothing will work. To convert to polar, select "image" in UVMap, and "texture" in UVSample. To convert back, it's the other way around: select "texture" in UVMap, and select "image" in UVSample. Why is that? Excellent question, but maybe someone smarter than me can answer it.
The arrows show where things will end up. The center of your texture at 40 will be to the left of the center in the new image; just a quick reference.
Please note that when collecting UV values ​​from angle and length, it's best to connect the channels in reverse order. This way, the right side will stretch, but the twisted texture will be in the correct orientation, and the text will be read correctly. If you connect them sequentially, the top side will stretch, not the right side. This is convenient, but the texture will be mirrored, which can sometimes be very confusing for the result. So choose the option you need.
Edited by Gaalvk - 2026年2月9日 08:30:03

Attachments:
Screenshot 2026-02-09 155349.jpg (592.3 KB)

User Avatar
スタッフ
6839 posts
Joined: 7月 2005
オフライン
Very nice cheat sheet, thank you for figuring this all out...

UV to Polar and Polar to UV unwrap the polar coordinats about the (0,0) origin of space. By having uvmap1 be in image space, you get the zero (0,0) at the center of the image, so the desired effect.

For uvmap3, you want to generate the angle values 0..1 and distance values 0..1 across your texture; this could be two horizontal and vertical ramps; but uvmap3 in texture mode also generates that sort of perpendicular ramp.

After uvtopolar1, the range of our values are 0..1 for angle (as it is in "Circle/2Pi" mode) and 0..1.41 for length (as it was distance of the 2-sized square). Since you want to truncate at 1, you want to treat 0..1 range of the incoming coordinates as teh entire image - this results in sample3 being in texture space.

polartouv1 generated coordinates with the pole being at the origin (0,0), so thus you want to sample the image with (0,0) being the center of the image - so sample3 is in image space.

This complexity is brought to you by the existence of negative numbers in copernicus. Stuff as simple as "normals" immediately becomes tricky to store as there are two ways to do it; the obvious way for those from 3d (as -1 to 1) and the obvious way for those from texturing (as 0 to 1 with 0.5 being "center").

Ignoring the issue of data/display windows and working with square images; the "texture vs image" question is mostly if your coordinates have (0,0) as the corner of the image or the center of the image. This setup is doing both so ends up using both.
  • Quick Links