2015-08-18 23:12:50 a117653909 阅读数 5840
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4712 人正在学习 去看看 张刚

在一个不规则的模型上贴上文字。
我是用Render Texture。
过程复杂了些,但可以用。
http://docs.unity3d.com/Manual/class-RenderTexture.html
如果文字显得模糊,可以把字体调大,再缩小。

2016-05-04 17:40:26 lalate 阅读数 4891
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4712 人正在学习 去看看 张刚

数字模型制作规范

本文提到的所有数字模型制作,全部是用3D MAX建立模型,即使是不同的驱动引擎,对模型的要求基本是相同的。当一个VR模型制作完成时,它所包含的基本内容包括场景尺寸、单位,模型归类塌陷、命名、节点编辑,纹理、坐标、纹理尺寸、纹理格式、材质球等必须是符合制作规范的。一个归类清晰、面数节省、制作规范的模型文件对于程序控制管理是十分必要的。

        

        首先对制作流程作简单介绍:
素材采集-模型制作-贴图制作-场景塌陷、命名、展UV坐标-灯光渲染测试-场景烘培-场景调整导出 第一章  模型制作规范

1   在模型分工之前,必须确定模型定位标准。一般这个标准会是一个CAD底图。制作人员必须依照这个带有CAD底图的文件确定自己分工区域的模型位置,并且不得对这个标准文件进行任何修改。导入到MAX里的CAD底图最好在(0,0,0)位置,以便制作人员的初始模型在零点附近。  

 

2   在没有特殊要求的情况下,单位为米(Meters),如图所示。


3    删除场景中多余的面,在建立模型时,看不见的地方不用建模,对于看不见的面也可以删除,主要是为了提高贴图的利用率,降低整个场景的面数,以提高交互场景的运行速度。如Box底面、贴着墙壁物体的背面等。

4    保持模型面与面之间的距离推荐最小间距为当前场景最大尺度的二千分之一。例如:在制作室内场景时,物体的面与面之间距离不要小于2mm;在制作场景长(或宽)为1km的室外场景时,物体的面与面之间距离不要小于20cm。如果物体的面与面之间贴得太近,会出现两个面交替出现的闪烁现象。模型与模型之间不允许出现共面、漏面和反面,看不见的面要删掉。在建模初期一定要注意检查共面、漏面和反面的情况;

5    可以复制的物体尽量复制。如果一个1000个面的物体,烘焙好之后复制出去100个,那么他所消耗的资源,基本上和一个物体所消耗的资源一样多。

6    建模时最好采用Editable Poly面片建模,这种建模方式在最后烘焙时不会出现三角面现象,如果采用EditableMesh 在最终烘焙时可能会出现三角面的情况。如图所示。


7模型的塌陷

当一栋建筑模型经过建模、贴纹理之后,然后就是将模型塌陷,这一步工作也是为了下一步烘焙做准备。所以在塌陷的时候要注意一些问题:

(1)    按照“一建筑一物体”的原则塌陷,体量特别大或连体建筑可分塌为2-3个物体,但导出前要按建筑再塌成一个物体,城中村要按照院落塌陷。

(2)    用Box反塌物体,转成Poly模式,这时需检查贴图有无错乱;

(3)    塌陷物体,按楼或者地块来塌陷,不要跨区域塌陷;

(4)    按项目对名称的要求进行严格的标准的命名;

(5)    所有物体的质心要归于中心,检查物体位置无误后锁定物体;

备注:所有物体不准出现超过20000三角面的情况,否则导出时出错。

8  模型命名

 不能使用中文命名,必须使用英文命名,不然在英文系统里会出问题。地块建筑模型不允许出现重名,必须按规范命名。

 

9树的种植方法

 

用十字交叉树或简模树。在种植树木的时候,要考虑到与周围建筑的关系,不能乱种树,要根据现状放置不同的树种、位置;重点建筑地块需种简模树,并在原地与之对应的种上十字片树(替换用);导出时模型树和与之对应的十字片树为单棵的,其它十字片树可塌一起,但面数不能超过1万。

10模型的级别

 

    也就是模型的精细程度,有时我们在建模的时候要根据建筑所处的具体位置,重要程度对该建筑进行判断是建成何种精度的仿真模型。可以将建筑分为五个等级。

    其中,一级为最高等级,五级为最低等级。

    单个物体的面数不要太大,毕竟是做虚拟现实,而不是制作单张效果图。单个物体面数要控制到8000个面以下。

11   镜像的物体需要修正

 

           用镜像复制的方法来创建新模型,需要加修改编辑器修正一下。

   第一步:需要选中镜像后的物体,然后进入Utilities面板中单击Reset XForm,然后单击Reset Selected;

   第二步:进入modfiy面板选取Normal命令,反转一下法线即可。

12   烘焙的物体黑缝解决对办法

 

   在烘焙的时候,如果图片不够大的时候,往往会在边缘产生黑缝。

 

处理小技巧 :  

   1)如果做鸟瞰楼体比较复杂可以把楼体合并成一个物体变成多重材质,然后对楼体进行整体完全烘焙;这样可以节省很多资源。

2)对于建筑及地形,须检查模型的贴图材料平铺的比例,对于较远的地表(或者草地),可以考虑用一张有真实感的图来平铺,平铺次数少一些。对于远端的地面材料,如果平铺次数大了,真实感比较差。

 

 

 

第二章      材质贴图规范

1  材质和贴图类型

    我们目前使用的是Unity3D软件作为仿真开发平台,该软件对模型的材质有一些特殊的要求,在我们使用的3dsMax中不是所有材质都被Unity3D软件所支持,只有下面几种材质是被Unity3D软件所支持。

Standard(标准材质)

     默认的通用材质球。基本上目前所有的仿真系统都支持这种材质类型。

Multi/Sub-Object(多维/子物体材质)

     将多个材质组合为一种复合式材质,分别指定给一个物体的不同次物体选择级别。要注意的是,在VR场景制作中,Multi/Sub-Object材质中的子材质一定要是Standard标准材质。否则不被unity3d支持。我们在制作完模型进行烘焙贴图前都必须将所有物体塌陷在一起,塌陷后的新物体就会自动产生一个新的Multi/Sub-Object多维/子物体材质。因此,这种材质类型在我们的仿真制作中经常使用。

 

2  贴图通道及贴图类型 

       Unity3D目前只支持Bitmap贴图类型,其它所有贴图类型均不支持。只支持Diffuse Color(漫反射)同self-Illumination(自发光,用来导出lightmap)贴图通道。

      Self-Illumination(不透明)贴图通道在烘焙lightmap后,需要将此贴图通道额channel设置为烘焙后的新channel,同时将生成的lightmap指向到self-Illumination。

 

3贴图的文件格式和尺寸

     建筑的原始贴图不带通道的为JPG,带通道的为32位TGA,但最大别超过2048;贴图文件尺寸必须是2的N次方(8、16、32、64、128、256、512),最大贴图尺寸不能超过(1024×1024)。

     在烘培时将纹理贴图存为TGA 格式。

 

4贴图和材质应用规则

    (1)    贴图不能以中文命名,不能有重名;

    (2)    材质球命名与物体名称一致;

    (3)    材质球的父子层级的命名必须一致;

    (4)    同种贴图必须使一个材质球;

    (5)    除需要用双面材质表现的物体之外,其他物体不能使用双面材质;

    (6)    材质球的ID号和物体的ID号必须一致。

    (7)    若使用CompleteMap烘焙,烘焙完毕后会自动产生一个Shell材质,必须将Shell材质变为Standard标准材质,并且通道要一致,否则不能正确导出贴图。

    (8)    带Alpha通道的贴图,在命名时必须加_al以区分。

 

5通道纹理应用规则 

模型需要通过通道处理时需要制作带有通道的纹理。在制作树的通道纹理时,最好将透明部分改成树的主色,这样在渲染时可以使有效边缘部分的颜色正确。通道纹理在程序渲染时占用的资源比同尺寸普通纹理要多。通道纹理命名时应以-AL结尾。 

 

 

 

第三章      模型烘焙及导出

 

模型烘焙

1场景灯光

    (1)    渲染方式:采用Max自带的LightTracer光线追踪进行渲染。

    (2)    灯光效果控制:

    该项目在烘焙前会给出固定的烘焙灯光,灯光的高度、角度、参数均不可调整,可以在顶视图中将灯光组平移到自己的区块,必须要用灯光合并场景然后烘焙。

2  烘焙贴图方式

    建筑模型的烘焙方式有两种:一种是LightMap烘焙贴方式,这种烘焙贴图渲染出来的贴图只带有阴影信息,不包含基本纹理。具体应用于制作纹理较清晰的模型文件(如地形),原理是将模型的基本纹理贴图和LightMap阴影贴图两者进行叠加。优点是最终模型纹理比较楚,而且可以使用重复纹理贴图,节约纹理资源;烘焙后的模型可以直接导出FBX文件,不用修改贴图通道。缺点是LightingMap贴图不带有高光信息;

    另一种是CompleteMap烘焙方式,这种烘焙贴图方式的优点是渲染出来的贴图本身就带有基本纹理和光影信息,但缺点是没有细节纹理,且在近处时纹理比较模糊。

3   烘焙贴图设置

①    CompleteMap烘焙方式

     在进行CompleteMap烘焙设置时,应注意以下几点:

          a)     贴图通道和物体UV坐标通道必须为1通道,见图所示;



b)     烘焙贴图文件存储格式为TGA格式;

c)      烘焙设置见图所示。


②     LightingMap烘焙方式

在进行LightingMap烘焙设置时,和CompleteMap设置有些地方不同:

a)      贴图通道和物体UV坐标通道必须为3通道,见图所示;


b)     烘焙时灯光的阴方式为Adv.RayTraced阴影,见图所示;


c)      烘焙设置见图所示;


d)     用LightingMap烘焙时,背景色要改为白色,可避免有黑边的情况;而用CompleteMap烘培时,背景色要改为与贴图近似的颜色。

 

e)     在使用lightmap烘焙后,需要将材质改回Standard,然后将新生成的map拷贝到Standard的self-Illumination内,并设置正确的贴图通道。

 

4  贴图UV编辑

必须手动进行UV编辑。

模型导出

1、将烘培材质球改为标准材质球,通道为1,自发光100;

2、将所有物体名、材质球名、贴图名保持一致

3、合并顶点(大小要合适);

4、清除场景,除了主要的有用的物体外,删除一切物件;

5、清材质球,删除多余的材质球(不重要的贴图要缩小);

6、按要求导出fbx(检查看是否要打组导出);




第四章  场景模型验收

模型制作流程


模型验收流程


模型验收标准



第五章   模型备份提交标准

 

文件标准备份模式:

l   UV 坐标:存放地型和建筑烘培前编辑的UV坐标;

l   导出fbx:存放最终导出的地型和建筑的fbx文件;

l   烘培贴图:存放地型的最终贴图和建筑的最终烘培贴图,tga格式的,    同时这里面有一份转好的贴图;

l   原始贴图:存放地型和建筑在制作过程中的所有的贴图;

l   Max文件:原始模型,未做任何塌陷的,有UVW贴图坐标的文件。

烘焙前模型,已经塌陷完的,展好UV的,调试好灯光渲染测试过的文件。

烘焙后模型,已经烘培完的,未做任何处理的文件。

导出模型,处理完烘培物体,合并完顶点,删除了一切没用物件的文件。

 

第六章          项目命名要求

1、建筑模型命名:区域名_jz_编号;如:SH01_01_jz_01、SH01_01_jz_02……

2、建筑贴图命名:模型名_编号;如:SH01_01_jz_01_01……

3、地形模型命名:区域名_dx_编号;如:SH01_01_dx_01……

4、地形贴图命名:模型名_编号;如:SH01_01_dx_01_01……

5、镂空贴图:要加“_al”后缀

6、需要加特效的玻璃要加“_bl”后缀;(需要加特效的要单独一个物体烘焙)

第七章   创建各资料路径

 

1、航片存放路径

2、各区域CAD导出的MAX文件

3、照片资料

4、公共纹理库资料

5、客户提供的所有资料

第七章          特殊制作要求

 

1、            围墙、护栏、雨棚、车棚等要按实际制作。

2、            照片与图纸不符时,以实际照片为主。

3、            沿街店铺尽量与实际一致。

4、            预估尺寸时尽量去借助照片中的参照物,如人、汽车、树木等。

5、            除重点建筑外尽量简化模型,贴图做精,能用贴图表现结构的尽量用贴图表现。

6、            绿化的种类、颜色尽量去实际一致。

7、            建筑顶部的结构及顶部的附属设施尽量按实际制作。

8、            建筑贴图时顶部要留出女儿墙的高度,避免出现窗户顶到建筑顶部。

9、            建筑要制作入口。

10、        地形、绿化要丰富。

11、        书报亭、公交站、变电箱、烟囱、信号塔等要简单制作,以丰富场景。

12、        所有贴图UV大小要准确,避免失真。




2016-08-23 14:49:58 yu__jiaoshou 阅读数 1159
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4712 人正在学习 去看看 张刚

Unity 3D - 可视化变量标注 :

常用 :

  • 拖动条 :
    [Range(0, 100)]

  • 大标题 :
    [HeaderAttribute(“属性”)]

  • 停留提示 :
    [TooltipAttribute (“生命值”)]

  • 隐藏 :
    [HideInInspector]


public 和 private 正常情况:

  • public 的变量值会显示在 Inspector 视图中 .
public float HP;

这里写图片描述

  • private 不会显示在 Inspector 面板上 .
private float HP;

这里写图片描述


私有变量 ( private ) 显示在 Inspector 面板上 :

如何想要私有变量 (private )也显示在Inspector 面板上 , 那么就需要使用序列化 (SerializeField) .

[SerializeField]  private float HP;

这里写图片描述

使用 [SerializeField] 可以让 private 变量显示在 Inspector 面板上 , 并且不会改变变量本质( 变量任是私有的 ) .


Range 显示 :

[Range(0,100)]  private float HP;

加上一个Range 参数 , 显示方式会变成拖动条形式 .

这里写图片描述


HeaderAttribute 显示 :

 [Range(0, 100), HeaderAttribute("血量")] private float HP;

加上HeaderAttribute (“血量”) 后 , 在 Inspector 上显示如下图 .

这里写图片描述


TooltipAttribute 显示 :

[SerializeField, Range(0, 100), HeaderAttribute("血量"), TooltipAttribute("生命值")]
private float HP;

[SerializeField, Range(0, 100), HeaderAttribute("蓝量"), TooltipAttribute("魔法值")]
private float MP;

加上TooltipAttribute (“生命值”) , 鼠标放在对应变量上 , 显示如图提示 .

这里写图片描述

2016-12-20 14:59:19 a770150657 阅读数 1669
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4712 人正在学习 去看看 张刚
using UnityEngine;
using System.Collections;


public class DrawTexture : MonoBehaviour {
    private Object[] m_RedNumber; //存放数字,这里不能stexture2D,下面进行强制转化,否则在在start()里面读取不到,resource只能读取object类型的数据。
    public Transform m_DrawNumPoint;//数字显示的位置
    public int m_DrawNumber;//想要画的数字
// Use this for initialization
void Start () {


        m_RedNumber = Resources.LoadAll("RedNumber");//放texture的文件夹
}

// Update is called once per frame
void Update () {

}
    void OnGUI()
    {
        DrawTextureMethod(m_DrawNumPoint.position,m_DrawNumber,m_RedNumber);
        
    }
    public void DrawTextureMethod(Vector3 vect3,int number,Object[] obj)
    {
        float x= Vect3To2(vect3).x; 
        float y= Vect3To2(vect3).y;
        char[] chars= number.ToString().ToCharArray();   //将数字转化成字符数组。
        Texture2D tempTexture2d = (Texture2D)obj[0];
        float width = tempTexture2d.width;
        float height = tempTexture2d.height;
        foreach (char s in chars)      //s相当于s[i];
        {
            int i = int.Parse(s.ToString());  //将字符数组中的元素转化成数字
            GUI.DrawTexture(new Rect(x,y,width,height), (Texture2D)obj[i]);//画照片即数字
            x += width;
        }
    }
    /// <summary>
    ///  将3D坐标转换成2D坐标
    /// </summary>
    /// <param name="vect3"></param>
    /// <returns></returns>
    public Vector2 Vect3To2(Vector3 vect3)
    {
        Vector2 m_DrawNumPoint2D = Camera.main.WorldToScreenPoint(vect3);
        return m_DrawNumPoint2D; 
    }
}
2017-08-06 16:32:24 Mr_Miu 阅读数 1790
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4712 人正在学习 去看看 张刚

原帖:http://www.cnblogs.com/fengrenyuan/p/3729642.html


昨晚,好友在电话里问我在Unity3d中使用3D Text,不想让其穿透模型显示,即想让场景中的3D Text与模型有正确的遮挡关系,怎么解?

今早谷歌上查了查,明白了原因,因为3D Text的默认材质的shader是GUI/Text Shader(自然就有了GUI的穿透显示的特性),而且不可以去手动更改。

记录解决方式如下:

1、自己写个想要的shader,并建个使用它的材质球;

2、导入自己的中文字体;

3、替换掉3D Text上的默认材质球。

 

首先,搭建一个好友在电话里描述的场景;

 

新建一个shader,命名为3D Text Shader,并在其中贴上以下代码:

复制代码
Shader "Custom/3D Text Shader" {
    Properties {
        _MainTex ("Font Texture", 2D) = "white" {}
        _Color ("Text Color", Color) = (1,1,1,1)
    }


    SubShader {
        Tags{ "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
        Lighting Off Cull Off ZWrite On Fog { Mode Off }
        Blend SrcAlpha OneMinusSrcAlpha
        Pass {
            Color [_Color]
            SetTexture [_MainTex] {
                combine primary, texture * primary
            }
        }
    }
}
复制代码

给一个截图:

新建一个Material,并指定上刚写的shader;

下一步是导个字体文件进来,去控制面板的字体路径中,找一个喜欢的中文字体复制到Unity3d的Assets文件夹中,我复制了一个黑体过来;

回到Unity3d中,把字体文件的Character选项改为Unicode,这样字体文件下面的那张Font Texture就会出现密密麻麻地文字;

最后,选中场景中的需要被正确遮挡的3D Text物体,进行以下3个操作,就完成了:

1、字体文件拖给Text Mesh组件中的Font;

2、刚才自己建的材质球拖给Mesh Renderer组件中的Element 0;

3、字体下的Font Texture拖给材质球。

如图:

 

PS:

1、如果要调整字体颜色,3D Text中的Color属性已经失效,需要去调整那个自己建的材质球的Text Color;

2、关于字体,如果无视内存占用的话,字体就去控制面板里面的字体随便复制来用,否则,想做到最优的话,建议去网上找那个三四千字的精简字库。

没有更多推荐了,返回首页