<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/a-cautionary-tale-about-continuity-v0uiywcz9" -->

---
title: A cautionary tale about continuity | daily.dev
description: A developer building a solid modeling kernel encountered a subtle rendering bug while designing a cabin model: a sawtooth roof pattern appeared as a flat...
canonical: https://daily.dev/posts/a-cautionary-tale-about-continuity-v0uiywcz9
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: A cautionary tale about continuity | daily.dev
og:description: A developer building a solid modeling kernel encountered a subtle rendering bug while designing a cabin model: a sawtooth roof pattern appeared as a flat...
og:url: https://daily.dev/posts/a-cautionary-tale-about-continuity-v0uiywcz9
og:image: https://api.daily.dev/og/posts/v0UIywCz9.png
og:image:alt: A cautionary tale about continuity
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# A cautionary tale about continuity

**[Matt Keeter](https://daily.dev/sources/mattkeeter)** · 3 min read · 0 upvotes · 0 comments

## Summary

A developer building a solid modeling kernel encountered a subtle rendering bug while designing a cabin model: a sawtooth roof pattern appeared as a flat surface. The root cause was a jump discontinuity in the modulo operator used to create domain repetition. Because automatic differentiation returns undefined gradients at the discontinuity, surface normals were computed incorrectly, making shingles invisible. The fix involves constructing each tooth of the sawtooth wave using constructive solid geometry so that the field is continuous at the domain boundaries before applying domain repetition with modulo.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://mattkeeter.com/blog/2025-04-12-continuity>

---

Tags: [#graphics-programming](https://daily.dev/tags/graphics-programming)

[View this post on daily.dev](https://daily.dev/posts/a-cautionary-tale-about-continuity-v0uiywcz9)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"A cautionary tale about continuity","url":"https://daily.dev/posts/a-cautionary-tale-about-continuity-v0uiywcz9","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/a-cautionary-tale-about-continuity-v0uiywcz9"},"datePublished":"2026-03-31T12:29:58.055Z","dateModified":"2026-03-31T12:57:20.120Z","description":"A developer building a solid modeling kernel encountered a subtle rendering bug while designing a cabin model: a sawtooth roof pattern appeared as a flat...","image":"https://media.daily.dev/image/upload/s--2-1xRawN--/f_auto/v1722860399/public/Placeholder%2011","thumbnailUrl":"https://media.daily.dev/image/upload/s--2-1xRawN--/f_auto/v1722860399/public/Placeholder%2011","isAccessibleForFree":true,"articleSection":"Matt Keeter","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Matt Keeter","logo":"https://media.daily.dev/image/upload/logos/placeholder.jpg","url":"https://daily.dev/sources/mattkeeter"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/a-cautionary-tale-about-continuity-v0uiywcz9","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"graphics-programming","timeRequired":"PT3M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Matt Keeter","item":"https://daily.dev/sources/mattkeeter"},{"@type":"ListItem","position":3,"name":"A cautionary tale about continuity"}]}
```

