|
Sweet Home 3D Forum » List all forums » » Forum: Features use and tips » » » Thread: Generate terrain from a room in batch mode / Hijacking the “Generate 3D terrain from rooms…” plug-in |
|
| Print at Feb 12, 2026, 10:29:08 PM | |
| Posted by z56oo at Feb 1, 2026, 12:23:15 PM |
|
Generate terrain from a room in batch mode / Hijacking the “Generate 3D terrain from rooms…” plug-in I recently had a problem creating a land on a project that included several buildings of different heights. -Using the geo-object library to create this terrain was too laborious. -The use of the "generate 3D terrain" plug-in was not suitable as is (too large, too complex, unmanageable) I managed to get around it by using a workaround of the "Generate 3D terrain from rooms ... " plugin, which I explain below (Giving elevations directly to the points of the room without using the grid or the interactive side of the plugin). First (very classically) -Create fictitious walls to enclose your living spaces if necessary (shelters, covered areas, etc.) -Create a large rectangle with walls to delimit your land -Connect this rectangle to your buildings with a very thin (1mm) imaginary wall to create a room for your land. -Create the room on the lot and give it a name to find it more easily in the home.xml file (see below). -Clean this room of any unnecessary points. Afterwards Place your part on a level with elevation 0 and position it so that it does not intersect either the X-axis (y=0) or the Y-axis (x=0). This is important to prevent the plugin from creating additional elevation 0 points at the intersections of your room with the axes. ![]() Above is the piece (TerrainX) showing the outline of the two walls connecting the buildings to the outer frame. Note the minimum grid size required to ensure no intersections with the grid of the 'Generate 3D Terrain' plugin (in this example above, >= 8200 cm). Since the terrain has several levels, the main lines of force indicating changes in slope must be established. These lines are also created using 1mm walls extending from the buildings and potentially approaching very close to the outer edge of the structure, but without touching it. (The reverse can also be done.) (I obviously choose lines of force for my connecting walls.) Note that the 1mm walls gap will be invisible in the final 3D Here's what it looks like in my case ![]() I put small red markers on the ends of the free walls (not touching) Finally -Save your project (do not launch the plugin on the part yet) -Open the Home.xml file -Find your room (in my example TerrainX) -Your room's points are given by tags of the type <point x='5971.301' y= '2480.8115'/> and in the order corresponding to a starting point from the top right corner of your rectangle, beginning to rotate clockwise ![]() The figure above may look frightening, but in fact it is logically very simple. -For each point in the room, we will enter an elevation in the form of a tag <property name='terrainElevationAt(5971.30,2480.81)' value= ' 227.000'/> -To make things easier, I copied the points from Home.xml into a spreadsheet, added an "elevation" column which I populated with the desired value for each point (in fact, very often it is the elevation of the level where I wanted my terrain to be; in this example, for the 105 points of the room, I only had 5 free values to set) , and generated the text for the "elevation" tag in another column. -Sort your elevation tags by ascending X then ascending Y (this seems important for the plugin to function) . Delete elevation tags with 0 value -When you're finished, simply add the following tag after the elevation tags, defining the grid size (I needed a minimum of 8200 cm, so I put 9000). <property name='terrainGridSize' value= ' 9000.0 ' /> -Copy everything into Home.xml just below the <room… tag and above the tags defining the room points -Recompress the contents of the Home.xml folder. Open it in SH3D. -Launch the “Generate 3D Terrain” plugin on your room, check and admire (to make adjustments if necessary: uncheck Multiple Points) and click OK: There you go, you have your 3D terrain with the desired elevations directly relative to the buildings… with minimal effort Here are some screenshots of the result ![]() ![]() ![]() ![]() Hoping that this tip will be useful to some projects with similar needs Olivier PS: Don't forget to store your virtual walls and the room elsewhere (or make them invisible). PS: Of course, you can't directly create holes or bumps on your land around your buildings this way, but that's not the point (You can always add another room and generate a piece of land to do so). |
| Posted by Keet at Feb 1, 2026, 2:07:45 PM |
|
Re: Generate terrain from a room in batch mode / Hijacking the “Generate 3D terrain from rooms…” plug-in This seems a pretty complex way to create a terrain and it may be my bad eye sight but I only see sharp edges, no gentle curves. I also don't see anyway to integrate paths that follow the elevations. -The use of the "generate 3D terrain" plug-in was not suitable as is (too large, too complex, unmanageable) That is easily solved by splitting your terrain into multiple, connected rooms. These rooms don't have to form a grid of square rooms, any shape will do. The only limit is that the terrain generator can handle 4 or 5 of the rooms together. You only select a few connected rooms and in the terrain generator make sure you don't elevate anything to the sides that connect with adjacent non-selected and yet un-elevated rooms. In the next step you select the rooms adjacent to the yet un-elevated rooms and the (un-elevated) rooms touching them. Start the room generator again and you can elevate the next part of your terrain. Rinse and repeat until you have done all of your terrain. During this you can remove the generated terrain objects, the elevation levels are stored in the Home.xml file as you have discovered. This method also allows you to add curved paths and rivers that elevate along with the rest of the terrain (see my manual How-To Create paths and rivers with the TerrainGenerator). When done you can select blocks of rooms to generate the final terrain parts, or if it is not too big all rooms to generate a single terrain. Note that the 1mm walls gap will be invisible in the final 3D Yes, you do see the gap depending on what is below the terrain. That is why you use a thick wall, not a 1mm wall. With the "Edit room points" function of the AdvancedEdit plugin you can easily close the gap: just two points to merge. With magnetism on the points of two adjacent rooms will snap together. The result is NO gap.This method can also be used if you have buildings on multiple levels or with different height. Just keep in mind that the terrain editor has a flaw where a terrain is always generated as if it is on the 0-level. I solve this by simply raising every level and after generation reverse that. If necessary I heighten some walls too to make them visible in the terrain generator. This way I have all walls of the building(s) in view at the correct level in relation to the terrain. And the main advantage: there is virtually no limit to how big your total terrain is! Just make sure that you cut out the room objects and save them in a separate project. For the final result you only need the generated terrain objects. The room objects cause the project to become huge because of all the elevation points. And these are only needed for generating the terrain object, after that they are useless. I usually generate a full terrain (in parts) below the 0 level and use a script to set all elevations to reach the 0 level. That gives me a room that can go both up and down. So far my biggest terrain (still in development) is 600x600 meters, divided in 8 'path rooms' and 17 'terrain rooms'. The lowest level in the project is at -800cm and the terrain starts at -50cm. But because I elevated all points with 50 it is level with the 0-level. I saved all rooms in a separate project. I have 'sculpted' several terrains but I'm still not happy with the result. The backup project allows me to reset with the prepared rooms and try again. What might be a useful plugin for terrains is one that takes a heightmap image or geo-object and converts it to a room with elevation points. The main advantage is that in most cases you also you can get a texture for that terrain which is better than anything you can create with the terrain editor and separate textures. ---------------------------------------- Dodecagon.nl 1300+ 3D models, manuals, and projects |
| Posted by z56oo at Feb 1, 2026, 3:37:24 PM |
|
Re: Generate terrain from a room in batch mode / Hijacking the “Generate 3D terrain from rooms…” plug-in Hi Keet, You can see the straight terrain features on the house because that's how I wanted it ( I could have placed more points on the building walls ) . Otherwise, the terrain itself is gently undulating because it follows the mesh triangles that snap to all the points of the room , see the screenshot below. ![]() Your method of dividing into several rooms seems , in my opinion, more complicated and laborious than mine. I will try it sometime, though . I would like to reiterate that I wanted to create a ‘terrain’ without spending hours on it, and by following this method I didn't even take half an hour to create this 90x90m terrain with buildings at various heights . Furthermore, I don't even dare to calculate, with the default grid spacing of the plug-in at 50cm, the number of points for a 600x600m terrain (in fact, yes = 1.5 million points and probably as many elevations ) . This is to say that it would be good to be able to modify the grid spacing in the plug-in. For the time being, I’m very happy to have found this alternative Thank you for your reply . |
| Posted by Keet at Feb 1, 2026, 5:35:14 PM |
|
Re: Generate terrain from a room in batch mode / Hijacking the “Generate 3D terrain from rooms…” plug-in Maybe it takes hours but only with a complicated terrain like mine. Your terrain as shown is much simpler and should be done relatively fast AND with curved slopes, not sharp angles. The sharp edges a big no-no for me This is my floorplan with the terrain rooms. Green is terrain (17 rooms), brown are paths (8 rooms). ![]() ![]() I selected a few rooms on the left and started the terrain generator. Notice that I stayed away from the borders where unselected rooms are. ![]() ![]() Then I selected the rooms adjacent to the top AND the rooms that touch these from the previous set. Again I stayed away from the sides where other unselected rooms are. Notice that this selection is almost 300m wide. Without paths it could be 4 rooms of 300m x 300m to cover everything that is needed. ![]() Both generated objects shown. You can see the overlap. By deleting the generated objects and generating each individual room (or ALL together) there is no longer an overlap and all parts fit seamless together. ![]() I did this quickly just for this post, hardly hours of work Of course I did have the separate rooms to start with. The most work was integrating the paths but without paths it is very simple. The actual generation of the terrain is the least of the work. The hardest is to get it like I want it. Every few weeks I try a different variation but so far I haven't found what I want it to be. But as you can see it's not that much work to try again, and again... It's always good to have alternatives so I will study your method to see in which situations it might be better. ---------------------------------------- Dodecagon.nl 1300+ 3D models, manuals, and projects |
| Posted by z56oo at Feb 2, 2026, 1:18:57 PM |
|
Re: Generate terrain from a room in batch mode / Hijacking the “Generate 3D terrain from rooms…” plug-in Thank you Keet for your very detailed explanations of your method. I can see its potential for generating large (or small) areas of land with lakes, rivers , trails... and I learned a few things, thanks to you. In the case I described, my need was different. I wanted to create a terrain for buildings that were partly semi-buried and also located at different elevations . The main constraint is to be able to fix the earth height at points on the buildings in such a way that if the terrain is modified, the height of these points (linked to the buildings ) remains fixed and unchanged . The "Generate 3D terrain" plug-in does not allow this, so this would be a first possibility for a significant improvement (One could imagine that with "Edit room points" one could give/modify a terrain elevation of certain points and that "Generate 3D terrain" would take this elevation into account for the terrain without ever modifying it) If this possibility had existed , I would never have searched for an alternative This possibility could also be useful in your method for connecting rooms (no more need to "stay away from the sides where other unselected rooms are "). The second possible improvement would be to be able to choose a grid spacing that is a multiple of 50cm. This would solve the problem of the number of points generated for large areas (> 400 m²). (One could imagine that if the grid spacing is increased, intermediate points are lost, and conversely, if the grid spacing is decreased, intermediate points are created with the average value of adjacent points) Ideally , this grid spacing would be adjustable per room ( I don't know if this is feasible, especially at the junction/overlap of rooms ) . That said, your tip about splitting it into several rooms is a good workaround, even if the buffer file for storing the rooms becomes enormous in the end , but we can always create several ... The third possibility is the one you mentioned : “ takes a heightmap image or geo-object and converts it to a room with elevation points . ” This would be particularly useful for people wanting to create a project on land for which they have (obtained or created ) the topography elsewhere. I don't think there are many such users ; personally, that 's not my situation. Thanks PS : What do you think about my proposal for first improvement ? Any developer interested ? |
| Posted by Keet at Feb 2, 2026, 2:18:17 PM |
|
Re: Generate terrain from a room in batch mode / Hijacking the “Generate 3D terrain from rooms…” plug-in In the case I described, my need was different. I wanted to create a terrain for buildings that were partly semi-buried and also located at different elevations . Take a second look at my examples. What you see on the left is an entrance road to an underground parking, a level below the terrain. There is one on the right too as you can see in the first image. The horizontal walls at the top are the walls from a subway tunnel, also below the terrain. Other walls (in the center) are at the ground level (0) and one level up (5m).The one thing that makes it a little difficult is the flaw in the plugin where it always shows and generates at level 0. This means that if you want the terrain to start below 0 you will have to temporarily raise all levels to see the walls at the correct level related to the terrain. That way the terrain and walls show in the plugin as if the terrain starts below level 0, which in my case was -50cm. The alternative is to simply start your "0-level" at a higher elevation but use it as if it's at elevation 0. The main constraint is to be able to fix the earth height at points on the buildings in such a way that if the terrain is modified, the height of these points (linked to the buildings ) remains fixed and unchanged . I'm not sure I understand what you mean. In the terrain editor you can change elevations but the heights of walls are not changed. What you can do is put the generated terrain object(s) on a separate level with a different elevation. This is often done to create a lake or the hole for an in-ground swimming pool.You are right that you can't change points on a generated terrain, I don't really see the need for that since you can select the room(s) and adjust what you want. To raise a part to the top of a wall you can calculate the required height and instead of 'drawing' with the mouse you can select a point and manually enter the required elevation in the bottom-left box. I probably don't understand what you mean. The second possible improvement would be to be able to choose a grid spacing that is a multiple of 50cm. This would solve the problem of the number of points generated for large areas (> 400 m²). I would like this too even if the resulting terrain is not as smooth because there are fewer points. For large terrains that will make a real difference. And I can always smooth the resulting object with Blender to regain smoothness but now with fewer points.The third possibility is the one you mentioned : “ takes a heightmap image or geo-object and converts it to a room with elevation points . ” This would be particularly useful for people wanting to create a project on land for which they have (obtained or created ) the topography elsewhere. I don't think there are many such users ; personally, that 's not my situation. Yep that's one I would really like for another project. An absolutely necessary requirement is that it needs to generate multiple rooms in a grid you can define. That would allow you to generate a terrain the size of Australia but split in a grid of rooms that allows changing just parts of the total terrain. The terrain generator won't be able to load a complete terrain of that size.---------------------------------------- Dodecagon.nl 1300+ 3D models, manuals, and projects |
| Posted by z56oo at Feb 2, 2026, 3:22:34 PM |
|
Re: Generate terrain from a room in batch mode / Hijacking the “Generate 3D terrain from rooms…” plug-in Keet, Indeed, we have a slight misunderstanding ;-) First point: I have no problem with the terrain being generated on level 0, it doesn't bother me and I understand your tip about changing the elevations to 'see' the walls and foundations . Second point : This is where there is a real misunderstanding ; I will try to be clearer... I am not trying to change the height of the walls or modify them! What I want is, for example, to be able to say on this wall, at this place (in fact on this precise point of the room which corresponds to this wall and this place), I want the ground to be at a determined height in relation to the bottom of the wall (for example 1.25m) therefore at a fixed total elevation ( elevation of the level on which the wall is + 1.25m) in relation to level 0. However, there's no way to fix an elevation for a point under "Generate 3D terrain" . You can enter it in the bottom-left box, of course, but as soon as you change the elevation of other points in the neighborhood, this elevation will change, and that's precisely what I don't want. I wish to declare points of fixed elevation that "Generate 3D terrain" takes into account but does not modify (So I fix the height of the terrain at the contact with my semi-buried buildings and then I model around my terrain interactively with "Generate 3D terrain"). Other points: Hopefully we're online :-) Cheers |
| Posted by Keet at Feb 2, 2026, 4:01:53 PM |
|
Re: Generate terrain from a room in batch mode / Hijacking the “Generate 3D terrain from rooms…” plug-in However, there's no way to fix an elevation for a point under "Generate 3D terrain" . You can enter it in the bottom-left box, of course, but as soon as you change the elevation of other points in the neighborhood, this elevation will change, and that's precisely what I don't want. Now I understand. There is currently no way to lock one or more points. That would be difficult too because there are a lot of points. Perhaps a function "Raise all points that touch this wall to the height of the wall" would be easier to manage. By splitting a wall into pieces you could fine-tune what area is raised. And by adjusting the height of the wall you can control the elevation. Once the terrain is generated you could reset the walls to what they were before. (Or use a separate project for the terrain which is always a wise way to work.)As far as I know there is currently no interaction with any of the walls other than displaying them as a wire frame. It would mean implementing a way to select (a piece of) a wall to enable a function as I mentioned. combined with the row switch this could possibly be implemented. ---------------------------------------- Dodecagon.nl 1300+ 3D models, manuals, and projects |
| Posted by z56oo at Feb 2, 2026, 4:49:11 PM |
|
Re: Generate terrain from a room in batch mode / Hijacking the “Generate 3D terrain from rooms…” plug-in Keet No, no, I didn't see something as complicated as creating interactions with walls. Furthermore, their wireframe visualization is perfect for the need. I think it's more reasonable to stick with just rooms and points within those rooms as objects. Introducing a coupling with walls would complicate things enormously . You're right, "Generate 3D Terrain" generates a lot of points with the 50cm grid, but you only need to lock a few points . So I see two possibilities . - The first, as I have already mentioned, would be to modify the "Edit room points" plug-in in such a way that we can give additional information to one or more points in the room, which would be their elevation , information which would only be 'understood' by "Generate 3D Terrain" and considered as a locked elevation . Advantage: We only have the room's points and not all the points generated by the grid Drawback : You can only lock the room's native points... and you have to modify this plugin in addition to "Generate 3D Terrain". - The second would be in "Generate 3D Terrain" to be able to indicate in the bottom-left box that the entered elevation must be locked Advantage: We only need to modify "Generate 3D Terrain" Drawback : It's difficult to choose the point from among the room's native points and generated points, and especially to find back the locked point if you want to change its elevation . So, as a first approach, my instinct leads me towards the first solution (and simply indicate in "Generate 3D Terrain" that if this point is selected, it is locked ). Then, in "Generate 3D Terrain", the method obviously needs to be adapted to take these locked points into account, but I suppose, given the mechanisms already in place (radius of action, individual point, linear modification) that it's feasible. Dream, dream, dream ... |
| Posted by z56oo at Feb 3, 2026, 11:33:59 AM |
|
Re: Generate terrain from a room in batch mode / Hijacking the “Generate 3D terrain from rooms…” plug-in Keet, Some food for thought (I’ve pushed a little my reflection on the subject) The grid points are virtual: only their elevations are recorded as properties (If the room is moved, all properties are lost (become obsolete) , even those assigned to the room's native points ) . The room’s native points follow the room move. Therefore, if we want to store a given elevation for a point in the room , one solution is, for example, to modify the point tag by introducing a Z value, for example <point x='3957.4912' y='32.531234' z='125.567'/> This Z elevation is only used for "Generate 3d terrain" and is therefore an absolute elevation relative to the ground level (does not depend on the level where the room is located) To say that this elevation is locked is equivalent to forcing a property for this point in the properties generated by "Generate 3d terrain", like (in the example above): <property name='terrainElevationAt(3957.49,32.53)' value='125.567'/> In the bottom-left box of "Generate 3d terrain", introduce a check if you are editing a native point of the room; in this case, a 'Lock' tick box will be displayed. If this point has a Z value, display the Z value by setting Lock to true. The user can either leave the Lock enabled and not modify the value, or remove the Lock, in which case he can modify the value. He is free to re-enable the Lock or not afterwards (if he enables the Lock, the new Z value is recorded; if he removes the Lock, the Z value from the tag of this point is removed). If this point does not have a Z value, Lock is false; the user can change the value and is free to then enable or disable Lock (if he enables Lock, the point is recorded with a Z value). Regarding the method, it depends on the algorithm used. One solution could be (it's probably/certainly not the best): proceed as currently (without considering the Locks) and at the end check if a point elevation with a Z value has been modified , and if so, we simulate a complementary action on that point to return its elevation to its Z value (with the same parameters : radius of action, linearity, etc.). However, in this case, pay attention to infinite loops if two points with Z values are close together... The cherry on the cake would be to update the "Edit room points" plugin to display this Z value. This would provide the functionality to review room points that have a Z value, without necessarily needing to introduce a "highlight Locked Points" function under "Generate 3D terrain" to visualize/find room points with a Z value. Have a nice day Cheers, Olivier |
| Posted by Keet at Feb 3, 2026, 12:49:58 PM |
|
Re: Generate terrain from a room in batch mode / Hijacking the “Generate 3D terrain from rooms…” plug-in The room’s native points follow the room move. There's no need for that. The current way is sufficient. However, the numbers are not.Therefore, if we want to store a given elevation for a point in the room , one solution is, for example, to modify the point tag by introducing a Z value, for example <point x='3957.4912' y='32.531234' z='125.567'/> This Z elevation is only used for "Generate 3d terrain" and is therefore an absolute elevation relative to the ground level (does not depend on the level where the room is located) Consider this awkwardly formed room with elevations: <room id='room-c9710f39-3f72-4e5b-b04f-7a631eae29e3' level='level-dee204e2-b2ee-4226-86e8-a948f0498786' areaVisible='true' ceilingVisible='false' ceilingFlat='true'>All elevation points are fixed and have no relation to the actual position of the room. If you move the room and generate again all elevation points are still considered to be at the original position. THAT is what should change. The software already has code to calculate the x and y coordinates of the bounding box of the furniture, even if that furniture is not a square form. This means that the object is positioned with just a single coordinate pair (x,y). For this awkward room that point would be (3199.5, 714.3). (Generate the terrain and the resulting terrain is 'furniture' with a bounding box that has these coordinates.) The way the elevation points should have been stored is with values relative to 0,0 using the coordinates of the virtual bounding box of the room. When that is done you can move the room and re-generation will use the new bounding box coordinates and generate the exact same terrain at the new room position. You could change <property name='terrainElevationAt(4535.44,900.00)' value='13.813'/><property name='terrainElevationAt(4535.44,900.00,13.813'/><property name='terrainElevationAt' x='4535.44' y='900.00' z='13.813'/>but it's just another way of storing the same data. All in all this is just a minor problem since you should create terrains in a separate project where you don't have to move the rooms. You generate the terrain(s) and can freely move those objects in the original project. That doesn't solve locking points. As you already determined that requires changing of the UI to allow locking of a selected point. That is the easy part. It could be stored as <property name='terrainElevationAt(4535.44,900.00)' value='13.813' locked='true'/>The difficult part is to generate new elevations that take the locked points into account while still smoothly elevating around them. You will have to check each point before changing it's elevation and disallow a change if the point is locked. I doubt it is as easy as I describe this. One solution could be (it's probably/certainly not the best): proceed as currently (without considering the Locks) and at the end check if a point elevation with a Z value has been modified , and if so, we simulate a complementary action on that point to return its elevation to its Z value (with the same parameters : radius of action, linearity, etc.). However, in this case, pay attention to infinite loops if two points with Z values are close together... Definitely a bad solution and very bad programming practice. You never change a value you have to change back afterwards on an already known condition, you prevent a change using that condition in the first place. I don't see where you could get infinite loops, each point in the given radius is processed and a value is set. I haven't checked the source code but I don't think there's any looping to execute elevation changes.As a (temporary?) solution you can open the generated terrain in Blender and move any face or vertice you want. Of course this doesn't get stored in the room so it is just a partial solution. This is where the roof generator is superior: roofs are generated using a room but once generated you can select the roof object and start the roof generator again and it will read all vales from the roof object to make changes, without the need of the original room. It's something I desperately want for the Generate 3D shape plugin! ---------------------------------------- Dodecagon.nl 1300+ 3D models, manuals, and projects |
| Posted by z56oo at Feb 3, 2026, 4:24:33 PM |
|
Re: Generate terrain from a room in batch mode / Hijacking the “Generate 3D terrain from rooms…” plug-in Keet, On dit la même chose : les élévations sont fixes et donc si on déplace la pièce, les élévations sont virtuellement perdues pour faire une génération au nouvel emplacement. Par contre, je ne vois ni le besoin de changer cela, ni le besoin de les stocker avec la boîte créée (une petite erreur dans ton exemple, la boîte serait en (4199.5,714.3)). Si on stocke tous les points avec la boîte, elle va prendre de l'embonpoint! (sans jeu de mots) Nous sommes aussi d'accord que c'est un problème mineur car de toute façon on peut toujours générer dans un projet séparé et que donc on peut se débrouiller pour ne jamais avoir besoin de bouger la pièce. Je vois les élévations verrouillées comme une propriété donnée à des points natifs de la pièce et donc à stocker avec <Point> et non pas avec une <Property>. Les <Property> changent mais les <Point> restent... (même si on réinitialise tout le terrain). C'est pour cela que j'avais proposé <point x='3957.4912' y='32.531234' z='125.567'/> mais toute syntaxe équivalente est possible. Le fait meme qu'il y ai une valeur associée à Z indiquant que ce point doit être Locké à cette valeur d'elevation. Je suis d'accord que The difficult part is to generate new elevations that take the locked points into account while still smoothly elevating around them. et je disais moi-meme que la solution évoquée (pour le fun) n'était "probably/certainly not the best" et qu'elle pouvait conduire à des "infinite loops", donc en filigrane que ce n'était pas à faire.J'aurais mieux fait de rester sérieux et de meme pas évoquer cela ... Pardon de t'avoir énervé la-dessus. |
|
|
Current timezone is GMT Feb 12, 2026, 10:29:08 PM |