【问题标题】:Lights look different in Three.js than 3DS MaxThree.js 中的灯光看起来与 3DS Max 不同
【发布时间】:2014-03-06 03:14:04
【问题描述】:

我正在使用 Three.js 的 r65。当我在 3ds max 中点亮场景时,我将其导出为 obj 以加载到 Three.js 中。我采取第二步并将模型导出到 FBX,以便我可以提取光照并在 Three.js 中加载。我注意到 Three.js 中的灯光没有那么“强”,几乎就像应该在强度上增加一个乘数一样?难道是我在 Three.js 中缺少一些关于灯光的属性吗?

这是场景在 3ds Max 中的样子

这是导入到 Three.js 时的样子

在玩弄设置之后,在打开 gammaOutput 和 gammaInput 之后

因此,打开 gamma 输出后它看起来会好一些,但仍然不是我希望它在 3ds max 中的样子。我创建了一个fiddle,但由于 Access-Control-Allow-Origin 错误,我无法弄清楚如何让小提琴工作,但希望那里的代码有助于了解我正在尝试做什么。

// scene
scene = new THREE.Scene();

renderer = new THREE.WebGLRenderer();
renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);

renderer.gammaOutput = true;
renderer.gammaInput = true;

container.appendChild(renderer.domElement);

loader = new THREE.OBJMTLLoader();

var modelFilePath = "http://goo.gl/ecHpSf?gdriveurl";
var materialFilePath = "http://goo.gl/bZWZEA?gdriveurl";

loader.load(modelFilePath, materialFilePath, function (object) {

        materials.push.apply(materials, object.children);

        scene.add(object);      
        object.position.set(0, 0, 0);
    });

// setup lighting
var light = new THREE.PointLight(0xffffff, 1);
light.position = new THREE.Vector3(32.2274, 54.6139, 38.2715);
light.distance = 103.74199676513672;
light.intensity = 1;
scene.add(light);

任何人都可以提出任何可能有帮助的建议,看起来我很接近。谢谢!

【问题讨论】:

  • FBX 主要用于导出网格和动画,您不能相信并期望在外部重现的灯光是公平的。您应该在场景中重建照明设置,或调整最大值,但如果导出器在新更新中进行更改,可能会破坏您的设置。
  • 拒绝,感谢您的意见。你完全写出来了,我越想,照明应该在渲染引擎中完成,而不是第三方建模应用程序。感谢您的洞察力!

标签: three.js webgl lighting 3dsmax


【解决方案1】:

请检查材质镜面反射组件。 R65 改变了一点镜面反射分量 计算:#4636(WebGLRenderer:镜面组件实现) 我在将 A3dsViewer 3ds 转换器实现到 three.js 时遇到了类似的问题。 尝试导出/保存 3ds 文件并使用A3dsViewer 转换为three.js 也许这样的工作流程会有所帮助。

另外,这样的设置可能会有所帮助:

renderer.gammaInput = false; // do false
renderer.gammaOutput = true; 

【讨论】:

  • 嘿滑块,感谢您的提示!我确实看到了与 r64 相同的问题,但昨天更新了,所以我可以肯定是最新的。如果我成功,将尝试 A3dsViewer 转换并更新帖子,谢谢!
  • 嗨 Slider,使用 A3dsViewer 后更新帖子,这实际上降低了质量。从 max 导出为 3ds 格式并从您建议的工具导出后,它看起来似乎没有考虑距离。但它在 A3dsViewer 中看起来也与在 max 中看起来有很大不同。不过,我会看看是否有其他工具可以用于导出。
  • 您能否通过电子邮件(或下载链接)给我一个 *.3ds 模型,我会检查可能性并尝试修复导出代码。
【解决方案2】:

经过进一步实验,我发现 3ds max 设置了远衰减开始/结束的值。据我所知,由于远衰减 [End] == 距离,因此无法将此值导出到 Three.js。进行搜索,看起来我受到了 Three.js 中光源所取值的限制。我将在 SO 上发布另一篇文章。

【讨论】:

    猜你喜欢
    • 2017-11-29
    • 2012-11-19
    • 2019-10-12
    • 1970-01-01
    • 2016-05-19
    • 2016-07-14
    • 2018-03-17
    • 2018-11-03
    • 1970-01-01
    相关资源
    最近更新 更多