Ogreでキャラクターオブジェクトのエッジ線効果を作成します.
19083 ワード
http://www.ogre3d.org/tikiwiki/Create+outline+around+a+character
Here is a script of user Telchar、which shows how to create an outline around a character、which works without shares.
Sreenshot of this effect、used in the game Torchlight:
The code was published here:http://www.ogre3d.org/forums/viewtopic.php?p=368918#p368918
Simiar version:http://www.ogre3d.org/forums/viewtopic.php?f=8&t=59079
For questions and feedback,please use this forum topic:http://www.ogre3d.org/forums/viewtopic.php?f=8&t=59079
I did not find any other good demo of how to use the stencil in ORE.I recommand to add this demo(or simiar)to the OGS demos that come with the Orece download.Here is the exreadto run:http://assaframan.googlepages.com/StencilGlow_exe.zip Here is the code:http://assaframan.googlepages.com/StencilGlow_src.zip
Here are some screenshots of my current work. Here is the exe(download and run):http://assaframan.googlepages.com/outline.zip I did something simiar to this articale:http://www.codeproject.com/opengl/Outline_Mode.asp This is only good for an outline and not for a glow effect.Also–it only works in openGL and I had to add_オンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインX.If anyone wants the code–posta replay.I will craaaaaaaaaattininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininscreenshotts is that the outlines stay with the same thicknessのmaterif you ar.
I didn't get nice resight with the stencil+sharders.Here is the best I have got until now: Here is the exe(download and run):http://assaframan.googlepages.com/glow.zip Here is the source:http://assaframan.googlepages.com/glow_code.zip Not a nice glow-but a nice code sample of how to use the stencil with ORE.
Watch out for my OGS related tweets here.
Asaf Raman
OG REチームメンバー
Posts:3092
Kudos:79
ジョined:11 Appr 2006
Location:TLV、Israel
トップ
by psquare≫Tue Dec 26,2006 5:28 am
I did something like this before:
1.Prograammaticaally add a pass at the end of all passes of the technique you are using.
2.Render to texture the object(s)
3.Use this rended texture as a projective texture in the pass that you added.In the pass you can have a
sharder which scales the ororiginalカラー.
You can use something like a toon
sharder as your last pass
sharer.
If dot(normal,view Vector)>treshold
カラー
glowカラー
else
カラー=オリジナリティカラー
This will accurately do the edge detection for you.
Note that I add a pass、so that I do this non-invasively(do not modify the existing passes)
To do a
glow around the edges,you can add a bloom
sharder as Falagard mentions.You can accompplish this using compsitor frame ework of Ogre.
The re is a sample for bloom in the OgreSDK.The re are also various scene shardes(compsitor effects(.fx))in the Direct X SDK.
Here is a script of user Telchar、which shows how to create an outline around a character、which works without shares.
Sreenshot of this effect、used in the game Torchlight:
material some/random/material/with/rim/effect
{
technique
{
pass
{
texture_unit
{
texture yourtexturehere.png
}
//rim lighting
texture_unit
{
cubic_texture rim.dds combinedUVW
tex_address_mode clamp
colour_op_ex add src_texture src_current
colour_op_multipass_fallback one one
env_map cubic_normal
}
}
}
}
Here is the c+code to do the same:/*
rim lighting
see: http://www.ogre3d.org/tikiwiki/Create+outline+around+a+character
*/
#pragma once
#include <Ogre/OgreEntity.h>
#include <Ogre/OgreSubEntity.h>
#include <Ogre/OgreSubMesh.h>
#include <Ogre/OgreString.h>
#include <Ogre/OgreMaterial.h>
/*
add the rim lighting effect to an entity.
*/
void highlight (Ogre::Entity* entity)
{
unsigned short count = entity->getNumSubEntities();
const Ogre::String file_name = "rim.dds";
const Ogre::String rim_material_name = "_rim";
for (unsigned short i = 0; i < count; ++i)
{
Ogre::SubEntity* subentity = entity->getSubEntity (i);
const Ogre::String& old_material_name = subentity->getMaterialName();
Ogre::String new_material_name = old_material_name + rim_material_name;
Ogre::MaterialPtr new_material = MaterialManager::getSingleton().getByName (new_material_name);
if (new_material.isNull())
{
MaterialPtr old_material = MaterialManager::getSingleton().getByName (old_material_name);
new_material = old_material->clone (new_material_name);
Pass* pass = new_material->getTechnique(0)->getPass(0);
Ogre::TextureUnitState* texture = pass->createTextureUnitState();
texture->setCubicTextureName (&file_name, true);
texture->setTextureAddressingMode (TextureUnitState::TAM_CLAMP);
texture->setColourOperationEx (Ogre::LBX_ADD, Ogre::LBS_TEXTURE, Ogre::LBS_CURRENT);
texture->setColourOpMultipassFallback (Ogre::SBF_ONE, Ogre::SBF_ONE);
texture->setEnvironmentMap (true, Ogre::TextureUnitState::ENV_NORMAL);
}
subentity->setMaterial (new_material);
}
}
/*
remove the rim lighting effect from an entity.
*/
void unhighlight (Ogre::Entity* entity)
{
unsigned short count = entity->getNumSubEntities();
for (unsigned short i = 0; i < count; ++i)
{
Ogre::SubEntity* subentity = entity->getSubEntity (i);
Ogre::SubMesh* submesh = subentity->getSubMesh();
const Ogre::String& old_material_name = submesh->getMaterialName();
const Ogre::String& new_material_name = subentity->getMaterialName();
// if the entity is already using the original material then we're done.
if (0 == stricmp (old_material_name.c_str(), new_material_name.c_str()))
continue;
// otherwise restore the original material name.
subentity->setMaterialName (old_material_name);
}
}
Download of file rim.dds:http://www.ogre3d.org/forums/download/file.php?id=2022 The code was published here:http://www.ogre3d.org/forums/viewtopic.php?p=368918#p368918
Simiar version:http://www.ogre3d.org/forums/viewtopic.php?f=8&t=59079
For questions and feedback,please use this forum topic:http://www.ogre3d.org/forums/viewtopic.php?f=8&t=59079
I did not find any other good demo of how to use the stencil in ORE.I recommand to add this demo(or simiar)to the OGS demos that come with the Orece download.Here is the exreadto run:http://assaframan.googlepages.com/StencilGlow_exe.zip Here is the code:http://assaframan.googlepages.com/StencilGlow_src.zip
Here are some screenshots of my current work. Here is the exe(download and run):http://assaframan.googlepages.com/outline.zip I did something simiar to this articale:http://www.codeproject.com/opengl/Outline_Mode.asp This is only good for an outline and not for a glow effect.Also–it only works in openGL and I had to add_オンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインオンラインX.If anyone wants the code–posta replay.I will craaaaaaaaaattininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininininscreenshotts is that the outlines stay with the same thicknessのmaterif you ar.
I didn't get nice resight with the stencil+sharders.Here is the best I have got until now: Here is the exe(download and run):http://assaframan.googlepages.com/glow.zip Here is the source:http://assaframan.googlepages.com/glow_code.zip Not a nice glow-but a nice code sample of how to use the stencil with ORE.
Watch out for my OGS related tweets here.
Asaf Raman
OG REチームメンバー
Posts:3092
Kudos:79
ジョined:11 Appr 2006
Location:TLV、Israel
トップ
by psquare≫Tue Dec 26,2006 5:28 am
I did something like this before:
1.Prograammaticaally add a pass at the end of all passes of the technique you are using.
2.Render to texture the object(s)
3.Use this rended texture as a projective texture in the pass that you added.In the pass you can have a
sharder which scales the ororiginalカラー.
You can use something like a toon
sharder as your last pass
sharer.
If dot(normal,view Vector)>treshold
カラー
glowカラー
else
カラー=オリジナリティカラー
This will accurately do the edge detection for you.
Note that I add a pass、so that I do this non-invasively(do not modify the existing passes)
To do a
glow around the edges,you can add a bloom
sharder as Falagard mentions.You can accompplish this using compsitor frame ework of Ogre.
The re is a sample for bloom in the OgreSDK.The re are also various scene shardes(compsitor effects(.fx))in the Direct X SDK.