Shader平台差异
宏的讲解。(坐标是否翻转)
OpenGL (写法更随意)
平台会自动补全
例:float4 v = float4(0);
DX(写法更严谨)
例:float4 v = float4(0,0,0,0);
Shader平台差异
宏的讲解。(坐标是否翻转)
OpenGL (写法更随意)
平台会自动补全
例:float4 v = float4(0);
DX(写法更严谨)
例:float4 v = float4(0,0,0,0);
调试工具
2种方法。
1:将颜色在顶点着色器 或 片元着色器 中 输出出去,来验证效果。
2: 使用 Frame Debug
(Window-Analysis-Frame Debugger)
Enable:理解为截屏
顶点色在Shader中的体现
例子:
o.color = v.color;
顶点着色器输出语义 + 片元着色器输出语义
顶点着色器输出结构体中常用语义
SV_POSITION (裁剪空间中的顶点坐标,结构体中必须包含一个用该语义修饰的变量。等同于DX9中的POSITION)
COLOR0 (通常用于输出第一组顶点颜色,不是必须。)
COLOR1 (通常用于输出第二组顶点颜色, 不是必须。 )
TEXCOORD0 - TEXCOORD7 (通常用于输出纹理坐标,不是必须。 )
片元着色器输出时常用语义
SV_Target (输出值将会储存到渲染目标(render target)中。等同于DX9中COLOR语义。)
服务器日志
Android Studio 创建新工程,Tools - AVD Manager - Create Virtual Device - Phone - 选择相应的设备 - next
x86 Images - Oreo - next - finish
点击actons中的启动,则可以模拟出安卓手机
Project Settings - Editor,Unity Remote - Device - Any Android Device
手机中,设置 - 开发人员选项/关于手机 - USB调试
安装Unity Remote
手机和电脑连接usb线,确认手机中显示usb已连接和已连接usb调试
Unity Remote
Android Studio中,Android SDK - SDK Tools - Google USB Driver
Google Play上下载Unity Remote5,
顶点着色器输入语义
语义:
可以理解为是一个标记。
最终也就是让Shader知道在哪里读数据,并且把数据输出到哪里。
例如:
struct a2v
{
float4 texcoord : TEXCOORD0
}
上面a2v输入结构体中的语义 :TEXCOORD0
就是将第一套uv存储在变量 texcoord 中
如果在输出结构体v2f中我们仍然可以用
:TEXCOORD0 (即使输入结构体a2v中已经有:TEXCOORD0了我们仍然可以使用)这是因为
语义的另一个功能就是寄存器。
:SV_POSITION
(顶点着色器后使用)
例:float4 vert ( float4 v : POSITION ) : SV_POSITION
:SV_TARGET
(片元着色器后使用)
例:fixed4 frag ( ) :SV_TARGET
以上2种语义是特殊语义,不能乱用。
有时候我们能看见 SV_POSITION & SV_TARGETSV 被写成了 POSITION & TARGET 这是因为在DX10 之后引入了一个叫系统数值的语义。 这时候POSITION & TARGET 就有了他自己的目的需要去做的事情。所以我们就用SV_POSITION & SV_TARGETSV
如果不使用 SV_POSITION & SV_TARGETSV 而用 POSITION & TARGET 我们会发现在PS4上会出错。
我们理解为在DX10 之后为了兼容某些硬件,我们引入了新的语义 SV_POSITION & SV_TARGETSV 而 SV_POSITION & SV_TARGETSV 是包含 POSITION & TARGET。
顶点着色器输入结构体种的语义笔记
:POSITION
(模型空间中的顶点位置,通常是float4类型)
: NORMAL
(顶点法线,通常是float3类型)
:TANGENT
(顶点切线,通常是float4类型)
TEXCOORDn
( 顶点的纹理坐标,TEXCOOD0表示第一组uv坐标纹理通常是float2 , float4类型 )
(Shader Model2 & 3 可以支持最多 8 个TEXCOORD)
(Shader Model4 & 5 可以支持最多 16 个TEXCOORD)
COLOR
(顶点颜色,通常是fixed4类型)
Shader库中的输入输出结构体
1/
.cginc文件 可以被加载进我们的Shader中
例如
写如下代码在CGPROGRAM中,加载UnityCG.cginc文件
#iclude "UnityCG.cginc"
这样我们就可以直接使用“Unity CG.cginc”文件内的变量和方法了。
2/
UnityShaderUtiilities.cginc
UnityShaderVariables.cginc
以上俩个.cginc文件是默认被加载进Shader中的。
sdk中的tools太新了,unity无法识别
解决方法,android/sdk替换旧版的tools
设置包名Identification - Package Name
设置签名Publishing Settings - Keystore - Use Existing Keystore - Browse Keystore 选择密钥文件
Keystore password 输入密码
Alias - 选择密钥文件
Password 输入密码
同一签名的apk可以覆盖安装
Interal:
可以不签名(使用默认的debug签名)
Gradle:
必须要求自己签名
Internal:
Unity内置,仅需要Android SDK支持,不能导出工程,适用于仅使用到Unity开发的项目
优点:简单,逻辑由unity完成即可,不需要和安卓交互
Gradle:
使用Gradle进行构建,需要Android SDK与Gradle支持,可以导出Android Studio工程,适用于Unity与Android交互的项目
如果选择Gradle,勾上Export Project
api27不做高端的安卓开发用不到,可以取消勾选
相应的26需要勾选,点击apply
安装android studio
在安装页面,勾选Performance(Intel@HAXM)和Android Virtual Device
jdk的数字签名是否有效
安装JDK与JRE,目录随意,但不可以是同一个
安装完成后,右键“此电脑”,高级系统设置-环境变量-系统变量,新建“JAVA_HOME”变量,变量值为JDK的根目录
找到path,点击编辑 - 编辑文本,添加JDK和JRE的根目录,用分号隔开
再新建,变量名CLASSPATH,变量值.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;
在运行管理器中输入java -version,验证是否配置成功
Build Settings窗口中下载安卓的支持包
安装java环境,即jdk,下载合适的版本,windows x64,建议用ie下载
下载android studio
结构体可以实现接口
父节点可以引用子节点,子节点要调用父节点的方法时,可以用事件和委托。