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 did Captain America manage to do this?

Map of water taps to fill bottles

Why didn't the Space Shuttle bounce back into space as many times as possible so as to lose a lot of kinetic energy up there?

How to fry ground beef so it is well-browned

Which big number is bigger?

How come there are so many candidates for the 2020 Democratic party presidential nomination?

How to write a column outside the braces in a matrix?

Was there a Viking Exchange as well as a Columbian one?

Who was the lone kid in the line of people at the lake at the end of Avengers: Endgame?

Can an Area of Effect spell cast outside a Prismatic Wall extend inside it?

Minor Revision with suggestion of an alternative proof by reviewer

Implications of cigar-shaped bodies having rings?

Is there a way to generate a list of distinct numbers such that no two subsets ever have an equal sum?

What does the integral of a function times a function of a random variable represent, conceptually?

Does a large simulator bay have standard public address announcements?

Pre-plastic human skin alternative

Coordinate my way to the name of the (video) game

Pulling the rope with one hand is as heavy as with two hands?

Read line from file and process something

Extension of 2-adic valuation to the real numbers

What happens in the secondary winding if there's no spark plug connected?

Overlay of two functions leaves gaps

Mistake in years of experience in resume?

What is the smallest unit of eos?



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)













2












$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.










share|improve this question









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$
















    2












    $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.










    share|improve this question









    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$














      2












      2








      2





      $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.










      share|improve this question









      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






      share|improve this question









      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.











      share|improve this question









      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.









      share|improve this question




      share|improve this question








      edited 1 hour 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 5 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 Answer
          1






          active

          oldest

          votes


















          3












          $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.)






          share|improve this answer










          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











          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.









          draft saved

          draft discarded


















          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









          3












          $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.)






          share|improve this answer










          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















          3












          $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.)






          share|improve this answer










          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













          3












          3








          3





          $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.)






          share|improve this answer










          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.)







          share|improve this answer










          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.









          share|improve this answer



          share|improve this answer








          edited 56 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 5 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












          • 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










          tanius is a new contributor. Be nice, and check out our Code of Conduct.









          draft saved

          draft discarded


















          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.




          draft saved


          draft discarded














          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





















































          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







          Popular posts from this blog

          Canceling a color specificationRandomly assigning color to Graphics3D objects?Default color for Filling in Mathematica 9Coloring specific elements of sets with a prime modified order in an array plotHow to pick a color differing significantly from the colors already in a given color list?Detection of the text colorColor numbers based on their valueCan color schemes for use with ColorData include opacity specification?My dynamic color schemes

          Invision Community Contents History See also References External links Navigation menuProprietaryinvisioncommunity.comIPS Community ForumsIPS Community Forumsthis blog entry"License Changes, IP.Board 3.4, and the Future""Interview -- Matt Mecham of Ibforums""CEO Invision Power Board, Matt Mecham Is a Liar, Thief!"IPB License Explanation 1.3, 1.3.1, 2.0, and 2.1ArchivedSecurity Fixes, Updates And Enhancements For IPB 1.3.1Archived"New Demo Accounts - Invision Power Services"the original"New Default Skin"the original"Invision Power Board 3.0.0 and Applications Released"the original"Archived copy"the original"Perpetual licenses being done away with""Release Notes - Invision Power Services""Introducing: IPS Community Suite 4!"Invision Community Release Notes

          François Viète Contents Biography Work and thought Bibliography See also Notes Further reading External links Navigation menup. 21Google Bookspp. 75–77Google BooksDe thou (from University of Saint Andrews)ArchivedGoogle BooksGoogle BooksGoogle BooksGoogle booksGoogle Bookscc-parthenay.frL'histoire universelle (fr)Universal History (en)ArchivedAdsabs.harvard.eduPagesperso-orange.frArchive.orgChikara Sasaki. Descartes' mathematical thought p.259Google BooksGoogle BooksGoogle Bookspp. 152 and onwardGoogle BooksGoogle BooksScribd.comGoogle Books1257-7979Google BooksGoogle BooksGoogle BooksGoogle BooksGoogle BooksGoogle BooksGallica.bnf.frGoogle BooksGoogle Books"François Viète"Francois Viète: Father of Modern Algebraic NotationThe Lawyer and the GamblerAbout TarporleySite de Jean-Paul GuichardL'algèbre nouvelle"About the Harmonicon"cb120511976(data)1188044800000 0001 0913 5903n82164680ola2013766880073431702w6vt1sb70287374827140948071409480