unity中把材质截图当材质的matcap材质

2023-12-01 03:58
文章标签 材质 unity 截图 matcap

本文主要是介绍unity中把材质截图当材质的matcap材质,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这里使用shaderforge进行实现的

matcap这种材质有个很有意思的特点,就是能把材质的截图当初材质赋予给物体

优点是可以很方便使用贴图创建很多材质效果,而且非常方便

缺点因为材质可以说是通过图片生成的,所以只能表现固定的效果,而且最好图片上不能有纹理,因为纹理会拉伸,还有就是不能实现透明之类特殊效果


基本连接如下


因为在zbrush中也有这种技术,所以下面是几个仿造的材质




是不是前面两个还挺像zbrush中的材质的


需要注意的是贴图需要设置一下,不然边缘容易有锯齿

当然最好是贴边的圆形再往外边扩展3个像素以上,可以用用这个unity官方插件http://docs.unity3d.com/462/Documentation/uploads/Main/AlphaUtility.atn.zip

扩展padding pixel 用的



接下来就是对材质的理解,为什么一个材质的截图能够作为一个材质应用到模型上

简单说就是把法线贴图从世界空间转换到屏幕空间,然后作为uv来扭曲贴图从而映射到模型上

至于为什么材质是个圆,而其他形状不行,因为这里采样法线贴图其实是一个归一化的圆形

具体可以看看这里http://www.falloutsoftware.com/tutorials/gl/normal-map.html

当然国内也有其他博客具体分析这种材质的

http://blog.csdn.net/candycat1992/article/details/26387471

http://www.cnblogs.com/flytrace/p/3395911.html


最后附上源码

Shader "Shader Forge/test" {Properties {_materail ("materail", 2D) = "black" {}}SubShader {Tags {"RenderType"="Opaque"}Pass {Name "FORWARD"Tags {"LightMode"="ForwardBase"}CGPROGRAM#pragma vertex vert#pragma fragment frag#define UNITY_PASS_FORWARDBASE#include "UnityCG.cginc"#pragma multi_compile_fwdbase_fullshadows#pragma multi_compile_fog#pragma exclude_renderers gles3 metal d3d11_9x xbox360 xboxone ps3 ps4 psp2 #pragma target 3.0uniform sampler2D _materail; uniform float4 _materail_ST;struct VertexInput {float4 vertex : POSITION;float3 normal : NORMAL;float4 vertexColor : COLOR;};struct VertexOutput {float4 pos : SV_POSITION;float3 normalDir : TEXCOORD0;float4 vertexColor : COLOR;UNITY_FOG_COORDS(1)};VertexOutput vert (VertexInput v) {VertexOutput o = (VertexOutput)0;o.vertexColor = v.vertexColor;o.normalDir = UnityObjectToWorldNormal(v.normal);o.pos = mul(UNITY_MATRIX_MVP, v.vertex );UNITY_TRANSFER_FOG(o,o.pos);return o;}float4 frag(VertexOutput i) : COLOR {i.normalDir = normalize(i.normalDir);float3 normalDirection = i.normalDir;
// Lighting:float2 node_3409 = (mul( UNITY_MATRIX_V, float4(i.normalDir,0) ).xyz.rgb.rg*0.5+0.5);float4 _materail_var = tex2D(_materail,TRANSFORM_TEX(node_3409, _materail));float3 finalColor = (_materail_var.rgb*i.vertexColor.rgb);fixed4 finalRGBA = fixed4(finalColor,1);UNITY_APPLY_FOG(i.fogCoord, finalRGBA);return finalRGBA;}ENDCG}}FallBack "Diffuse"CustomEditor "ShaderForgeMaterialInspector"
}


当然还能用MaCrea来生成材质,当然最后还是需要扩展下像素比较好

下载地址http://www.zbrushcentral.com/showthread.php?92157-MaCrea-Material-Creation-Tool










这篇关于unity中把材质截图当材质的matcap材质的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/439702

相关文章

超强的截图工具:PixPin

你是否还在为寻找一款功能强大、操作简便的截图工具而烦恼?市面上那么多工具,常常让人无从选择。今天,想给大家安利一款神器——PixPin,一款真正解放双手的截图工具。 想象一下,你只需要按下快捷键就能轻松完成多种截图任务,还能快速编辑、标注甚至保存多种格式的图片。这款工具能满足这些需求吗? PixPin不仅支持全屏、窗口、区域截图等基础功能,它还可以进行延时截图,让你捕捉到每个关键画面。不仅如此

java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频)

这是什么系统? 资源获取方式在最下方 java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频) 停车管理信息系统是为了提升停车场的运营效率和管理水平而设计的综合性平台。系统涵盖用户信息管理、车位管理、收费管理、违规车辆处理等多个功能模块,旨在实现对停车场资源的高效配置和实时监控。此外,系统还提供了资讯管理和统计查询功能,帮助管理者及时发布信息并进行数据分析,为停车场的科学

Unity Post Process Unity后处理学习日志

Unity Post Process Unity后处理学习日志 在现代游戏开发中,后处理(Post Processing)技术已经成为提升游戏画面质量的关键工具。Unity的后处理栈(Post Processing Stack)是一个强大的插件,它允许开发者为游戏场景添加各种视觉效果,如景深、色彩校正、辉光、模糊等。这些效果不仅能够增强游戏的视觉吸引力,还能帮助传达特定的情感和氛围。 文档

Unity协程搭配队列开发Tips弹窗模块

概述 在Unity游戏开发过程中,提示系统是提升用户体验的重要组成部分。一个设计良好的提示窗口不仅能及时传达信息给玩家,还应当做到不干扰游戏流程。本文将探讨如何使用Unity的协程(Coroutine)配合队列(Queue)数据结构来构建一个高效且可扩展的Tips弹窗模块。 技术模块介绍 1. Unity协程(Coroutines) 协程是Unity中的一种特殊函数类型,允许异步操作的实现

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光 一,前言二,资源包内容三,免费获取资源包 一,前言 在创意的世界里,每一个细节都能决定一个项目的独特魅力。今天,要向大家介绍一款令人惊艳的粒子效果包 ——Super Confetti FX。 二,资源包内容 💥充满活力与动态,是 Super Confetti FX 最显著的标签。它宛如一位

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(4)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)-CSDN博客  这节就是真正的存储数据了   理清一下思路: 1.存储路径并检查 //2进制文件类存储private static string Data_Binary_Pa

QtC++截图支持窗口获取

介绍 在截图工具中你会发现,接触到窗口后会自动圈出目标窗口,个别强大一点的还能进行元素识别可以自动圈出元素,那么今天简单分析一下QTc++如何获取窗口并圈出当前鼠标下的窗口。 介绍1.如何获取所有窗口2.比较函数3.实现窗口判断 结尾 1.如何获取所有窗口 1.我们需要调用windows接口EnumWindowsProc回调函数来获取所有顶级窗口,需要包含windows.

Unity Adressables 使用说明(一)概述

使用 Adressables 组织管理 Asset Addressables 包基于 Unity 的 AssetBundles 系统,并提供了一个用户界面来管理您的 AssetBundles。当您使一个资源可寻址(Addressable)时,您可以使用该资源的地址从任何地方加载它。无论资源是在本地应用程序中可用还是存储在远程内容分发网络上,Addressable 系统都会定位并返回该资源。 您

Unity Adressables 使用说明(六)加载(Load) Addressable Assets

【概述】Load Addressable Assets Addressables类提供了加载 Addressable assets 的方法。你可以一次加载一个资源或批量加载资源。为了识别要加载的资源,你需要向加载方法传递一个键或键列表。键可以是以下对象之一: Address:包含你分配给资源的地址的字符串。Label:包含分配给一个或多个资源的标签的字符串。AssetReference Obj

在Unity环境中使用UTF-8编码

为什么要讨论这个问题         为了避免乱码和更好的跨平台         我刚开始开发时是使用VS开发,Unity自身默认使用UTF-8 without BOM格式,但是在Unity中创建一个脚本,使用VS打开,VS自身默认使用GB2312(它应该是对应了你电脑的window版本默认选取了国标编码,或者是因为一些其他的原因)读取脚本,默认是看不到在VS中的编码格式,下面我介绍一种简单快