($sid) { session_delete(array('sid' => $sid)); session_data_delete(array('sid' => $sid)); return TRUE; } function sess_gc($maxlifetime) { global $time; $expiry = $time - $maxlifetime; $arrlist = session_find(array('last_date' => array('<' => $expiry)), array(), 1, 10000, '', array('sid', 'bigdata', 'last_date')); if (!$arrlist) return TRUE; $expiry = $time - 21600; // 超6小时未提交丢弃上传图片和附件 $sidarr = array(); foreach ($arrlist as $val) { if ($val['last_date'] > $expiry && $val['bigdata']) continue; $sidarr[] = $val['sid']; } if (empty($sidarr)) return TRUE; session_delete(array('sid' => $sidarr)); session_data_delete(array('sid' => $sidarr)); return TRUE; } function sess_start() { global $conf, $sid, $g_session; ini_set('session.name', $conf['cookie_pre'] . 'sid'); ini_set('session.use_cookies', TRUE); ini_set('session.use_only_cookies', TRUE); ini_set('session.cookie_domain', $conf['cookie_domain']); // 为空则表示当前目录和子目录 ini_set('session.cookie_path', $conf['cookie_path']); // 打开后只有通过 https 才有效 ini_set('session.cookie_secure', FALSE); ini_set('session.cookie_lifetime', 8640000); // 打开后 js 获取不到 HTTP 设置的 cookie, 有效防止 XSS,对于安全很重要,除非有 BUG,否则不要关闭。 ini_set('session.cookie_httponly', TRUE); // 活动时间 ini_set('session.gc_maxlifetime', $conf['online_hold_time']); // 垃圾回收概率 = gc_probability/gc_divisor ini_set('session.gc_probability', 1); // 垃圾回收时间 5 秒,在线人数 * 10 / 每1000个请求回收一次垃圾 ini_set('session.gc_divisor', 1000); session_set_save_handler('sess_open', 'sess_close', 'sess_read', 'sess_write', 'sess_destroy', 'sess_gc'); // register_shutdown_function 会丢失当前目录,需要 chdir(APP_PATH) $conf['url_rewrite_on'] > 1 and function_exists('chdir') and chdir(APP_PATH); // 这个必须有,否则 ZEND 会提前释放 $db 资源 register_shutdown_function('session_write_close'); session_start(); $sid = session_id(); return $sid; } // 刷新页面清理附件缓存 废弃 function sess_clear_attach() { global $sid, $time; $arr = session_read($sid); if (!$arr || 0 == $arr['bigdata']) return TRUE; session_update($sid, array('bigdata' => 0, 'last_date' => $time)); session_data_delete(array('sid' => $sid)); return TRUE; } function online_count() { return session_count(); } function online_list_cache() { static $cache = array(); $key = 'online_list'; if (isset($cache[$key])) return $cache[$key]; $cache[$key] = cache_get($key); if (NULL === $cache[$key]) { $cache[$key] = session_find(array('uid' => array('>' => 0)), array('last_date' => -1), 1, 1000); foreach ($cache[$key] as &$online) { $user = user_read_cache($online['uid']); $online['username'] = $user['username']; $online['gid'] = $user['gid']; $online['ip_fmt'] = safe_long2ip($online['ip']); $online['last_date_fmt'] = date('Y-n-j H:i', $online['last_date']); } cache_set('online_list', $cache[$key], 300); } return $cache[$key]; } function online_user_list_cache() { static $cache = array(); $key = 'online_user_list'; if (isset($cache[$key])) return $cache[$key]; $cache[$key] = cache_get($key); if (NULL === $cache[$key]) { $cache[$key] = session_find(array('uid' => array('>' => 0)), array(), 1, 1000, 'uid', array('uid')); cache_set('online_user_list', $cache[$key], 300); } return $cache[$key]; } ?>Mental ray的基础介绍|江阴雨辰互联

Mental ray的基础介绍

Mental ray的基础介绍


2024年4月13日发(作者:诺基亚950xl能用微信吗)

1 Mental ray的基础介绍

1)

要了解Mental ray的原理首先我们要知道以下几种渲染器算法:

常见的软件渲染算法有扫描线,光线跟踪,光能传递3种

扫描线算法scan-line:扫描线算法很简单,它的基本思路是把三维场景根据摄像机的设置进

行二位投影,然后把投影分割成小块,逐步进行计算的方式。这种算法最大的好处就是速度

快,几乎所有渲染器都支持扫描线算法。首先,将三维场景中的物体沿摄像机矢量方向的反

方向进行投影,并计算z通道,和采样点的颜色信息。然后利用这些信息最终求出渲染图像

中每一个像素的颜色值。代表软件renderman

光线跟踪算法raytracing:光线跟踪的计算方法与现实生活中的成像原理十分相似,它是计

算由光源发射的光线,把它看作是无限长的射线,当遇到反射或折射时改变方向,遇到漫反

射面或无物体阻挡时结束,在真正计算实则是逆向求解。这种算法的好处就是能真实地再现

物体之间的折射和反射,可以很容易的渲染出照片质量的图片。代表软件mentalray.

光能传递算法Radiosity:是基于真实的热辐射传递公式的算法,它将场景分为许多大小不

同的面,逐个计算光线在每个面上辐射的值,经衰减后,再传递到对应的方向的面,如此下

去,直到光线的能量低于我们设定的值。由于这种算法完全以物理学原理为模型,所以效果

非常真实,但是速度非常慢,一般只用于静桢。代表软件maxwell

硬件渲染:完全由显卡计算出的画面,多用于粒子的渲染,游戏画面的制作和wed3d。渲染

效果取决于显卡。代表软件CgFX

对渲染算法和渲染器的了解,对工作效率的提高至关重要。

2)

Mental ray渲染器的几大模块

以Maya2008为例,Mental ray的渲染设置窗口有别于前几个版本,将功能分类的更加详细

主要区域分为:品质设置(Quality Presets)、渲染功能(Rendering Features)、反锯齿设置

(Anti-Aliasing Quality)、光线追踪设置(Raytracing)、阴影设置(Shadows)、运动模糊(Motion

Blur)、焦散和全局光照(Caustics and Global Illumination)、最终聚集(Final Gathering)、渲

染诊断(Diagnostics)、渲染设置(Render Options)、帧缓冲(Frambebuffer)、轮廓线(Contours)、

毛发转换(Translation)、预览(Preview)、习惯定制(Custom Entities)、环境设置(Environment)

如图:

图 8.1.1-01Mental ray 设置窗口

3)

其中我们主要学习:焦散和全局光照(Caustics and Global Illumination)、最终

聚集(Final Gathering)两个部分。

焦散和全局光照(Caustics and Global Illumination):

如果光线照射到物体后又经过反射等方法照亮其它物体的话,就产生了所谓的间接照

明,比如一面可以反射光线的镜子,或是可以漫反射光线的白墙。GI(global illumination)就

是一种可以获得间接照明的方法。GI是用模拟的方法来得到光线反复反射的效果的

光线在物体上的反射可以分为3种情况:漫反射 光滑反射 镜面反射

漫反射是指光线照射到受光物体后,反射出来的光线方向被均匀地分配在一个半球状的空

间中。镜面反射是指光线照射到受光物体后,反射出来的光线以镜相方式改变了方向,反

射角等于入射角。光滑反射和镜面反射差不多,不过反射出来的光线方向并不象镜面反射

那么单一。

在计算机图形学中,光滑反射是比较常见。其实本质上光滑反射和镜面反射的原理是一样

的,只是在现实中不存在绝对光滑的物体表面,大多数看似十分光滑的表面其实都有很多

肉眼看不见的微小粗糙。所以最后我们只能得到光滑反射。

镜面反射与折射产生的聚焦和散焦可以产生caustics(焦散线),然后照射到一个有漫反射属

性的物体上。比如说,有折射效果的水杯会投射caustics到有漫反射属性的桌子上,一面镜

子也可以实现类似的效果(反射)。还有一个典型的例子就是光线穿过有折射属性的水面到达

游泳池的底部。还有一点,就是caustics也具有GI的功能(间接照明)。

图8.1.1-02 三种反射的说明图例

但是,MR视caustics和GI为不同的照明方法,并独立的控制它们

causticst和GI最少有两种明确的用处:

1. 从光学上精确地再现自然环境中的光线作用效果,比如写字楼内部的光线

2.模拟真实光线,用与影视娱乐业与商业。在这个领域里不在乎光学理论上的精确性,只要

看着真实就可以了。

MR用两步计算GI。

第一步,光源发射很小的并带有能量的小包裹(我们叫它光子(photons))发射到场景中。我们

要追踪这些光子在场景中反弹的路线。其中一些光子会被物体吸收或被反弹到无限远的空间

里。当光子与一个物体相撞,它可以被反射,发射或吸收。当一个光子经过所有漫反射表面

的物体并产生了路线之后,就会被储存到一个可以描述三维空间的数据结构里,这就是光子

图。光子被不断射出直到达到要求数量的光子都储存为止,或者也可以指定一个最多可射出

光子的数量。

第二步,在渲染时物体还是被局限照明照亮,然后我们找到离照明点比较近的光子并以它的

光子图为依据对场景进行补偿以达到间接照明的目地。

这样任务就很清楚地被分来了:直接照明用局部照明实现,而间接照明用GI。局部照明只

处理多光源到被照明点为直线的光线(可能但阴影削弱),GI则处理反射光线。

GI和caustic唯一不同的地方在于GI的光子是按漫反射通道(diffuse path)反射的,而caustic

的光子是按镜面反射通道(specular path)反射。

4)

知道了原理下面让我们详细认识一下GI和Caustic的各项参数

因为GI、Caustic和Final Gathering的渲染是和灯光分不开的,所以下面也会连带介绍一下

Maya灯光中的Mental ray属性。

图8.1.1-03 GI、Caustic的渲染参数

图8.1.1-04

图8-1-4 Area Light、Directional Light、Point Light、Spot Light的光子设置(Ambient Light、Volume Light

是无法发射光子的)

图8.1.1-05Final Gathering设置面板

Mental ray 的基础介绍就到这里,下节课我们结合实例具体学习Mental ray 的强大功能。


发布者:admin,转转请注明出处:http://www.yc00.com/num/1712940144a2152054.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信