unity中能用unity 代码设置shader修改shader吗

unity3D中Shader的分类和区别
Shader按管线分类一般分为固定渲染管线与可编程渲染管线
(1)固定渲染管线 ——这是标准的几何&光照(Transforming&Lighting)管线,功能是固定的,它控制着世界、视、投影变换及固定光照控 制和纹理混合。T&L管线可以被渲染状态控制,矩阵,光照和采制参数。功能比较有限。基本所有的显卡都能正常运行。
(2)可编程渲染管线——对渲染管线中的顶点运算和像素运算分别进行编程处理,而无须象固定渲染管线那样套用一些固定函数,取代设置参数来控制管线。
unity3d的三种Shader
(1)Fixed function shader 属于固定渲染管线 Shader, 基本用于高级Shader在老显卡无法显示时的Fallback(之后有详细介绍)。使用的是ShaderLab语言,语法与微软的FX files 或者NVIDIA的 CgFX类似。
(2)Vertex and Fragment Shader 最强大的Shader类型,属于可编程渲染管线. 使用的是CG/HLSL语法。
(3)Surface Shader Unity3d推崇的Shader类型,使用Unity预制的光照模型来进行光照运算。使用的也是CG/HLSL语法。
Unity3d三种Shader对比
三种Shader共同点:
(1)都必须从唯一一个根Shader开始
(2)Properties参数部分,作用及语法完全相同
(3)具体功能都在SubShader里(Subshader: 子Shader,Shader会自上而下运行第一个硬件能支持的Subshader,主要作用是对不用硬件的支持。)
(4)都可以打标签,例如Tags { &RenderType& = &Opaque& } LOD 200 以及Lighting On等
(5)都可以Fallback
(6)都可以处理基本的功能,例如光照漫反射(Diffuse)以及镜面反射(Specular)。但是Vertex and Fragment和Surface都能实现Fixed function实现不了的高级功能,例如基于uv计算的效果等等。
三种Shader不同点:
(1)Fixed function shader以及Vertex and Fragment Shader在subshader下面还有pass{},但是Surface Shader,由于已经将具体内容打包在光照模型了,不能加pass{},加了会报错。
(2)Fixed function shader每句代码之后没有分号';' 但是V&F shader以及Surface shader每句代码之后都必须加分号';'
(3)核心结构不同:
Fixed function shader的核心是
Material{} 以及 SetTexture[_MainTex]{}
Vertex and Fragment Shader的核心是
#pragma vertex vert
#pragma fragment frag
#include &UnityCG.cginc&
Surface Shader的核心是
(1)这套用的是Unity3d自带光照模型Lambert,也不做顶点处理,那么只需要一个表面处理函数surf即可
#pragma surface surf Lambert
或者(2)这套表示使用的是自己写的光照模型lsyLightModel,并且使用了顶点处理函数vert
// surface 表面处理函数 光照模型函数 顶点处理:函数
#pragma surface surf lsyLightModel vertex:vert
//执行顺序 顶点处理函数 -& 表面处理函数 -& 光照模型函数 -&颜色值
推荐到广播
4 人聚集在这个小组
第三方登录:原文链接:
经测试,以下两种方法在vs2013上都有效。方法一:1. 创建或编辑usertype.dat文件(此文件在VS安装目录下的Common7\IDE下面,比如我的就在D:\Program Files\Microsoft Visual Studio 8\Common7\IDE\usertype.dat),添加如下的关键字列表,每个单词占一行,如果你想添加你自己的关键字,也可以按照这种方式添加在usertype.dat文件中2. 在vs中打开Tools-&Options...-&TextEditor-&File Extension填写你想使用的着色器文件扩展名,如fx, hlsl, vs, ps等等,然后Editor选择Microsoft Visual C++3. 重新启动VS2005关键字列表:__global____host____device____constant____shared__gridDimblockIdxblockDimthreadIdxint1uint1int2uint2int3uint3int4uint4float1float2float3float4char1char2char3char4uchar1uchar2uchar3uchar4short1short2short3short4dim1dim2dim3dim4int2floatfloat2intasmasm_fragmentBINORMALBLENDINDICES0BLENDWEIGHT0COLOR0COLOR1COLOR2COLOR3column_majorcompilecompile_fragmentdiscarddecl1float2float3float3x3float3x4float4float4x4float4x3halfhalf2half3half4ininoutintint2int3int4matrixoutpass1pixelfragmentrow_majorsamplersampler1Dsampler2Dsampler3DsamplerCUBEsampler_statesharedstateblockstateblock_stateTANGENTtechniquetexturetexture1Dtexture2Dtexture3DtextureCUBETEXCOORD0TEXCOORD1TEXCOORD2TEXCOORD3TEXCOORD4TEXCOORD5TEXCOORD6TEXCOORD7uniformvectorvertexfragmentVPOS方法二: 1.3和VS2012之前:第一步:下载安装NShader第二步:到这个文件夹:&VsInstallRootFolder&\Common7\IDE\Extensions\Alexa ndre Mutel\NShader\version\第三步:用记事本打开”NShader.pkgdef”文件第四步:将如下内容:[$RootKey$\Languages\File Extensions\.shader]@=”{479b8c71-c9de-d-ae1d91602d7c}”加到“CodeBase”=”$PackageFolder$\NShader.dll” 之后对于NShader 1.3和VS2012:1.完全关闭VS!2.修改这个位置的NShader.pkgdef文件:YOUR_DRIVE:\Program Files (x86)\Microsoft Visual Studio11.0\Common7\IDE\Extensions\a_cryptic_subfolder,这里最后的文件夹是个随机生成的名字,比如我的是:D:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\o3ap33yf.qrl这样,找一下就行了。3.将下面段加入配置文件中:[$RootKey$\Languages\File Extensions\.shader]@=”{4ceb7-b-f2f529fc6729}”最后为了确保修改生效,需要删除如下两个注册表中的节点(注意不要删错!):HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\ 11.0\FontAndColors\CacheHKEY_CURRENT_USER\Software\Microsoft\VisualStudio\ 11.0_Config最后重新启动VS就可以了!
如果您想留下此文,您可以将其发送至您的邮箱(将同时以邮件内容&PDF形式发送)
相关文章推荐
(Ctrl+Enter提交) &&
已有0人在此发表见解
&在& 20:38收藏到了
&&在信息爆炸的时代,您的知识需要整理,沉淀,积累!Lai18为您提供一个简单实用的文章整理收藏工具,在这里您可以收藏对您有用的技术文章,自由分门别类,在整理的过程中,用心梳理自己的知识!相信,用不了多久,您收藏整理的文章将是您一生的知识宝库!
· 蜀ICP备号-1

我要回帖

更多关于 unity 代码控制shader 的文章

 

随机推荐