游戏开发论坛

 找回密码
 立即注册
搜索
查看: 7128|回复: 11

同样的模型,在Milk和OGRE中渲染出来的效果却有较大差异?

[复制链接]

13

主题

113

帖子

123

积分

注册会员

Rank: 2

积分
123
QQ
发表于 2007-1-31 00:52:00 | 显示全部楼层 |阅读模式
3DS的模型,在MilkShape中模型上的光泽非常丰满(主要是specular方面),但导出为mesh后在OGRE中渲染出来的效果却大打节扣,颜色泛白,质感很差。

材质我是在Milk中调好直接抄到脚本中的,在32位的Goround和Phong着色模式下都试过,依然不理想(在切换这两种着色模式时我甚至感觉不出太大差异?)

在16位色下OGRE的渲染效果很糟,模型上全是彩色条纹- -b

这里怎么贴图??

PS:初猎OGRE,昨晚玩到4点...

193

主题

870

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
发表于 2007-1-31 22:00:00 | 显示全部楼层

Re:同样的模型,在Milk和OGRE中渲染出来的效果却有较大差异?

我之前做的没有太关注材质细节,但也有发现了这个问题,一直没有去处理。(我用的是Maya)。
是否是MilkShape使用离线的全局照明算法,而Ogre3D适用实时局部照明的原因?
如果你说的效果指得是离线渲染的结果,估计这样也算正常。

如果不是的话就可能在Ogre导出的脚本中省略了某些参数。我觉得到了实际中可能还是需要自己手动调一下效果。

如果再不行的话就要使用shader了,反正Ogre什么shader都支持的,甚至有RenderMonkey得导出插件,练一下手也不错:)

第一次发帖的时候可以选择附件 传图片就贴图了,之后就没机会了

PS:OGRE 还满意吧:)

8

主题

239

帖子

239

积分

中级会员

Rank: 3Rank: 3

积分
239
发表于 2007-1-31 22:30:00 | 显示全部楼层

Re:同样的模型,在Milk和OGRE中渲染出来的效果却有较大差异?

这个我测试的结果,我在3dmax里用dx9的显示 导出到ogre里用dx9 render, 基本上一点都不差。specular的那2个参数 大范围的我都测了 几乎是一样,哈哈

193

主题

870

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
发表于 2007-2-1 01:53:00 | 显示全部楼层

Re:同样的模型,在Milk和OGRE中渲染出来的效果却有较大差异?

可能有些导出插件有问题吧,
Ogre对Max的材质支持比较好,

另:对于镜面反射还有两个参数
高光级别=Ogre中specular power
光泽度=Ogre中shininess specular
是否忘了设置?

3

主题

35

帖子

35

积分

注册会员

Rank: 2

积分
35
QQ
发表于 2007-2-1 11:52:00 | 显示全部楼层

Re:同样的模型,在Milk和OGRE中渲染出来的效果却有较大差异?

最近参考ogre的maxscript发现它好像是把specular level乘以100做为specular power的, 不知道这么做有什么原因, 并且产生什么结果?

---------------------------------------------------------------
-- Writes a standard material in a material script
-- prefix will be before material name. (prefix+name)
-- used for multi material
---------------------------------------------------------------
function writeStandardMaterial material prefix outFile =
(
local t ;
matname = replaceSpaces material.name ;

-- writes header
format "material %\n" (prefix+matname) toutFile ;
format "{\n" to:outFile ;
format "technique\n" to:outFile ;
format "{\n" to:outFile ;
format "pass\n" to:outFile ;
format "{\n" to:outFile ;

format("ambient%%%\n")(material.ambient.r/255.0)(material.ambient.g/255.0)(material.ambient.b/255.0)to:outFile ;
format("diffuse%%%\n")(material.diffuse.r/255.0)(material.diffuse.g/255.0)(material.diffuse.b/255.0)to:outFile ;
format("specular%%%%\n")(material.specular.r/255.0)(material.specular.g/255.0)(material.specular.b/255.0)(material.specularLevel*100.0) to:outFile ;
format("emissive%%%\n")(material.selfIllumColor.r/255.0)(material.selfIllumColor.g/255.0)(material.selfIllumColor.b/255.0) to:outFile ;

-- tests if there is (or not) a diffuse map.
if ((material.diffusemap != undefined)and(iskindof material.diffusemap Bitmaptexture)) then
(
    t = filterstring material.diffusemap.filename "\\" ;
    format "texture_unit\n" to:outFile ;
    format "{\n" to:outFile ;
    format "texture % \n" t[arrayLength t] to:outFile ;
    format "}\n" to:outFile ;
)

format "}\n" to:outFile ;
format "}\n" to:outFile ;
format "}\n" to:outFile ;
)

3

主题

35

帖子

35

积分

注册会员

Rank: 2

积分
35
QQ
发表于 2007-2-1 16:46:00 | 显示全部楼层

Re:同样的模型,在Milk和OGRE中渲染出来的效果却有较大差异?

参考了一下maxscript reference
<Standard>.specularLevel Float default: 0.0 -- animatable; percentage; Specular_Level
原来specularLevel是个百分数..呃...

13

主题

113

帖子

123

积分

注册会员

Rank: 2

积分
123
QQ
 楼主| 发表于 2007-2-1 22:23:00 | 显示全部楼层

Re: Re:同样的模型,在Milk和OGRE中渲染出来的效果却有较大

免费打工仔: Re:同样的模型,在Milk和OGRE中渲染出来的效果却有较大差异?

可能有些导出插件有问题吧,
Ogre对Max的材质支持比较好,

另:对于镜面反射还有两个参数
高光级别=Og...


压根不知道有这两个东西- -b

OGRE wiki里好像也没提到

这两个参数是什么意思?怎么设置?

PS:好像蛮好用的样子,先写个小游戏看看效果咋样 [em19]

193

主题

870

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
发表于 2007-2-2 01:55:00 | 显示全部楼层

Re:同样的模型,在Milk和OGRE中渲染出来的效果却有较大差异?

可以用Max导出一下看看脚本中的参数
如果你用的是中文的Max就能看到“高光级别”“光泽度”的设置

13

主题

113

帖子

123

积分

注册会员

Rank: 2

积分
123
QQ
 楼主| 发表于 2007-2-2 22:46:00 | 显示全部楼层

Re:同样的模型,在Milk和OGRE中渲染出来的效果却有较大差异?

那两个参数是怎样作用于原来的光照公式的?

8

主题

239

帖子

239

积分

中级会员

Rank: 3Rank: 3

积分
239
发表于 2007-2-5 19:34:00 | 显示全部楼层

Re:同样的模型,在Milk和OGRE中渲染出来的效果却有较大差异?

PixelOutput fragmentEntry(PixelInput pi)
{
        PixelOutput PO;
        float3 N;
        N = normalize(pi.norm.xyz);
        float3 Eye;
        Eye.xyz = -normalize(pi.eyevector.xyz);
        float4 nColor = float4(0.0,0.0,0.0,1.0);
        float4 mDiffuse = tex2D(DiffuseTex,pi.tex0);
        float4 mSpecular = Specular;
        float4 SelfIllum = Emissive;
        nColor = nColor + SelfIllum * mDiffuse;
        float3  H;
        float3 Light;
        float f;
        float fAtt;
        float fDist;
/*  default light */
        fAtt = 1.0;
nColor = nColor + float4(LightCol0,1.0) * mDiffuse * clamp(dot(N,LightDir0),0,1) * fAtt;
        H = normalize(Eye+Light);
        f = clamp(dot(N,H),0,1);
        f = pow(f, GlossLevel);
        f = f * SpecularLevel;
        nColor = nColor + float4(LightCol0,1.0) * mSpecular * f * fAtt;
/* end of default light */
        nColor.a = Opacity;
        PO.c = nColor;
        return PO;
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 10:41

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表