Home 3D Art Showcase & Critiques

Forest Environment

polycounter lvl 15
Offline / Send Message
Cody polycounter lvl 15
Making a forest environment in Unreal 3.

Update: Larger images below

cart7qw1.jpg

Previous Images:

outside.jpg

pine4update.gif

Replies

  • AsylumSeaker
    Options
    Offline / Send Message
    Is that the alpha map for the leaves? I think you should hand-paint it a bit. Looks like you just increased the contrast or used threshold to create it. This will cause the shadows to be transparent and thats no good. The twigs are blacked out also. That might be why your tree looks really washed out and more like a big stack of freshly cut grass. I'd also suggest some colour variation in the leaves, and make it a bit darker.
    Also, its very symmetrical and christmas tree ish. This is something that bothers me about a lot of game forests.
    Maybe these will help inspire.

    If its gunna be a dense forest, make the bottom halves bare like this;
    pine_shortleaf.jpg
    conifer_plantation.jpg

    Some other randoms;
    mixed-conifer.jpg
    Redwood2.jpg
    dscf2145lz7.jpg
  • okno
    Options
    Offline / Send Message
    AsylumSeaker is right, almost all trees' branches generally lean a lot more upward than that so that the most amount sunlight can reach the leaves for their photosynthesis.
  • Cody
    Options
    Offline / Send Message
    Cody polycounter lvl 15
    Update:
    honest crits encouraged and appreciated
    pine2.png
    pine2flat.png
  • AsylumSeaker
    Options
    Offline / Send Message
    That model looks so much better. The alpha map still has problems. Its too solid now. You can see how much better it looks with dark parts on the leaves though.

    The way I would do it would be create something similar to that first one you showed and then with my tablet I'd hand paint in the bits which got darkened out. If thats not an option for you, you might get a decent one if you layered your new alpha over the old one with 50 percent opacity.
  • motives
    Options
    Offline / Send Message
    motives polycounter lvl 18
    seems to me like you need to dig up some better reference and translate that into your model.

    pine.jpg

    first off, get some more polys in there. get it up to 2000 or something (and spend it on the branches and alpha planes, no 16 sided treetrunks please smile.gif )
    so, try and get away from the single plane approach when making the branches. It really takes away from the model when you can see indivudal planes. split them in half and bend them so its harder to se where the plane starts and where it ends.

    and you need more black in your alphas. a pine tree branch is not a solid green ball.

    oh and i would keep the bark texture on its own texture sheet. Use the space on the branch one for say, left side needles. right side branches or something.
  • Joshua Stubbles
    Options
    Offline / Send Message
    Joshua Stubbles polycounter lvl 19
    Not bad, certainly improved a lot.
    You might also want to check out a tutorial from Jeremy Cooke. Did some nice low poly trees that still look really damn good.
  • doc rob
    Options
    Offline / Send Message
    doc rob polycounter lvl 19
    you people are mad. If your goal is a forest - a real, dense forest - then low poly should be the goal. Don't try and model each frond or each branch, just try and get a decent volumetric poof of foliage, then go mock up your level with 1000 trees and see how it looks and performs. Then, if you've got tons of performance to spare, go back and add detail to your individual trees.

    If it were me, I wouldn't even have foliage on the trees inside the interior of the forest, I would just model one big canopy object and jab all of the trunk objects up into it. The regular trees would go around the edge of clearings to hide the canopy object.
  • pliang
    Options
    Offline / Send Message
    pliang polycounter lvl 17
    Unless its a FPS resolution tree next to a building...it shouldn't have all the fancy branches built in...

    ....Personally I think the current model needs more color variation than the really saturated green it currently has.
  • Thegodzero
    Options
    Offline / Send Message
    Thegodzero polycounter lvl 18
    vassago, thats a good ref, its how i learned how to make trees, but in any dynamic lighting engine that style looks like shit... That way works well for last gen, because its full bright.

    What cody needs though is a real branch texture not a 5 inch section of a branch scaled to 5 feet. Best way to make that is to model it out then render it to texture.
  • Xenobond
    Options
    Offline / Send Message
    Xenobond polycounter lvl 18
    That way could still work, you'd just need to edit the normals of the alpha clusters so they are all uniform. When they get lit, they should turn out decent enough, even with a normal map applied.

    I guess it really comes down to how UT3 handles your objects normals. Worth looking into, at least.
  • SHEPEIRO
    Options
    Offline / Send Message
    SHEPEIRO polycounter lvl 17
    my two cents- hehe

    ive been working on quite a few trees recently, and the biggest deal with a forrest env. would be overdraw, ie drawing the same screen pixel 50x cos its going through so many alphas, now this is one area where the "next-gen" isnt as good as you may think, considering the poly-poly draw between the gens, the over draw limits are not as different.
    with this in mind try to make your tree have the best volume with the least amount of alpha'd planes (you'l see that alot of games currently tackling forrest envs. use face-on polys (billboards) to make their trees as cheap while keeping a nice profile). now this wouldnt be the right soloution to this as i geuss you want a good view frow below(fps) but i cant stress how big an impact having less alpa planes would be. for example reducing the number of planes by 1/4 might 1/2 the draw time of the forrest.

    in practical terms id say try splitting each plane in half and folding it slighty (for better profile) while reducing the number of leaf lanes.

    also if you can make it so that when you look up through the canopy the planes are equally split up then that hould also be beter for draw

    shout at me if i dont make sense
  • Steve Schulze
    Options
    Offline / Send Message
    Steve Schulze polycounter lvl 18
    For interest sake, what sort of overdraw do you get on the next gen systems?
  • Tumerboy
    Options
    Offline / Send Message
    Tumerboy polycounter lvl 17
    I'll back Shep up on that. Sometimes polys are so much cheaper than alpha overdraw, that it's actually worth adding a few extra polys to each plane, just to nip off the corners of those cards which are nothing but alpha. Get rid of as much alpha as you can, without boosting your polycount by too much. That will also give you the definition to bend your cards a bit so they don't appear so obviously cards.
  • Mark Dygert
    Options
    Offline / Send Message
    I agree with Doc, that modeling some thick geometry is a good way to go for thick forests, but with this example, (thin and wispy) the way you have it constructed is fine. Just don't expect it to carry the same weight.

    One thing I would like to add to Shep's post is, that using a blended opacity mask will kill system performance dead when used in a forest environment. Make sure the pixels are Black or White no gradients or feathered edges. It may look slightly better but the hit to performance when it tries to figure out exactly how much of what pixel is partially visible will kill most systems especially consoles. If you have blends adjust the contract/brightness until all the gray pixels disappear.

    If you're a 3dsmax user you might get a boost in time by using the tree maker script for trunks and branches. Its not a replacement for learning how to properly do trees, and it won't do all kinds of trees. But it gives you a great, quick, random starting point.

    http://www.scriptspot.com/3ds-max/tree-maker

    EDIT:

    TreePlanesExplained00.jpg
    1) YUCK! Avoid black backgrounds with transparencies, especially ones that are dithered.

    2) Use a background color that is similar to the colors in the texture. It will help avoid the ugly black line. It might be helpful to paint an outline around your image with the colors found on the edges of your image. Or smudge, clone or patch the image outside of the UV space.

    3) Adding a gradient overlaid/multiplied onto the image helps fake self shadowing.
  • Cody
    Options
    Offline / Send Message
    Cody polycounter lvl 15
    Sweet guys. Thanks for all the tips. I'm at work today, but I will have some progress before the weekend is over.
    And I am a max user, so I will look into that script, Vig. Thanks for the paintover!
  • Cody
    Options
    Offline / Send Message
    Cody polycounter lvl 15
    Just cannot get alphas working in unrealED 3. Help please.

    alphaprob.gif
  • Scott_W
    Options
    Offline / Send Message
    Hey Cody,

    Unless the Alpha of your mask texture contains the mask, you will see a solid result.

    There are three approaches to take here:

    1. Plug either the Red, Green, or Blue channel from your mask texture into the OpacityMask slot (since each channel in your mask texture contains the same information, you would get the same appearance with each.)

    2. Run the full RGB of your mask into a Desaturate node, and from there into OpacityMask. This will condense all 3 channels into one and will maintain the full range of pixels values of the mask. (Like if you wanted to use the diffuse as opacity as well.) For a solid texture such as your mask, however, each color channel is identical making this approach useless.

    3. In Photoshop, plug your mask texture into the Alpha of your diffuse texture, save the diffuse as 32bit (so the alpha channel containing your mask in preserved), re-import it into your package, and then run the Alpha of the diffuse straight into the OpacityMask, and it should work.

    By combining the mask into your diffuse texture, you're using only one texture lookup and it's doing double duty. This is a good practice to get used to to have the most optimized texture reads you can:)

    Edit: Approach number 2 doesn't really apply with Opacity masks now that I remembered. You can plug most anything into an opacity mask slot and you will see something based on the luminance of whatever you plugged in. If you plug in the diffuse texture, for example, the light parts of the diffuse will act as the visible parts of the alpha, and the darker areas will become transparent pixels. The Opacity input is what needs the input to be limited to a single channel (which is what the Desaturate node would do in that case if you wanted to use the diffuse as the alpha.)
  • Tumerboy
    Options
    Offline / Send Message
    Tumerboy polycounter lvl 17
    Never used UE# but shouldn't your alpha map go into "Opacity" not "Opacity Mask" ? Maybe I just don't understand the difference between those two.
  • Cody
    Options
    Offline / Send Message
    Cody polycounter lvl 15
    Thanks Scott, gonna try it out.

    I tried both, but thanks tumerboy.
  • Scott_W
    Options
    Offline / Send Message
    [ QUOTE ]
    Never used UE# but shouldn't your alpha map go into "Opacity" not "Opacity Mask" ? Maybe I just don't understand the difference between those two.

    [/ QUOTE ]

    In UE3, Opacity is for anything that is not "solid" and therefor only works on material types that are not Phongs. The opacity input supports any value between 0 and 1, so you can used feathered alphas. The opacity mask input supports only 0 and 1 inputs. So the alpha has to be either fully white where you want to see something, or black and it doesn't get rendered at all and is drawn transparent with aliased edges.
  • Black_Dog
    Options
    Offline / Send Message
    Black_Dog polycounter lvl 17
    Putting the trunk on the same texture as the alpha tested branches gives you nothing. Make your life easier and dedicate a texture to each one, imo.
  • Cody
    Options
    Offline / Send Message
    Cody polycounter lvl 15
    BlackDog- Will do, this was for testing purposes. Also, how do I make two texture sheets work for one model? [ex. the trunk and the leaves] I know about mat IDs in Max, I assume it is similar in unrealED?

    Scott- Thanks, man!

    Problem Solved!
    pineftw.gif
  • Scott_W
    Options
    Offline / Send Message
    Sweet!

    You should be able to just run a color channel from your mask texture into the opacitymask without needing to desaturate it first. (I edited my previous post to explain why.) This will save on a material instruction since it's not necessary in this case. smile.gif

    Anything else, just ask!
  • Scott_W
    Options
    Offline / Send Message
    [ QUOTE ]
    BlackDog- Will do, this was for testing purposes. Also, how do I make two texture sheets work for one model? [ex. the trunk and the leaves] I know about mat IDs in Max, I assume it is similar in unrealED?

    [/ QUOTE ]

    The material ID system in Max translates to Unreal by way of creating multiple material assignments on that mesh when you import it into the engine.

    For your trees, both the branches and trunks would have their own materials. One material for the branches, one material for the trunk. You would author those two materials in Unreal and then assign them to the respective material slots on the tree static mesh.
  • Cody
    Options
    Offline / Send Message
    Cody polycounter lvl 15
    Update! Still haven't textured the trunk or branches. I'll get to it, relax. Made some modifications from crits. I think it looks pretty good.

    pine4.gif
  • Neox
    Options
    Offline / Send Message
    Neox godlike master sticky
    why don't you just put the alpha where it belongs? in the alpha channel instead of a separate texture, then you can simply plug the alpha into the opacity mask slot.

    you could also get more variety into your branches, if you put more then just one alpha into the texture, you could do several alphas for several shapes and read them out in unreal by telling the material from which range to which it should cast the alpha, so you can have like say 3 layers in one alpha, layer one has 0% black, layer two has 66% and three has 33% if you have the nodes to read it as you want, you could link the value into a materialinstance, all you have to do next is, just apply material ids in max and then connect the instances into the static mesh. As this is done with material instances it should be pretty cheap to do, can't say what impact it will have onto framerate, didn't feel any difference on a U3 project i've been working on a while back.
  • Cody
    Options
    Offline / Send Message
    Cody polycounter lvl 15
    SEKNeox- Ya, I should put the alpha in the texture. Good call. But if I make the branches different opacities won't that cause alot of overdraw? And I don't think it would look very good if the leaves were 66% transparent.

    Here's a texture update. Made sure the alpha has no gradients/feathered edges like Vig said.
    pinetextureupdate.gif
  • Neox
    Options
    Offline / Send Message
    Neox godlike master sticky
    nono if you have opacity masked, your alpha will always be 1bit, or hard alpha or alpha test, however you will call it, it will totally be the same look as you have now and will be calculated exactly the same thing. But you have to tell the opacity mask what it should read, so you can tell it in the shader that your alpha range is like 0-255 what it is right now, everything whats black is getting cut away. But you can also tell it, that your alpha goes from 80-255 so so everyting that has a value below 80 is getting cut. i could show you how to build such a shader, once i find a free minute.
  • Cody
    Options
    Offline / Send Message
    Cody polycounter lvl 15
    Ok, thanks. I am quite confused.
  • Neox
    Options
    Offline / Send Message
    Neox godlike master sticky
    haha it's quite easy, really but go on with your work as you do right now, i'll show you the shadersetup when i find the time to start ued, guess there are no big changes from UT3 to the current build considering the material editor, so i guess it will work for you too.
  • Neox
    Options
    Offline / Send Message
    Neox godlike master sticky
    ok finally i found the time to setup a quick example
    ok this was very fast, very simple it'll work in your case also, had not much time for setup...

    here we go

    leaves_00.jpg
    diffuse

    leaves_01.gif
    alpha

    leaves_02.jpg
    normal

    ok now you create a new material like this:

    leaves_03.gif
    1 is a simple texture sample, so you either go on the right tab to texturesample (if you want to be able to switch it later choose texturesampleparameter) or just select your imported diffuse in the generic browser and then switch to the material editor, press 'T' and click on the workspace.

    plug the RGB Image into the diffuse channel

    Then create 2, a 'Power' node and then 3 a 'ScalarParameter' node (both on the right tab), plug the alpha channel intop the base slot and the scalar Paramter in the exponent slot.
    Plug 2 into the opacity mask slot. Then give the Scalar Parameter a name, i called it power, give it the defaultvalue of 0.5 .
    4 is just the normalmap in the 'Texturesample' node plugged into the normal Slot.

    Ok back in the Ganeric Browser do this:

    leaves_04.gif

    if youz have your new material instance you can change the power value to change the alpha as you'd like this:

    leaves_05.jpg
    leaves_06.jpg
    leaves_07.jpg

    I changed the textures tiling to have a better preview.

    Now you've got some variety with just one simple texture, all you have to do is, create 2 material instance nodes and setup your mesh that it has 3 material ids, one for the initial shader and 2 for the variety material instance nodes. is it's done with material instances it should be pretty cheap to calculate, but it could be done with several metrials too.
  • moose
    Options
    Offline / Send Message
    moose polycount sponsor
    to have 2 id's on your mesh when you import to ue3 - make sure you assign a bitmap to your material in Max to both materials, before saving the ASE.

    You may not be getting the alpha in UE3 if the seperate alpha texture does not have an alpha channel. Hook the RGB, or specific channel into the OpacityMask slot. Using a seperate texture for the mask is not a bad idea, you can fill your R, G, and B channels up with masks, and use them throughout your entire material, to cut down on the number of DXT5s you use on Diffuse, Normal, Spec, etc.
  • Cody
    Options
    Offline / Send Message
    Cody polycounter lvl 15
    Update! Sits at about 5,000 tris and one 2048 diffuse. Overgrown church for the level. The tree trunk is low res, haven't worked on it much. I know the trim on the bottom is very noisy, and the roof texture is a placeholder until I can find a good one/make my own. The uvs still aren't laid out right and I have to fix those, ummm.. Some other problems as well, just showing some wip. Those odd shapes inside the church [in the 3rd pic] are overturned and broken pews. And sorry for the bad skybox, will most likely use one from ut3 in engine. Tips and crits appreciated.

    church3.gif
    church4.gif
    church5.gif
    church6.gif
    church7.gif

    And thanks for the help SEKNeox, will be trying that out.
  • MoP
    Options
    Offline / Send Message
    MoP polycounter lvl 18
    Pictures aren't showing for me. Get them hosted on something other than Geocities? That's so '90s... try Photobucket or Imageshack.
  • Cody
    Options
    Offline / Send Message
    Cody polycounter lvl 15
    Ok, images should be working now. Hosted on my website. They were on geocities because I was in class when I posted and my school has a block on ftp for some dumbass reason.
  • Cody
    Options
    Offline / Send Message
    Cody polycounter lvl 15
    Forgot to post my reference image [or one of them anyway]

    churchrefqc1.gif
  • Cody
    Options
    Offline / Send Message
    Cody polycounter lvl 15
    Inside update. I think I'm gonna add some trim, some vines, and some broken wood floorboards. BTW any ideas what else I can use to flesh out the level? Besides rocks trees and bushes. Also I messed with the colors of the bricks.

    churchinside.jpg

    outside.jpg
  • spideyscott
    Options
    Offline / Send Message
    looking good. Maybe you could add some rubble as if another building had been there once. Also how about a disused path thats now overgrown?
  • t4paN
    Options
    Offline / Send Message
    t4paN polycounter lvl 10
    Nice stuff dude, the houses look creepy. Good going there.
  • StJoris
    Options
    Offline / Send Message
    Nice building ref. Your roof shingles are rotated, I'd say just make them straight and get that broken down part in a bit more precisely. This all looks REALLY noisy, maybe there is something wrong with mipmaps or your textures are just very noisy, show some flats or so. Chances are it'll look better with some lighting.
  • hawken
    Options
    Offline / Send Message
    hawken polycounter lvl 19
    nice ref but you building looks like it could have been made in quake2.

    surely enreal3 gives you a bit more beef?
  • Cody
    Options
    Offline / Send Message
    Cody polycounter lvl 15
    Ya, I'm sure lighting will do a lot for it, just haven't put in in engine yet. Was trying to get most of it done in max first then import and do tweaks as needed, but maybe I'll do a test... rubble is a good idea. And yes, there is a bit of work to do on those shingles.
  • Matroskin
    Options
    Offline / Send Message
    Matroskin polycounter lvl 11
    u don't need desaturation node in ur branch material - just plug b/w texture sample into opacity mask slot;) That will simplify ur shader.
    Keep it up, learning is always hard, but pays off smile.gif
  • Cody
    Options
    Offline / Send Message
    Cody polycounter lvl 15
    A prop for the level, over grown broken down cart thing. That's the high poly version of the cart, btw. Low poly and texture soon.

    +thanks for the tip matroskin

    cart1.gif


    cart2.gif
  • Cody
    Options
    Offline / Send Message
    Cody polycounter lvl 15
    Update on the cart prop, which I think is now better than the church itself.

    cart7qw1.jpg

    cart8ub3.jpg

    cartdiffusepm3.jpgwhellnorm2fp7.gif
  • Saidin311
    Options
    Offline / Send Message
    Saidin311 polycounter lvl 11
    If you don't plan on moving this thing other than around on the ground it might help to bake some faint AO into it. It's a simple prop, but maybe some shadows might help sell the details a bit more? Keep it up!
  • Cody
    Options
    Offline / Send Message
    Cody polycounter lvl 15
    Word, Saidin. I have to do the spec, haven't started that yet. I was planning on doing AO after that. I wonder if AO can be used as the model's shadow map in UT3?
  • Scott_W
    Options
    Offline / Send Message
    You typically want to pre-multiply the AO bake onto the diffuse texture in Photoshop so that it's already there when you import it into Unreal.

    For a situation where you want to use the same base material for several objects that all have separate AO textures, you can save the AO out separately, bring it into the package, and then multiply the diffuse and specular with it in the material.
Sign In or Register to comment.