当前位置:网站首页>unity urp 渲染管线顶点偏移的实现
unity urp 渲染管线顶点偏移的实现
2022-08-05 07:27:00 【暮志未晚Webgl】
这里我是通过法线对顶点进行偏移
如果面与面之间的点不是公用的,会出现屏幕中立方体的效果,球则没有这个问题。所以使用顶点偏移的时候需要注意一下。
我实现的是在模型空间进行顶点偏移,大家按自己的需求实现
接下来,代码:
Shader "URP/VertexOffset"
{
Properties
{
[MainTexture] _BaseMap ("Albedo", 2D) = "white" {
}
[MainColor] _BaseColor ("Color", Color) = (1, 1, 1, 1)
_Cutoff ("Alpha Cutoff", Range(0.0, 1.0)) = 0.5
_VertexOffset ("顶点偏移", Float) = 0
_Cull ("Cull", Int) = 2
}
SubShader
{
Tags {
"RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" "UniversalMaterialType" = "Lit" "IgnoreProjector" = "True" "ShaderModel" = "4.5" }
LOD 300
// ------------------------------------------------------------------
// Forward pass. Shades all light in a single pass. GI + emission + Fog
Pass
{
Tags {
"LightMode" = "UniversalForward" }
Cull[_Cull]
HLSLPROGRAM
#pragma exclude_renderers gles gles3 glcore
#pragma target 4.5
//--------------------------------------
// GPU Instancing
#pragma multi_compile_instancing
#pragma instancing_options renderinglayer
#pragma multi_compile _ DOTS_INSTANCING_ON
#pragma vertex LitPassVertex
#pragma fragment LitPassFragment
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
//需要光照系统时增加此引入
// #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
struct Attributes
{
float4 positionOS : POSITION;
float3 normalOS : NORMAL;
float4 tangentOS : TANGENT;
float2 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct Varyings
{
float2 uv : TEXCOORD0;
float4 positionCS : SV_POSITION;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
TEXTURE2D(_BaseMap); SAMPLER(sampler_BaseMap);
CBUFFER_START(UnityPerMaterial)
half4 _BaseColor;
half4 _BaseMap_ST;
half _Cutoff;
half4 _BaseMap_ST;
CBUFFER_END
// Used in Standard (Physically Based) shader
Varyings LitPassVertex(Attributes input)
{
Varyings output = (Varyings)0;
UNITY_SETUP_INSTANCE_ID(input);
UNITY_TRANSFER_INSTANCE_ID(input, output);
//通过法向偏移顶点
half3 positionOS = input.positionOS;
positionOS += input.normalOS * _VertexOffset;
output.positionCS = TransformObjectToHClip(positionOS);
output.uv = TRANSFORM_TEX(input.texcoord, _BaseMap);
return output;
}
half4 LitPassFragment(Varyings input) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(input);
//---------------输入数据-----------------
float2 UV = input.uv;
half4 color = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, input.uv) * _BaseColor;
clip(color.r - _Cutoff);
return color;
}
ENDHLSL
}
}
FallBack "Hidden/Universal Render Pipeline/FallbackError"
}
边栏推荐
- 【深度学习实践(一)】安装TensorFlow
- JS实现从照片中裁切自已的肖像
- 【 LeetCode 】 235. A binary search tree in recent common ancestor
- 不能比较或排序 text、ntext 和 image 数据类型
- TRACE32——加载符号表信息用于调试
- browserslist 选项的目的是什么?
- Flink学习12:DataStreaming API
- [Shanghai] Hiring .Net Senior Software Engineer & BI Data Warehouse Engineer (Urgent)
- Falsely bamboo brother today and found a localization of API to use tools
- Use of thread pool (combined with Future/Callable)
猜你喜欢
MySQL: order by sorting query, group by grouping query
Tencent Internship Summary
Game Thinking 19: Multi-dimensional calculation related to games: point product, cross product, point-line-surface distance calculation
今天虚竹哥又发现了一款好用的国产化API工具
Hash 这些知识你也应该知道
binary search tree problem
二叉搜索树问题
TRACE32——外设寄存器查看与修改
Why does Mysql fail to create a database
线程池的使用(结合Future/Callable使用)
随机推荐
Mysql为什么 建立数据库失败
U++ 创建UI
691. 立方体IV
MySQL:连接查询 | 内连接,外连接
在anaconda Promat界面import torch通过,在jupyter notebook中报错的问题(仅提供思路理解!)
导出SQLServer数据到Excel中
RNote108---显示R程序的运行进度
Tencent Internship Summary
It turns out that Maya Arnold can also render high-quality works!Awesome Tips
TRACE32——Go.direct
[instancetype type Objective-C]
RK3568环境安装
Unity—物理引擎+“武器模块”
Week 8 Document Clustering(文本聚类)
TRACE32——通用寄存器查看与修改
After working for 3 years, I recalled the comparison between the past and the present when I first started, and joked about my testing career
693. 行程排序
游戏模拟器成了外挂帮凶,灰产对抗再升级
Tencent Business Security Post IDP Talk Summary
对数据类型而言运算符无效。运算符为 add,类型为 text。