View Full Version : ZScript / Trigonometry puzzle...
Jaycephus
05-28-03, 01:46 PM
Hi ZScript coders! (you know who you are)
I am working on a polar (circular) array script that incorporates Davey's PointFromTo ZScript code to enable the objects in the array to point toward or away from the center of the array. It multi-markers each element of the array so that a complex polymesh object can be created.
I made this Mace Head model using the script:
http://www2.zbrushcentral.com/uploaded_from_zbc/200305/user_image-1054061151snl.jpg
The puzzle I have for you is how to modify the PointFromTo code to rotate the arrayed objects in the same way, consistently, regardless of which quadrant the object is in.
The current PointFromTo ZScript takes a shortcut that you don't notice unless you have a non-symmetrical object, and the object is on the same Z-Plane as the point towards which it is to be pointed. This picture illustrates the problem:
http://www2.zbrushcentral.com/uploaded_from_zbc/200305/user_image-1054153710ecd.jpg
The centerpoint is the center of the Sphere, and the XYZ objects have been first drawn in the document using the shift key to constrain them to their original or base orientation. Then the PointFromTo ZScript was used to point them toward the sphere. The smaller copies were first moved on the positive Z axis, behind the centerpoint, so that now they point toward the 'front'. The four larger copies were placed in each quadrant on the same Z coordinate as the Sphere. The problem is that each of the four large copies is rotated 180 degrees on a particular axis from any of the other three large copies.
Here is a picture of the result of running the polar array ZScript, and an additional problem that was not exposed in the test above:
http://www2.zbrushcentral.com/uploaded_from_zbc/200305/user_image-1054154254wcy.jpg
Because the array Zscript must work in the ZPlane, we see the same problem as above, where the copies in one quadrant are rotated 180 degrees out from the copies in any other quadrant. AND we also see that the copies at the zero- (visible at the middle of the near side) and 180 degree- (not visible, on far side) positions are in a unique and incorrect rotation.
The PointFromTo ZScript works by deriving and returning a transformation for only the X and Y axes, and ignores the Z. I believe the solution requires the addition of Z-axis transformations, and tests to detect in which quadrant the object is.
If anyone would like a bit of a challenge, then here is the ZScript:
polar array.zip (http://www2.zbrushcentral.com/uploaded_from_zbc/200305/user_file-1054154773bhj.zip)
Frenchy Pilou
05-28-03, 02:41 PM
Hehe
Headache in perspective :)
Pilou
Jaycephus
05-28-03, 03:07 PM
Hey, no laughing!
;)
If I threw in some helical action, I'd have ZNA!
:)
Gary Komar
05-28-03, 03:44 PM
cool script idea, havent looked into the text yet.this would come in handy!have tried it tho and did work. :tu:
PusGhetty
05-28-03, 04:18 PM
Oh Man,
I thought this was going to be an easy Pythagorean SOHCAHTOA problem! I haven't spent nearly enough time with the ZBrush scripting language to even think about tackling this one!
Have fun!
I'll definately keep an eye on this thread though as this is a very cool project!
Take care Jay,
Michael
Frenchy Pilou
05-29-03, 07:32 AM
Hi Jay http://www2.zbrushcentral.com/uploaded_from_zbc/200305/user_image-1054218630tkn.jpg
You right, this sort of function is missing !
All works fine :) What is the problem ?
I must re-read your first post :)
It's seems normal that if you want a 3 D rotatation you must use 3 Systems of axes :)
You will find surely something here :) (http://mathworld.wolfram.com/RotationMatrix.html) Google gives me that !
http://www2.zbrushcentral.com/uploaded_from_zbc/200305/user_image-1054220649iet.gif http://www2.zbrushcentral.com/uploaded_from_zbc/200305/user_image-1054220692amh.gif http://www2.zbrushcentral.com/uploaded_from_zbc/200305/user_image-1054220490kso.gif
Good luck :cool:
Pilou
Frenchy Pilou
05-29-03, 11:47 AM
http://www2.zbrushcentral.com/uploaded_from_zbc/200305/user_image-1054233947jsm.gif
Hi Jay
Is it normal that this Cylinder 3D can't takes another position than C ?
Have I missing a parameters ?
I have make some rotations before launch the script but always the same result !
Pilou
Jaycephus
05-29-03, 01:07 PM
You want to edit the object's orientation?
If you are changing the object's orientation in the Tool:Preview window, you have to press the Store button to transfer the rotation in the window to the actual tool. Otherwise, use the Deformation:Rotate slider.
You have the right idea. If you want the tool to point at a slight angle, or at a tangent to the rotation, you just change its orientation with the Preview window or the Rotate slider. But don't forget to press Store if you use the Preview window.
Unfortunately, this is one of the reasons the PointFromTo script needs to be worked on. As you can see from your colored cylinders above, if you put a slight rotation on the cylinder, the end result will have the 7 cylinders on the top half of the array pointing in one direction relative to their angle from the center of the array, and the 7 cylinders on the bottom half will be pointing in the opposite direction. The two cylinders at the 0-degree and 180-degree positions will be pointing in a third and fourth unique direction.
I'm sure I can fix this as soon as I have an evening to sit down and work on it.
Jaycephus
05-29-03, 01:23 PM
All my X's PointFromTo Texas...
http://www2.zbrushcentral.com/uploaded_from_zbc/200305/user_image-1054247443syh.jpg
This shows the different orientations possible when using the PointFromTo ZScript. To clarify a bit more, suppose the object was a head. Its nose (the Z axis) would always be turned to the center, but it might be orientated right-side-up, upside-down, or on its left or right side, all depending on which quadrant it is located in relative to the point to which the PointFromTo ZScript points it.
Frenchy Pilou
05-29-03, 02:37 PM
http://www2.zbrushcentral.com/uploaded_from_zbc/200305/user_image-1054244000rld.gif
Hi Jay
Ok for the different orientations :cool:
I have never use Store before :)
New question : Turbulence seems inoperative :confused:
Missed another thing or it's not operational (drawing on right) ?
Pilou
Jaycephus
05-29-03, 03:21 PM
Right, it is not operational in the polar array section. The rectangular array section is from Dave's ZScript tutorials, I think, and it does implement the turbulence. The objects will be semi-randomly rotated from their base orientation. Unfortunately, I think the random rotations are only in the positive directions.
I need to improve the turbulence code and add it to the Polar array. I want to be able to add some randomness both to the position and the orientation of each item in the array.
Frenchy Pilou
05-29-03, 06:40 PM
http://www2.zbrushcentral.com/uploaded_from_zbc/200305/user_image-1054258779jgv.jpg
Hi Jay
Ok for the rectangular turbulence :)
Pilou
Jaycephus
05-29-03, 08:02 PM
Yes, but notice that all copies are pointing to a random point in one quadrant. In other words, there appears to only be random rotations in the positive X, Y, and Z axes in the range of 0 < x < 90-degrees. None of the objects are pointing toward the rear and none of them are pointing to the left. I can't tell which is the front side of the object, but I bet that it is rotated to the right in every case. This is one of the things I will change in the turbulence code.
Frenchy Pilou
05-30-03, 12:26 AM
Hi Jay
Make a complet script is not a little work :)
Why Rectangular begin at the middle of the Canvas and the Polar at the 0,0,0 :)
So the rectangular is less flexible !
Keep it up! :cool:
Pilou
WingedOne
05-30-03, 07:59 AM
Hi, :)
This is going to be a very useful ZScript. :tu: There are many times this would have come in handy for me.
I took a look at your ZScript and these are the results I came up with so far.
Using the default settings I made an index of the rotations for Xangle, Yangle and currZ and where they were correct and what the rotations should be when they are incorrect.
Here are my results from going around each array object in a clocwise order from the top.
Going around the array in a clockwise direction
Xangle, Yangle, currZ
------ ------ -----
Top
90, 0, 0 Correct
Upper Right Quadrant
67.49, 90, 0 Correct
45, 90, 0 Correct
22.5, 90, 0 Correct
Right
0, 90, 0 Should be 0, 90, -90
Lower Right Quadrant
-22.5, 90, 0 Should be -22.5, 90, 180
-45, 90, 0 Should be -45, 90, 180
-67.49, 90, 0 Should be -67.49, 90, 180
Bottom
-90, 0, 0 Should be -90, 0, 180
Lower Left Quadrant
-67.49, -90, 0 Should be -67.49, -90, 180
-45, -90, 0 Should be -45, -90, 180
-22.5, -90, 0 Should be -22.5, -90, 180
Left
0, -90, 0 Should be 0, -90, 90
Upper Left Quadrant
22.5, -90, 0 Correct
45, -90, 0 Correct
67.49, -90, 0 Correct
What I've found is that in each of the cases were Xangle is negative, currZ needs to be at 180 degrees with the exception of the left and right cases where currZ needs to be 90 in the case where Yangle < 0 and -90 in the case where Yangle > 0. In both of those case Xangle is at 0.
What you'll probably need are some "if" statements right before your TransformSet command to change your currZ values when needed.
Hope this helps. :)
WingedOne
05-30-03, 09:14 AM
Here is a test of my results with the revisions to the ZScript code.
Here are the far too cute powderpuff blue alien bunnies performing a victory dance outside of their pink bunnyship. :D
http://www2.zbrushcentral.com/uploaded_from_zbc/200305/user_image-1054311107tkn.jpg
Revised ZScript:
polar array revised.txt (http://www2.zbrushcentral.com/uploaded_from_zbc/200305/user_file-1054311200cxi.txt)
Jaycephus
05-30-03, 09:39 AM
Excellent WO! :tu:
It looks like the blue bunnies are too cute for their own good, and have been multiplying 'like rabbits'. Some of them will have to be left behind when the flying saucer takes off.
;)
You should render that at a higher resolution and greater number of rays, at least 150. I think it's a great image.
Frenchy Pilou
05-30-03, 10:06 AM
Hi Winged One or jay
Is it the revision of the Jay Polar script ?
Pilou
juandel
05-30-03, 10:59 AM
supreme, both of you gurus! :tu:s to no end! heres a big request, no, make this two:
:b3: a dome/spherelike array. i assume it can be done with applying the radial feature several times, but an automatic-dome-grid would be fantabulous!
:b3: i always wanted automatic markers for objects in daveys inbetweener script - do you think thats possible?
a zillion thanks for this script and another zillion in advance for any thinking you might invest in my above suggestions!
- juandel
PS: i agree, those carousel-bunnies deserve a superneato WO-render :D
Frenchy Pilou
05-30-03, 11:04 AM
Hi Juandel
Good suggestions :)
Pilou
Jaycephus
05-30-03, 12:31 PM
Yes, I intended to add lots of stuff to the Array script. I was hoping to be able to do arrays not just in the X-Y dimension, but in the Z dimension as well. It is possible of course, BUT a polymesh cannot be made of such an array (in one step). This is because markers are only 2.5D. They retain Z-depth information, but only one marker can exist at a given X-Y coordinate. So the markers can be utilized in a 3D array as long as no two copies occupy the same X-Y coordinate. This should be OK for a half-sphere or dome array.
I'm thinking of adding several modifiers in terms of offsets and rows and 3D (domes, spirals, etc.)
I'm pretty sure a multi-marker option could be added to the InBetweener script with just a few lines of code.
Frenchy Pilou
05-30-03, 12:38 PM
Ok It's the same Script :)
http://www2.zbrushcentral.com/uploaded_from_zbc/200305/user_image-1054323317wtb.gif
Hi
Can you Initialise your script than the object "storing" in the Modifier Window view
will be in the same posisition than the first start object ?
Now we are obliged to make some trying for obtain the good position starting !
Painful isn't it ? :D
Pilou
Ps Your script is really crazzy !
No doubt than Zbrushers will make some amazing things with it !
Suggestion : permit mixed the Zadd Zsub Zcut in a same turn ?
example : Zadd Zsub Zadd Zsub etc...
Frenchy Pilou
05-30-03, 03:48 PM
Hi ZScript's coder
After seeing the Mentat Dino Challenge, A TVeyes technic makes me an idea :)
Should be possible to take an entiere canvas(with all inside)and make some repetitions of it on the Z axe ?
with of course some transparence or other functions :)
Or take the same canvas and make some stacks (on a 3D ground for choose the first inclinaison)
again in the Z axe ?
Pilou
Jaycephus
05-30-03, 04:08 PM
I got the idea to use PixolPick Zscript command to determine the Z-Height of each element in the array, allowing arrayed objects to conform to the pixols on the screen. This would allow the creation of any sort of dome shape, but also many other shapes as well.
http://www2.zbrushcentral.com/uploaded_from_zbc/200305/user_image-1054336097dfk.jpg
Well, the first items produced appear to be a mutant strain. The pixol-pick idea is good, but due to slight imperfections, the first row doesn't find a consistent height. It might find a pixol 20 units higher than the rest, and it might miss the edge entirely and picks a pixol at the back of the document, not on the edge of the sphere. So the first row should probably never use PixolPick if attempting to conform to a sphere and a perfect sphere shape is desired. I'll make it an option whether PixolPick is utilized on the first 'row'. There is also a problem with the PointFromAway code, or maybe how I keep track of the center point, because each row is pointing to a different center point. I'll work on it, and I hope these mutant strains don't escape into the wild.
Frenchy Pilou
05-30-03, 04:41 PM
Hi Jay
What I have missed ?
With the actual script I just success to make "front view" or "top view"
But Wingedone make a blue rabit circle with inclinaison ! What is the trick if it's possible with the script ?
I try put number in Z (no change apparent)?
Does the trick is to make the ring of rabbit, Polymesh : Export & Re-Import + little perspective ?
I suppose that is that :rolleyes: :)
Pilou
Jaycephus
05-30-03, 05:25 PM
Yes Pilou, you can either draw the MM object or go ahead and make the polymesh. No need to export. Then you can create more complex objects by adding polymeshes together.
Frenchy Pilou
05-30-03, 05:43 PM
Ok !
As a demo user, polymesh is not for me :)
Your Z Is effective or not ? (just for information)
Pilou
Mahlikus The Black
05-30-03, 07:16 PM
*head explodes*
juandel
05-30-03, 09:07 PM
now come on, MTB, look at my shirt - i picked it up at the laundry a few minutes ago :D but then, dont worry, i would have spilled my morning coffee on it out of excitement over learning that Jay is already down there working in my wishing well already :tu: :tu: :tu: thats looking fantabulous, mastermind!
Pilou: i think there is no need to make a polymesh and to load it into another session: you can select global perspective (shift + perspective-button in draw palette, then pixolpick depthinformation by clicking into distortion-slider, moving cursor to pixol you want to pick, release button) for the mm-tool!
but then you might be asking something completely different :D have you tried to rotate the object you are placing in the array via deformations/rotate yet?
here is a cylinder rotated x-25 before array-placements, no polymesh made:
http://www.cyber-webs.com/zbrush/juandel/array.jpg
hope this helps!
- juandel
Frenchy Pilou
05-30-03, 11:33 PM
Hi Juandel
You are a genious :D
And maybe with global Perspective :cool:
Pilou
Frenchy Pilou
05-30-03, 11:39 PM
Hi Jay
http://www2.zbrushcentral.com/uploaded_from_zbc/200305/user_image-1054362916yam.gif http://www2.zbrushcentral.com/uploaded_from_zbc/200305/user_image-1054364942fvr.gif
Without any regulating at the beginning of the Launch script :
For obtain the drawing (rosace) I must place the ring 3D in this position !
(of course the script drawing the object as the fin circle in the midle)
It's some frustrating !
Can you initialize the start of the script align to the position
of the object in the Modifier "Ojbect view" window ?
It's just a little rotation for you and change nothing for the rest of the script :)
And what a confort for the user :rolleyes:
We are some requiring :D
Pilou
Jaycephus
05-31-03, 02:23 AM
I'm not sure what you are asking for, Pilou... confused.
If I have a head that I want to array, and it is facing toward me in the preview, and I want it to face out from the center in the array, then I don't need to do anything. If I want it to face inward, then I can deselect the "Point Away" option in the script, OR I can rotate the head 180 degrees with Deformation:Rotate, OR I can rotate the head 180 degrees in the Preview window and press Store.
If the left ear is facing forward in the preview window, and I want the face to face outward in the array, then I know that I need to rotate on the Y axis -90 degrees, OR I can rotate it in the preview window, using SHIFT to constrain to 90 degree increments, then press Store.
If the face is toward me in the preview window, but I want the top of the head to point outward from the center of the array with the face pointing 'up', out of the screen, then I need to do two transformations: There are many combinations of two that will give the desired results, but one set is to rotate it 90 degrees around the X axis so that the top of the head is facing front in the preview window, and then rotate 180 degrees around the Z axis so that the face is pointing up in the preview window.
Please try to explain again if I don't understand what you want. Something may be lost in the translation. Thanks,
Frenchy Pilou
05-31-03, 03:42 AM
Hi Jay ---------- With a Ring3D -----------
http://www2.zbrushcentral.com/uploaded_from_zbc/200305/user_image-1054377564nuh.jpg
I just say that :)
(with polar script of course)
Unfortunatly the Modifier and Draw Object Preview Object don't take the same view !
It's in the Modifier view than you can "store" or deform an object !
The natural view is inversed / script !
Is that more clear ? :)
Pilou
Frenchy Pilou
05-31-03, 06:13 AM
http://www2.zbrushcentral.com/uploaded_from_zbc/200305/user_image-1054386549oce.gif
Juandel was absolutly right :cool:
Demo users can use the Multi markers with perspective global !
Here quick trying : some objects have perspective, no perspective, deform by Gyro, no deform ...
I can't imagine the possibilities and what that Zbrushers will be make with this new crazzy script !
Go ahead Jay :cool:
Pilou
Frenchy Pilou
05-31-03, 05:06 PM
http://www2.zbrushcentral.com/uploaded_from_zbc/200305/user_image-1054425975pea.gif
Roses to the infinite :cool:
And it's a 3D Model for the complet version users :eek: :eek: :eek:
(in the way that they can polymeshing modify export reuse etc... :)
and imaging the overview of a such object ! I don't put it because it's was Too much :cool:
I keep you the surprise and pleasure to make your own research :cool:
Powerful of the geometry (& Zbrush :D )& of course Jay+WingedOne ;)
Pilou
Bonecradle
05-31-03, 06:09 PM
This looks fantastic and very useful.
Which is the most up to date script, the original in Jaycephus' first post, or the one posted by Winged One?
I don't know the first thing about scripting so maybe it would be impossible, but I was wondering if a 'coverage range' (like for ring 3Ds, spheres, etc. under Initialize) would be useful?
EDIT: Actually, I guess you could just delete the markers you didn't want to get a coverage less than 360 degrees. Maybe just for convenience sake then - I always tiptoe through the multimarkers with my breath held and fingers crossed ;)
Frenchy Pilou
05-31-03, 11:57 PM
Hi Bone
It's the windgedOne Script the last version of the Jay's Script (it's the same)
I suppose that they work in "Tandem"
Before the coverage (future) you can make a rusctic coverage with erase Brush
(for the isolated objects) or erase some Markers :)
Pilou
Jaycephus
06-03-03, 01:28 AM
Update:
After trying the point-to code in 3 dimensions, I realized Winged One's code only works in the special case that the array is at the same Z-depth as the center-point. If I try to do a 3D array, like a sphere, then the Point-To code still has problems. I am working on that first. The original PointFromTo ZScript never properly calculated the Z Rotation component, and I am adding that in.
There was also another problem that I didn't see until now. Even when the array is at the same Z-depth as the centerpoint, the arrayed objects are flipped so that the Y-axis points down. This is 180 degrees from it's base orientation in the Preview window. It's not noticeable with spheres or ring tools, but non-symmetrical objects show the problem.
Hi Jacephus,
a very good ZScript :tu: :tu: :tu:
Sorry, but i can't see the code until next week.
Anyway i had some problem too (in my old script) when try to positioning some object with rotate statement. I never be able to set the object in the canvas as in Tool Window Preview.... :mad: :mad:
Thank you for share.
cameyo
Hi,Jaycephus & all :)
I'm pigma(not shikuri).
Jaycephus,your script is very fantastic! :eek:
I used your script.
And creaetd this.
http://www2.zbrushcentral.com/uploaded_from_zbc/200306/user_image-1054753304ifm.jpg
What do you think of this picture? :rolleyes:
The Namek
06-04-03, 12:43 PM
thanks for the script , looks useful for creating wonderful props like amulets and stuff. I'll try it out as soon as I can find some time to Z :)
Frenchy Pilou
06-04-03, 12:58 PM
Hi Pigma, not Shikuri
Very nice colorful rainbow sauna :) ;)
Have happy Arraying :cool:
Pilou
Ps For all Jay arraying lovers go there (http://www.pixolator.com/zbc-bin/ultimatebb.cgi?ubb=get_topic&f=1&t=011242) for concept of modeling with this script :cool:
Jaycephus
06-04-03, 07:13 PM
Pigma, the picture is cool :tu:
However, the second time I looked at it, I noticed the problem with the position of the ring. It looks like you put it in position after positioning the ring of women.
I don't know if you have the full version of ZBrush, so I'll outline a procedure for demo-users, and anyone with the full version can take it one step further by making and combining polymeshes.
I also like to use Perspective, which I don't think you used. I'll add that into the mix, but you can leave perspective off if you want.
To make a scene like yours, draw the glass in the scene, using shift to constrain its orientation. Mark the glass object. Using the array zscript, create the circular array of figures in the desired orientation. We now have all the markers for all of the objects EXCEPT the ring. Here is a problem, though. No two markers can exist in the same X,Y position in a document, so from a top-down view, we cannot have both a glass object and a ring object centered on the same point.
Two ways to complete the object without using polymesh:
1. The object is to create a scene with the ring of women, the glass, and the ring. Turn on Global Perspective by holding the Shift key and pressing the DRAW:Perspective button. Select the Multi-Markers tool and place the multi-marker object in the document. Orient it to suit your objective, and mark it. Now place the ring using the multi-marker you just created. The ring will probably have to be scaled, and it might need to be moved up or down to match the position of the women. However, once it is sized and aligned with one of the women, it will be perfectly aligned with all of them. The composition of the scene is finished.
2. In this case, it is possible to create a Multi-marker object out of all of the objects with a trick. It is only possible if the centers of all the objects are in unique positions, and the total object can be viewed from a position where none of the multi-markers occupy the same X,Y position. First, draw the Multi-marker object composed of the glass and the ring of women. Now rotate the entire object about 30-45 degrees so that none of the centers of the individual objects overlap. Exit Edit mode and press TOOL:MODIFIERS:Reposition. This repositions all Markers to match the new orientation of the Multi-marker object. Now draw the ring using the glass's multimarker. Scale and reposition the ring using the gyro to constrain it on its central axis. Now a marker can be added for it without overwriting another marker. Finally, the new, complete Multi-marker object can be drawn and positioned in the scene.
I hope this helps multi-marker users.
Frenchy Pilou
06-04-03, 11:57 PM
Hi Jay
I don't verify, a point of Multi-marker in "different layers" can or not have the same place ?
Pilou
Hi,Jaycephus thanks for your kindly comment.
I update this. ;)
http://www2.zbrushcentral.com/uploaded_from_zbc/200306/user_image-1054808280zjx.jpg
But I did'nt use all multi-markers.
Because, my computer may be cold :( .
I used perspective@this time.
Did become good? :p
Jaycephus
06-05-03, 08:42 AM
Pigma, It looks like it is all aligned. :tu:
Frenchy, I don't think multi-markers keep track of or are sensistive to layers. :(
Frenchy Pilou
06-05-03, 09:35 AM
Hi Jay
Yes, I try, they don't :(
It should be :D
Pilou
Hi Jay :)
I maybe crazy in your script :eek: :eek:
http://www2.zbrushcentral.com/uploaded_from_zbc/200306/user_image-1054851059jfv.jpg
I cannot stop work in your script.
This is very funtastic and interested and favirous and wonderful and.... :eek: :eek:
Sorry, I am little confused .
I want to tell you the highest eulogy. :)
This image is "The strange world of The Carousel"
Thank you very much.
My & shikuri's Renderosity Gallery (http://www.renderosity.com/gallery.ez?ByArtist=Yes&Artist=pigma)
SHIKURI URAJI'S HOUR (http://www.shikuri.com)
Jaycephus
06-05-03, 04:06 PM
:) Cool, Pigma... :tu:
I guess I need to make the Impossible Escher script. Well, I can't even complete this script with full 3D spherical arrays :(
Thanks, Pigma, Cameyo, Frenchy, and everyone else who likes this script. I'm still working on it when I have the chance.
Frenchy Pilou
06-07-03, 12:02 PM
Hi Jay
Have you the project to add this sort of function in the polar array?
Rotation in space ! (http://www.pixolator.com/zbc-bin/ultimatebb.cgi?ubb=get_topic&f=1&t=011288) (slide at the page bottom)
Pilou
Powered by vBulletin® Version 4.1.11 Copyright © 2012 vBulletin Solutions, Inc. All rights reserved.