当前位置:网站首页>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 .
边栏推荐
- Kubernetes advanced training camp pod Foundation
- Popular understanding of decision tree ID3
- Win10 enterprise 2016 long term service activation tutorial
- Qt常用语句备忘
- 百度智能云助力石嘴山市升级“互联网+养老服务”智慧康养新模式
- Halcon and WinForm study section 1
- Jvm-09 byte code introduction
- Baidu AI Cloud helps Shizuishan upgrade the smart health care model of "Internet + elderly care services"
- C语言刷题~Leetcode与牛客网简单题
- Redis主从、哨兵、集群模式介绍
猜你喜欢

Popular understanding of decision tree ID3

How are integer and floating-point types stored in memory

Summary of JVM knowledge points

Reentrantlock usage and source code analysis

WinDbg分析dump文件

Seckill system 3- product list and product details

视觉上位系统设计开发(halcon-winform)-1.流程节点设计

高并发下之redis锁优化实战

String functions that you need to know

Creation and destruction of function stack frames
随机推荐
Kubernetes - YAML文件解读
Redis主从、哨兵、集群模式介绍
Introduction, use and principle of synchronized
socket.io搭建分布式Web推送服务器
子类隐藏父类的同名函数
win32创建窗口及按钮(轻量级)
Kubernetes 进阶训练营 Pod基础
找映射关系
Summary of concurrent full knowledge points
Stress test WebService with JMeter
Halcon and WinForm study section 1
redis单线程问题强制梳理门外汉扫盲
[cloud native training camp] module VIII kubernetes life cycle management and service discovery
Final review points of human-computer interaction
qt使用QZxing生成二维码
What is one hot encoding? In pytoch, there are two ways to turn label into one hot coding
[transform] [NLP] first proposed transformer. The 2017 paper "attention is all you need" by Google brain team
Halcon与Winform学习第一节
Baidu AI Cloud helps Shizuishan upgrade the smart health care model of "Internet + elderly care services"
WinDbg分析dump文件