游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4472|回复: 9

D3D摄影机和灯光的问题:人物做动作的情况下怎么计算光

[复制链接]

16

主题

43

帖子

43

积分

注册会员

Rank: 2

积分
43
发表于 2009-12-17 10:48:00 | 显示全部楼层 |阅读模式
是这样,我做个个简单小人,头用球,四肢和身体用筒,加进了光照 CDXUTDirectionWidget g_Light和摄影机 CModelViewerCamera g_Camera,在场景中划动鼠标时,人物转动,随着转动会有正常的明暗变化,就像自然界中一样,无需改变各点的法向量。我由此萌生一种想法,能不能在只转动胳膊,而不改变胳膊的向量的前提下,使光效正常?
因为这个简易小人的每点都有法向量的,法向量计算得不好,光效也不正常。胳膊动而法向量不变的话,应该转动和没转时光效不变,那样就不对。
再就是能不能这样,转动胳膊时,只改变胳膊这部分点的光效而不改变法向量。因为动作很多,每动一点就改法向量的话,计算量可太大了。
自制小人图片附下:

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2009-12-18 14:05:00 | 显示全部楼层

Re:D3D摄影机和灯光的问题:人物做动作的情况下怎么计算

在shader里面去做顶点怎么变换,法线就怎么变换,原理一样

16

主题

43

帖子

43

积分

注册会员

Rank: 2

积分
43
 楼主| 发表于 2009-12-19 11:47:00 | 显示全部楼层

Re: Re:D3D摄影机和灯光的问题:人物做动作的情况下怎么计

tonykee: Re3D摄影机和灯光的问题:人物做动作的情况下怎么计算光照可使计算量最小?

在shader里面去做顶点怎么变换,法线就怎么变换,原理一样

你的意思我明白,那就是一运动起来,要把法向量的计量放到OnFrameMove(...)这个函数中,就是要不停地以毫秒或更更短的时间疯狂计算,这是正解吗?在用户众多的情况下,场景动作场面复杂,每个人每个动作都在每毫秒地计算,无数个for循环,这真的是正解吗?

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2009-12-20 00:33:00 | 显示全部楼层

Re: Re: Re:D3D摄影机和灯光的问题:人物做动作的情况下怎

me9527: Re: Re3D摄影机和灯光的问题:人物做动作的情况下怎么计算光照可使计算量最小?


你的意思我明白,那就是一运动起来,要把法向量的计量放到OnFrameMove(...)这个函数中,就是要不停地以...


过早优化是万恶之源。“在用户众多的情况下,场景动作场面复杂。。。”,你需要确定,在这种情况下,确实是这个计算使得游戏帧率非常低,然后再来优化。而且优化的方法未必只是从底层开始简化这个计算本身,而是从上层想办法尽可能地减少计算量。如,场景角色超过一定数量,某些距离稍远的角色的动作就几帧才更新一次。

20

主题

84

帖子

84

积分

注册会员

Rank: 2

积分
84
发表于 2009-12-21 11:48:00 | 显示全部楼层

Re: Re:D3D摄影机和灯光的问题:人物做动作的情况下怎么计

tonykee: Re3D摄影机和灯光的问题:人物做动作的情况下怎么计算光照可使计算量最小?

在shader里面去做顶点怎么变换,法线就怎么变换,原理一样

3D 变换中法向量变换矩阵的推导 一文中说,变换矩阵不同

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2009-12-22 12:46:00 | 显示全部楼层

Re:D3D摄影机和灯光的问题:人物做动作的情况下怎么计算

顶点和法线的变换差别在于w,都是基础问题,真不想说太多废话

2

主题

141

帖子

141

积分

注册会员

Rank: 2

积分
141
发表于 2009-12-23 09:59:00 | 显示全部楼层

Re:D3D摄影机和灯光的问题:人物做动作的情况下怎么计算

没有X、Y、Z scale变化的,可以直接用转换顶点的matrix转换法线
否则必须用transpose、inverse

13

主题

312

帖子

312

积分

中级会员

Rank: 3Rank: 3

积分
312
发表于 2009-12-26 05:34:00 | 显示全部楼层

Re:D3D摄影机和灯光的问题:人物做动作的情况下怎么计算

支持一下  :〉


-------------------------------------------------------------------------------------------


欢迎访问开源图形处理器体系结构论坛(OpenGPU论坛) http://www.opengpu.org/bbs/

OpenGPU Graphics Open Source community(图形开源社区),聚焦领域(focus domain)包括:
  * GPU Architecture(图形处理器体系结构)
  * Graphics Algorithm(图形算法)
  * Open Source Rendering Engine(开源渲染器)
  * Open Source GPU Simulator/RTL Implement(开源GPU模拟器)
  * Mobile GPU Developing (移动图形设备的开发)
  * GPGPU Programming (面向通用的图形处理器编程)
                      (包括CUDA/OpenCL/DirectCompute)

34

主题

629

帖子

629

积分

高级会员

Rank: 4

积分
629
发表于 2009-12-26 13:37:00 | 显示全部楼层

Re:D3D摄影机和灯光的问题:人物做动作的情况下怎么计算

如果把计算放在shader里,基本不会影响效率,GPU的瓶颈一般在填充阶段,除非你的人物距离镜头非常远。


而且,如果你没有在shader里做骨骼计算,就应该针对每个物体把光源变换到本地坐标系,这样每个物体只需要变换一次而不是每个顶点一次

13

主题

312

帖子

312

积分

中级会员

Rank: 3Rank: 3

积分
312
发表于 2009-12-26 14:26:00 | 显示全部楼层

Re:D3D摄影机和灯光的问题:人物做动作的情况下怎么计算


支持一下  :〉


-------------------------------------------------------------------------------------------


欢迎访问开源图形处理器体系结构论坛(OpenGPU论坛) http://www.opengpu.org/bbs/

OpenGPU Graphics Open Source community(图形开源社区),聚焦领域(focus domain)包括:
  * GPU Architecture(图形处理器体系结构)
  * Graphics Algorithm(图形算法)
  * Open Source Rendering Engine(开源渲染器)
  * Open Source GPU Simulator/RTL Implement(开源GPU模拟器)
  * Mobile GPU Developing (移动图形设备的开发)
  * GPGPU Programming (面向通用的图形处理器编程)
                      (包括CUDA/OpenCL/DirectCompute)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-16 04:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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