#IPAS/Plug-Ins Wish List
53 messages in this thread
I'm starting this Thread as a place to put ideas for new IPAS/Plug-Ins where
developers can see them. Post away! 🙂
Here's one I thought of today: how about an .APX that at render time
compares the current camera view with the object, and renders the object as-is
but also renders a new object which basically "outlines" the 3D object as seen
from the current view, thus providing a 2D-like cartoon look? This would be a
great way to get cartoon animation. Optionally, the original object could be
not rendered leaving only the outline, so you could export that as a .FLiC into
Animator Pro/Studio to use as the basis for 2D animation!
Here are a few of my wishes…
A custom pallet generator running in 3DS.
Fish eye lense.
hair
grass that will sway in the wind
>> A custom pallet generator running in 3DS.
Fish eye lense. <<
Lee
And, of course, a spell checker!!<G>
TedB
-Ted Boardman
!^NavFont01F000DMGJHGzMG|HG5B9FF0
<<Here's one I thought of today: how about an .APX that at render time compares
the current camera view with the object, and renders the object as-is but also
renders a new object which basically "outlines" the 3D object as seen from the
current view, thus providing a 2D-like cartoon look?>>
Looking at some Disney characters right now I see that they are not only
outlined but all the inner sections( lips, checks, etc ) are also given a line.
So while it may appear at first that you could just do an edge-finding search,
it is more complex that that since you don't want to display all the edges only
particular ones.
I have worked out an algorithm to create such lines for any given object, even
to produce smoothed outline edges from faceted objects including the silhouette
which is necessary for cartoon characters.
Given that the routine would output an image, I think this would be best coded
as an .IXP that works on the objects in the scene to produce the "outlined
image".
DaviD "Keeping my crayons within the outlines" GouID
David,
I have had to do manual outline tracing of 3DS images in Corel and it does work
but is quite tedious. I'd be interested in your outline IPAS.
But when?
Alec Jason
<<I'd be interested in your outline IPAS. But when?>>
I'm know looking into the feasibility of developing such an IPAS. Depending on
what the developers kit offers me, I'll be able to determine if I can extract
enough information from the 3DS scene to compute the boundary and interior
outlines.
I'll let you know how I progress.
But in the meantime could you *outline* what your requirements are for such an
IPAS. What specifically do you want it to do?
DaviD "Hi Ho it's off to work we go…" GouID
I think you'd find a lot of interest in such a routine, David. There was a
thread here a while back where at least three or four of us expressed desire to
buy something like this.
If you ever get anything worked out, count me in (I want to do DISNEY!).
<<I think you'd find a lot of interest in such a routine, David. There was a
thread here a while back where at least three or four of us expressed desire to
buy something like this.>>
I'm now looking into the feasibility of developing such an IPAS. Depending on
what the developers kit offers me, I'll be able to determine if I can extract
enough information from the 3DS scene to compute the boundary and interior
outlines.
I'll let you know how I progress.
But in the meantime could you *outline* what your requirements are for such an
IPAS. What specifically do you want it to do?
In addition to the animated character outlines, such a routine would be useful
for generating technical illustrations of mechanical parts and architectural
buildings. In fact any 3DS object and/or scene that you wanted converted to an
illustration(pen and ink strokes only) would benefit from such a routine. You
could also create hidden-line removal images(something that isn't currently
supported easily in 3DS).
DaviD "Hi Ho it's off to work we go…" GouID
>But in the meantime could you *outline* what your requirements are for such an
>IPAS. What specifically do you want it to do?
It sounds like you have a pretty good idea already, David. We need the outline
of the object, as well as hidden line removal, and then (the tough one,
although Jonas suggested that routines similar to those in LensFX for the
outline glow) the lines also have to cross over the body of the object
correctly, as when a character's arm moves across the body you need to see both
"lines" of the outline of the arm as well as the outline of the body. Since I
don't understand the 3D logic involved, I'm not sure how it would be determined
where such a line ended (when the arm actually attached into the body) and I
guess that's the really programming problem. However, in the previous thread
Gary said he thought it was doable (then again, he said he thought ANYTHING was
doable).
Once that was programmed then only niceties have to be added, such as thickness
of outline, color, etc. If I were writing it (and I understood such things —
I'm a simple humble database programmer) I wouldn't worry about the color of
the object, because that can be done now with a self-illuminated material. By
leaving that aspect alone, one might achieve interesting shaded effects even
within the outline. Indeed, using a Video Post combination of wire shading and
self-illumination, you can achieve nearly all the right effects EXCEPT for the
@$#@#$@ "arm across body" problem!
While Gary is excited about photorealism, I personally think that this
animation capability would be the hottest thing to come to 3DS ever. It would
bring all the power of 3DS to cell-type animation.
Giving more thought to it, I figured out a better way to do it. It should
indeed be an .IXP, not an .AXP. But it would use the Z-Buffer (with the
appropriate change to 3DS.SET made, which should already be enabled if you have
LenzFX up and running) to determine the "edges" of objects. A parameter in the
Setup box could allow you to set how much of a difference in Z-Buffer (depth)
values for adjacent pixels would be needed to be detected as an "edge." This
would nicely solve the "arm-across-the-body" problem. Basically, the Z-Buffer
can be considered as a grayscale image (with 32-bit instead of 8-bit values for
precision, such that black is 0 and white is over 4 billion instead of merely
256 — or you can consider the Most Significant Byte as the mantissa and the
other three bytes as the decimal portion of a fixed-point scaled-integer
fraction, so that black is 0.0 and white is 255.9999999403954 [which is about
what 255 and 16,777,215/16,777,216ths works out to]) such that the value of
each pixel is a meaure of the DISTANCE between the camera and the point on the
object nearest the camera at that pixel location, with black being no object
(infinite distance, aka the Background) and pure white would be a point on an
object that is right at the Z-Clip distance from the camera itself, with grays
progressing toward black with increasing distance. This is how LenzFX does its
rack-focussing and other cool effects. Where the Z-Buffer values of adjacent
pixels are close together, it can be assumed that the pixels are part of the
same object. But where there is a sudden and sharp discontinuity between
Z-Buffer values for adjacent pixels, then they are almost certainly parts of
different objects, which means we've found an EDGE!
Perhaps the makers of LenzFX would be the best people to put out such an
Outlining .IXP, as they've proven their skill at dealing with the Z-Buffer. I
think it would make a handy addition to LenzFX Version 2.0. 🙂
As for outlining facial features, etc., that's what texture mapping is for.
<g>
Related wish for 3DSr"5" (the _real_ r4): multiple .AXPs per object,
preferrably unlimited. The scrolling list dialog for this would have a
three-state button for each .AXP that would tell it whether that .AXP would be
passed: the bounding box, the original object unmodified by any prior .AXPs, or
the object as it exists after having been modified by any prior .AXPs
(allowing, for instance, Bones Pro to act on a Skinned object, or vice-versa!).
Another IPAS-related wish: since many of us have The Scripting Extension
(not me, yet, or else I'd probably have whipped up an Outline script by now!)
and can thus write plug-ins in a high level language, would any of the
professional IPAS Plug-Ins developers be interested in working out deals
wherein they purchase or license TSE BASIC scripts that others of us have
developed and translate them into C coded IPAS routines and market them? Such
an arrangement could lead to an explosion in quality IPAS Plug-Ins, since a lot
more of us who have great ideas can implement them in TSE BASIC than in C! Yet
TSE BASIC scripts, particularly for .IXPs, .AXPs, and .SXPs, would likely not
sell well because they would be so slow. (The speed isn't as important for
.PXPs and .KXPs, as they don't have to execute repeatedly for each frame at
render time, but are used only occasionally during scene and animation design,
so a market for such scripts in their original TSE BASIC forms is more viable.)
<<Basically, the Z-Buffer can be considered as a grayscale image (with 32-bit
instead of 8-bit values for precision, such that black is 0 and white is over 4
billion instead of merely 256>>
What is the bit-resolution of the Z Buffer in 3DS?
<<Where the Z-Buffer values of adjacent pixels are close together, it can be
assumed that the pixels are part of the same object. But where there is a
sudden and sharp discontinuity between Z-Buffer values for adjacent pixels,
then they are almost certainly parts of different objects, which means we've
found an EDGE!>>
I tried the Z-buffer approach awhile ago but found that the problem of not
being able to differentiate between two objects means that some lines that
should be created aren't. For instance if you rendered a front view that showed
two boxes sitting side by side each other with no gap between them, the edge
where they both touch won't be created since the Z-Buffer depth remains the
same across the two boxes without any change. The problem is that the Z-buffer
doesn't contain information as to which object a particular Z depth belongs.
Instead, I've opted for an AXP that creates the outline in 3D at rendering
time. By creating the outline in 3D you can assign any texture you want to it,
allowing for infinite rendering possibilities, including bumpy outlines,
reflective shiny outlines, and even outlines casting shadows etc.
DaviD "Lumpy bumpy outlined porridge" GouID
Good point about adjacent objects that are the same distance from
the camera. That may be able to be handled by referring to the
bounding boxes in the .LOC files produced at render time (the same
files that the now-defunct FLARE.IXP from Yost used), but that would
only show the rectangular bounding boxes, not the actual boundaries
of the objects (in your example, it would not work if the seam
between the two boxes was at any angle on the screen other than
straight horizontal or straight vertical). Still, though, that
situation should be rare enough in generating cel-type animations.
I assume the Z-buffer is 32-bit from the comment in the r"4"
3DS.SET file for the VPOST-ZBUFFER:
;Setting VPOST-ZBUFFER to YES causes a Z-buffer to be allocated and computed
; during rendering from Video Post. =At 4 bytes per pixel=, this buffer can be
; large; for example for a 640×480 image, the Z-buffer is 1.2 MB. This is
; needed by certain types of IPAS Plug-Ins. Default is NO.
;VPOST-ZBUFFER = YES
4 bytes per pixel = 32 bits per pixel. SEEZ.IXP (available in the AMMEDIA
Library) extracts the Z-buffer from the Video Post [KF-Scene] item above it and
replaces the image buffer with a version of the Z-buffer visualized as a
grayscale image formed by truncating the 32-bit values to 16-bit values. When
the bitmap is saved (assuming you Video Post rendered to disk) to any standard
file format, the 16-bit image is either truncated or dithered down (depending
on the DITHER TRUECOLOR setting) to an 8-bit grayscale image, which can then be
fed to such programs as those nifty stereogram image makers.
But the OUTLINE.IXP would have access to the full 32 bits, which
means that adjacent objects would have to be REAL close together
Z-wise in order to not be distinguishable from the .IXP Z-buffer. 32
bits means over 4 BILLION different possible values! About the only
thing I can think of which would cause a problem here would be an
assembled jigsaw puzzle viewed face-on when you wanted to outline
each puzzle piece. For such cases, copying the objects in-place, then
3D-scaling the copies up from local axis VERY slightly, and linking
these copies to their originals and AutoEdging them and assigning the
copies a Wire material would do the outlining job nicely, but that's
tedious and doesn't work as well for objects with more complicated
geometry.
> but the OUTLINE.IXP would have access to the full 32 bits <
An algorithm that simply calculates the slope of a surface by comparing the Z
value of neighboring pixels would work for adding the "outlining". Such an
algorithm would inherently accomodate overlapping, edging, and radiused
surfaces. A user-definable slope value woud be handy.
— James — Choreo Motion —
That's basically what I had in mind.
I do see one small problem with such an algorithm. Large surfaces that are
nearly (but not quite) parallel to the camera's vector would produce very wide
black lines. Maybe a max thickness threshold would keep lines from getting too
wide, but this has its problems too.
— James — Choreo Motion —
Are there any Alpha Channel IPAS routines out there.
Oliver Muoto
Xaos Tools, Inc.
Hi Oliver,
<< Alpha… IPAS.. >>
File Info for NOALPH.ZIP
Section: IPAS Usage Contributor: 76702,413 Size: 13636
Submitted: 10/4/94 Type: Binary Accesses: 257
Title: Alpha Channel stripper IXP for 3DS Video Post.
Keys: YOST GROUP PD IPAS IXP STRIPS ALPHA CHANNEL VIDEO POST
This little freebie Yost Group IXP solves the problem with not being
able to use the Alpha>0 option in various other IXP's when
compositing multiple-layer effects because the multiple layer's alpha
channels are combining. NOALPH.IXP can strip out the alpha channel
at any point in a Video Post sequence, overcoming that limitation and
providing a clean slate for the next layer's compositing effect.
File Info for ADOT.ZIP
Section: IPAS Usage Contributor: 70673,1605 Size: 24069
Submitted: 3/29/94 Type: Binary Accesses: 165
Title: Alpha Dot
Keys: IXP IPAS 3DS ALPHA CHANNEL METHEMOGLOBIN HYPOXIA
IXP routine that will set the value of the upper left pixel of an
image's alpha channel. Confused? Wait 'till I explain what that's
needed for….
Freebie, use at your own risk… If you melt down another Chernobyl,
don't cry for me Argentina…
(Approximate download time at 2400 bps using CIS B: 1:20)
File Info for ALPHA.ZIP
Section: IPAS Usage Contributor: 76702,413 Size: 29095
Submitted: 1/16/93 Type: Binary Accesses: 427
Title: Alpha channel viewer IPAS routine for 3D StudioR2
Keys: ALPHA IXP CHANNEL VIEWER IPAS ROUTINE YOST GROUP
ALPHA.IXP is an image processing external process for 3D Studio R2 that allows
you to view the alpha channel within a 32-bit image for image diagnostic
purposes.
It's useful for checking an images alpha to see what that image will do when
composited with other images. This is a Public Domain IPAS routine from Yost
Group, Inc.
File Info for T32-24.ZIP
Section: Utilities Contributor: 76077,2774 Size: 8571
Submitted: 6/5/92 Type: Binary Accesses: 125
Title: TARGA 32-bit to 24-bit file stripper
Keys: TARGA TIPS ALPHA STRIP
Strips 32-bit uncompressed Targa (.TGA) files to 24-bit files. Useful
for avoiding the 3D Studio 2.0 Video Post bug regarding 32-bit
textures used in the KF Scene. Also strips the TIPS or TIPS+ palette
info, as well as info & postage-stamp found in TGA 2.0 file format.
Should work on any size file. Written in 'C' by Kevin Krell of
Computer Support Associates. Command line interface: T32-24
inFile.TGA outFile.TGA. UnZIPs to about 15K. Requires 286 or above.
. .(Approximate download time at 2400 baud using CIS B: 0:40)
File Info for ALPHA.ZIP
Section: IPAS Usage Contributor: 76702,413 Size: 29095
Submitted: 1/16/93 Type: Binary Accesses: 427
Title: Alpha channel viewer IPAS routine for 3D StudioR2
Keys: ALPHA IXP CHANNEL VIEWER IPAS ROUTINE YOST GROUP
ALPHA.IXP is an image processing external process for 3D Studio R2 that allows
you to view the alpha channel within a 32-bit image for image diagnostic
purposes.
It's useful for checking an images alpha to see what that image will do when
composited with other images. This is a Public Domain IPAS routine from Yost
Group, Inc.
File Info for T32-24.ZIP
Section: Utilities Contributor: 76077,2774 Size: 8571
Submitted: 6/5/92 Type: Binary Accesses: 125
Title: TARGA 32-bit to 24-bit file stripper
Keys: TARGA TIPS ALPHA STRIP
Strips 32-bit uncompressed Targa (.TGA) files to 24-bit files. Useful
for avoiding the 3D Studio 2.0 Video Post bug regarding 32-bit
textures used in the KF Scene. Also strips the TIPS or TIPS+ palette
info, as well as info & postage-stamp found in TGA 2.0 file format.
Should work on any size file. Written in 'C' by Kevin Krell of
Computer Support Associates. Command line interface: T32-24
inFile.TGA outFile.TGA. UnZIPs to about 15K. Requires 286 or above.
. .(Approximate download time at 2400 baud using CIS B: 0:40)
>> Looking at some Disney characters right now I see that they are not only
outlined but all the inner sections( lips, checks, etc ) are also given a line.
So while it may appear at first that you could just do an edge-finding search,
it is more complex that that since you don't want to display all the edges only
particular ones.
I have worked out an algorithm to create such lines for any given object, even
to produce smoothed outline edges from faceted objects including the silhouette
which is necessary for cartoon characters. <<
Hey! I'm in the market for one of those routines!!!!!!!!
I've got a high-profile job coming up that has to look like traditional cel
animation and I'm having nightmares contemplating tracing the edges of each
object in Meshpaint! (And my nightmares were even more horrifying before
Meshpaint's release!)
I will be happy to sell you my children and any other family members (I have a
strict no-return policy) in order to get a routine like this! Please contact me
via e-mail if you would be interested in adding yet another job to your busy
schedule.
Thanks!! Sean Platter 75721,1564
Hi there,
I've got a really good one ….:::
Imagine this:
When rendering an animation, the camera is so smart that is never renders
anything (meaning any image or shadow etc) until it get into camera view, as
soon as it is out of camera view, it is no longer rendered. Imagine how much
time could be saved in a perfect world like this!
– Could this ever happen ? –
Mark in Canada.
<<When rendering an animation, the camera is so smart that is never renders
anything (meaning any image or shadow etc) until it get into camera view, as
soon as it is out of camera view, it is no longer rendered.>>
If I understand your question, you want 3D Studio to ignore objects that are
outside the camera view. But, 3DS(and almost all rendering packages) does this
already. It would exclude any object outside the camera view and clip those
objects that intersect the camera view. This process is part of the standard
rendering pipeline of almost rendering packages.
Though if you are using reflections, 3DS would have to take into consideration
those objects outside the camera view since they may be reflected in objects
seen from the camera. Also if an object is outside the camera view but it's
shadow is seen by the camera then it must be processed also.
DaviD "Culling objects" GouID
Mark,
<< When rendering an animation, the camera is so smart that is never renders
anything (meaning any image or shadow etc) until it get into camera view >>
This already does happen for objects.
Mark
Mark <this already does happen for objects> True. However, if an object is in a
scene though not visible to the camera, does the renderer load the applied maps
simply because the object is in the scene?
Jeffrey,
<< this already does happen for objects> True. However, if an object is in a
scene though not visible to the camera, does the renderer load the applied maps
simply because the object is in the scene? >>
Yes I believe so. I haven't even thought about the texture map loading.
Mark
Mark <texture map loading> Below all my scenes are dummies assigned to portions
of the scene and are used exclusively for hidding larg portions not seen by the
camera. Makes development so much easier (i actually have a standard X Y Z
numbered grid with color scheme that lays the foundation for all my PRJs…
took me a few years to finally get some standard routinization/naming
conventions/color assigns in place. Jeffrey
Hi Jeffrey,
This sounds like an interesting concept. I don't understand what you exactly
mean ?… lets say you built a "wall" in front of part of a scene that was in
the camera's view, eventhough that part of the scene would not be "scene"
(haha) would it not still be rendered because it was in the camera's view ?
I didn't get what you meant by: Below your scenes you have created dummies…
very interesting.
Mark.
Hi Mark,
neither did I, (textures loading ) while not rendering, hmm, interesting eh?
hope yo read my previous message, … about being able to click on any frame
and tell 3ds to start rendering or stop rendering an object at that frame.
…
It would go like this …
FRAME 212: START RENDERING OBJECT :TABLE-1 ? (Y) (N) , Frame Duration : _____
imagine the possibilities!!!
Mark in Montreal.
( I know I'm crazy for just thinking it!, but one day this will be an option!)
Hi Jeffrey,
Hmm, good question,
I have always been under the assumption that eventhough an object is not in
camera range, maps are still applied to the object, thus increasing rendering
time.
This is really what I was taking about though, say we have a model of a house,
at the beginning of the animation, you see the outside of the house only.
Eventhough you only see the outside shell of the house, the house still
contains walls, pictures, tables, chairs etc, and the back of wall of the
house, and other stuff. Everything is in camera range, but you don't seen ANY
of the inside articles. The thing is that everything is still being rendered,
eventhough you only see the outside of the house in the rendered image. I guess
my original comment was a bit misleading. I just thought it would be cool to
have the program smart enough to know that the stuff INSIDE the house should
not be rendered.
*** how about this : Being able to actually tell 3ds at a certain frame, to
start rendering an object!, in the keyframer, you could actually click on a
frame number, and yo would be able to click on objects to start rendering or to
stop rendering … I guess this is what I meant and badly explained it. Sorry.
Well, could this ever happen ?? if so, that would be super!
Mark in Montreal.
Mark <being able to actually tell 3ds at a certain frame, to start rendering an
object> That's what HIDE KEY in your TRACK INFO is all about. There is a
distinct difference though between an object you DISPLAY/HIDE and an object you
INSERT HIDE KEY and that has to do with whether or not the mapping is loaded.
Jeffrey
>>Mark <being able to actually tell 3ds at a certain frame, to start rendering
an object> That's what HIDE KEY in your TRACK INFO is all about. There is a
distinct difference though between an object you DISPLAY/HIDE and an object you
INSERT HIDE KEY and that has to do with whether or not the mapping is loaded.
Hmm… I had thought hiding a key hides the info in the key itself, not the
object to which the key referred. I'll take a look in the manual once I get
offline….
Hi Jerome,
well, if this works, I'd be amazed, because I did not know this existed, I'll
have to ask a few friends.
thanks,
let me know also if you find out.
Have you actually done this ?
Mark.
>>Hi Jerome, well, if this works, I'd be amazed, because I did not know this
existed, I'll have to ask a few friends. thanks, let me know also if you find
out. Have you actually done this ? Mark.
Hmm… my apologies, but what was the particular comment about that you're
referring to? I have made a few, and can't immediately place that one. Will
try scanning the cf for my earlier entry in the thread… -JK
Hi Jerome,
We were talking about 3ds being able to start rendering or stop rendering an
object a a certain frame. As far as I know this does not exist. You said it
may, hmmm, …
Mark.!
>>We were talking about 3ds being able to start rendering or stop rendering an
object a a certain frame. As far as I know this does not exist. You said it
may, hmmm, …
Right, I looked back and found that. I'm sure you saw the pursuant message.
I'd like to hear more about techniques people are using to save time on unseen
objects and jumping from camera to camera during an animation sequence.
Ok, I dug it up – luckily, it was still around 😉
Ok, I was talking to you about wishing to be able to make certain objects
appear and disappear throughout an animation.
you said you didn't know this existed. That was my point. I haven't
discovered that it does. There was a comment about using the HIDE KEY command,
which I have yet to look up in the manual and play around with, so I can't
vouch for its merits yet.
As I said, what I've done so far with such objects as light has been to keep
their falloff at a minimum until just before the camera enters the room, then
quickly expand it to where I want it.
I have yet to find out the BEST method for switching from one camera to another
in the middle of an animation without rendering in seperate segments. This
would be a nice little VP feature, which would allow cross fades from one angle
to another without seperate renderings from each camera and re-rendering. -JK
Mark: further to my reply about Hide Key. We are probably getting a few
concepts entangled here. I'll try to make some sense, and address the "dummies
under the scene", mentioned earlier. Hide Key is very useful in all sorts of
keyframing tricks, but I believe that the renderer still loads the maps of an
object, though it is in a Hidden Key State. On the other hand, DISPLAY/HIDE
takes an object out of a scene, and it's maps are ignored. So… this is where
my Dummy-Hidders and Base Grid come in handy. Before constructing a project I
create a series of dummies that correspond to different sectors of my project.
By Parenting sector dummies to all objects in corresponding sector I can hide
and unhide large portions of a scene very quickly. This is very useful when
testing, tweaking and whatnot. Then, when i am at the output render stage, it
is very easy to DISPLAY/HIDE entire sections of my scene. The Base Grid is just
a cheap trick so I can find where I am very quickly, regardless of orthogonal
tendency to GET LOST. Under my entire scene is a wide spaced grid that is
actually made up of quadrants, each quadrant gets a different color assignment.
So, at a glance, I can see from any orthogonal view, where in Orthogonal Hell I
am. The 9 quadrant grid is easily hidden and unhidden, and really comes in
handy. It recieves no shadows, casts no shadows, excluded from all lights and
is totally transparent… so if it is ever "visible" to a view render, it poses
no problem. However, it is usually hidden when I'm at a tweak/render/tweak
level. Sheeeeesh, now that I'm typing this it is making me aware of a bunch of
little tricks I use to deal with XYZ disorientation… little pointers up down
and around etc etc etc. hahahha Jeffrey
Hi Jeff,
ahh, now I understand!
that is a very neat trick,
I'm going to try this,
so wha you actually do is kind of link all the objects say in room-a to a
master object dummy-a, all objects in room-b to dummy-b,
then on hiding dummy-b it in turn hides every in room-b !!
that is pretty good!, never thought of this. I can see how in a project with
100 items or even 20 items.
thanks for the tip!
Mark.
Mark – glad you liked the D-hides (can also be used to freeze/unfreeze huge
portions of set). A couple of years ago I just stopped everything i was doing
and spent about 3 days just organizing some coherent methodology so that this
3-DS world could be kept reasonable. Naming conventions, color assignments,
unit size and global coordinates, dummy layers and on and on. Still tweak at
the basic structure, but it really helped keep my head on straight. Jeffrey
Very GOOD point. That's one thing I was wondering about in the process of
doing walk-thrus. Very often, the camera will be in one particular room, and
only those objects need to be considered for rendering. What's more, all the
various ray-traced lights, etc. that might exist in other rooms are likewise
unneccesary. Nonetheless, their existence in other parts of the scene greatly
increases rendering time.
I would like to see an ability to switch thesse objects on and off throughout
the animation, just like you can DISPLAY/HIDE and DISPLAY/UNHIDE objects in a
more gobal sense. That way, lights that are only visible in one particular
room can be left off, furniture in that room may be left hidden until you enter
that room, thus saving MOUNDS of computation time.
So far, how I've been getting around this has been laborious. I've been
choosing ssequences that I render seperately, and turn off the uneeded objects
and lights globally before rendering the segment. As for ray-traced lights,
etc., I have tended to keep their falloff value at a minimum until the camera
enters the room (or – just before), then adjust the falloff to the needed value
until after the camera leaves. Obvioussly, this can be done with proper
keyframing. However, being able to flick ocjects and lights into and out of
existence would be IMMENSELY helpful in architectural walk-thrus.
I also wonder – this may be a basic question here, but is there a way to switch
from one camera to another in the middle of an animation?
-JK
Mark, you're correct that 3DS renders everything within the FOV of
the camera, regardless of whether it is blocked by other objects or
not. The reason for this is simple: transparency. 3DS has no way of
knowing whether a given object will be at all visible through layers
of objects in "front" of it which may or may not have transparency
(remember opacity maps!) applied to them, or may have "holes" in
them, etc. In order to determine whether opacity maps (such as
windows in your hypothetical house) might allow some "behind" objects
to be partially or fully seen, 3DS would have to apply the opacity
maps ANYWAY. The computations that would be required to handle this
for every pixel would be quite extensive, and slow enough that it
would eat up whatever would be saved. Thus there is no performance
benefit of doing it that way.
3DS uses a Z-buffer, by which it knows how far away from the camera
each pixel of each object is, ranging from 0 for the background to a
very high number for an item right at the camera location. 3DS makes
the pixel the color of the object (counting maps, lighting, etc.)
whose Z-buffer value for that pixel is the highest, and thus the
closest to the camera, unless there is any transparency or opacity
for that object involved at that pixel. If so, it has to compute the
next closest object's pixel as well, and so on, and either subtract
them or add them together (based on the type of transparency) to
generate the final color of that pixel. This is why transparency slows
down rendering so much, and the more layers of transparency you have,
the slower it gets.
Release 3 added "Hide Keys" in the Keyframer which do precisely
what you want, albeit not automatically. It should be possible to
write a .KXP or even a KeyFramer Script (using the Release
"4"-included TSE-BASIC for KXP scripting module) to compute Hide keys
for objects outside the camera FOV or behind other objects if you
know there are no transparency or "holes" or opacity maps in your
scene. Such a script shouldn't be too hard to write. I may try my hand
at it, or someone else may want to jump in and do it.
Hi M&M,
<< 3DS uses a Z-buffer, by which it knows how far away from the camera each
pixel of each object is.. >>
I believe that 3DS *provides* a Z-buffer to IPAS programmers but uses
an A-buffer internally. Because the Z-buffer operates in image
precision, it is subject to aliasing. The A-buffer addresses this
problem by using a discreet approximation to unweighted area
sampling.
You are correct, Jonas. I was simplifying the situation. I know about the
A-buffer as opposed to Z-buffer, but that's internals and isn't germane to the
discussion on IPAS routines since the A-buffer isn't made available to them.
Hi M&M Concept, melts on the computer screen, not on your keyboard
Thanks very much for the info on this subject, concerning hide keys,
etc, having everyone jump into this really helps people out. thank
YOU! … On the subject of IPAS routines, download the MEIER.ZIP,
this is a super amazing IPAS routine from Mark A Meier, it is fully
loaded, not crippled, and works like a charm, you may have seen my
other message on this. Anyway, this routine can turn off lights turn
them on, deletet, hide, show, make selection set, .. too much to
explain, but just image by pointing to a light in a viewport, and
right clicking your mouse, and pulling down, the light turn off or
on!, they all work the same way, mouse click, pull the mouse, and it
does what you want in a second. delete an ojbect, turn off a light,
ect, anyway, I can't do this justice, an amazing IPAS routine, this
routine does most of the most common commands you use daily. Mark.
Hi Mark,
Hmmm, don't know if I agree with you 100%, it partially does this but it is not
100% effecient at doing this YET,
your turn he-he.
Mark.
Here is one I think would be usefull. The idea is to overcome the
repetitive-looking tiling on large areas when using a tiled texture. Here's
what I have in mind: A .BXP . . .
The users applies the mapping coordinates to the mesh and sets tiling to 1.0 in
both x and y directions. The Mat.-Ed. material for that mesh will have the the
BXP assigned in whatever slots are appropriate. The BXP has a dialog box that
lets the user provide an IFL of a set of texture maps. There is also a place
to enter the number of x and y "tiles" even though tiling really isn't going
to happen in the usual sense.
The BXP will take the user-supplied textures and tile them in a random way.
For example lets say I have five brick textures, A thru E, that are almost (but
not quite) identical and tile without seams. I want to apply these textures to
a wall in a 3 x 5 tiling. the BXP would then tile in a matrix like this:
ABCDE
CEDBA
ACDEB
This gives the large brick wall a nice random brick look rather than the
repetitive look that is hallmark to traditional tiling.
There is another advantage to this method over a manual process: MEMORY. For
example, say these five maps are each 100×100. Thats 30K uncompressed. The
BXP would tile five of these maps randomly over ANY sized area and only consume
30K * 5 maps, or about 150K. Conversely, If I manually construct the matrix
shown above, I would require at least a 500 x 300 map, which is 450K. Imagine
the savings on a sphere tiled 100 x 100 !!! (Of course, there would be a
_small_ overhead by the BXP, but the saving would still be tremendous).
There are a number of uses for this BXP besides brick walls. One could easily
crate a complex circuitry type pattern with four or five maps, or a maze-style
pattern, or paint speckles, or whatever. If anyone is interested in developing
such a BXP, I'd be willing to invest in the development. In any case, I'd like
to see some feedback on this idea.
(… and ten years of general programming experience tells me this can be coded
inside of a week if you already know how to code BXPs. So I think there's a
good ROI factor here.)
— James — Choreo Motion —
James,
Sounds like a great idea! I have problems ( I assume like everyone ) with
tiling things like brick walls, usually look great close. But from a distanse
show repetitive banding. I wish that I could help with the programing, but I'm
still learning scripting.
When you get it done let us know, I already have several uses in mind.
-Matt (Active Media Graphics)
-Matthew Vaughn
That's an excellent idea, and close to another one I had earlier, and the
two could be merged! How about, in addition to what you suggested, the .BXP
could perform random TRANSFORMS (rotation at random 90 increments combined
with optional horizontal and/or vertical mirroring) on the cells? When used
with properly-designed tiles that can tile seamlessly on all four edges
regardless of which edges "connect" (such as sand or granite or woven cloth,
etc.), there would be an effect of a much larger bitmap than is actually used!
The two could be combined so that you could specify multiple tiles, and
specify the rotations and mirrorings that each could handle and still appear
seamless (if seamlessness is a concern — it wouldn't be for a brick wall or
bathroom or ceiling tiles, etc. — such tiles could be, if square, rotated and
mirrored in any manner without concern, while bricks and other non-square tiles
could be rotated 180 but not 90 or 270 , while some other tiles might not
tile well if mirrored vertically but do if mirrored horizontally — such limits
could be specified in the controlling text file).
A sample controlling file for floor tiling for a short hallway (10 tiles
wide, 20 tiles long) with three specific 64×64 pixel tile images which could be
rotated and mirrored in any manner might look like this:
TOTAL-TILE = 10×20
EACH-TILE = 64×64
U-OFFSET-PER-ROW = 0
V-OFFSET-PER-COL = 0
TILE-1 = TILE1.GIF ROTATE ALL MIRROR ALL
TILE 2 = TILE2.GIF ROTATE ALL MIRROR ALL
TILE 3 = TILE3.GIF ROTATE ALL MIRROR ALL
For a brick wall with four brick-image tiles at 64×16 pixels, each row
shifted ? tile to the right from the previous row to simulate bricklaying, for
a total wall size of 40 bricks wide by 20 bricks tall:
TOTAL-TILE = 40×20
EACH-TILE = 64×16
U-OFFSET-PER-ROW = 0.5
V-OFFSET-PER-COL = 0
TILE-1 = BRICK1.TIF ROTATE 0,180 MIRROR ALL
TILE 2 = BRICK2.TIF ROTATE 0,180 MIRROR ALL
TILE 3 = BRICK3.TIF ROTATE 0,180 MIRROR ALL
TILE 4 = BRICK4.TIF ROTATE 0,180 MIRROR ALL
Unfortunately, it would NOT save on memory. .BXPs produce actual bitmaps
that are the full size of whatever is needed, and uncompressed to boot. It
would, however, save CONSIDERABLY on DISK space!
I think Rotate and Miror could simply be buttons in the Dialog Box, but your
method has the advantage of specific controls. I like your additions.
> Unfortunately, it would NOT save on memory. .BXPs produce actual bitmaps that
are the full size of whatever is needed <
Bummer. With all the programming experience I have (mostly custom database
stuff) one would think I'd already be a 3DS developer. I hope to dig into that
realm sometime after R5 — dollars permitting.
— James — Choreo Motion —
Uh, Rotate and Mirror can't be buttons in the Dialog Box, for the
simple reason that .BXPs can't have dialog boxes or any other
user-interface (at least not directly, or without bypassing the API
which would greatly interfere with future portability). They are
bitmap file import/export filters ONLY.
The usual workaround is to have a companion .PXP which presents a
dialog box and saves parameters into a file which the .BXP then
reads. Kaos Gradient Explorer for 3DS is an example of this. It has a
.PXP with its nifty KPT-type user interface, which saves the gradient
you design into a parameter file with a .GRA extension. Then a
GRA.BXP actually reads that parameter file and generates the actual
gradients you specified, creating the actual bitmaps to be used as
maps, backgrounds, Video Post layers, etc.
<< ..wishes.. >>
got 'em.
Jonas,
Can you please comment on our comments about the texture mapping stuff, while
rendering, even though the object is not in the camera view.
How about my idea, about having an option in the keyframer … being able to
click on any frame and a dialog box would pop up, and you would have the choice
of being able to start or stop rendering a certain object, and the actual
duration of the render. — Where would this be good ? … when rendering a
model house .. you first render the outside, then you fly inside. Actually this
would be the same as have an option that would be able to hide or show an
object at a certain frame number. – This would be invoked through the
keyframer. I have always though that this would be a very useful option.
Imagine a fly through of a house, you start outside, then fly through the front
door and into the kitchen. Well, rendering the kitchen and all it's kitchen
items would be a waste, when you don't see them, but as your camera nears the
kitchen, all of a sudden 3ds starts rendering the kitchen and it's items on the
frame number you suggest.
What do you think ? Could this be possible ?
Thanks!
Mark.
Hi Mark,
<< What do you think ?.. >>
It sounds very similar to how I currently use Hide keys for AXP's that are not
relevant to the current camera position.
jonas[adesk]