PDA

View Full Version : multitex fragment shader issue for different sized textures


pitbool
12-03-2015, 04:08 PM
Hi,

I am trying to blend an algae texture to a sea floor texture. The algae texture file is a 512x512 jpg image. I am retrieving the other texture from our ocean osgb model. This texture is a 1024x1024 baked into the model.

I have tried four ways (see below), but unfortunately, none works!
All are shaders, except for the first.

1. Using texblend - this gives some kind of blending, but it is non-uniform and not upto our expectations.
2. Using the texBlendFP.frag shader - the first texture do not show up at all.
3. Using the custom blend shader from \examples\shader\tutorial_multiTexture.py - the first texture do not show up at all.
4. Using the code from multiTexture.py (Tutorial: Multi-texturing) - strangely, same result as in option 1 above!

I have attached the py file in txt format here.
Any suggestions on how to get this to work?

Thank you!

Jeff
12-04-2015, 11:11 AM
It will be best if you can post example Vizard code (http://forum.worldviz.com/faq.php?faq=vb3_reading_posting#faq_faq_vizard_cod e) that reproduces the issue and can be run directly.

pitbool
12-04-2015, 02:13 PM
#
import viz
import vizfx

terrain = vizfx.addChild('blendTest.OSGB')
viz.go()

viz.MainView.setPosition([58.64860153198242, 0.0, -6.446604251861572])

algaeTexture = viz.addTexture('algae_texture3.jpg', type=viz.TEX_2D, wrap=viz.REPEAT)
# Create shader effect that blends textures and applies to diffuse color
code = """
Effect "Texture Blend" {

Float BlendAmount { value 0 }
Texture2D Texture1 { unit 0 }
Texture2D Texture2 { unit 1 }

Shader {

BEGIN Material
m.diffuse = mix( texture2D( Texture1, uvTexture1).rgb, texture2D( Texture2, uvTexture2).rgb, BlendAmount);
END

}

}
"""
texBlendEffect = viz.addEffect(code)

itemFromTerrain = terrain.getChild('Terrain_Zone03')
oldTex = itemFromTerrain.getTexture()
itemFromTerrain.texture(oldTex)
itemFromTerrain.texture(algaeTexture, '', unit=1)
itemFromTerrain.apply(texBlendEffect)
itemFromTerrain.setUniformFloat('BlendAmount', 0.0)

slider = viz.addSlider(pos=[0.5,0.1,0])

def setBlendAmount2(blendRatioFromSlider):
global itemFromTerrain
itemFromTerrain.setUniformFloat('BlendAmount', blendRatioFromSlider)
vizact.onslider(slider, setBlendAmount2)

#


I couldn't find a Vizard resource to recreate this issue, so here is a link to download a zip of my shortest test py file with the terrain osgb and the algae jpg that I am trying to blend - https://stanford.box.com/s/5myna254ju14yafb8f5mkbkfmzdjug28.

pitbool
12-08-2015, 07:22 PM
Jeff, just letting you know that I was able to solve the problem, with the help of Jorge, a Worldviz 3D artist. The baked texture in the terrain was a blend of two textures and a masked texture. I think he used the "render to texture" feature in 3DS max to export all of it to a single texture, which I used instead of retrieving the texture1 from the terrain at runtime. Then I blended it using the algae texture in the unit 1 of multitexturing.

Thank you.