![](/i/fill.gif) |
![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Hello Nathan,
What a lot of job from you again!!
There are a simple rule to find the good way to implement normal:
1) When you scale UNIFORMLY an OBJECT, and if you place the camera
in a proper way, you cannot see a change for the normal (and also
for the complete texture!!).
2) When you scale NON-UNIFORMLY an OBJECT, you can see a difference
for its normal (and also for its texture), because the modification
are not the same in all direction. One can also understand this as
follow: because the scaling is NON-UNIFORM, you don't have the same
object at the end of the scaling and its texture must follow this
change also! But when you scale UNIFORMLY en OBJECT, in fact, you
get the same object! You can see that there are a scaling only if
the object is compare to another (which is not scale). With other
words, if I scale a scene uniformly, I get the same scene, exactly
the same scene!
3) When you scale UNIFORMLY a NORMAL, of course, you must see a
difference for the appearance of the surface of the object
(you get a different object: it keeps the same shape but not
the same surface).
Because here, by scaling the normal, you change the
caracteristic of the surface. But this must be uniform in all
direction. So there are wider and deeper, slope unchange.
4) When you scale NON-UNIFORMLY a NORMAL, you must see a difference
also but the change is no-uniform so the slope will change.
Remark : the points 2) and 4) are automatic and come from the points
1) and 3). When you make the code to implement
the point 1) and 3) (value for scaling for x = value for
scaling for y = value for scaling for z), if you put now
different value for the scaling along each axis, you will
get the behavior describe for the points 2) and 4)
All this behavior are not a question of felling this must be like it.
This is logical. Moreover all other soft work like this (even if this is
shader instead of texture/material)
So here is my answer:
1) A
2) B
3) A
4) A
5) B
6) A
Ho! I am just looking the other message and I see that we are ok with
this :)
Thank again Nathan for your work!
Fabian.
Nathan Kopp wrote:
>
> I am wondering what people really think about how normals and scaling should
> work. If you're interested in this topic, please see this page and take the
> 'surface normal survey'. You can reply by emailing me or reply to this
> post.
>
> http://nathan.kopp.com/normals.htm
>
> -Nathan
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Ken <tyl### [at] pacbell net> wrote:
: If you glue sand to the surface of a box, like the one used in your examples,
: as you scale the x & z directions the sand will be further apart but the
: relative height of the roughness on the surface will remain unchanged. Since
: we are talking surfaces here, if you glued sand to a thicker box, all you
: would have is sand with the same granular size on a larger box. It's surface
: roughness would remain unchanged. Therefore it is important to remember that
: scaling an object should not change the surface normals depth. It may change
: the slope and scale of the pattern but not it's physical depth.
Note that there is a difference between scaling the object before or
after applying the texture.
It's like with pigment. If you don't want the scaling of the object to
affect its pigment, you should scale the object before applying the pigment.
The same with normals: If you don't want the scaling to affect the normals,
you should scale the object first.
Now there's an interesting question: What if you want the scaling of the
object to affect the pigment but not the normals?
--
main(i,_){for(_?--i,main(i+2,"FhhQHFIJD|FQTITFN]zRFHhhTBFHhhTBFysdB"[i]
):5;i&&_>1;printf("%s",_-70?_&1?"[]":" ":(_=0,"\n")),_/=2);} /*- Warp -*/
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Nieminen Juha wrote:
> Now there's an interesting question: What if you want the scaling of the
> object to affect the pigment but not the normals?
object
{....
pigment {...}
scale <...>
normal {...}
}
--
Wishing you Seasons Greetings, A Merry Christmas, and A Happy New Year !
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
1: A
Of course the slope should not change if we are scaling uniformly.
2: B
This is a tricky question. Since the normal modifier simulates a kind
of heightfield, one should expect this kind of non-uniform scale to affect
its depth. Thus, I think that B is the most correct behaviour.
The tricky part is what happens with the other sides of the box.
Unfortunately you didn't show them in the pictures, so I can't judge.
Since we are scaling more in the x and z directions, the slopes in the
sides of the box should get deeper (and the pattern "squeezed" in the y
direction due to the scale, of course), as a heightfield applied to the
sides of the box would. Does it do this?
If the slopes in the sides of the box get also less deep (as in the top),
then I think that it's not a correct behaviour.
3: A
This is the same as question 2 but in the other direction. If it works
like 2, then it's ok.
4: A
5: B
6: A
I don't think that there's any difference between these and the three
previous.
If megapov already works this way, then I apologize for my behaviour.
--
main(i,_){for(_?--i,main(i+2,"FhhQHFIJD|FQTITFN]zRFHhhTBFHhhTBFysdB"[i]
):5;i&&_>1;printf("%s",_-70?_&1?"[]":" ":(_=0,"\n")),_/=2);} /*- Warp -*/
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
I think that the behaviour of the normal modifier should not be
dependant on the pattern type.
--
main(i,_){for(_?--i,main(i+2,"FhhQHFIJD|FQTITFN]zRFHhhTBFHhhTBFysdB"[i]
):5;i&&_>1;printf("%s",_-70?_&1?"[]":" ":(_=0,"\n")),_/=2);} /*- Warp -*/
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Nieminen Juha wrote:
>
> I think that the behaviour of the normal modifier should not be
> dependant on the pattern type.
I agree. The model, whatever it is, should be consistant for all patterns.
--
Wishing you Seasons Greetings, A Merry Christmas, and A Happy New Year !
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Ken <tyl### [at] pacbell net> wrote:
:> Now there's an interesting question: What if you want the scaling of the
:> object to affect the pigment but not the normals?
: object
: {....
: pigment {...}
: scale <...>
: normal {...}
: }
But does this work? The pigment and the normal are part of the same
texture.
--
main(i,_){for(_?--i,main(i+2,"FhhQHFIJD|FQTITFN]zRFHhhTBFHhhTBFysdB"[i]
):5;i&&_>1;printf("%s",_-70?_&1?"[]":" ":(_=0,"\n")),_/=2);} /*- Warp -*/
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Nieminen Juha wrote:
>
> Ken <tyl### [at] pacbell net> wrote:
> :> Now there's an interesting question: What if you want the scaling of the
> :> object to affect the pigment but not the normals?
>
> : object
> : {....
> : pigment {...}
> : scale <...>
> : normal {...}
> : }
>
> But does this work? The pigment and the normal are part of the same
> texture.
If you avoid the texture wrapper it does. Try this and you will see that
the pigment pattern scales with the box but the normal remains uneffected.
It is all in how you order the operations in the object statement.
camera { location z*-4 >look_at 0}
light_source{<-10,10,-10>rgb 1}
box{-1,1
pigment {gradient y color_map{[.5 red 1][.5 blue 1]}}
scale <1,1,1>
normal {crackle 1 scale .5}
translate x*-1
}
box{-1,1
pigment {gradient y color_map{[.5 red 1][.5 blue 1]}}
scale <1,.5,1>
normal {crackle 1 scale .5}
translate x*1
}
--
Wishing you Seasons Greetings, A Merry Christmas, and A Happy New Year !
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Ken <tyl### [at] pacbell net> wrote:
:> But does this work?
: If you avoid the texture wrapper it does.
Ok. Then I think there should not be any problem with the ABAABA behaviour.
(Yes, there still is a problem with declared textures...)
--
main(i,_){for(_?--i,main(i+2,"FhhQHFIJD|FQTITFN]zRFHhhTBFHhhTBFysdB"[i]
):5;i&&_>1;printf("%s",_-70?_&1?"[]":" ":(_=0,"\n")),_/=2);} /*- Warp -*/
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Let me put it this way:
*If you scale the object (uniformly), all the attributes of the object
should look the same, ie: you zoom out the appropriate ammount, and it looks
the same.
*If you scale the normal (uniformly), the normal should scale, but the depth
remain the same. To control depth, use bump_size.
*If you scale the object (non-uniformly), all the attributes of the object
should fit in the same space as before scaling, ie: like if they were pasted
to it and squished or stretched with it.
*If you scale the normal (non-uniformly), the normal should squish or
stretch, with the depth remaining the same. Again, to control depth, use
bump_size.
So, in conclusion, the depth should maintain itself along with the scale, so
the object looks the same, no matter what scale. To change the depth, use
bump_size. This is my humble opinion. Now, to answer your survey:
1) A
2) B
3) A
4) None of the above? I don't understand what "slope" is, but I know that
all the attributes of the normal should scale according to the scale, thus
becoming deeper and larger, or shallower and smaller, depending on the scale
applied.
5) In this case, the normal should be more tightly packed in the y region
than in the x and z regions, and thus B?
6) None of the above. Here, it should stretch in the y direction, but the
depth should remain the same.
A) The normal is part of the texture "glued" to the object, so it should
"stick" to it and look the same. Perhaps B, although it looks too deep for
my taste.
B) B
C) A
D) B
I hope I was consistent in my responses and reasonings, Mom interrupted me
like 10 times to call people to thank them for my graduation presents. I
even got a cell phone! =)
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |