Three-dimensional (3D) printing is becoming ubiquitous in a variety of environments. For example, many manufacturing arrangements regularly utilize 3D printing to manufacture or facilitate the manufacturing of various components.
For a more complete understanding of various examples, reference is now made to the following description taken in connection with the accompanying drawings in which:
Various examples described herein relate to three-dimensional (3D) printing. In various examples, a normal vector of the surface of the 3D object to be printed is determined based on voxel data associated with the 3D object. In various examples, a normal vector refers to the direction of a vector that is normal to a surface, such as a flat or contoured surface. The determined normal may be used to adjust at least one print parameter. For example, agents used for the surface voxel (e.g., agents with different color or thermal properties) may be adjusted to compensate for variations in the 3D print engine that may affect various properties (e.g., color) of the surface at various normal vectors. In various examples, the surface normal may be determined based on the voxel data without additional information. In this regard, a look-up table may be generated for a surface voxel. The look-up table may include values of a parameter of voxels around the surface voxel. For example, the look-up table may indicate whether a surrounding voxel exists or not. The look-up table may be used to determine a surface normal for the surface voxel.
Referring now to the figures,
The 3D print engine 130 of the example system 100 of
In the example system 100 of
Referring now to
The voxel representation may be indicated in voxel data that is used to print the 3D object 200 by a 3D print engine. As noted above, the voxels may be of a variety of shapes and sizes. In the example of
In various examples described herein, the determination of the surface normal 206 is based on a neighborhood of the surface voxel 210. In this regard,
Referring now to
In various examples, a look-up table may be generated or provided to indicate the status of each voxel. For example, a look-up table may be generated for the voxels of the voxel representation of the 3D object. In addition to voxels of the 3D object, the look-up table may include at least a limited amount of voxels around the 3D object to include, for example, a desired radius in each direction of the surface voxels of the 3D object. In some examples, the look-up table may include the status of each possible voxel in a print region of a 3D printer. Of course, a large look-up table may use a large amount of storage. Accordingly, the size of the look-up table may be traded off against memory availability.
For a 3D object, the look-up table may be populated with the status of each voxel covered in the look-up table. In one example, the look-up table is populated with a “1” for each voxel that is present in the 3D object and with a “0” for each voxel absent from the 3D object. Thus, the neighborhood 400 of
As noted above, the determination of the surface normal is based on a neighborhood of the surface voxel. In this regard, referring to the example of
In one example, as illustrated in the example of
In some examples, in order to make handling of the neighborhood more manageable and to simplify computation, the neighborhood may be divided into two or more sub-neighborhoods. For example,
In one example, a normal triplet (x, y, z) can be determined for each sub-neighborhood 430, 440, 450, with the x-y-z directions as indicated in
For the subject voxel 210, the above lookup table for the encoded sub-neighborhood 430 yields the triplet [0, +1.862, −1.862]. Thus, the three present voxels in the top sub-neighborhood influence the final determination or estimation of the surface normal by a weighted value that is at a 45-degree angle in the Y-Z plane.
Similar weightings may be calculated for the middle sub-neighborhood 440 and the bottom sub-neighborhood 450. For the middle sub-neighborhood 440, the sub-neighborhood 440 may be encoded as 111|111|000 or 0x1f8 (hex), and a partial look-up table may be as follows:
The look-up table for the sub-neighborhood 440 yields a triplet of [0, 2.414, 0]. Thus, the weighting is completely in the Y direction. For the bottom sub-neighborhood 450, the sub-neighborhood 450 may be encoded as 111|111|111 or 0x1ff (hex), yielding a look-up triplet of [0, 0, 6.138], or a weighting completely in the Z direction. The vector sum of the weighted results of the three sub-neighborhoods 730, 740, 750 yields an estimated resulting normal vector of [0, 4.276, 4.276]. The resulting normal vector may be normalized to a unit vector of [0, 0.707, 0.707]. Thus, in the example of
Referring now to
The example method may further include generating a look-up table for a surface voxel (block 720). As described above, the look-up table may be indicative of absence or presence of voxels in a neighborhood of the surface voxel. For example, the look-up table may indicate whether a voxel in a neighborhood of a subject surface voxel is present in or absent from the voxel representation of the 3D object. In various examples, the look-up table may be used to encode the neighborhood as a 27-bit word for a neighborhood have a radius of one voxel in each direction.
Referring again to the example method 700 of
Referring now to
At block 820, a radius of voxels is selected for use in neighborhoods for the 3D object. As noted above, in one example, a radius of one voxel in each direction is selected. In some examples, the radius may be two or more voxels in each direction. In some examples, the radius may be different in at least one direction from the other directions.
At block 830, a look-up table is constructed for the 3D object. In one example, the look-up table includes voxels of the 3D object and those in neighborhoods of each surface voxel. The look-up table may then be populated (block 840). As noted above, the look-up table may be populated with “1” for each voxel that is present in the voxel representation of the 3D object and with “0” for each voxel that is absent from the voxel representation of the 3D object.
At block 850, for at least one surface voxel, voxel information (e.g., status of the voxel) is obtained for each voxel in the neighborhood of the surface voxel. As noted above, the neighborhood of the surface voxel may be encoded as a word that has a length which corresponds to the number of voxels in the neighborhood.
At block 860, the surface normal for the surface voxel is determined based on the neighborhood voxel information. As described above with reference to
Referring now to
The example instructions include generate look-up table for surface voxel instructions 921. In various examples, the look-up table is generated from voxel data of a 3D object and includes a status of voxels in a neighborhood of a surface voxel. As noted above, the status of voxels indicates whether the voxel is present or absent in the voxel representation of the 3D object. For example, as noted above, a look-up table for a 3D object may be generate to indicate the presence or absence of voxels in at least the 3D object and the neighborhood of surface voxels.
The example instructions further include determine surface normal instructions 922. In various examples, the surface normal for the surface voxel is based on the status of voxels in the neighborhood indicated in the look-up table, as illustrated, for example, in the example of
The example instructions further includes adjust at least one print parameter instructions 923. For example, various parameters for a 3D print engine may be adjusted based on the surface normal. Such parameters may include a color adjustment (e.g., the agent used to adjust color via color properties or thermal properties), layer thickness adjustment or a density adjustment, for example. In one example, the 3D print engine may print an accurate color when the surface normal is in the z direction. Without compensation or adjustment, the color may become inaccurate as the normal deviates from the z direction. In this regard, depending on the direction of the normal, the print engine may apply the appropriate compensation.
Thus, various examples allow determination of a normal direction for a 3D object based on the voxel data of the 3D object without additional information. The determination of the normal allows compensation or adjustment of various print parameters of a 3D printer.
Software implementations of various examples can be accomplished with standard programming techniques with rule-based logic and other logic to accomplish various database searching steps or processes, correlation steps or processes, comparison steps or processes and decision steps or processes.
The foregoing description of various examples has been presented for purposes of illustration and description. The foregoing description is not intended to be exhaustive or limiting to the examples disclosed, and modifications and variations are possible in light of the above teachings or may be acquired from practice of various examples. The examples discussed herein were chosen and described in order to explain the principles and the nature of various examples of the present disclosure and its practical application to enable one skilled in the art to utilize the present disclosure in various examples and with various modifications as are suited to the particular use contemplated. The features of the examples described herein may be combined in all possible combinations of methods, apparatus, modules, systems, and computer program products.
It is also noted herein that while the above describes examples, these descriptions should not be viewed in a limiting sense. Rather, there are several variations and modifications which may be made without departing from the scope as defined in the appended claims.
Filing Document | Filing Date | Country | Kind |
---|---|---|---|
PCT/US2017/042899 | 7/19/2017 | WO | 00 |