当前位置:网站首页>Unity Shader从内置渲染管线迁移到URP
Unity Shader从内置渲染管线迁移到URP
2022-07-24 05:21:00 【一只小EZ】
Unity 在URP中将shader更新为了HLSL语言,使用build-in shader 无法直接在URP中使用
这里讲一下关于shader的更新方法
更新步骤
Tags添加"RenderPipeline" = "UniversalPipeline"CGPROGRAMENDCG改变为HLSLPROGRAMENDHLSL#include "UnityCG.cginc"
更改为#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"fixed4类型更改为half4函数替换对照
| Build-in RP | URP |
|---|---|
| UnityObjectToClipPos(v.vertex); | TransformObjectToHClip(v.vertex.xyz); |
| mul(unity_ObjectToWorld,v.vertex).xyz | TransformObjectToWorld(v.vertex.xyz) |
| mul(float4(v.normal, 0.0),unity_WorldToObject).xyz | TransformObjectToWorldNormal(v.normal) |
代码
上代码 一个简单的uv流动shader
内置渲染管线
// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'
Shader "Custom/liuguang"
{
Properties
{
_FlowTex("Texture", 2D) = "white" {
}
_FlowTilling("Flow Tilling",Vector) = (1,1,0,0)
_FlowSpeed("Flow Speed",Vector) = (1,1,0,0)
}
SubShader
{
Tags {
"Queue" = "Transparent" }
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
// make fog work
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
float3 normal : NORMAL;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 pos : SV_POSITION;
float3 pos_world : TEXCOORD1;
float3 normal_world : TEXCOORD2;
float3 pivot_world : TEXCOORD3;
};
sampler2D _FlowTex;
float4 _FlowTilling;
float4 _FlowSpeed;
v2f vert(appdata v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
float3 normal_world = mul(float4(v.normal, 0.0),unity_WorldToObject).xyz;
o.normal_world = normalize(normal_world);
o.pos_world = mul(unity_ObjectToWorld,v.vertex).xyz;
o.pivot_world = mul(unity_ObjectToWorld, float4(0, 0, 0, 1)).xyz;
o.uv = v.texcoord;
return o;
}
fixed4 frag(v2f i) : SV_Target
{
half2 uv_flow = (i.pos_world.xy - i.pivot_world.xy) * _FlowTilling.xy;
uv_flow = uv_flow + _Time.y * _FlowSpeed.xy;
float4 flow_rgba = tex2D(_FlowTex, uv_flow);
return flow_rgba;
}
ENDCG
}
}
}
URP
Shader "Custom/flowlight"
{
Properties
{
_FlowTex("Texture", 2D) = "white" {
}
_FlowTilling("Flow Tilling",Vector) = (1,1,0,0)
_FlowSpeed("Flow Speed",Vector) = (1,1,0,0)
}
SubShader
{
Tags {
"RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" }
LOD 100
Pass
{
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
struct appdata
{
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
float3 normal : NORMAL;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 pos : SV_POSITION;
float3 pos_world : TEXCOORD1;
float3 normal_world : TEXCOORD2;
float3 pivot_world : TEXCOORD3;
};
sampler2D _FlowTex;
float4 _FlowTilling;
float4 _FlowSpeed;
v2f vert(appdata v)
{
v2f o;
o.pos = TransformObjectToHClip(v.vertex.xyz);
float3 normal_world = TransformObjectToWorldNormal(v.normal);
o.normal_world = normalize(normal_world);
o.pos_world = TransformObjectToWorld(v.vertex.xyz);
o.pivot_world = TransformObjectToWorld(float3(0,0,0));
o.uv = v.texcoord;
return o;
}
half4 frag(v2f i) : SV_Target
{
half2 uv_flow = (i.pos_world.xy - i.pivot_world.xy) * _FlowTilling.xy;
uv_flow = uv_flow + _Time.y * _FlowSpeed.xy;
float4 flow_rgba = tex2D(_FlowTex, uv_flow);
return flow_rgba;
}
ENDHLSL
}
}
}
边栏推荐
- "Statistical learning methods (2nd Edition)" Li Hang Chapter 14 clustering method mind map notes and after-school exercise answers (detailed steps) K-means hierarchical clustering Chapter 14
- STM32 DSP库MDK VC5\VC6编译错误: 256, (const float64_t *)twiddleCoefF64_256, armBitRevIndexTableF64_256,
- MySql与Qt连接、将数据输出到QT的窗口tableWidget详细过程。
- Add se channel attention module to the network
- How to solve the problem of large distribution gap between training set and test set
- [principles of database system] Chapter 4 advanced database model: Unified Modeling Language UML, object definition language ODL
- synergy局域网实现多主机共享键鼠(amd、arm)
- day5-jvm
- The problem that the user name and password are automatically filled in when Google / Firefox manages the background new account
- 餐饮数据统计分析---泰迪云课程大作业
猜你喜欢
![[FatFs] migrate FatFs manually and transfer SRAM virtual USB flash disk](/img/fb/5f3d17f1f3d6e4979ece5126e2925e.png)
[FatFs] migrate FatFs manually and transfer SRAM virtual USB flash disk

STM32 standard peripheral Library (Standard Library) official website download method, with 2021 latest standard firmware library download link

Jupyter notebook select CONDA environment

Jupyter notebook选择conda环境

MySQL基础---约束

Qt新手入门级 计算器加、减、乘、除、应用

STM32标准外设库(标准库)官网下载方法,附带2021最新标准固件库下载链接

通道注意力与空间注意力模块

Foundation of JUC concurrent programming (8) -- read write lock

Foundation of JUC concurrent programming (6) -- lock lock
随机推荐
vscode 多行注释总是会自动展开的问题
字符串方法以及实例
[MYCAT] MYCAT installation
[activiti] group task
餐饮数据统计分析---泰迪云课程大作业
如何解决训练集和测试集的分布差距过大问题
Deepsort summary
Machine learning (zhouzhihua) Chapter 5 notes on neural network learning
【数据库系统原理】第五章 代数和逻辑查询语言:包、扩展操作符、关系逻辑、关系代数与Datalog
QT char to qstring hexadecimal and char to hexadecimal integer
The problem that the user name and password are automatically filled in when Google / Firefox manages the background new account
Machine learning (zhouzhihua) Chapter 1 Introduction notes learning experience
Native JS magnifying glass effect
Chapter IV decision tree summary
Thymeleaf快速入门学习
JUC并发编程基础(1)--相关基础概念
day2-WebSocket+排序
JVM system learning
QT drawing exception using pure code
JUC并发编程基础(9)--线程池