How to prevent z-fighting in OpenSCAD?How to remove internal part of a hex gridAre there any “best” or at least “common” practices to handle allowances in OpenSCAD code?OpenSCAD library for empty space/holesHow to specify rotation origin in openscadOpenSCAD editor font is unreadableOpenSCAD 2018 Command lineOpenSCAD “not valid 2-manifold” useful informationWhy is 2 / -2 / 2 equal to -2 in OpenSCAD? (Mathematical Order of Operations)
How can I get this effect? Please see the attached image
Read line from file and process something
Is there any official lore on the Far Realm?
Map of water taps to fill bottles
What is the most expensive material in the world that could be used to create Pun-Pun's lute?
Are there physical dangers to preparing a prepared piano?
I preordered a game on my Xbox while on the home screen of my friend's account. Which of us owns the game?
can anyone help me with this awful query plan?
Is it idiomatic to construct against `this`
How to denote matrix elements succinctly?
Contradiction proof for inequality of P and NP?
How can I practically buy stocks?
Why does nature favour the Laplacian?
Why did C use the -> operator instead of reusing the . operator?
Does tea made with boiling water cool faster than tea made with boiled (but still hot) water?
Initiative: Do I lose my attack/action if my target moves or dies before my turn in combat?
Could the terminal length of components like resistors be reduced?
Like totally amazing interchangeable sister outfits II: The Revenge
Re-entry to Germany after vacation using blue card
Who was the lone kid in the line of people at the lake at the end of Avengers: Endgame?
a sore throat vs a strep throat vs strep throat
Check if a string is entirely made of the same substring
Multiple options vs single option UI
Was there a Viking Exchange as well as a Columbian one?
How to prevent z-fighting in OpenSCAD?
How to remove internal part of a hex gridAre there any “best” or at least “common” practices to handle allowances in OpenSCAD code?OpenSCAD library for empty space/holesHow to specify rotation origin in openscadOpenSCAD editor font is unreadableOpenSCAD 2018 Command lineOpenSCAD “not valid 2-manifold” useful informationWhy is 2 / -2 / 2 equal to -2 in OpenSCAD? (Mathematical Order of Operations)
$begingroup$
Z-fighting is a 3D rendering artifact of coplanar surfaces (means, triangles are located in exactly the same plane, and overlap).
It can happen in OpenSCAD's preview mode when doing a difference() or union() operation. In case of difference(), the rendering artifacts can prevent seeing into a hole in the object. The "compile and render" mode in OpenSCAD does not have z-fighting issues, but it can take some time to render an object.
How best to avoid z-fighting?
If the answer involves changes to the code, I would love to see an idiomatic answer / established convention of OpenSCAD coders, if that exists.
openscad
New contributor
tanius is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
$endgroup$
add a comment |
$begingroup$
Z-fighting is a 3D rendering artifact of coplanar surfaces (means, triangles are located in exactly the same plane, and overlap).
It can happen in OpenSCAD's preview mode when doing a difference() or union() operation. In case of difference(), the rendering artifacts can prevent seeing into a hole in the object. The "compile and render" mode in OpenSCAD does not have z-fighting issues, but it can take some time to render an object.
How best to avoid z-fighting?
If the answer involves changes to the code, I would love to see an idiomatic answer / established convention of OpenSCAD coders, if that exists.
openscad
New contributor
tanius is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
$endgroup$
add a comment |
$begingroup$
Z-fighting is a 3D rendering artifact of coplanar surfaces (means, triangles are located in exactly the same plane, and overlap).
It can happen in OpenSCAD's preview mode when doing a difference() or union() operation. In case of difference(), the rendering artifacts can prevent seeing into a hole in the object. The "compile and render" mode in OpenSCAD does not have z-fighting issues, but it can take some time to render an object.
How best to avoid z-fighting?
If the answer involves changes to the code, I would love to see an idiomatic answer / established convention of OpenSCAD coders, if that exists.
openscad
New contributor
tanius is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
$endgroup$
Z-fighting is a 3D rendering artifact of coplanar surfaces (means, triangles are located in exactly the same plane, and overlap).
It can happen in OpenSCAD's preview mode when doing a difference() or union() operation. In case of difference(), the rendering artifacts can prevent seeing into a hole in the object. The "compile and render" mode in OpenSCAD does not have z-fighting issues, but it can take some time to render an object.
How best to avoid z-fighting?
If the answer involves changes to the code, I would love to see an idiomatic answer / established convention of OpenSCAD coders, if that exists.
openscad
openscad
New contributor
tanius is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
tanius is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
edited 42 mins ago
tanius
New contributor
tanius is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
asked 4 hours ago
taniustanius
1435
1435
New contributor
tanius is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
tanius is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
tanius is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
$begingroup$
The general advice in the OpenSCAD community is to "extend your cuts and embed your joins" (source). Not just because of the rendering artifacts but also because z-fighting can cause unexpected errors during STL export.
So you would change the dimensions of your objects very slightly (0.01 mm works fine) so that:
- for a
union(), there is overlap volume between the parts - for a
difference(), the intersector has volume both inside and outside of the intersected part
Now you could adjust both the size and position of your parts to keep the mathematically exact dimensions for the resulting part. But I found that for the purposes of 3D printing, such accuracy is not worth it because it complicates the formulas so much.
Instead, I adjust either position or size of a part, depending on what is simpler in each case. A measure in the final design will be off by 0.01 mm, which does not matter.
And I keep the 0.01 mm offset in a variable called nothing (picked that up somewhere and liked it …). This keeps the calculations intuitively understandable.
Example
To create a cylinder and cut a hole to half of its depth, it would do this:
//!OpenSCAD
nothing=0.01;
height=40;
difference()
cylinder(h=height, r=20, center=true);
translate([0, 0, height/4 + nothing])
cylinder(h=height/2, r=15, center=true);
Now the hole is nothing=0.01 less deep than half of the cylinder – that's the inaccuracy I accept.
(Note: You can try the above code online by copy & pasting it into OpenJSCAD. Include the magic comment in the first line to switch it to OpenSCAD syntax.)
New contributor
tanius is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
$endgroup$
1
$begingroup$
Your answer is the one I'd post for this question. You add the parameter "nothing" while I use "addabit = 0.1" for most z actions.
$endgroup$
– fred_dot_u
2 hours ago
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "640"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
noCode: true, onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
tanius is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2f3dprinting.stackexchange.com%2fquestions%2f9794%2fhow-to-prevent-z-fighting-in-openscad%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
The general advice in the OpenSCAD community is to "extend your cuts and embed your joins" (source). Not just because of the rendering artifacts but also because z-fighting can cause unexpected errors during STL export.
So you would change the dimensions of your objects very slightly (0.01 mm works fine) so that:
- for a
union(), there is overlap volume between the parts - for a
difference(), the intersector has volume both inside and outside of the intersected part
Now you could adjust both the size and position of your parts to keep the mathematically exact dimensions for the resulting part. But I found that for the purposes of 3D printing, such accuracy is not worth it because it complicates the formulas so much.
Instead, I adjust either position or size of a part, depending on what is simpler in each case. A measure in the final design will be off by 0.01 mm, which does not matter.
And I keep the 0.01 mm offset in a variable called nothing (picked that up somewhere and liked it …). This keeps the calculations intuitively understandable.
Example
To create a cylinder and cut a hole to half of its depth, it would do this:
//!OpenSCAD
nothing=0.01;
height=40;
difference()
cylinder(h=height, r=20, center=true);
translate([0, 0, height/4 + nothing])
cylinder(h=height/2, r=15, center=true);
Now the hole is nothing=0.01 less deep than half of the cylinder – that's the inaccuracy I accept.
(Note: You can try the above code online by copy & pasting it into OpenJSCAD. Include the magic comment in the first line to switch it to OpenSCAD syntax.)
New contributor
tanius is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
$endgroup$
1
$begingroup$
Your answer is the one I'd post for this question. You add the parameter "nothing" while I use "addabit = 0.1" for most z actions.
$endgroup$
– fred_dot_u
2 hours ago
add a comment |
$begingroup$
The general advice in the OpenSCAD community is to "extend your cuts and embed your joins" (source). Not just because of the rendering artifacts but also because z-fighting can cause unexpected errors during STL export.
So you would change the dimensions of your objects very slightly (0.01 mm works fine) so that:
- for a
union(), there is overlap volume between the parts - for a
difference(), the intersector has volume both inside and outside of the intersected part
Now you could adjust both the size and position of your parts to keep the mathematically exact dimensions for the resulting part. But I found that for the purposes of 3D printing, such accuracy is not worth it because it complicates the formulas so much.
Instead, I adjust either position or size of a part, depending on what is simpler in each case. A measure in the final design will be off by 0.01 mm, which does not matter.
And I keep the 0.01 mm offset in a variable called nothing (picked that up somewhere and liked it …). This keeps the calculations intuitively understandable.
Example
To create a cylinder and cut a hole to half of its depth, it would do this:
//!OpenSCAD
nothing=0.01;
height=40;
difference()
cylinder(h=height, r=20, center=true);
translate([0, 0, height/4 + nothing])
cylinder(h=height/2, r=15, center=true);
Now the hole is nothing=0.01 less deep than half of the cylinder – that's the inaccuracy I accept.
(Note: You can try the above code online by copy & pasting it into OpenJSCAD. Include the magic comment in the first line to switch it to OpenSCAD syntax.)
New contributor
tanius is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
$endgroup$
1
$begingroup$
Your answer is the one I'd post for this question. You add the parameter "nothing" while I use "addabit = 0.1" for most z actions.
$endgroup$
– fred_dot_u
2 hours ago
add a comment |
$begingroup$
The general advice in the OpenSCAD community is to "extend your cuts and embed your joins" (source). Not just because of the rendering artifacts but also because z-fighting can cause unexpected errors during STL export.
So you would change the dimensions of your objects very slightly (0.01 mm works fine) so that:
- for a
union(), there is overlap volume between the parts - for a
difference(), the intersector has volume both inside and outside of the intersected part
Now you could adjust both the size and position of your parts to keep the mathematically exact dimensions for the resulting part. But I found that for the purposes of 3D printing, such accuracy is not worth it because it complicates the formulas so much.
Instead, I adjust either position or size of a part, depending on what is simpler in each case. A measure in the final design will be off by 0.01 mm, which does not matter.
And I keep the 0.01 mm offset in a variable called nothing (picked that up somewhere and liked it …). This keeps the calculations intuitively understandable.
Example
To create a cylinder and cut a hole to half of its depth, it would do this:
//!OpenSCAD
nothing=0.01;
height=40;
difference()
cylinder(h=height, r=20, center=true);
translate([0, 0, height/4 + nothing])
cylinder(h=height/2, r=15, center=true);
Now the hole is nothing=0.01 less deep than half of the cylinder – that's the inaccuracy I accept.
(Note: You can try the above code online by copy & pasting it into OpenJSCAD. Include the magic comment in the first line to switch it to OpenSCAD syntax.)
New contributor
tanius is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
$endgroup$
The general advice in the OpenSCAD community is to "extend your cuts and embed your joins" (source). Not just because of the rendering artifacts but also because z-fighting can cause unexpected errors during STL export.
So you would change the dimensions of your objects very slightly (0.01 mm works fine) so that:
- for a
union(), there is overlap volume between the parts - for a
difference(), the intersector has volume both inside and outside of the intersected part
Now you could adjust both the size and position of your parts to keep the mathematically exact dimensions for the resulting part. But I found that for the purposes of 3D printing, such accuracy is not worth it because it complicates the formulas so much.
Instead, I adjust either position or size of a part, depending on what is simpler in each case. A measure in the final design will be off by 0.01 mm, which does not matter.
And I keep the 0.01 mm offset in a variable called nothing (picked that up somewhere and liked it …). This keeps the calculations intuitively understandable.
Example
To create a cylinder and cut a hole to half of its depth, it would do this:
//!OpenSCAD
nothing=0.01;
height=40;
difference()
cylinder(h=height, r=20, center=true);
translate([0, 0, height/4 + nothing])
cylinder(h=height/2, r=15, center=true);
Now the hole is nothing=0.01 less deep than half of the cylinder – that's the inaccuracy I accept.
(Note: You can try the above code online by copy & pasting it into OpenJSCAD. Include the magic comment in the first line to switch it to OpenSCAD syntax.)
New contributor
tanius is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
edited 29 mins ago
New contributor
tanius is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
answered 4 hours ago
taniustanius
1435
1435
New contributor
tanius is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
tanius is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
tanius is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
1
$begingroup$
Your answer is the one I'd post for this question. You add the parameter "nothing" while I use "addabit = 0.1" for most z actions.
$endgroup$
– fred_dot_u
2 hours ago
add a comment |
1
$begingroup$
Your answer is the one I'd post for this question. You add the parameter "nothing" while I use "addabit = 0.1" for most z actions.
$endgroup$
– fred_dot_u
2 hours ago
1
1
$begingroup$
Your answer is the one I'd post for this question. You add the parameter "nothing" while I use "addabit = 0.1" for most z actions.
$endgroup$
– fred_dot_u
2 hours ago
$begingroup$
Your answer is the one I'd post for this question. You add the parameter "nothing" while I use "addabit = 0.1" for most z actions.
$endgroup$
– fred_dot_u
2 hours ago
add a comment |
tanius is a new contributor. Be nice, and check out our Code of Conduct.
tanius is a new contributor. Be nice, and check out our Code of Conduct.
tanius is a new contributor. Be nice, and check out our Code of Conduct.
tanius is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to 3D Printing Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2f3dprinting.stackexchange.com%2fquestions%2f9794%2fhow-to-prevent-z-fighting-in-openscad%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown