osgFX.AnisotropicLighting是OpenSceneGraph中的一个可选插件,它实现了各向异性照明(anisotropic lighting)技术,可以让模型更加逼真地反射光线。
在传统的照明模型中,表面反射光线的方向只依赖于入射光线的方向和表面的法向量,而忽略了表面的微观结构。然而,实际的表面都有微结构,这个结构对表面反射光线的方向影响很大。各向异性照明技术就是用来模拟这种微观结构对表面反射光线的影响。
osgFX.AnisotropicLighting是OpenSceneGraph的一个可选插件,需要手动编译和安装。
在Linux和MacOS上,可以使用CMake来编译和安装osgFX.AnisotropicLighting。以下是一个例子:
git clone https://github.com/openscenegraph/OpenSceneGraph.git
cd OpenSceneGraph
mkdir build
cd build
cmake .. -DOSG_BUILD_PLUGIN_ANISOYROPIC_LIGHTING=ON
make
sudo make install
在Windows上,可以使用CMake和Visual Studio来编译和安装osgFX.AnisotropicLighting。以下是一个例子:
安装完成后,可以通过在程序中加载osgDB读取含有法线纹理(normal map)的模型,然后在程序中使用osgFX.AnisotropicLighting来指定这个模型使用各向异性照明技术。下面是一个使用例子:
osg::ref_ptr<osg::Node> model = osgDB::readNodeFile("my_model.obj");
osg::ref_ptr<osgFX::AnisotropicLighting> aniso = new osgFX::AnisotropicLighting;
aniso->setNormalMapTextureUnit(0);
model->getOrCreateStateSet()->setAttributeAndModes(aniso.get());
osgFX.AnisotropicLighting有一些可配置的参数和属性,可以通过调用其对应的函数来设置。下面是一些常用的函数:
设置法线纹理的纹理单元。
获取法线纹理的纹理单元。
设置高光颜色。
获取高光颜色。
设置高光强度。
获取高光强度。
使用osgFX.AnisotropicLighting需要模型提供法线纹理(normal map),否则效果不明显。需要注意的是,法线纹理的格式必须是RGBA或RGB,其中RGB分量用来表示法线方向的X、Y、Z分量,A分量可以不用。
Eric Lafortune and Fabrice Neyret, "Anisotropic Lighting for Real-Time Preview and Production Rendering", SIGGRAPH 2007 Course Notes.
Fabrice Neyret and Eric Bruneton, "Anisotropic Phong", Journal of Computer Graphics Techniques (JCGT), vol. 2, no. 2, 2013.
OpenSceneGraph User's Guide.