当前位置:首页 » 密码管理 » unityshader加密

unityshader加密

发布时间: 2022-04-21 21:04:09

Ⅰ unity自定义shader的问题

注意到网上的Shader代码中的最后一行FallBack "Specular"没有?该语句的意思是如果没有找到适合该Shader的硬件,那么自动匹配Unity3D自带的Specular Shader。
那么答案就很清楚了:Unity3D自带的Shader必须全面的针对几乎所有可能出现的硬件,所以要添加尽量多的分支来满足要求。每一个分支匹配不同的硬件。而网上下载的Shader往往只需要考虑几种硬件就可以了。一般Shader作者会标明是否匹配移动平台,适应OpenGL ES1,2,3还是需要DX11支持等信息。如果没有标明那么你就只能自己尝试了。

Ⅱ unity打开shader文件,系统询问我要如何打开这个文件是怎么回事

点击更多应用,找到UNITY,找不到再点在这台电脑上查找其他应用,找到你的UNITY下载位置就行了

Ⅲ unity shader怎么用

Shader就是在GPU上运行的程序叫做着色器程序(一般的程序在CPU上执行指令)。
Unity Shader使用的是NVIDIA公司的Cg标准语言,可以处理顶点着色、像素着色任务。Unity中的游戏对象只要是可视的,就一定会调用shader渲染,最简单的shader就是diffuse类型,就是你给对象涂个什么颜色,这个对象在白光下就是什么颜色。
一般来讲游戏中的 材质=shader+贴图和其它数据,要想表现特殊的材质,比如镜面反射、水面、塑料等,就需要编程shader(Unity中有一些默认的shader)。

Ⅳ 如何系统的学习 Unity 3D 中的 shader 编写

仅针对你只想学些shader编程来讲:

1、先要明白shader在整个3D流水线中的地位或者是作用,建立流水线概念的过程,是理解整个当代3D的基础。

2、把Unity当做shader编辑器,这一方面讲,unity的确也是不错的,:)。由简到难的分析和实验各个shader,调试各种参数,用unity的所见即所得界面,了解shader内部代码的意义。

3、就每个遇到的问题,在互联网上查找该问题的可能的答案。如Diffuse light的算法公式究竟是什么,shadow map的矩阵干嘛用的。在这块上,请尽量查找英文资料,会痛快些。

就这么三点,第一点是面,能帮助自己确定方向。第三点是点,知道自己的短线位置在哪里。书籍不举例,只知道我第一本看的书是《3D游戏编程大师技巧》。后来在各种查找过程中,各种不同的书籍自然会进入自己的腰包,没有一本是需要全部读完的。但是读完所有的每本的某一个部分,应该每本书都算是读完了,你明白的。

Ⅳ unity shader里 dot(lightCoord, lightCoord).rr

#ifdef USING_DIRECTIONAL_LIGHT
fixed atten = 1.0;
#else
float3 lightCoord = mul(_LightMatrix0, float4(i.worldPos, 1)).xyz;
fixed atten = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).UNITY_ATTEN_CHANNEL;
#endif

  • _LightMatrix0:这个变量在书的P184页表格和官方文档中均有说明,它在内置的AutoLight.cginc文件中的特定宏下被定义,可以用于把点从世界空间变换到该光源的局部空间下。因此,上面代码第一句“mul(_LightMatrix0, float4(i.worldPos, 1)).xyz”就是把顶点坐标变换到光源空间下的坐标,这点在书中也有解释。

  • _LightTexture0:和_LightMatrix0类似的,也是在内置的AutoLight.cginc文件中的特定宏下被定义,紧跟_LightMatrix0的定义。它是一张包含了光源衰减信息的衰减纹理,我们可以用第一句代码得到的坐标进一步处理得到衰减纹理的采样坐标。由于Unity没有官方解释_LightMatrix0具体的数值范围含义,我们可以推测得到(推测方法可以是利用假彩色一节的方法来把这个变量当成颜色输出)_LightMatrix0得到的坐标模范围会是[0, 1],即与光源重合处是(0, 0, 0), 在光源范围的边界处模值为1。而 dot(lightCoord, lightCoord).rr一句,首先是由点积得到光源的距离平方,这是一个标量,我们对这个变量进行.rr操作相当于构建了一个二维矢量,这个二维矢量每个分量的值都是这个标量值,由此得到一个二维采样坐标。这个操作是shader中常见的swizzling操作,Cg的官网上也有说明。我们随后使用这个二维坐标对光照衰减纹理_LightTexture0进行采样,得到衰减值。关于_LightTexture0后面会系统讲。

  • 这段代码不够规范:书上有说这一节的代码不能直接用到项目里,仅仅是用来阐述原理,但如果你想用这段代码直接发布项目的话,是需要修改的,因为当时写的时候不够规范。原因是这段代码的keyword判断条件有问题,导致_LightTexture0或_LightMatrix0可能并没有被定义。我们可以将原来的代码替换成下面的代码(新的代码也已经push到了github上):

    #ifdef USING_DIRECTIONAL_LIGHT
    fixed atten = 1.0;
    #else
    #if defined (POINT)
    // 把点坐标转换到点光源的坐标空间中,_LightMatrix0由引擎代码计算后传递到shader中,这里包含了对点光源范围的计算,具体可参考Unity引擎源码。经过_LightMatrix0变换后,在点光源中心处lightCoord为(0, 0, 0),在点光源的范围边缘处lightCoord模为1
    float3 lightCoord = mul(_LightMatrix0, float4(i.worldPos, 1)).xyz;
    // 使用点到光源中心距离的平方dot(lightCoord, lightCoord)构成二维采样坐标,对衰减纹理_LightTexture0采样。_LightTexture0纹理具体长什么样可以看后面的内容
    // UNITY_ATTEN_CHANNEL是衰减值所在的纹理通道,可以在内置的HLSLSupport.cginc文件中查看。一般PC和主机平台的话UNITY_ATTEN_CHANNEL是r通道,移动平台的话是a通道
    fixed atten = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).UNITY_ATTEN_CHANNEL;
    #elif defined (SPOT)
    // 把点坐标转换到聚光灯的坐标空间中,_LightMatrix0由引擎代码计算后传递到shader中,这里面包含了对聚光灯的范围、角度的计算,具体可参考Unity引擎源码。经过_LightMatrix0变换后,在聚光灯光源中心处或聚光灯范围外的lightCoord为(0, 0, 0),在点光源的范围边缘处lightCoord模为1
    float4 lightCoord = mul(_LightMatrix0, float4(i.worldPos, 1));
    // 与点光源不同,由于聚光灯有更多的角度等要求,因此为了得到衰减值,除了需要对衰减纹理采样外,还需要对聚光灯的范围、张角和方向进行判断
    // 此时衰减纹理存储到了_LightTextureB0中,这张纹理和点光源中的_LightTexture0是等价的
    // 聚光灯的_LightTexture0存储的不再是基于距离的衰减纹理,而是一张基于张角范围的衰减纹理
    fixed atten = (lightCoord.z > 0) * tex2D(_LightTexture0, lightCoord.xy / lightCoord.w + 0.5).w * tex2D(_LightTextureB0, dot(lightCoord, lightCoord).rr).UNITY_ATTEN_CHANNEL;
    #else
    fixed atten = 1.0;
    #endif
    #endif

    上面更加精确地判断了keyword条件,保证只在正确的时候执行访问衰减纹理的代码。_LightTexture0和_LightMatrix0只在某些条件下会被定义,例如在开启了POINT、SPOT、POINT_COOKIE、DIRECTIONAL_COOKIE等,具体我们可以在AutoLight.cginc里面找到。但因为原来的代码里没有进行严格判断,在发布的时候由于Unity会严格编译Unity Shader根据不同的keyword生成对应的shader program,此时它就会发现我们的错误了。

Ⅵ unity shader 能加密

主要是 sm1和sm2 sm3支持的很少
在开发时切换图形模拟环境看看shader是否报错
另外要注意渲染效率 shader中尽量不要有太复杂的计算

Ⅶ unity shader中有哪些属性如何使用

如果是进行3d游戏开 发的话,想必您对着两个词不会陌生。Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组 合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设 置,将这些内容(Shader及输入参数)打包存储在一起,得到的就是一个Material(材质)。之后,我们便可以将材质赋予合适的 renderer(渲染器)来进行渲染(输出)了。
所以说Shader并没有什么特别神奇的,它只是一段规定好输入(颜色,贴图等)和输出(渲染器能够读懂的点和颜色的对应关系)的程序。而Shader开发者要做的就是根据输入,进行计算变换,产生输出而已。
Shader大体上可以分为两类,简单来说
表面着色器(Surface Shader) - 为你做了大部分的工作,只需要简单的技巧即可实现很多不错的效果。类比卡片机,上手以后不太需要很多努力就能拍出不错的效果。
片段着色器(Fragment Shader) - 可以做的事情更多,但是也比较难写。使用片段着色器的主要目的是可以在比较低的层级上进行更复杂(或者针对目标设备更高效)的开发。

Ⅷ Unity3D 用脚本控制Shader参数

Unity3D用脚本控制Shader参数是:this.renderer.material.SetFloat("_Progress", 0.5f);

热点内容
安卓手机如何登陆刺激战场国际服 发布:2024-05-20 01:29:02 浏览:860
服务器核库怎么找 发布:2024-05-20 01:28:14 浏览:374
盐存储水分 发布:2024-05-20 01:09:03 浏览:809
中国移动用什么服务密码 发布:2024-05-20 00:52:10 浏览:695
make编译输出 发布:2024-05-20 00:37:01 浏览:67
4200存储服务器 发布:2024-05-20 00:20:35 浏览:160
解压小生活 发布:2024-05-20 00:15:03 浏览:143
粘土小游戏服务器ip 发布:2024-05-20 00:14:00 浏览:196
魔兽世界如何快速增加服务器 发布:2024-05-19 23:53:37 浏览:694
安卓手机如何转入苹果手机内 发布:2024-05-19 23:50:35 浏览:405