WorldViz User Forum 3D grass shader to mimic large grass field
 Register FAQ Search Today's Posts Mark Forums Read

#1
03-30-2011, 06:18 PM
 Zhi Member Join Date: Mar 2011 Posts: 49
3D grass shader to mimic large grass field

Hi all,

I am new to Vizard. I used Virtools previously. There are some sample compositions in the Virtools forum, using shader to create mimic grass field effect. Some 3d model software, such as the 3ds max, also support online rendering of grass/fur effect. I am curious whether anyone has used shader in Vizard to mimic large field of grass land. Is there any link or script that we can share on this topic?

Thank you.
Zhi
#2
04-02-2011, 01:55 PM
 Zhi Member Join Date: Mar 2011 Posts: 49
Never mind. I found a way to use 2D texture to create a wonderul large grass land effect.

Zhi
#3
04-13-2011, 12:56 AM
 JvdBosch Member Join Date: Sep 2006 Posts: 36
Quote:
 Originally Posted by Zhi Never mind. I found a way to use 2D texture to create a wonderul large grass land effect.
#4
04-13-2011, 10:21 AM
 Zhi Member Join Date: Mar 2011 Posts: 49
I do not use any shell technique. I simply found a very nice seamless grass texture (as attached) and applied it to the ground. To get rid of the regular pattern due to the repeated tiling of the grass patch (which gives a strong linear perspective cue). I 'blend' the detailed grass ground with a huge noise texture surface. The visual effect of such a grass field looks pretty good, even though it is still 2D textured. Here is the code:

grass = viz.addTexture('Grass.jpg') #Create the detailed grassland with about 100 m in diameter
for x in range(-51, 52, 2):
for z in range(-51, 52, 2):
if (x*x + z*z) < 52*52:
ground.setScale([2,2,1])
ground.setPosition([x, 0, z])
ground.setEuler([0, 90, 0])
ground.texture(grass) # Wrap texture on quad

BK = viz.addTexture('Noise.jpg') #Blend the detailed grassland with a low frequency noise map 100 m x 100 m
BKGrnd.setScale([100,100,1])
BKGrnd.setPosition([0, 0, 0])
BKGrnd.setEuler([0, 90, 0])
BKGrnd.texture(BK)
BKGrnd.zoffset(-1)
BKGrnd.alpha(0.2)
Attached Thumbnails

#5
04-14-2011, 05:05 AM
 JvdBosch Member Join Date: Sep 2006 Posts: 36
You can also put the same texture in another map channel and repeat it on a larger scale, possible even rotated.

Code:
```                    tex = node.getTexture(unit=0)
node.texture(tex,unit=1)
node.texblend(0.2,unit=1)
trans = viz.Transform()
trans.setScale([0.2,0.2,0.2])
trans.setAxisAngle(vizmat.EulerToAxisAngle(0,0,45))
node.texmat(trans,unit=1)```
#6
04-14-2011, 10:35 AM
 Zhi Member Join Date: Mar 2011 Posts: 49
Hi JvdBosch,

What does the trans.setScale([0.2,0.2,0.2]) do. Does it rescale the node or the texture map?

In my code, I have more than 2000 small ground patches (2m x 2m) with the same texture. I have another huge ground patch (100m x 100m) which has a different texture. My question is whether I can blend the two textures as if they were applied to the same node (i.e. the 100m x 100m patch), using the texblend function you suggest?

 Thread Tools Display Modes Rate This Thread Hybrid Mode Rate This Thread: 5 : Excellent 4 : Good 3 : Average 2 : Bad 1 : Terrible

 Posting Rules You may not post new threads You may not post replies You may not post attachments You may not edit your posts BB code is On Smilies are On [IMG] code is On HTML code is Off Forum Rules
 Forum Jump User Control Panel Private Messages Subscriptions Who's Online Search Forums Forums Home Getting Vizard Help with AI Announcements Vizard Precision Position Tracker (PPT) Plug-in development

 Similar Threads Thread Thread Starter Forum Replies Last Post Xianshi Xie Vizard 1 07-01-2009 12:26 PM shivanangel Vizard 1 05-11-2009 10:44 AM

All times are GMT -7. The time now is 06:14 AM.