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;
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.
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.
seems to me like you need to dig up some better reference and translate that into your model.
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 )
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.
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.
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.
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.
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.
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
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.
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.
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.
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!
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.)
[ 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.
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?
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.
[ 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.
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.
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.
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.
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.
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
diffuse
alpha
normal
ok now you create a new material like this:
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:
if youz have your new material instance you can change the power value to change the alpha as you'd like this:
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.
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.
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.
And thanks for the help SEKNeox, will be trying that out.
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.
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.
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.
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.
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
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!
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?
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.
Replies
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;
Some other randoms;
honest crits encouraged and appreciated
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.
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 )
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.
You might also want to check out a tutorial from Jeremy Cooke. Did some nice low poly trees that still look really damn good.
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.
....Personally I think the current model needs more color variation than the really saturated green it currently has.
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.
I guess it really comes down to how UT3 handles your objects normals. Worth looking into, at least.
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
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:
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.
And I am a max user, so I will look into that script, Vig. Thanks for the paintover!
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.)
I tried both, but thanks tumerboy.
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.
Scott- Thanks, man!
Problem Solved!
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.
Anything else, just ask!
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.
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.
Here's a texture update. Made sure the alpha has no gradients/feathered edges like Vig said.
ok this was very fast, very simple it'll work in your case also, had not much time for setup...
here we go
diffuse
alpha
normal
ok now you create a new material like this:
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:
if youz have your new material instance you can change the power value to change the alpha as you'd like this:
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.
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.
And thanks for the help SEKNeox, will be trying that out.
surely enreal3 gives you a bit more beef?
Keep it up, learning is always hard, but pays off
+thanks for the tip matroskin
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.