﻿<?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=%E5%88%A9%E7%94%A8%E8%80%85%3ATheBusyTypist%2FGSoC2016-Solidify-Modifier</id>
	<title>利用者:TheBusyTypist/GSoC2016-Solidify-Modifier - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=%E5%88%A9%E7%94%A8%E8%80%85%3ATheBusyTypist%2FGSoC2016-Solidify-Modifier"/>
	<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:TheBusyTypist/GSoC2016-Solidify-Modifier&amp;action=history"/>
	<updated>2026-09-05T05:18:53Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:TheBusyTypist/GSoC2016-Solidify-Modifier&amp;diff=150883&amp;oldid=prev</id>
		<title>Yamyam: 1版 をインポートしました</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:TheBusyTypist/GSoC2016-Solidify-Modifier&amp;diff=150883&amp;oldid=prev"/>
		<updated>2018-06-28T21:16:04Z</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日 (木) 21:16時点における版&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=%E5%88%A9%E7%94%A8%E8%80%85:TheBusyTypist/GSoC2016-Solidify-Modifier&amp;diff=150882&amp;oldid=prev</id>
		<title>2016年3月5日 (土) 19:41にwiki&gt;TheBusyTypistによる</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:TheBusyTypist/GSoC2016-Solidify-Modifier&amp;diff=150882&amp;oldid=prev"/>
		<updated>2016-03-05T19:41:57Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Overview =&lt;br /&gt;
&lt;br /&gt;
Name: Ounan Ding&lt;br /&gt;
&lt;br /&gt;
E-mail: ounanding@gmail.com&lt;br /&gt;
&lt;br /&gt;
IRC: TheBusyTypist&lt;br /&gt;
&lt;br /&gt;
GitHub: https://github.com/thebusytypist&lt;br /&gt;
&lt;br /&gt;
Blog: http://blender.linearconstraints.net&lt;br /&gt;
&lt;br /&gt;
There is a PDF version of this proposal, which has better typesetting:&lt;br /&gt;
https://github.com/thebusytypist/gsoc-2016-doc/raw/master/proposals/solidify/solidify.pdf&lt;br /&gt;
&lt;br /&gt;
= Synopsis =&lt;br /&gt;
&lt;br /&gt;
I propose to improve the current Solidify modifier in Blender.&lt;br /&gt;
Particularly, the self intersection issue will be addressed.&lt;br /&gt;
&lt;br /&gt;
= Benefits to Blender =&lt;br /&gt;
&lt;br /&gt;
This will make it a much easier for anyone&lt;br /&gt;
who is 3D printing to make a solid shell&lt;br /&gt;
from a mesh without having to manually create the shell.&lt;br /&gt;
The 3D modeling artists may also find this tool useful if they want&lt;br /&gt;
to create water-tight models from surfaces.&lt;br /&gt;
&lt;br /&gt;
From the programming perspective,&lt;br /&gt;
many tools will be contributed from this project and&lt;br /&gt;
may benefit other projects.&lt;br /&gt;
For example, some common geometric processing tools&lt;br /&gt;
such as mean curvature flow will be implemented.&lt;br /&gt;
&lt;br /&gt;
Moreover, I will also take this chance to write or&lt;br /&gt;
to improve the documentation on BMesh and modifier infrastructure.&lt;br /&gt;
&lt;br /&gt;
= Deliverables =&lt;br /&gt;
&lt;br /&gt;
The proposed feature in this project will be implemented&lt;br /&gt;
as a Blender Modifier.&lt;br /&gt;
And I want to keep its interface compatible with the current Solidify modifier's&lt;br /&gt;
as much as possible.&lt;br /&gt;
&lt;br /&gt;
= Project Details =&lt;br /&gt;
&lt;br /&gt;
In this section I will first review the current implementation of&lt;br /&gt;
Solidify modifier, and discuss the potential issues of it.&lt;br /&gt;
After that I will show what tools are proposed for similar goal&lt;br /&gt;
recently in the academia.&lt;br /&gt;
Based on the above research, I propose a design and estimate&lt;br /&gt;
a preliminary project schedule.&lt;br /&gt;
&lt;br /&gt;
== Review of Current Implementation ==&lt;br /&gt;
&lt;br /&gt;
I have written a blog post[http://blender.linearconstraints.net/2016/03/01/notes-on-current-solidify-modifier.html]&lt;br /&gt;
to have a general review of the Solidify modifier.&lt;br /&gt;
I also have a series of posts&lt;br /&gt;
[http://blender.linearconstraints.net/2015/07/23/how-modifier-system-works-part-1.html],&lt;br /&gt;
[http://blender.linearconstraints.net/2015/07/25/how-modifier-system-works-part-2.html],&lt;br /&gt;
and&lt;br /&gt;
[http://blender.linearconstraints.net/2015/08/04/how-modifier-system-works-part-3.html]&lt;br /&gt;
about the general mechanism of modifier system in Blender.&lt;br /&gt;
&lt;br /&gt;
Generally speaking, the current Solidify modifier will&lt;br /&gt;
duplicate and extrude the&lt;br /&gt;
surface along the vertex normal of a given mesh&lt;br /&gt;
to build the inner surface, or &amp;quot;shell&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This approach works well for most cases when the offset depth is small.&lt;br /&gt;
However self-intersection would happen if the user offset the surface too much.&lt;br /&gt;
We show this situation in figure [[File:blender-stock-solidify-self-intersection.png]].&lt;br /&gt;
&lt;br /&gt;
In addition to the self-intersection issue,&lt;br /&gt;
the offset direction may also cause some minor problems.&lt;br /&gt;
Currently the vertex normal direction is used for offset,&lt;br /&gt;
and the vertex normal is calculated by taking a weighted average of&lt;br /&gt;
normals of its adjacent surfaces.&lt;br /&gt;
This approximation may deviate from the actual surface normal&lt;br /&gt;
and leads to slightly incorrect geometry.&lt;br /&gt;
&lt;br /&gt;
One advantage of current implementation(or any purely mesh-based one)&lt;br /&gt;
is that the mesh network topology is retained for both the input and&lt;br /&gt;
the offset surface.&lt;br /&gt;
This may be a vital requirements from 3D artists.&lt;br /&gt;
I will discuss more about the requirements in the later section.&lt;br /&gt;
&lt;br /&gt;
== Related Research ==&lt;br /&gt;
&lt;br /&gt;
There are also many research of the surface propagation in the academia.&lt;br /&gt;
&lt;br /&gt;
The first paper[musialski2015reduced] I read,&lt;br /&gt;
which is suggested by Campbell Barton,&lt;br /&gt;
models this as an optimization problem.&lt;br /&gt;
I also write a paper digest on my blog[http://blender.linearconstraints.net/2016/02/20/notes-on-offset-surfaces-and-shape-optimization.html].&lt;br /&gt;
&lt;br /&gt;
The general idea of that paper is to first construct&lt;br /&gt;
the offset direction and the offset depth&lt;br /&gt;
using mean curvature flow[tagliasacchi2012mean].&lt;br /&gt;
Then it construct an optimization problem of offset depth&lt;br /&gt;
subject to some mechanical constraints.&lt;br /&gt;
&lt;br /&gt;
The insights we get from this paper is that&lt;br /&gt;
it calculates the shape skeleton to estimate a bound on the offset depth,&lt;br /&gt;
and it puts constraints on the offset depth to prevent self-intersection.&lt;br /&gt;
&lt;br /&gt;
Besides, this paper introduces a great solution for the requirements of&lt;br /&gt;
3D printing, where we have to consider mechanical properties of our product.&lt;br /&gt;
&lt;br /&gt;
On the other hand, through some research on the mean curvature flow,&lt;br /&gt;
we reach another very similar approach which is called&lt;br /&gt;
level set method[sethian1999level].&lt;br /&gt;
In fact the Computer Graphics community&lt;br /&gt;
(especially the physically based simulation group)&lt;br /&gt;
has used level set method for surface tracking for a long time.&lt;br /&gt;
&lt;br /&gt;
I write a post and implement a prototype program to illustrate the general&lt;br /&gt;
idea on my blog[http://blender.linearconstraints.net/2016/02/25/hamilton-jacobi-equation-and-surface-propagation.html].&lt;br /&gt;
&lt;br /&gt;
The most significant advantage of level set method is that&lt;br /&gt;
it can handle the topology change very naturally.&lt;br /&gt;
By &amp;quot;topology change&amp;quot; I mean for example,&lt;br /&gt;
some part of the geometry may break into separate&lt;br /&gt;
parts or some surfaces join into a single piece.&lt;br /&gt;
In figure below&lt;br /&gt;
I illustrate some experiment results of different offset depths,&lt;br /&gt;
where we can see the topology change due to the large offset depth&lt;br /&gt;
can be handled correctly.&lt;br /&gt;
&lt;br /&gt;
[[File:2d-hamilton-jacobi-no-topology-change.png|400px]]&lt;br /&gt;
&lt;br /&gt;
[[File:2d-hamilton-jacobi-with-topology-change.png|400px]]&lt;br /&gt;
&lt;br /&gt;
However, the level set method requires a signed distance field,&lt;br /&gt;
and for the final result we have to contour(or remesh in the Blender glossary)&lt;br /&gt;
the zero level set of the offset distance field.&lt;br /&gt;
This will cause the result offset surface has a very different mesh network&lt;br /&gt;
compared with the given input.&lt;br /&gt;
It may not be a serious issue for 3D printing, but&lt;br /&gt;
maybe unacceptable for 3D artists.&lt;br /&gt;
&lt;br /&gt;
== Requirements and Design ==&lt;br /&gt;
&lt;br /&gt;
After we have reviewed the current implementation in Blender&lt;br /&gt;
and seen many solutions introduced from academia,&lt;br /&gt;
I can propose my design towards the problem.&lt;br /&gt;
&lt;br /&gt;
Firstly I list some requirements below:&lt;br /&gt;
&lt;br /&gt;
* We want the new Solidify modifier can produce geometry with no self-intersection. And we do not want to leave many unhandled corner cases in the mesh processing.&lt;br /&gt;
&lt;br /&gt;
* We want both 3D printing and traditional 3D artists can benefit from this tool. That is, we have to consider the mesh network structure very carefully.&lt;br /&gt;
&lt;br /&gt;
* We deem that the Solidify modifier can be a time-consuming operation. But we still strive for the optimal performance.&lt;br /&gt;
&lt;br /&gt;
We first compute an upper bound on the offset depth and construct the offset direction&lt;br /&gt;
field as the paper[musialski2015reduced] does.&lt;br /&gt;
For this task a mean curvature flow method can be used.&lt;br /&gt;
&lt;br /&gt;
Then we offset the surface mesh along the offset direction.&lt;br /&gt;
We check whether the desired offset depth exceeds the depth upper bound.&lt;br /&gt;
&lt;br /&gt;
For 3D printing, we can loose the requirements on the mesh network structure&lt;br /&gt;
and perform level set method for the best handling of topology change.&lt;br /&gt;
&lt;br /&gt;
While for traditional 3D artists we may want to be conservative&lt;br /&gt;
and do not alter the mesh network structure.&lt;br /&gt;
For this case we may just simply cease extruding when we hit the depth limit.&lt;br /&gt;
&lt;br /&gt;
= Project Schedule =&lt;br /&gt;
&lt;br /&gt;
I will take first two weeks to be familiar with the&lt;br /&gt;
BMesh and DerivedMesh system.&lt;br /&gt;
&lt;br /&gt;
At the same time I will make some prototype programs in 2D for concept proof.&lt;br /&gt;
This may last about two weeks.&lt;br /&gt;
&lt;br /&gt;
After that I will start to implement the first version.&lt;br /&gt;
I except that this can be done in two weeks.&lt;br /&gt;
&lt;br /&gt;
I will not try to write a complete version in my first pass.&lt;br /&gt;
Instead, I just make it work under some limitations,&lt;br /&gt;
then iterate on that version to improve it and get feedbacks from our community.&lt;br /&gt;
&lt;br /&gt;
= Bio =&lt;br /&gt;
&lt;br /&gt;
Currently I am a master student from University of California, Riverside.&lt;br /&gt;
My research direction is about Computer Graphics and Fluid Simulations.&lt;br /&gt;
I run a blog[http://http://blender.linearconstraints.net]&lt;br /&gt;
on Blender development.&lt;br /&gt;
And I also have a blog[http://http://blog.linearconstraints.net]&lt;br /&gt;
on general topics in Computer Graphics.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
&lt;br /&gt;
[sethian1999level] Sethian, James Albert. Level set methods and fast marching methods: evolving interfaces in computational geometry, fluid mechanics, computer vision, and materials science. Vol. 3. Cambridge university press, 1999.&lt;br /&gt;
&lt;br /&gt;
[tagliasacchi2012mean] Tagliasacchi, Andrea, et al. &amp;quot;Mean curvature skeletons.&amp;quot; Computer Graphics Forum. Vol. 31. No. 5. Blackwell Publishing Ltd, 2012.&lt;br /&gt;
&lt;br /&gt;
[musialski2015reduced] Musialski, Przemyslaw, et al. &amp;quot;Reduced-order shape optimization using offset surfaces.&amp;quot; ACM Trans. Graph 34.4 (2015): 102.&lt;/div&gt;</summary>
		<author><name>wiki&gt;TheBusyTypist</name></author>
		
	</entry>
</feed>