Advanced-Tree Modelling 2

•Attention: open in a new window.• •PDF••Print••E-mail•

Well after creating the first tree tutorial it was evident that we would need more variations in tree type or we would simply get a heap of trees all looking the same. So here is a tree that can look better but is heavier on polys. This tree is less dense and more focused on form and structure to create a nice completed model.

This time I won’t go through making the textures as the same principles apply. Use my following three textures too follow the tutorial or make your own similar but better ones.

branchfoliagetrunk

Well let’s get to it.

 model1

When modelling this sort of tree it is a good idea to visualise the size of the tree you wish to create, figure a rough size and set that up in Sketchup (or the 3D program of your choice).

 model1

Then as we are creating a tree constructed in a branch by branch creation(well a few at a time) simply create the outline for the texture. I angle these outlines to 30 degrees as that is the most effective in my opinion once in the game. It allows for plenty of space in between branches without looking ridiculous.

 model1

Now simply apply the texture, notice the branch ends do not line up with the tree height line?

 model1

Well let’s fix that alignment, so move the plane to suit the texture.

 model1

For this tutorial I rotated and created three copies per row. This means six triangles per row, this is fairly heavy but no worse than the in game trees.

 model1

Try viewing it from different angles to check it is set at the correct angle and alignment.

 model1

Now simply copy this down the trunk, adding 10-20% overall size to each branch row, this help create a real look. For this tutorial I used 10% but it seemed to be to subtle a change so maybe 15% would suit more. Do as many rows as you require for the look and feel that you wish to achieve.

 model1

Now the tree simply needs a cap to finish it all off, my cap was too simple maybe add a curve to make it look more realistic. The cap in mine ruins the look. Make a cap that suits the tree, this often take a fair few attempts to make work.

 model1

Well I take it that your foliage and branches are up to standard, now all we need is a trunk. Start by creating a pure cylinder to the height and width of your choosing.

 model1

Now simply scale the top to create a slimmer top and create a more realistic looking tree.

 model1

Now for texturing the trunk, simply apply a tree texture that suits your model. Simple hey.

 model1

Finished result without edges and profiles.

This model uses 40 triangles but I am sure you can keep it below 30.

Also like the other tutorial remember to create different models at different LOD, simple use the same principle as this but use less branches and less often, do this by increasing the angle too suit. This can make your tree as low poly as 12 triangles.

Well hopefully this tutorial made sense and we will see some more tree variations around.

•Add comment•


•Security code•
•Refresh•

Download stats

The download archive contains currently 94 downloads in 15 categories. To date, these have been downloaded 4772 times.

Downloads top

Drehkreuze / Turnstile... 603
2010-04-16
Cafeen's Letters 421
2010-04-16
Surfingoz Track Compon... 255
2010-04-05
Coaster Buildings v1.0228
2010-04-11
Mayan Temple Set v2.0201
2010-04-11

•Profile Information•

Application afterLoad: 0.000 seconds, 0.38 MB
Application get hook core.loadLanguages: 0.109 seconds, 8.40 MB
Application afterInitialise: 0.119 seconds, 8.69 MB
Application afterRoute: 0.157 seconds, 11.28 MB
Application afterDispatch: 0.285 seconds, 19.67 MB
Application get hook core.constructorEnd: 0.290 seconds, 19.77 MB
Application afterRender: 0.543 seconds, 24.87 MB
Application get hook core.afterRender: 0.568 seconds, 24.94 MB

•Memory Usage•

26217936

•87 queries logged•

  1. SELECT *
      FROM jos_session
      WHERE session_id = '37098452b94145169beb69a8934bb2b3'
  2. DELETE
      FROM jos_session
      WHERE ( time < '1337593356' )
  3. SELECT *
      FROM jos_session
      WHERE session_id = '37098452b94145169beb69a8934bb2b3'
  4. UPDATE `jos_session`
      SET `time`='1337594256',`userid`='0',`usertype`='',`username`='',`gid`='0',`guest`='1',`client_id`='0',`data`='__default|a:14:{s:15:\"session.counter\";i:51;s:19:\"session.timer.start\";i:1337590915;s:18:\"session.timer.last\";i:1337594189;s:17:\"session.timer.now\";i:1337594223;s:22:\"session.client.browser\";s:48:\"CCBot/1.0 (+http://www.commoncrawl.org/bot.html)\";s:8:\"registry\";O:9:\"JRegistry\":3:{s:17:\"_defaultNameSpace\";s:7:\"session\";s:9:\"_registry\";a:2:{s:7:\"session\";a:1:{s:4:\"data\";O:8:\"stdClass\":0:{}}s:6:\"global\";a:1:{s:4:\"data\";O:8:\"stdClass\":1:{s:4:\"list\";O:8:\"stdClass\":1:{s:5:\"limit\";i:12;}}}}s:7:\"_errors\";a:0:{}}s:4:\"user\";O:5:\"JUser\":20:{s:2:\"id\";i:0;s:4:\"name\";N;s:8:\"username\";N;s:5:\"email\";N;s:8:\"password\";N;s:14:\"password_clear\";s:0:\"\";s:8:\"usertype\";N;s:5:\"block\";N;s:9:\"sendEmail\";i:0;s:3:\"gid\";i:0;s:12:\"registerDate\";N;s:13:\"lastvisitDate\";N;s:10:\"activation\";N;s:6:\"params\";N;s:3:\"aid\";i:0;s:5:\"guest\";i:1;s:7:\"_params\";O:10:\"JParameter\":7:{s:4:\"_raw\";s:0:\"\";s:4:\"_xml\";N;s:9:\"_elements\";a:0:{}s:12:\"_elementPath\";a:1:{i:0;s:66:\"/home/goopedg1/public_html/libraries/joomla/html/parameter/element\";}s:17:\"_defaultNameSpace\";s:8:\"_default\";s:9:\"_registry\";a:1:{s:8:\"_default\";a:1:{s:4:\"data\";O:8:\"stdClass\":0:{}}}s:7:\"_errors\";a:0:{}}s:9:\"_errorMsg\";N;s:7:\"_errors\";a:0:{}s:6:\"avatar\";s:82:\"http://www.goopedgamers.com/components/com_jsocialsuite/images/no_avatar_small.png\";}s:9:\"myfriends\";s:6:\"a:0:{}\";s:13:\"session.token\";s:32:\"9bb54317737ee32f239f73feaea272f5\";s:19:\"socialites_cachtime\";i:1337594070;s:12:\"currtemplate\";s:8:\"mystique\";s:17:\"currtemplatestyle\";s:0:\"\";s:22:\"currtemplate_is_joomla\";i:2;s:15:\"jssAppPositions\";s:137:\"a:8:{i:0;s:8:\"jss_main\";i:1;s:4:\"menu\";i:2;s:5:\"right\";i:3;s:5:\"user1\";i:4;s:5:\"user2\";i:5;s:5:\"user3\";i:6;s:5:\"user4\";i:7;s:6:\"footer\";}\";}__quickfaq|a:1:{s:3:\"hit\";a:1:{i:0;s:1:\"5\";}}__agora|a:4:{s:14:\"sync_performed\";i:1;s:4:\"view\";s:5:\"forum\";s:11:\"defaultview\";s:1:\"1\";s:7:\"message\";s:0:\"\";}'
      WHERE session_id='37098452b94145169beb69a8934bb2b3'
  5. SELECT *
      FROM jos_components
      WHERE parent = 0
  6. SELECT folder AS type, element AS name, params
      FROM jos_plugins
      WHERE published >= 1
      AND access <= 0
      ORDER BY ordering
  7. SELECT id, parent_id, value, name, lft, rgt
      FROM jos_core_acl_aro_groups
      WHERE id=23
  8. SELECT id, parent_id, value, name, lft, rgt
      FROM jos_core_acl_aro_groups
      WHERE id=21
  9. SELECT id, parent_id, value, name, lft, rgt
      FROM jos_core_acl_aro_groups
      WHERE id=23
  10. SELECT id, parent_id, value, name, lft, rgt
      FROM jos_core_acl_aro_groups
      WHERE id=25
  11. SELECT m.*, c.`option` AS component
      FROM jos_menu AS m
      LEFT JOIN jos_components AS c
      ON m.componentid = c.id
      WHERE m.published = 1
      ORDER BY m.sublevel, m.parent, m.ordering
  12. SELECT *
      FROM jos_jss_hooks
      WHERE `published` = '1'
      ORDER BY `hook`, `ord`
  13. SELECT p.`folder_name`
                                   
      FROM jos_jss_plugins p
      WHERE p.`published` = '1'
  14. SELECT a.`folder_name`
                                           
      FROM jos_jss_apps a
      WHERE a.`published` = '1'
  15. SELECT `file`, `params`
      FROM `jos_sefexts`
  16. SELECT template
      FROM jos_templates_menu
      WHERE client_id = 0
      AND (menuid = 0 OR menuid = 31)
      ORDER BY menuid DESC
      LIMIT 0, 1
  17. SELECT *
      FROM jos_jcomments_settings
  18. SELECT a.*, u.name AS author, u.usertype, cc.title AS category, s.title AS section, CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS(":", a.id, a.alias) ELSE a.id END AS slug, CASE WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS(":", cc.id, cc.alias) ELSE cc.id END AS catslug, g.name AS groups, s.published AS sec_pub, cc.published AS cat_pub, s.access AS sec_access, cc.access AS cat_access 
      FROM jos_content AS a
      LEFT JOIN jos_categories AS cc
      ON cc.id = a.catid
      LEFT JOIN jos_sections AS s
      ON s.id = cc.section
      AND s.scope = "content"
      LEFT JOIN jos_users AS u
      ON u.id = a.created_by
      LEFT JOIN jos_groups AS g
      ON a.access = g.id
      WHERE a.id = 29
      AND (  ( a.created_by = 0 )    OR  ( a.state = 1
      AND ( a.publish_up = '0000-00-00 00:00:00' OR a.publish_up <= '2012-05-21 09:57:37' )
      AND ( a.publish_down = '0000-00-00 00:00:00' OR a.publish_down >= '2012-05-21 09:57:37' )   )    OR  ( a.state = -1 )  )
  19. UPDATE jos_content
      SET hits = ( hits + 1 )
      WHERE id='29'
  20. SELECT `filters`
      FROM `jos_sefexts`
      WHERE `file` = 'com_content.xml'
      LIMIT 1
  21. SELECT id, name
      FROM jos_agora_roles
  22. SELECT conf_name,conf_value
      FROM jos_agora_config
  23. SELECT conf_name,conf_value
      FROM jos_agora_config
  24. SELECT id
      FROM jos_menu
      WHERE link = 'index.php?option=com_jdownloads'
  25. SELECT setting_name, setting_value
      FROM jos_jdownloads_config
  26. SELECT g.*
      FROM jos_core_acl_aro_groups AS g
      INNER JOIN jos_core_acl_groups_aro_map AS gm
      ON gm.group_id = g.id
      INNER JOIN jos_core_acl_aro AS ao
      ON ao.id = gm.aro_id
      WHERE ao.value='62'
      ORDER BY g.id
  27. SELECT g.*
      FROM jos_core_acl_aro_groups AS g
      INNER JOIN jos_core_acl_groups_aro_map AS gm
      ON gm.group_id = g.id
      INNER JOIN jos_core_acl_aro AS ao
      ON ao.id = gm.aro_id
      WHERE ao.value='62'
      ORDER BY g.id
  28. SELECT id
      FROM jos_components
      WHERE `option`='com_phocagallery'
      AND parent = 0
      LIMIT 0, 1
  29. SELECT *
      FROM jos_components
      WHERE id = '84'
  30. SELECT id
      FROM jos_components
      WHERE `option`='com_phocadownload'
      AND parent = 0
      LIMIT 0, 1
  31. SELECT *
      FROM jos_components
      WHERE id = '95'
  32. SELECT created_by, sectionid, catid
      FROM jos_content
      WHERE id='29'
  33. SELECT count(*)
      FROM jos_attachments
      WHERE article_id='29'
      AND published='1'
  34. SELECT a.id, a.sectionid, a.access, CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS(":", a.id, a.alias) ELSE a.id END AS slug, CASE WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS(":", cc.id, cc.alias) ELSE cc.id END AS catslug
      FROM jos_content AS a
      LEFT JOIN jos_categories AS cc
      ON cc.id = a.catid
      WHERE a.id = 29
  35. SELECT count(*)

      FROM jos_jcomments

      WHERE object_id = 29

      AND object_group = 'com_content'

      AND published = 1
  36. SELECT DISTINCT SQL_CALC_FOUND_ROWS u1.id, u1.name, u1.username, u1.email, u1.usertype, u1.block,
                                            u1.registerDate, u1.lastvisitDate, u2.sex, u2.dob, u2.descr, u2.show_email, u2.show_dob, u2.show_name,
                                            u2.views_count, u2.friends_count, u2.rating, u2.votes_count, u2.apps_count, u2.tmplid, u2.avatarid, u2.acceptedterms
                                   
      FROM jos_jss_users u2
                                    JOIN jos_users u1
      ON u1.`id` = u2.`user_id`
                                    JOIN jos_jss_user_friends f
      ON u2.`user_id` = f.`friend_id`
                                           
      AND f.`confirmed` = '1'
                                   
      WHERE f.`user_id` = 0
      LIMIT 0, 12
  37. SELECT m.*, am.params AS adv_params
      FROM jos_modules AS m
      LEFT JOIN jos_advancedmodules AS am
      ON am.moduleid = m.id
      WHERE m.published = 1
      AND m.access <= 0
      AND m.client_id = 0
      ORDER BY m.ordering, m.id
  38. SELECT *
      FROM jos_banner
      WHERE showBanner = 1
      AND (imptotal = 0 OR impmade < imptotal)
      AND cid = 1
      AND catid = 7
      ORDER BY sticky DESC, ordering
      LIMIT 0, 1
  39. UPDATE jos_banner
      SET impmade = impmade + 1
      WHERE bid = 1
  40. SELECT `filters`
      FROM `jos_sefexts`
      WHERE `file` = 'com_banners.xml'
      LIMIT 1
  41. SELECT `sefurl`, `Itemid`
      FROM `jos_sefurls`
      WHERE `origurl` = 'index.php?option=com_banners&bid=1&task=click'
  42. SELECT id
      FROM jos_menu
      WHERE link = 'index.php?option=com_jdownloads'
  43. SELECT cat_id
      FROM jos_jdownloads_cats
      WHERE published = 1
      AND cat_access <= 01
  44. SELECT *
      FROM jos_jdownloads_files
      WHERE published = 1
      AND cat_id IN (4,5,6,3,7,8,9,10,11,12,13,14,15,16,17)
      ORDER BY downloads DESC
      LIMIT 3
  45. SELECT `filters`
      FROM `jos_sefexts`
      WHERE `file` = 'com_jdownloads.xml'
      LIMIT 1
  46. SELECT `sefurl`, `Itemid`
      FROM `jos_sefurls`
      WHERE `origurl` = 'index.php?option=com_jdownloads&catid=17&cid=17&task=view.download'
  47. SELECT id
      FROM jos_menu
      WHERE link = 'index.php?option=com_jdownloads'
  48. SELECT cat_id
      FROM jos_jdownloads_cats
      WHERE published = 1
      AND cat_access <= 01
  49. SELECT *
      FROM jos_jdownloads_files
      WHERE published = 1
      AND cat_id IN (4,5,6,3,7,8,9,10,11,12,13,14,15,16,17)
      ORDER BY downloads DESC
      LIMIT 5
  50. SELECT `sefurl`, `Itemid`
      FROM `jos_sefurls`
      WHERE `origurl` = 'index.php?option=com_jdownloads&catid=17&cid=17&task=view.download'
  51. SELECT `sefurl`, `Itemid`
      FROM `jos_sefurls`
      WHERE `origurl` = 'index.php?option=com_jdownloads&catid=4&cid=47&task=view.download'
  52. SELECT `sefurl`, `Itemid`
      FROM `jos_sefurls`
      WHERE `origurl` = 'index.php?option=com_jdownloads&catid=4&cid=49&task=view.download'
  53. SELECT cat_id
      FROM jos_jdownloads_cats
      WHERE published = 1
      AND cat_access <= 01
  54. SELECT COUNT(*)
      FROM jos_jdownloads_files
      WHERE published = 1
      AND cat_id IN (4,5,6,3,7,8,9,10,11,12,13,14,15,16,17)
  55. SELECT SUM(downloads)
      FROM jos_jdownloads_files
      WHERE published = 1
      AND cat_id IN (4,5,6,3,7,8,9,10,11,12,13,14,15,16,17)
  56. SELECT `filters`
      FROM `jos_sefexts`
      WHERE `file` = 'com_agora.xml'
      LIMIT 1
  57. SELECT `filters`
      FROM `jos_sefexts`
      WHERE `file` = 'com_user.xml'
      LIMIT 1
  58. SELECT `value`
      FROM jos_jss_config
      WHERE `optname` = 'allow_user_registration'
  59. SELECT `filters`
      FROM `jos_sefexts`
      WHERE `file` = 'com_jsocialsuite.xml'
      LIMIT 1
  60. SELECT *
      FROM jos_banner
      WHERE showBanner = 1
      AND (imptotal = 0 OR impmade < imptotal)
      AND cid = 2
      AND catid = 52
      ORDER BY sticky DESC, ordering
      LIMIT 0, 1
  61. UPDATE jos_banner
      SET impmade = impmade + 1
      WHERE bid = 2
  62. SELECT `sefurl`, `Itemid`
      FROM `jos_sefurls`
      WHERE `origurl` = 'index.php?option=com_banners&bid=2&task=click'
  63. SELECT DISTINCT u.id, u.username, u.name, u.email, au.id AS `agora_user_id` 
      FROM jos_session s, jos_users u, jos_agora_users au 
      WHERE s.userid = u.id
      AND u.id = au.jos_id
      AND s.client_id = 0
      ORDER BY u.`username`
  64. SELECT DISTINCT `data`
      FROM jos_session
      WHERE guest <> 0
      AND client_id = 0 
      AND `data` NOT LIKE '%bot%'
      AND `data` NOT LIKE '%igdeSpyder%'
      AND `data` NOT LIKE '%Mail.Ru%'
      AND `data` NOT LIKE '%StackRambler%'
      AND `data` NOT LIKE '%Yandex%'
      AND `data` NOT LIKE '%Yanga%'
      AND `data` NOT LIKE '%Yahoo%'
      AND `data` NOT LIKE '%Snoopy%'
  65. SELECT w.tstamp, w.this_user, w.that_user, w.output, w.app_id, w.plg_id, w.icon, w.STATUS, u1.name AS this_name, u1.username AS this_username, u2.name AS that_name, u2.username AS that_username, a.name AS appname, p.name AS plgname, ju1.show_name AS this_showname, ju1.avatarid AS this_avatarid, ju1.sex AS this_sex, ju2.show_name AS that_showname, ju2.avatarid AS that_avatarid, ju2.sex AS that_sex 
      FROM (
                                                    SELECT DISTINCT w1.*, w2.userid, w2.tstamp
                                                   
      FROM jos_jss_thewall w1
                                                    JOIN jos_jss_thewall_users w2
      ON w1.id = w2.wall_id
                                                           
      AND w1.this_user = w2.userid
                                                   
                                            ) w JOIN `jos_jss_users` AS ju1
      ON ju1.user_id = w.this_user  JOIN `jos_users` AS u1
      ON u1.id = w.this_user 
      LEFT JOIN `jos_users` AS u2
      ON u2.id = w.that_user 
      LEFT JOIN `jos_jss_users` AS ju2
      ON ju2.user_id = w.that_user 
      LEFT JOIN `jos_jss_apps` AS a
      ON w.`app_id` = a.`id`
      LEFT JOIN `jos_jss_plugins` AS p
      ON w.`plg_id` = p.`id`
      GROUP BY w.tstamp
      ORDER BY w.tstamp DESC 
      LIMIT 10
  66. SELECT id
      FROM jos_menu
      WHERE link = 'index.php?option=com_jdownloads'
  67. SELECT cat_id
      FROM jos_jdownloads_cats
      WHERE published = 1
      AND cat_access <= 01
  68. SELECT *
      FROM jos_jdownloads_files
      WHERE published = 1
      AND cat_id IN (4,5,6,3,7,8,9,10,11,12,13,14,15,16,17)
      ORDER BY date_added DESC
      LIMIT 5
  69. SELECT `sefurl`, `Itemid`
      FROM `jos_sefurls`
      WHERE `origurl` = 'index.php?option=com_jdownloads&catid=7&cid=96&task=view.download'
  70. SELECT `sefurl`, `Itemid`
      FROM `jos_sefurls`
      WHERE `origurl` = 'index.php?option=com_jdownloads&catid=7&cid=95&task=view.download'
  71. SELECT `sefurl`, `Itemid`
      FROM `jos_sefurls`
      WHERE `origurl` = 'index.php?option=com_jdownloads&catid=12&cid=94&task=view.download'
  72. SELECT `sefurl`, `Itemid`
      FROM `jos_sefurls`
      WHERE `origurl` = 'index.php?option=com_jdownloads&catid=16&cid=93&task=view.download'
  73. SELECT `sefurl`, `Itemid`
      FROM `jos_sefurls`
      WHERE `origurl` = 'index.php?option=com_jdownloads&catid=14&cid=92&task=view.download'
  74. SELECT cc.id, cc.userid, cc.comment, cc.name, cc.username, cc.email, cc.date, cc.object_id, cc.object_group, '' AS avatar
     
      FROM jos_jcomments AS cc
     
      LEFT JOIN jos_content AS c
      ON c.id = cc.object_id
     
      WHERE cc.published = 1
       
      AND c.access <= '0'
       
      AND (c.publish_up = '0000-00-00 00:00:00' OR c.publish_up <= NOW())
       
      AND (c.publish_down = '0000-00-00 00:00:00' OR c.publish_down >= NOW())
       
      AND cc.object_group = 'com_content'
       
      AND (c.sectionid IN (5) )
     
      ORDER BY cc.date DESC
     
      LIMIT 5
  75. SELECT a.id, a.sectionid, a.access, CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS(":", a.id, a.alias) ELSE a.id END AS slug, CASE WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS(":", cc.id, cc.alias) ELSE cc.id END AS catslug
      FROM jos_content AS a
      LEFT JOIN jos_categories AS cc
      ON cc.id = a.catid
      WHERE a.id = 19
  76. SELECT title
      FROM jos_content
      WHERE id = 19
  77. SELECT `catid`
      FROM `jos_content`
      WHERE `id` = '4'
  78. SELECT `catid`
      FROM `jos_content`
      WHERE `id` = '2'
  79. SELECT `sefurl`, `Itemid`
      FROM `jos_sefurls`
      WHERE `origurl` = 'index.php?option=com_content&catid=1&id=2&view=article'
  80. SELECT `filters`
      FROM `jos_sefexts`
      WHERE `file` = 'com_aikadmin.xml'
      LIMIT 1
  81. SELECT `filters`
      FROM `jos_sefexts`
      WHERE `file` = 'com_weblinks.xml'
      LIMIT 1
  82. SELECT `filters`
      FROM `jos_sefexts`
      WHERE `file` = 'com_chronocontact.xml'
      LIMIT 1
  83. SELECT `sefurl`, `Itemid`
      FROM `jos_sefurls`
      WHERE `origurl` = 'index.php?option=com_jdownloads'
  84. SELECT `filters`
      FROM `jos_sefexts`
      WHERE `file` = 'com_lyftenbloggie.xml'
      LIMIT 1
  85. SELECT `filters`
      FROM `jos_sefexts`
      WHERE `file` = 'com_quickfaq.xml'
      LIMIT 1
  86. SELECT `filters`
      FROM `jos_sefexts`
      WHERE `file` = 'com_phocadocumentation.xml'
      LIMIT 1
  87. SELECT `sefurl`, `Itemid`
      FROM `jos_sefurls`
      WHERE `origurl` = 'index.php?option=com_content&layout=form&view=article'

•Language Files Loaded•

•Untranslated Strings Diagnostic•

MYDETAILS	::LyftenBloggieBuildRoute()	[/home/goopedg1/public_html/components/com_sef/joomsef.php:215]
MYENTRIES	::LyftenBloggieBuildRoute()	[/home/goopedg1/public_html/components/com_sef/joomsef.php:215]

•Untranslated Strings Designer•


# /home/goopedg1/public_html/components/com_sef/joomsef.php

MYDETAILS=MYDETAILS
MYENTRIES=MYENTRIES