当前位置:网站首页>Unityshader - materialcapture material capture effect (Emerald axe)
Unityshader - materialcapture material capture effect (Emerald axe)
2022-07-03 15:25:00 【ۓ Mingzhe ڪ】
Statement : This article is a personal note , For study and research, use non-commercial , The content is obtained from personal research and comprehensive arrangement , If there is a violation , Please contact the , Violations must be corrected .
UnityShader Study Directory
List of articles
Preface
Unity2019.3.6
AmplifyShaderEditor
One 、 Realization principle
The map follows the camera
Two 、 Effect and source code display
1. Photosphere effect
Effect description :
Through camera space , Put the map uv Follow the camera .
The renderings are as follows :
AmplifyShaderEditor The node diagram is as follows :
2. Emerald axe effect
Effect description
A gradient map is superimposed on effect one , Superimposed again matcap Mapping
The renderings are as follows :
AmplifyShaderEditor The node diagram is as follows :
The parameter setting is shown in the figure below :
The code is as follows :
Shader "Unlit/MatCap_Code"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {
}
_MatcapTex("MatcapTex",2D)="white"{
}// Gradient maps
_RampTex("RampTex",2D)="white"{
}
_MatcapAddTex("MatcapAddTex",2D)="white"{
}
_MatcapIntensity("Matcap Intensity",Float) = 1.0
_MatcapAddIntensity("MatcapAdd Intensity",Float)=1.0
}
SubShader
{
Tags {
"RenderType"="Opaque" }
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata// model data
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float3 normal:NORMAL;
};
struct v2f// Custom data The output of the vertex , Slice input
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD0;
float3 worldNormal : TEXCOORD1;
float3 worldPos:TEXCOORD2;
};
sampler2D _MainTex;
sampler2D _MatcapTex;
sampler2D _RampTex;
sampler2D _MatcapAddTex;
float4 _MainTex_ST;
float _MatcapIntensity;
float _MatcapAddIntensity;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
float3 worldNormal=mul(float4(v.normal,0.0),unity_WorldToObject);// It can be used for non proportional scaling without error .
//float3 worldNormal=UnityObjectToWorldNormal(v.normal);// Universal , Most of the time, the uplink code can be replaced
o.worldNormal=worldNormal;
o.worldPos=mul(unity_ObjectToWorld,v.vertex).xyz;
return o;
}
fixed4 frag (v2f i) : SV_Target
{
half3 worldNormal= i.worldNormal;
//material capture MainTex
half3 viewSpaceNormal=mul(UNITY_MATRIX_V,float4(worldNormal,0.0)).xyz; // Normal phasor in camera space
half2 matcapUV=(viewSpaceNormal.xy+float2(1.0,1.0))*0.5;
half4 matcapColor=tex2D(_MatcapTex,matcapUV) *_MatcapIntensity;
half4 diffuseColor = tex2D(_MainTex, i.uv);
//fresnel Gradient mapping
// Calculate the world space view direction
half3 worldViewDir=normalize(UnityWorldSpaceViewDir(i.worldPos));
half ndotv=saturate(dot(i.worldNormal,worldViewDir));
half fresnel=1.0-ndotv;
half2 rampUV=half2(fresnel,0.5);
half4 rampColor=tex2D(_RampTex,rampUV);
half4 matcapAddColor=tex2D(_MatcapAddTex,matcapUV)*_MatcapAddIntensity;
half4 combined_color= diffuseColor*matcapColor * rampColor+matcapAddColor;
return combined_color;
}
ENDCG
}
}
}
post-processing :
Add tone mapping to the camera , Make the color brighter .
Be careful : The corresponding level should also be added to the camera , Otherwise, it will not show
summary
Keep hungry , Stay foolish .
The only thing the world can believe is your efforts and the road you have traveled .
边栏推荐
- Visual upper system design and development (Halcon WinForm) -1 Process node design
- Using Tengine to solve the session problem of load balancing
- Popular understanding of linear regression (II)
- Redis主从、哨兵、集群模式介绍
- 整形和浮点型是如何在内存中的存储
- 开启 Chrome 和 Edge 浏览器多线程下载
- 视觉上位系统设计开发(halcon-winform)-3.图像控件
- How are integer and floating-point types stored in memory
- Concurrency-02-visibility, atomicity, orderliness, volatile, CAS, atomic class, unsafe
- QT common sentence notes
猜你喜欢
String functions that you need to know
MySQL reports an error: [error] mysqld: file '/ mysql-bin. 010228‘ not found (Errcode: 2 “No such file or directory“)
C语言刷题~Leetcode与牛客网简单题
整形和浮点型是如何在内存中的存储
视觉上位系统设计开发(halcon-winform)-5.相机
el-switch 赋值后状态不变化
Popular understanding of random forest
[cloud native training camp] module 7 kubernetes control plane component: scheduler and controller
Seckill system 2 redis solves the problem of distributed session
Reentrantlock usage and source code analysis
随机推荐
基础SQL教程
Matlab r2011b neural network toolbox precautions
Popular understanding of decision tree ID3
Visual upper system design and development (Halcon WinForm) -5 camera
Visual upper system design and development (Halcon WinForm) -1 Process node design
Summary of JVM knowledge points
Apache ant extension tutorial
VS2017通过IP调试驱动(双机调试)
函数栈帧的创建和销毁
Jvm-06-execution engine
What is embedding (encoding an object into a low dimensional dense vector), NN in pytorch Principle and application of embedding
App global exception capture
Tensorflow realizes verification code recognition (I)
【云原生训练营】模块七 Kubernetes 控制平面组件:调度器与控制器
socket. IO build distributed web push server
子类隐藏父类的同名函数
Final review points of human-computer interaction
el-switch 赋值后状态不变化
Construction of operation and maintenance system
互斥对象与临界区的区别