﻿<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=Dev%3ASource%2FTextures%2FUV%2FUnwrapping</id>
	<title>Dev:Source/Textures/UV/Unwrapping - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=Dev%3ASource%2FTextures%2FUV%2FUnwrapping"/>
	<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:Source/Textures/UV/Unwrapping&amp;action=history"/>
	<updated>2026-06-15T20:52:31Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Dev:Source/Textures/UV/Unwrapping&amp;diff=41950&amp;oldid=prev</id>
		<title>Yamyam: 1版 をインポートしました</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:Source/Textures/UV/Unwrapping&amp;diff=41950&amp;oldid=prev"/>
		<updated>2018-06-28T17:45:17Z</updated>

		<summary type="html">&lt;p&gt;1版 をインポートしました&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;2018年6月28日 (木) 17:45時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ja&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(相違点なし)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Yamyam</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Dev:Source/Textures/UV/Unwrapping&amp;diff=41949&amp;oldid=prev</id>
		<title>wiki&gt;Mindrones bot: Bot: Fixing redirects</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:Source/Textures/UV/Unwrapping&amp;diff=41949&amp;oldid=prev"/>
		<updated>2010-05-27T08:51:05Z</updated>

		<summary type="html">&lt;p&gt;Bot: Fixing redirects&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== UV Unwrapping==&lt;br /&gt;
&lt;br /&gt;
This project aims to further improve the UV editing tools. First the code in unwrapper.c will be refactored, which will allow current and future algorithms to (re)use the same data structures and code.&lt;br /&gt;
&lt;br /&gt;
The new code is in the bf-blender, in {{literal|source/blender/src/parametrizer.c}}.&lt;br /&gt;
&lt;br /&gt;
Tutorial on unwrapping Suzanne: [[Doc:Tutorials/Textures/UV/Unwrapping Suzanne|BlenderDev/UvUnwrapping/Suzanne]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*{{done|LSCM: better choice of 2 default pinned UV's}}&lt;br /&gt;
*{{done|Enhanced LSCM Live Mode.}}&lt;br /&gt;
*{{done|Minimize Stretch from Tuhopuu.}}&lt;br /&gt;
*{{done|Subsurf UV.}}&lt;br /&gt;
* {{done|Hole filling before unwrapping, to prevent overlaps.}}&lt;br /&gt;
*{{done|Seam cutting in Face Select Mode.}}&lt;br /&gt;
* {{done|ABF unwrapping.}}&lt;br /&gt;
** {{done|Main remaining problem is degenerate triangles.}}&lt;br /&gt;
** [http://users.pandora.be/blendix/flattened.png Teaser Image]&lt;br /&gt;
*{{done|Multiple UV Sets.}}&lt;br /&gt;
*Other ideas:&lt;br /&gt;
**{{done|Better packing algorithms.}}&lt;br /&gt;
**Simple automatic seams for e.g. texture baking, port archimapper?&lt;br /&gt;
**{{done|Live seam cutting.}}&lt;br /&gt;
&lt;br /&gt;
==Code Documentation==&lt;br /&gt;
===API===&lt;br /&gt;
The API is in {{literal|parametrizer.h}} should be used in three steps:&lt;br /&gt;
* Load mesh and construct charts based on seams or UV coordinates.&lt;br /&gt;
* Run some algorithm on the charts.&lt;br /&gt;
* Flush UV coordinates back to the original mesh and cleanup.&lt;br /&gt;
&lt;br /&gt;
===Mesh===&lt;br /&gt;
The mesh data structure used is a [http://www.flipcode.com/articles/article_halfedge.shtml half edge] mesh. This means each edge is limited to two faces, which works fine because a valid unwrap can't have more than that. For an edge with one face the {{literal|edge-&amp;gt;pair}} pointer is set to {{literal|NULL}}.&lt;br /&gt;
&lt;br /&gt;
The vertex, edge and face structs look like this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
typedef struct PVert {&lt;br /&gt;
    struct PVert *nextlink;&lt;br /&gt;
    union PVertUnion {...} u;&lt;br /&gt;
    struct PEdge *edge;&lt;br /&gt;
    float *co;&lt;br /&gt;
    float uv[2];&lt;br /&gt;
    unsigned char flag;&lt;br /&gt;
} PVert; &lt;br /&gt;
&lt;br /&gt;
typedef struct PEdge {&lt;br /&gt;
    struct PEdge *nextlink;&lt;br /&gt;
    union PEdgeUnion {...} u;&lt;br /&gt;
    struct PVert *vert;&lt;br /&gt;
    struct PEdge *pair;&lt;br /&gt;
    struct PEdge *next;&lt;br /&gt;
    struct PFace *face;&lt;br /&gt;
    unsigned short flag;&lt;br /&gt;
} PEdge;&lt;br /&gt;
&lt;br /&gt;
typedef struct PFace {&lt;br /&gt;
    struct PFace *nextlink;&lt;br /&gt;
    union PFaceUnion {...} u;&lt;br /&gt;
    struct PEdge *edge;&lt;br /&gt;
    unsigned char flag;&lt;br /&gt;
} PFace;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
During the construction phase these are stored in hashes. The {{literal|nextlink}} pointer is then used by the hash and the hash key is stored in the unions. Once the charts are constructed the {{literal|nextlink}} pointer is used to make single linked lists, and the union members are used for different purposes by different tools. The {{literal|flag}} member is used by different algorithms. The possible flags are enumerated further in the file to avoid collisions.&lt;br /&gt;
&lt;br /&gt;
===LSCM===&lt;br /&gt;
The Least Squares Conformal Maps algorithm by itself is relatively simple. It involves solving a system of linear equations which we can write in matrix math as {{literal|A*x &amp;amp;#61; b}}. Where {{literal|A}} is a huge {{literal|2 * number of faces x 2 * number of vertices}} matrix, but it's filled mostly with zeros. Luckily we've got superLU to solve that quickly. {{literal|A}} and {{literal|b}} are construct based on the face angles in the original mesh, and after solving {{literal|x}} magically contains the resulting UV coordinates.&lt;br /&gt;
&lt;br /&gt;
===ABF===&lt;br /&gt;
Angle Based Flattening uses a more expensive approach. The input are again the face angles, and the ouput are the face angles of the 2d mesh. Then these 2d angles are used as input to LSCM, which then computes the final UV coordinates. ABF uses non-linear constrained minimization to find 2d angles that are as close as possible to the original angles, under the following constraints:&lt;br /&gt;
* All angles around an interior vertex sum up to {{literal|2*PI}}.&lt;br /&gt;
* Angles in a triangle sum up to {{literal|PI}}.&lt;br /&gt;
* The length of an edge between two triangles must be the same.&lt;br /&gt;
It starts from the 3d angles as an initial guess and then iteratively solves a linear system until it's close enough to the solution.&lt;br /&gt;
&lt;br /&gt;
Implementation was based on this paper: &lt;br /&gt;
A. Sheffer, B. Lévy, M. Mogilnitsky, A, Bogomyakov, ABF++: Fast and Robust Angle Based Flattening, ACM Transactions on Graphics, 24(2), 311-330 2005. &lt;br /&gt;
&lt;br /&gt;
[[User:Brecht|Brecht Van Lommel]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Script]]&lt;/div&gt;</summary>
		<author><name>wiki&gt;Mindrones bot</name></author>
		
	</entry>
</feed>