Variable scale

Variable scale

* I am after a method to distort an object (essentially the planar facade of a building) by applying a non-linear scaling factor to the vertical Y dimension. The grid shown in the screen shot should “thin out” as height increases and the load on the frame decreases. As a result the diagonal ribs would turn into mild curves.
* I have the intuitive feeling that there is a geometric trick to achieve just what I want, but I seem to be suffering from a mental block right now.
* Needless to say, I could divide the panel into separate horizontal bands and scale those individually (eg factors 1, 1.1, 1.2, ...). Also needless to say, this would introduce a stack of problems / artefacts which I want to avoid.
* Poking in the scripts department of the forum got me nowhere, though I could have missed it.

* Thank you for any hints.
* Servus from Vienna
 

Attachments

  • Screen Shot 2016-08-25 at 10.10.47.png
    Screen Shot 2016-08-25 at 10.10.47.png
    142.6 KB · Views: 331
Hi Helmut

By scaling factor, are you after a continuous proportion like:
• phi (0.618... : 1 : 1.618...)
• √2 (1 : 1.4142...)
• √3 (1 : 1.732...)
• √5 (1 : 2.236...)

Cheers
Chris
 
Similar Effect

No idea how to non-linearly scale a 3D model like the one depicted, but a similar 2D effect might be "good enough" depending on how much detail you require.

The basic idea is to use a gradient node to determine the scale of a pattern.

http://www.cheetah3d.com/forum/showpost.php?p=100169&postcount=6

Cheetah 3D is good for visualizing a concept, but usually not for precise CAD/CAM-style plans. With sufficient resolution, a 3D Relief or Displacement based on a 2D grayscale image might be OK for a render.

This is unlikely to satisfy Helmut's requirements, but it might be a useful for another user with a similar idea. The beauty of using a Gradient or Image node is that non-mathy folks can get complex effects by using a more intuitive or visual approach.
 
FWIW:
* I decided to redesign the grid based on a collection of merged splines (horizontal, vertical and diagonal) which are pathed with a square cross-section.
* In C3D you can merge splines, but points are not merged. As a result you get n-tuple co-located points at intersections. As a benefit, you can use the n-tuples for useful effects (eg meshed wire and weaving patterns).
* However, you can area-select a set of points (including horizontal or vertical “strips”) and tweak the position. Selecting horizontal point-sets, of course, allows me to set the vertical distances of the ribs to the required location, determined by an arithmetic / geometric progression.
* See screen shot #1.

* I have also checked the option of exporting the .jas and using Rhino as a backend engine for advanced transformations of the grid, using their FlowAlongSrf command. This significantly simplifies editing the facade, as I just have to point-edit the NURBS-controls of the target surface to achieve a “customised” grid.
* Export and re-import of the scene is trivial. For complex objects (eg 3D space frames on a double curved surface) development time is significantly reduced. Some additional experiments are still needed to optimise workflow and precision.
* See screen shots #2 & #3 for a 3D space frame applied to a hyperboloid surface (as it looks in Rhino) and the identical space frame applied to a spheric substrate (as il looks in C3D). The HB shape should be doable in C3D (bend into a 270° tube and use a pinch modifier), the spheric space frame - I :confused: - can only be achieved with rather complex geometric manual twaekery which may take hours.
* Servus from Vienna:tongue:
 

Attachments

  • SS#1.png
    SS#1.png
    143.7 KB · Views: 254
  • SS#2.png
    SS#2.png
    183.4 KB · Views: 247
  • SS#3.png
    SS#3.png
    318.1 KB · Views: 239
Non-linear scaling: Two simple ways

I’ve been thinking about this concept for a while, when trying to design things that have surfaces or textures that gradually curve or diminish. It seems like most everything in nature has this appearance, from nautilus shells to distribution graphs. I only use two CG programs, Photoshop and C3D, so here are some alternative techniques that don’t require Rhino etc.

As illustrated in a recent forum post, I think Hiroto’s PolygonToSpline.js script is fantastic for building complex space frames. Model in polygons, extract edges as splines, then use those as the Path in a Sweep Creator, with an n-Edge Spline for the profile. What makes this so powerful is that you can use all the Polygon tools and object Modifiers to get a shape with subtle and precise compound curves, using an intuitive/visual technique, then instantly convert it to a space frame. It’s not perfect; the connections sometimes require a little tweaking if the render reveals tiny details, but it’s 99% of all I need.

http://www.cheetah3d.com/forum/showthread.php?t=11871

http://www.cheetah3d.com/forum/showpost.php?p=102095&postcount=21

Like the ancient Greeks, I understand geometry in visual terms, like using a compass and ruler. Here are a couple of ways that you can make a non-linear scaled plane as a basis or reference for a model.

In the first example, I approximate Phi (.618 : 1 : 1.61) or the Golden Mean by making a series of ring cuts, each time sliding the ring cut point along the far edge until the Status indicator reads “Status: edge=0.62.” Note that as the cuts get narrower you can zoom in to keep getting a precise 0.62. When you are satisfied it’s cut enough, delete the last/narrowest strip.

In the second example, I superimpose a wireframe 36 corner/segment disc snapped to a corner of the square, then make ring cuts aligned with the disk points. The disk could be scaled to an oval to change the non-linear scaling effect (the proportional change from ring cut to ring cut).

These simple techniques might be enough to get the intended non-linear scaling without undue calculations or even using the ruler tool. For greater precision, maybe just zoom in.
 

Attachments

  • scale1.jpg
    scale1.jpg
    56.2 KB · Views: 217
  • scale2.jpg
    scale2.jpg
    80 KB · Views: 217
Last edited:
This would actually be pretty easy to script (and I've never written a scripted modifier :) ).

You could actually write a modifier that allows you to provide an expression pretty easily (if the expression were crap it would simply do nothing and display a message).

PS: I just realized you cannot write scripted modifiers, only scripted primitives which use information found elsewhere in the scene. The grapher example actually does something pretty close to what I'd do, in essence I'd expect the user to write the body of a function f(p: Vector3, t): Vector3 which would be arbitary. It would look at the first mesh object inside it (or all mesh objects inside it) and produce a new mesh with the points processed by the method.

I hadn't noticed grapher before, but it would let you do things like overlapping waves very easily, and more complex simulations with more trouble.
 
Last edited:
Back
Top