如何用maya 渲染论文彩图 (occulusion效果)

本文指导如何使用Maya来渲染一些用于论文的彩图,效果如下:
本例子所用的maya版本 maya2015


步骤如下:
一、初始环境设置
1.打开 maya , 在新场景 ,确保一些环境设置。
勾上 Mayatomr.dll  中的 两个选项





二、顶点上色

由于脚本中使用的命名的原因,要到如的obj应该按照图中的格式 ,从mesh_0000.obj 开始
使用移动工具调整好人的位置

下面说下如何上色:
由于 这里使用的网格顶点数都相同,可以都用同一个颜色文件,格式如下:
然后使用 maya 脚本读取 这个 squat2_coloring.seg 文件,给网格上色
说明:
framenum 是场景中mesh(也就是本例子中的人)的个数
labelColorFilePath 是上色文件的路径
countmax 这里设为100000 ,是假定网格顶点的数量不超过100000
mel.eval('select -r mesh_000%d:MeshShape;' %frameid) 这里涉及到 mesh的名称,可以看到里面的名称
是与网格的名称对应的,如果你不按照 mesh_0000.obj的命名,那么脚本中相关的名称要改一下


脚本文件:
import  re
import  maya.api.OpenMaya as api
import  maya.mel as mel
global  cnt
global  framenum
framenum  =  3  
cnt  =  0
global  countmax
countmax  =  100000
global  labelColorFilePath
labelColorFilePath  =  r 'D:\zzb\squat2\squat2_coloring.seg'
  
  
def  paintColor():
    
     for  frameid  in  range  (framenum):
             mel. eval ( 'select -r mesh_000%d:MeshShape;'  % frameid)
             mel. eval ( 'polyColorPerVertex -r 0.5 -g 0.5 -b 0.5 -a 1 -cdo;' )
              
             fColor  =  open (labelColorFilePath,  'r' )
             lineColor  =  fColor.readline()
             =  re. compile ( '\s+' )
             count =  0
             rgbVal  =  [ 1.0 , 0.0 , 0.0 , 1.0 ]
  
             selectionList  =  api.MGlobal.getActiveSelectionList()
             nodeDagPath  =  selectionList.getDagPath( 0 )
             mfnMesh  =  api.MFnMesh(nodeDagPath)
             cArray  =  []
             while  lineColor:
                     lineColor  = lineColor.strip( '   ' )
                     lineColor  = lineColor.strip( '\n' )
                     splitesult  =  p.split(lineColor)
                     #cmds.select('MeshShape.vtx[%d]' % count)
  
                     rgbVal[ 0 =  ( float (splitesult[ 0 ]))
                     rgbVal[ 1 =  ( float (splitesult[ 1 ]))
                     rgbVal[ 2 =  ( float (splitesult[ 2 ]))          
                     #cmds.polyColorPerVertex( rgb = rgbVal , notUndoable = True)
  
                     =  api.MColor(rgbVal)
                     cArray.append(c)
                     count  + =  1
                     lineColor  =  fColor.readline()
                     if  count > countmax:
                             break
             fColor.close()
  
             iArray  =  [i  for  in  xrange (count)]
             mfnMesh.setVertexColors(cArray, iArray)
             global  cnt
             cnt  + =  1
             print  cnt
paintColor()

选择人物右键 ,可以看到新上色的数据保存在colorSet1(RGBA)


此时渲染是没有上色的效果的,这是因为 )Maya中多边形的顶点着色,使用的是与材质无关的另一套数据信息,这些顶点色彩与几何体存储在一起,可以导出到游戏引擎或其他软件中,但使用Maya software渲染器无法渲染出设定的顶点颜色。如图:
 

三、导出mesh颜色到材质并渲染

由于本文中脚本的所用的节点的命名问题,请确保此时Hypershade中的 材质节点是初始的,这样保证后面创建新的材质节点时命名不会出问题
初始的节点是这三个,工作区为空
如果有 多余的材质节点在,删除它们的连接线后,再点 删除未使用节点

选择人物,再点节点编辑器
可以看到 人物它对应的网格节点 mesh_0000:MeshShape
可显示  网格节点 mesh_0000:MeshShape 连接的其他节点
可以看到 mesh_0000:MeshShape 一开始 连接的是 initialShadingGroup ,这是初始的材质。
接下来要使用下面的一个代码来连接材质节点,并创建新的材质节点连接来用于我们的渲染

说下下面的脚本,主要是做一些 渲染节点 的创建和连接 ,由于涉及到节点的名称的关系,为了保证名字的正确,在运行这个脚本之前就不要创建其他材质。 framenum 是场景中mesh(也就是本例子中的人)的个数
import  re
import  maya.cmds as cmds
import  maya.mel as mel
global  count 
count  =  0 
global  framenum
framenum  =  3
for  frameid  in  range  ( 0 , framenum):
     print  count
     mel. eval ( 'string $surfaceShader_%d = `createNode  surfaceShader`;'  % (frameid + 1 ))
     mel. eval ( 'sets -renderable true -noSurfaceShader true -empty -name surfaceShader%dSG;' % (frameid + 1 ))
     mel. eval ( 'connectAttr -f surfaceShader%d.outColor surfaceShader%dSG.surfaceShader;' % (frameid + 1  ,frameid + 1 ))
     mel. eval ( 'string $mib_amb_occlusion_%d = `createNode  mib_amb_occlusion`;'  % (frameid + 1 ) )
     mel. eval ( 'connectAttr -force mib_amb_occlusion%d.outValue surfaceShader%d.outColor;' % (frameid + 1  ,frameid + 1 ))
     mel. eval ( 'string $mentalrayVertexColors_%d = `createNode mentalrayVertexColors`;'  % (frameid + 1 ))
     mel. eval ( 'connectAttr -force mesh_000%d:MeshShape.colorSet[0].colorName mentalrayVertexColors%d.cpvSets[0];'  % (frameid ,frameid + 1 ))
     mel. eval ( 'connectAttr -f mentalrayVertexColors%d.outColor mib_amb_occlusion%d.bright; ' % (frameid + 1  ,frameid + 1 ))
     mel. eval ( 'disconnectAttr mesh_000%d:MeshShape.instObjGroups[0] initialShadingGroup.dagSetMembers[%d];' % (frameid ,frameid) )
     mel. eval ( 'connectAttr -force mesh_000%d:MeshShape.instObjGroups[0] surfaceShader%dSG.dagSetMembers[0];' % (frameid ,frameid + 1 ))
     mel. eval ( 'setAttr "mib_amb_occlusion%d.samples" 256;'  % (frameid + 1 ) )
     count + = 1
其中  mel. eval ( 'setAttr "mib_amb_occlusion%d.samples" 256;'   % (frameid + 1 ) ) 设定samples 值为256 ,可根据自己的情况设定

这个新的节点连接中关键是用到了 一个 mentalrayVertexColors  节点,它可以把 网格mesh_0000中的颜色集 导出,并输入到其他节点,比如这里的mib_amb_occlusion ,这样使得mib_amb_occlusion 具有mesh_0000中颜色集的颜色了,也就得到了一个新的材质。最后还要把新材质赋予给mesh_0000,即把mesh_0000:MeshShape连接到 surfaceShader1SG
这些节点的连接过程当然可以手工在节点编辑器上完成,但比较麻烦,也可能引发死机(我双点了一下节点就死机了,原因不明)

此时由于occ材质的关系,在 viewport2.0 下物体表面黑色,不利于观察,可以切换到旧版默认视口
渲染一下
效果下面这样
改一下照相机的底色

保存为png 格式,其实那些白色的透明的

但这个效果我们还是不满意,因为感觉缺少阴影效果。由于occ 材质的原因,我们不需要添加灯光,要产生阴影,需要加上一些地板等其他东西,物体与物体之间就会产生阴影效果
并且拉伸
接下来给地板也上occ 白色材质
可以用下面这个mel 代码来连接该两个节点
connectAttr -f mib_amb_occlusion4.outValue surfaceShader4.outColor;
setAttr "mib_amb_occlusion4.samples" 256;

选择物体
final results
more results
文中所用的素材以及maya文件请到 我的资源区下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/256088.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

maya前台渲染插件mel脚本工具

一.概述: maya使用 batch render 后台批量渲染时,有时会出错,无法进行。还有一些情况需要补渲染出错帧,此时只要文件maya能打开,就可以进行前台窗口渲染。maya默认提供sequence render渲染命令,如下图&…

咸鱼Maya笔记—渲染基础

咸鱼Maya笔记—渲染基础 渲染的概念渲染算法渲染器公用属性 在场景或角色材质灯光环节结束后,接下来可以将三维场景中的场景模型、角色模型和光影效果等转化输出成最终的图片或者视频,这就需要用到Maya渲染方面的知识了。 渲染的概念 渲染,英…

玛雅云渲染计算机设置,maya渲染设置

自定义渲染设置(Render Setup)窗口的布局 通过停靠、取消停靠和重新排列渲染设置编辑器,创建最适合您工作流的布局。 选择“渲染 - 标准”(Rendering - Standard)或“渲染 - 专家”(Rendering - Expert)工作区,随即系统会自动停靠“渲染设置”(Render Setup)和“特性编辑器”…

Maya场景渲染(一)

这次动画我主要负责的一部分,就是渲染,渲染可以说是动画中最初效果的一部分,如何把Maya中生硬的模型打造出光影效果优秀,阴影层次分明的画面,是渲染所需要完成的工作。特别是对于我们这次的写实风格的CG动画来说更是如…

chatgpt赋能python:Python中输入怎么写?完整教程

Python中输入怎么写?完整教程 如果你正在学习Python编程,那么输入是你必须掌握的重要概念之一。在Python中,输入是指将数据从用户的键盘输入到程序中。这些数据可以是字符串、整数、浮点数或其他任何类型的值。本文将提供有关Python中输入的…

Python下载和安装

前言 Python是当下流行的通用编程语言,简单易学、容易上手,且“钱”景广阔。 在网络爬虫、数据挖掘分析、人工智能、运营运维、日常工作效率提升,无不有Python的影子。 因此,今天跟大家分享Python的下载和安装教程。 第一步&…

下载Python特别慢怎么办?

一般我们下载python都是去官网(Welcome to Python.org)这个网址去下载的,但是下载速度特别特别慢,哪怕家里是千兆网也要20分钟(反正我家是这样),那有什么好方法来解决这个问题吗? 有…

如何快速下载Python解决在官网下载缓慢问题以及如何安装Python

不知道你们碰到过这样的情况没有,在Python官网下载Python却很慢,刚开始我还以为是被限速了,后来才了解到这是因为Python官网的服务器是在外网,所以呢那我找到了一个Python的国内下载网址:CNPM Binaries Mirror (npmmir…

2021:Python的下载安装教程(很详细,初学者也能懂)

文章目录 Python的下载安装配置环境变量喜欢技术的,一起进群交流学习吧!!! Python的下载安装 1.进入Python的官网, http://www.python.org/download/ ,这里以下载Windows的Python为例 2.选择下载的版本是…

python软件下载安装教程,如何下载和安装python

python下载安装教程 首先打开浏览器,百度搜索【python】。出现搜索结果后,再进入下图所示的官网中。进入官网后,鼠标移至【download】再选择自己的系统。进入下载页面后,再选择python的版本。 下载完成后,再点击打开…

Python的下载安装(手把手教学)

程序员养成日记第一天:从自主下载安装软件开始~~~ 目录 windows版本 MacOS版本 windows版本 1、进入Python官网 https://www.python.org/downloads/ 2、点击Downloads中的Windows版本 3、进入Windows版本,进行Python版本的挑选,建议P…

P7960 [NOIP2021](洛谷) 报数(筛数)

题目传送门 这道题我们只要把十进制下有七的数筛出啦就万事大吉了 类似于埃氏筛 for(int i1;i<10000100;i){if(a[i])continue;if(check(i)){for(int ji;j<10000100;ji)a[j]1;continue;}nx[ls]i;lsi; } 坑点 数组开大一百左右 因为当X为时 X的下一个数会大于 AC代…

【洛谷P7960】[NOIP2021] 报数【筛法】

P r o b l e m l i n k Problem~link Problem link 分析&#xff1a; 筛子 当前数 x x x如果被标记 就跳过 看 x x x是否含有 7 7 7 如果有就把 x x x的倍数都标记 记录下下一个报的数即可 CODE&#xff1a; #include<iostream> #include<cstdio> #include<…

2018年六月前十超级计算机,CPU天梯图2018年6月最新版 六月台式电脑CPU性能排行 (全文)...

年中618网购狂欢节临近&#xff0c;受不少商家降价促销活动利好&#xff0c;近期DIY装机的朋友也明显多了起来。对于装机朋友来说&#xff0c;最重要的是选CPU和显卡了&#xff0c;今天“电脑百事网”带来了CPU天梯图2018年6月最新版&#xff0c;可以秒懂各平台各型号处理器性能…

英特尔宣布 18 核桌面处理器 Skylake-X

&#xff08;点击上方公众号&#xff0c;可快速关注&#xff09; 来源&#xff1a;Solidot http://www.solidot.org/story?sid52580 在 AMD 宣布了 16 核桌面处理器 Threadripper 两周之后&#xff0c;原本在核心数量上落后的芯片巨人透露了 18 核桌面处理器 Skylake-X。 英特…

高端微型计算机CPU产品,哪款处理器更值得选择?2018新春处理器市场分析

自AMD于去年发布基于Zen架构、性能大幅提升的RYZEN锐龙处理器后&#xff0c;处理器各个区间的市场都进入了全面竞争、相互比拼的状态&#xff0c;不再存在一家独大的现象。那么对于近期有处理器购买需求的用户来说&#xff0c;哪类处理器将是更好的选择呢&#xff1f;接下来我们…

centos 7下搭建Redis5.x版集群

一、开始集群搭建 redis集群需要至少要三个master节点&#xff0c;我们这里搭建三个master节点&#xff0c;并且给每个master再搭建一个slave节点&#xff0c;总共6个redis节点&#xff0c;这里用一台机器&#xff08;可以多台机器部署&#xff0c;修改一下ip地址就可以了&…

matlab amd负优化,AMD 篇三:AMD真的翻身了?—— AMDINTEL CPU 计算性能测试

AMD 篇三:AMD真的翻身了?—— AMD&INTEL CPU 计算性能测试 2020-02-25 15:13:05 12点赞 18收藏 14评论 前言 这次主要讲一下AMD和INTEL CPU的mkl库测试,以及10980XE不降价原因的猜测。 2019年,AMD发布ZEN2以后,很多人 大呼AMD翻身了!!!每款CPU发布时,都会有专业的…

AD7960FMC子卡设计资料第750篇:基于AD7960的 5Msps 18bit AD FMC子卡

基于AD7960的 5Msps 18bit AD FMC子卡 一、套件概述 EVAL-AD7960FMCZ是一款全功能评估套件&#xff0c;用于演示低功耗、18位、5 MSPS PulSAR差分ADC AD7960的性能。该评估板可与EVAL-SDP-CH1Z系统演示平台(SDP)板配合使用。用户通过随附的评估软件可以对AD7960的性能执行详…

P7960 [NOIP2021] 报数 埃氏筛法

在世界杯小组赛的前2分钟AC了了这题&#xff0c;然后赶紧趁热写了篇题解 直接上题目 等会儿 这篇文章写了2678字 先赞后看好习惯 题目描述 报数游戏是一个广为流传的休闲小游戏。参加游戏的每个人要按一定顺序轮流报数&#xff0c;但如果下一个报的数是 7的倍数&#xff0c;或…