注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

.

.

 
 
 

日志

 
 

最近写的一个MAXScript  

2008-07-18 02:46:05|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

模拟3s效果

 

最近写的一个MAXScript - Dabai - DBC studio最近写的一个MAXScript - Dabai - DBC studio

 

下载地址

http://forum.cgfinal.com/showthread.php?t=44966

 

写个一个用于模拟3S效果的脚本 基本原理是 实用 falloff贴图加到自发光通道
详细说明我以前发过在 这里http://forum.cgfinal.com/showthread.php?t=38437

 

global sss_obj = undefined <----------- 要加入3s效果的物体
global sss_light = undefined <----------- 灯光
global sss_map= undefined <----------- 自发光贴图
global o_distance = undefined <----------- 灯光和物体的距离
global flag_autoupdata = false <----------- 自动预览开关标志
global flag_AA = true <----------- 预览是否抗锯齿
global offset_prv = 0 <----------- 保存当前偏移距离
global str_mattype = undefined <----------- 保存所选物体材质类型(字符串)


定义预览面板
rollout DBC_Preview " Preview " width:280 height:380
(
bitmap preview_img "Bitmap" pos:[9,20] bitmap bitmap 50 50 color:black)
定义一个名为preview_img的bitmap 用于显示预览效果
pos:[9,20]位置 按左上角计算位置

bitmap bitmap 50 50 color:black)
宽高为 250 240 默认颜色为 黑色

button btn_Refresh "Refresh" pos:[9,310] width:250 height:24 定义Refresh按钮
定义Auto Refresh预览自动刷新 和Anti-Aliasing 抗锯齿 的复选框

checkbox chk_autoupdata "Auto Refresh" pos:[9,275] width:84 height:20
checkbox chk_AA "Anti-Aliasing" pos:[100,275] width:84 height:20 checked:true

当按下Refresh按钮时执行此段
on btn_Refresh pressed do
(
select sss_obj 选中sss物体
Updata_prv preview_img 更新预览图
)

自动更新和抗锯齿的开关控制
on chk_autoupdata changed state do
(
flag_autoupdata=chk_autoupdata.checked
if flag_autoupdata do
(
select sss_obj
Updata_prv preview_img
)
)
on chk_AA changed state do
(
flag_AA = chk_AA.checked
select sss_obj
Updata_prv preview_img
)
)

更新预览的 函数定义如下
fn Updata_prv Img =
( view=render outputwidth:250 outputheight:240 vfb: off renderType: #selection antiAliasing: flag_AA
Img.bitmap=view
渲染所选物体道之前定义的bitmap控件
)

------------------------------------------------------------------------------------------------------
参数设置面板

rollout DBC_main "Parameters" width:280 height:352
(
定义拾取灯光和 物体 的按钮
pickbutton pick_light "Pick Light" pos:[109,12] width:149 height:24 enabled:true message:"" filter:filter_light toolTip:"Pick a light"
pickbutton pick_obj "Pick Object" pos:[109,41] width:149 height:24 enabled:false message:"" filter:filter_mesh toolTip:"Pick a object"

颜色选择控件
colorPicker sss_color "color" pos:[9,11] width:83 height:53 enabled:false color color 255 255 255) fieldWidth:55

改变亮度 和偏移的两个spinner控件
spinner spn_level "Intesity" pos:[25,99] width:90 height:16 enabled:false range:[0,100,1] scale:0.1
spinner spn_offset "Offset" pos:[166,99] width:90 height:16 enabled:false range:[-999999,999999,0] type:#float scale:0.1
range:[0,100,1] 是spinner控件数值的范围 range:[最小值,最大值,默认值]

调节区域的滑动控件
slider sld_range "Range" pos:[9,139] width:262 height:44 enabled:false range:[50,100,100] ticks:1
上面几个enabled:false 是使其在开始处于灰色禁用状态 当拾取灯光后按钮 pick_obj 可用当拾取物体后其他都变为可用,这样防治混乱

一个文本 标签 用来显示百分比
label lab_Percentage "" pos:[215,139] width:48 height:18

Pick Light 按钮拾取灯光事件处理
on pick_light picked obj do
(
sss_light = obj 将拾取的灯光存入sss_light
pick_light.text = obj.name 按钮文字改为相应的灯光名称
pick_obj.enabled = true 启用Pick Object按钮
)

on pick_obj picked obj do
(
sss_obj = obj 将拾取的物体存入sss_obj
pick_obj.text = obj.name
... ...
sss_map= falloff () sss_map 设为falloff贴图
sss_map.direction = 3 Falloff Driction 为 Object
sss_map.type = 4 Falloff Type为 distance Blend
sss_map.node = sss_light Object为拾取的灯光

p_light=sss_light.pos
p_obj=sss_obj.pos
如果拾取 的物体 没有材质则为它加上标准材质
if sss_obj.material == undefined do
(
new_mat = StandardMaterial diffuse:  (color 180 210 0)
sss_obj.material= new_mat
)

计算默认距离
sss_map.farDistance = (distance p_obj p_light)*2
o_distance = sss_map.farDistance

Standard材质和Raytrace不同处理,将自发光通道贴图设为sss_map

str_mattype = (sss_obj.material as string)
if (findstring str_mattype "Standard") !=undefined do
(
sss_obj.material.SelfIllumMap=sss_map
sss_obj.material.useSelfIllumColor = on
)
if (findstring str_mattype "Raytrace") !=undefined do
(
sss_obj.material.Luminositymap=sss_map
)
sss_map.color2 = sss_color.color=sss_obj.material.diffuse
sss_color.enabled=true
spn_level.enabled=true
spn_offset.enabled=true
sld_range.enabled=true
)
......
定义信息面板
rollout DBC_about "About ..."
(
.......
)

创建浮动面板
DBC_floater = newrolloutfloater "DBC Fast SSS 1.0" 280 600 100 100 <--主窗口三个面板
addrollout DBC_main DBC_floater
addrollout DBC_Preview DBC_floater
addrollout DBC_about DBC_floater rolledup:true
  评论这张
 
阅读(1154)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017