In-game active camo / cloaking

I have tried using some refraction scripts and various other methods, but am unable to achieve a good cloaked effect. The effect is supposed to be used to make a character nearly invisible, with their enemy only able to see a strange waviness (predator style).

Any information on how I might get this effect? (or better yet, an example file?)

Attachments


Use the VideoTexture module (import it) and then render the camera output to a texture that the character has on it, with environment mapping. (Also try setting the alpha down).

Thanks, but that is basically what I tried for the refraction effect. The character stands out very much from the environment. Even more so than with just normal texturing!

A low alpha value with ztransp and an animated normal map may do the trick. Also make sure the specular value is high enough to see the distortions.

I am not familiar with normal maps that are animated. Could you give me an example?

Here is a tutorial from the yofrankie site about creating animated normal maps for a water effect:
http://www.yofrankie.org/tutorial-animated-normal-maps/

Well, animated normal maps weren’t the trick, but I think I’ve about got it. I am just using basic refraction, but slightly dimmed to compensate for the light the object receives. refraction.blend

Well, my previous approach is no longer satisfactory for me. I wonder if it is possible to change the index of refraction (IOR) in the refraction script I am using?

######################################################
#
#    Mirror.py        Blender 2.49
#
#    Tutorial for using Mirror.py can be found at
#
#    www.tutorialsforblender3d.com
#
#    Released under the Creative Commons Attribution 3.0 Unported License.    
#
#    If you use this code, please include this information header.
#    modded slightly by mrhippieguy, now a refraction script(with normal maps!)
######################################################

# get current scene
scene = GameLogic.getCurrentScene()

# get the current controller
controller = GameLogic.getCurrentController()

# get object script is attached to
obj = controller.owner

# check to see mirror has been added
if obj.has_key("Mirror") == True:
                
    # update the mirror
    obj["Mirror"].refresh(True)

# if mirror hasn't been added 
else:

    # import VideoTexture module
    import VideoTexture

    # Check for optional Property named cam
    if obj.has_key("cam") == True:
                
        # get object list
        objList = scene.objects
        
        # get camera name
        camName = obj["cam"]
        
        # get camera object
        cam = objList["OB" + camName]
        
    else:  # default is the active camera
        # get active camera
        cam = scene.active_camera 
        
    # get the mirror material ID
    matID = VideoTexture.materialID(obj, "MA" + obj['material'])
    
    #texture channel
    if obj.has_key('channel') == True:
        texChannel = obj['channel']
    else:
        texChannel = 0

    # get the mirrortexture
    mirror = VideoTexture.Texture(obj, matID, texChannel)
    
    # get the mirror source
    mirror.source = VideoTexture.ImageRender(scene,cam)

    # save mirror as an object variable
    obj["Mirror"] = mirror