渲染效果
当需要创建具有非常高视觉质量的图像时,HOOPS Visualize可以提供多种渲染效果。在本教程中,我们将使用涡轮发动机模型来演示反射平面、两种类型的阴影和光晕。
本教程将使用沙盒应用程序,对于C++用户,您可以从mfc_sandboxCHPSView::OnUserCodeX项目开始。如果您想按照本教程进行操作,则可以在function中放置代码;C#用户将使用wpf_sandbox应用程序-您将代码放置在DemoUserCommand**X**::Execute.
1.1 加载涡轮机模型
构建并运行沙箱后的第一步是加载涡轮机模型文件。该文件可以在Visualize安装的样本/数据目录中找到。这是一个HSF文件,因此可以通过HOOPS Visualize本机加载。使用沙箱的主菜单将其加载到沙箱中。或者,您可以使用以下代码片段以编程方式加载文件:
HPS::Stream::ImportNotifier notifier; try { HPS::Stream::ImportOptionsKit importOptionsKit; importOptionsKit.SetSegment(mySegmentKey); notifier = HPS::Stream::File::Import(filename, importOptionsKit); // pauses this thread until the HSF is finished loading notifier.Wait(); } catch (HPS::IOException const& e) { // handle exception}
您还需要获取对模型的段键的引用。如果您以编程方式加载该文件,则应该向HPS::ImportOptionsKit.如果您使用沙箱应用程序的文件菜单加载模型,则可以获得模型段,如下所示:
HPS::SegmentKey modelSegmentKey = GetTopView().GetAttachedModel().GetSegmentKey();
有关加载HSF的更多信息,请参阅编程指南的第 9.1节。加载完成后,您应该看到下图:
涡轮发动机的默认视图
1.2 添加反射平面和照明
您可以相对轻松地应用的一种奇特效果是反射平面。SetSimpleReflectionPlane使用平面的几何方程指定平面:
Ax + By + Cz + D = 0
还可以使用反射图像的其他选项,例如不透明度、模糊、褪色和衰减。我们还将添加照明,使模型显得更加真实。将以下代码放入UserCode或方法之一中,DemoUserCommand以在加载模型后激活它。
modelSegmentKey.GetVisualEffectsControl().SetSimpleReflection(true, 0.5f, 1U, false, 0, 2.0f); // parameters are equation of a plane modelSegmentKey.GetVisualEffectsControl().SetSimpleReflectionPlane(HPS::Plane(0, 1, 0, 0.375f)); // add lighting modelSegmentKey.InsertDistantLight(HPS::Vector(1, 1, -1));
使用轨道运算符(位于应用程序的功能区控件中)旋转模型后,生成的图像应如下所示:
带有反射平面的涡轮发动机(请注意,为了清晰起见,窗口背景已更改为白色)
与所有额外的渲染效果一样,需要额外的处理时间才能获得最终的图像。始终牢记渲染质量和性能之间的平衡。
1.3 阴影
modelSegmentKey.GetVisibilityControl().SetShadows(true); modelSegmentKey.GetVisualEffectsControl().SetShadowMaps(true, 16, 2048, true, true);
在本节中,我们将向涡轮机模型应用投影和阴影贴图。由于投影在反射平面上通常看起来不太好,因此我们将禁用它以专注于阴影。我们将启用的第一种阴影类型是阴影贴图。阴影贴图允许几何体的面在受光影响的任何类型的几何体上投射阴影。第一步是在片段中启用阴影,然后我们将设置阴影贴图参数:
在这里,您可以看到前景中的一些部件在其后面的几何体上投射阴影。
接下来,我们将启用阴影。投影在Visualize中称为简单阴影,因为效果受到高度限制。首先,简单的阴影只能投射在平面上。其次,阴影只能由单一光源产生。然而,对于大多数工程应用来说,简单的阴影就可以产生足够的效果。
mySegmentKey.GetVisualEffectsControl().SetSimpleShadow(true); // enables simple shadows mySegmentKey.GetVisualEffectsControl().SetSimpleShadowPlane( HPS::Plane(0, 1, 0, 0.425f)); // sets the plane where the shadows are projected mySegmentKey.GetVisualEffectsControl().SetSimpleShadowColor(HPS::RGBAColor(0.2f, 0.2f, 0.2f)); // color of the shadow mySegmentKey.GetVisualEffectsControl().SetSimpleShadowLightDirection(HPS::Vector(0, 1, 0)); // light direction
带有阴影贴图和简单阴影的涡轮机
1.4.Bloom
另一种可以提高渲染视觉质量的效果是光晕。当强烈的明亮光线从闪亮的表面反射时,就会发生光晕。光线似乎渗入了周围的空气中。Bloom仅在基于着色器的驱动程序中可用,例如DirectX11和OpenGL2。Bloom是使用HPS::PostProcessEffectsKit.
HPS::PostProcessEffectsKit ppek; ppek.SetBloom(true, 10.0f); // enables bloom. strength can be set from 0 to 10, (default is 1) myWindowKey.SetPostProcessEffects(ppek); ppek.SetBloom(false); // disables bloom
启用光晕时,涡轮机的闪亮部分会产生有趣的效果
1.5 纹理
为了获得最高的视觉质量,您还需要添加纹理。将纹理应用到像涡轮机这样复杂的模型超出了本教程的范围,但提供了一个图像来演示它。您可以在Visualize安装的样本/数据目录中找到纹理模型。有关纹理的更多信息可以在编程指南的纹理部分和教程 2:应用材质中找到。
应用纹理的涡轮机
慧都科技是Tech Soft 3D-HOOPS在中国区的唯一增值服务商,负责HOOPS与CEETRON试用,咨询,销售,技术支持,售后,旨在为企业提供一站式的3D开发解决方案。如果您的企业目前也有3D数据格式转换、3D Web轻量化渲染的需求,欢迎咨询在线客服申请3D 轻量化引擎HOOPS的60天免费试用。
↓↓扫码添加客服微信,及时获取“HOOPS技术”支持↓↓
发表评论