【unity小技巧】下载原神模型,在Blender中PMX模型转FBX模型,导入到Unity中实现基于光照模型的内置和URP卡通渲染

最终效果

在这里插入图片描述

前言

最近在研究人物模型的使用和卡通渲染效果,这里我们就使用原神的模型来演示。

一、原神模型下载

原神的模型可以在官网直接下载到。

1、第一期模型
官网:https://ys.biligame.com/gczj/
在这里插入图片描述
在这里插入图片描述

2、第二期模型
官网:http://ys.biligame.com/pjdkx/
在这里插入图片描述

3、第三期模型
官网:https://ys.biligame.com/beyel

在这里插入图片描述

4、第四期模型
官网:https://ys.biligame.com/ysl
在这里插入图片描述

5、第五期模型
官网:https://www.bilibili.com/blackboard/activity-raop07Ymhm.html
在这里插入图片描述

6、第六期模型
官网:https://www.bilibili.com/blackboard/activity-kiOl0D1nF8.html
在这里插入图片描述

7、第七期模型
官网:https://www.bilibili.com/blackboard/activity-btLCSzTTsK.html
在这里插入图片描述
8、第八期模型
官网:https://www.bilibili.com/blackboard/genshin-1st-anniversary.html
9、第九期模型
官网:https://www.bilibili.com/blackboard/activity-aEe0qbEc8N.html
在这里插入图片描述

10、第十期模型
官网:https://www.bilibili.com/blackboard/activity-8Zdc2qDY6R.html
在这里插入图片描述

11、第十一期模型
官网:https://www.bilibili.com/blackboard/activity-6MCsBE92oE.html
在这里插入图片描述

模之屋

所有的原神模型都可以在模型屋下载
链接在此:https://www.aplaybox.com/u/680828836/model
在这里插入图片描述

二、使用Blender进行 .pmx 转 .fbx 格式

我们下载完原神的模型之后,模型默认的格式为.pmx,这在Unity中是没法用的,所以需要转换一下。
在这里插入图片描述

下面使用Blender来转换,Blender之前没用过也没关系,我们只是利用它转换格式,只要下载安装完之后倒入模型转换就好了,真的超级简单!

1、Blender下载安装

Blender官网:https://www.blender.org/
Blender中文使用手册:https://docs.blender.org/manual/zh-hans/2.79/about/introduction.html
Blender中国社区下载地址(推荐):https://www.blendercn.org/

这里推荐下载2.9.3的Blender最好,过高的版本可能不支持旧的插件
地址:https://download.blender.org/release/Blender2.93/

在这里插入图片描述

2、Cats Blender Plugin 插件下载安装

在使用Blender将.pmx转为.fbx格式时,需要用到一个 Cats Blender Plugin 插件。

GitHub下载地址:https://github.com/GiveMeAllYourCats/cats-blender-plugin

最新的0.19.0版本也已经说明了完全兼容Blender 2.93,这也是前面我推荐Blender 2.93的原因
在这里插入图片描述
下载下来的是一个zip文件

3、 Blender安装Cats Blender Plugin 插件

然后打开刚安装的Blender,点击 Edit -> Preferences
在这里插入图片描述
点击选中安装插件
在这里插入图片描述

在这里插入图片描述
安装完毕后,记得勾选上它,(如果你没勾选,插件就是禁用状态的)
在这里插入图片描述
现在,我们就可以在编辑区的侧边栏那里看到CATS插件了,(注:侧边栏显示和隐藏的快捷键是N)
在这里插入图片描述

4、导入pmx原神模型

我们在CATS插件中点击Import Model按钮,
在这里插入图片描述
然后选择pmx文件,点击Import Any Model按钮,
在这里插入图片描述
此时导进来的模型的材质有问题,是这样子的
在这里插入图片描述

5、修复材质问题

我们打开侧边栏的Misc,然后点击Shadeless(即使用卡通材质),
在这里插入图片描述
效果
在这里插入图片描述

6、修复模型:Fix Model

我们可以看到,模型的节点命名并不是按照Unity骨骼映射的英文命名
在这里插入图片描述
我们点击CATS插件的Fix Model按钮,即可自动进行修复,除此之外,它还会帮我们删除多余无用的骨骼,将使用同一张贴图的节点合并为一个Mesh并重命名为Body等,
在这里插入图片描述
修复后可以看到变成英文命名了,多余无用的骨骼也被删除了
在这里插入图片描述

7、导出fbx

点击CATS插件的Export Model按钮,即可导出fbx文件
在这里插入图片描述
在这里插入图片描述

导出成功
在这里插入图片描述

三、导入FBX模型进Unity

1、导入fbx和贴图

我们上面的fbx文件和tex文件夹(里面是贴图)一起拷贝到Unity工程中,(如果你没有拷贝tex文件夹,在Unity中显示的就是白模)
在这里插入图片描述
此时我们把模型拖入场景中,看到的效果是这样的
在这里插入图片描述

2、从fbx中导出材质球

上面我们看到,模型的材质效果不是 卡通渲染风格,当你去定位模型的材质的时候,会发现材质是嵌在fbx文件里的,我们并不能对fbx内的材质进行编辑

这时候我们需要导出材质,选中fbx文件,在Inspector窗口中点击Materials,设置Location为Use External Materials (Legacy),然后点击Apply按钮,
在这里插入图片描述

3、卡通渲染

简单粗暴,使用Unlit/Texture

最粗暴的方式就是直接使用Unlit材质,在贴图上表现出卡通效果。
我们把材质球的shader全部改成Unlit/Texture(也就是无光照模型,直接显示贴图纹理)
在这里插入图片描述
效果,当然,这过于简单了,缺点很明显,没有光照效果。
在这里插入图片描述

基于光照模型的卡通渲染UnityToonShader——仅支持内置渲染管线

基于光照模型的卡通渲染,在GitHub上有一个项目,地址:https://github.com/Sorumi/UnityToonShader
在这里插入图片描述
ToonMultiStepsShader.shader代码我复制下来了

Shader "Toon/Basic/MultiSteps"
{Properties{// Colors_Color ("Color", Color) = (1, 1, 1, 1)_HColor ("Highlight Color", Color) = (0.8, 0.8, 0.8, 1.0)_SColor ("Shadow Color", Color) = (0.2, 0.2, 0.2, 1.0)// texture_MainTex ("Main Texture", 2D) = "white" { }// ramp_ToonSteps ("Steps of Toon", range(1, 9)) = 2_RampThreshold ("Ramp Threshold", Range(0.1, 1)) = 0.5_RampSmooth ("Ramp Smooth", Range(0, 1)) = 0.1// specular_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)_SpecSmooth ("Specular Smooth", Range(0, 1)) = 0.1_Shininess ("Shininess", Range(0.001, 10)) = 0.2// rim light_RimColor ("Rim Color", Color) = (0.8, 0.8, 0.8, 0.6)_RimThreshold ("Rim Threshold", Range(0, 1)) = 0.5_RimSmooth ("Rim Smooth", Range(0, 1)) = 0.1}SubShader{Tags { "RenderType" = "Opaque" }CGPROGRAM#pragma surface surf Toon addshadow fullforwardshadows exclude_path:deferred exclude_path:prepass#pragma target 3.0fixed4 _Color;fixed4 _HColor;fixed4 _SColor;sampler2D _MainTex;float _RampThreshold;float _RampSmooth;float _ToonSteps;float _SpecSmooth;fixed _Shininess;fixed4 _RimColor;fixed _RimThreshold;float _RimSmooth;struct Input{float2 uv_MainTex;float3 viewDir;};float linearstep(float min, float max, float t){return saturate((t - min) / (max - min));}inline fixed4 LightingToon(SurfaceOutput s, half3 lightDir, half3 viewDir, half atten){half3 normalDir = normalize(s.Normal);half3 halfDir = normalize(lightDir + viewDir);float ndl = max(0, dot(normalDir, lightDir));float ndh = max(0, dot(normalDir, halfDir));float ndv = max(0, dot(normalDir, viewDir));// multi stepsfloat diff = smoothstep(_RampThreshold - ndl, _RampThreshold + ndl, ndl);float interval = 1 / _ToonSteps;// float ramp = floor(diff * _ToonSteps) / _ToonSteps;float level = round(diff * _ToonSteps) / _ToonSteps;float ramp ;if (_RampSmooth == 1){ramp = interval * linearstep(level - _RampSmooth * interval * 0.5, level + _RampSmooth * interval * 0.5, diff) + level - interval;}else{ramp = interval * smoothstep(level - _RampSmooth * interval * 0.5, level + _RampSmooth * interval * 0.5, diff) + level - interval;}ramp = max(0, ramp);ramp *= atten;_SColor = lerp(_HColor, _SColor, _SColor.a);float3 rampColor = lerp(_SColor.rgb, _HColor.rgb, ramp);// specularfloat spec = pow(ndh, s.Specular * 128.0) * s.Gloss;spec *= atten;spec = smoothstep(0.5 - _SpecSmooth * 0.5, 0.5 + _SpecSmooth * 0.5, spec);// rimfloat rim = (1.0 - ndv) * ndl;rim *= atten;rim = smoothstep(_RimThreshold - _RimSmooth * 0.5, _RimThreshold + _RimSmooth * 0.5, rim);fixed3 lightColor = _LightColor0.rgb;fixed4 color;fixed3 diffuse = s.Albedo * lightColor * rampColor;fixed3 specular = _SpecColor.rgb * lightColor * spec;fixed3 rimColor = _RimColor.rgb * lightColor * _RimColor.a * rim;color.rgb = diffuse + specular + rimColor;color.a = s.Alpha;return color;}void surf(Input IN, inout SurfaceOutput o){fixed4 mainTex = tex2D(_MainTex, IN.uv_MainTex);o.Albedo = mainTex.rgb * _Color.rgb;o.Alpha = mainTex.a * _Color.a;o.Specular = _Shininess;o.Gloss = mainTex.a;}ENDCG}FallBack "Diffuse"
}

将shader导入Unity工程中
在这里插入图片描述

把材质球的shader改为Toon/Basic/MultiSteps,
在这里插入图片描述
调整一下高光、阴影、渐变阈值、镜面、边缘等参数
在这里插入图片描述
效果演示,可以看到模型受光照影响了
在这里插入图片描述

基于光照模型的二次元渲染UnityURPToonLitShaderExample——仅支持URP渲染管线

升级URP项目可以看我这篇文章:【unity小技巧】为啥我们的模型材质显示粉色?unity普通项目升级URP项目

GitHub地址:https://github.com/ColinLeung-NiloCat/UnityURPToonLitShaderExample
在这里插入图片描述
演示效果
在这里插入图片描述

将整个文件导入unity‘中
在这里插入图片描述
修改人材质为SimpleURPToonLitExample(With Outline)
在这里插入图片描述
如果材质丢失贴图了,记得手动赋值贴图即可
在这里插入图片描述

效果
在这里插入图片描述
如果我不希望面部显示不那么黑且更加精致,可以勾选下面这个选项
在这里插入图片描述
效果
在这里插入图片描述

参考

https://www.bilibili.com/video/BV1G34y127e6/
https://blog.csdn.net/linxinfa/article/details/121370565
https://cloud.tencent.com/developer/article/2013001

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/404290.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Axure高端交互元件库:助力产品与设计

用户体验(UX)和用户界面(UI)设计对于任何产品的成功都至关重要。为了在这个竞争激烈的市场中脱颖而出,设计师和产品开发团队需要依赖强大的工具来创造引人注目且功能丰富的交互界面。下面介绍一款Axure精心制作的"…

背包问题的模板及各个等价变形

目录 0-1背包 —— 二维二重循环 01背包 —— 一维二重循环 完全背包 —— 二维三重循环 完全背包 —— 二维二重循环 完全背包 —— 一维二重循环 0-1背包 —— 二维二重循环 #include <bits/stdc.h> using namespace std; const int N 1010; int dp[N][N]; int v…

鸿蒙内核源码分析——(自旋锁篇)

本篇说清楚自旋锁 读本篇之前建议先读系列篇 进程/线程篇. 内核中哪些地方会用到自旋锁?看图: 概述 自旋锁顾名思义&#xff0c;是一把自动旋转的锁&#xff0c;这很像厕所里的锁&#xff0c;进入前标记是绿色可用的&#xff0c;进入格子间后&#xff0c;手一带&#xff0c…

Github 2024-08-19 开源项目周报Top15

根据Github Trendings的统计,本周(2024-08-19统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目7JavaScript项目3TypeScript项目3Dart项目2HTML项目1PowerShell项目1Clojure项目1C++项目1Rust项目1Bootstrap 5: Web上开发响应式、…

嵌入式软件--模电基础 DAY 2

强电和弱电&#xff0c;简单一点是以电死人为标准的&#xff0c;交流电36伏特以下&#xff0c;直流电24V以下&#xff0c;为安全电压&#xff0c;是为弱电&#xff0c;反则强电。 市电进入家庭&#xff0c;连接你的电脑&#xff0c;220V的电压为什么没有让你感到危险&#xff…

YOLO知识点总结:

分类&#xff1a; 即是将图像结构化为某一类别的信息&#xff0c;用事先确定好的类别(category)或实例ID来描述图片。这一任务是最简单、最基础的图像理解任务&#xff0c;也是深度学习模型最先取得突破和实现大规模应用的任务。其中&#xff0c;ImageNet是最权威的评测集&…

【区块链+金融服务】基于区块链的一站式绿色金融开放平台 | FISCO BCOS应用案例

科技的进步为绿色金融发展提供了新的机遇&#xff0c;但银行、企业、第三方金融机构等在进行绿色金融业务操作过程中&#xff0c; 存在着相关系统和服务平台建设成本高、迭代难度大、数据交互弱、适配难等痛点。 基于此&#xff0c;中碳绿信采用国产开源联盟链底层平台 FISCO …

【Android 远程数据库操作】

按正常情况下&#xff0c;前端不应该直接进行远程数据库操作&#xff0c;这不是一个明智的方式&#xff0c;应该是后端提供对应接口来处理&#xff0c;奈何公司各方面原因需要前端这样做。 对此&#xff0c;我对远程数据库操作做了总结&#xff0c;便于自己复盘&#xff0c;同…

【Qt】常用控件QCheckBox

常用控件QCheckBox QCheckBox表示复选按钮&#xff0c;可以允许选中多个。 QCheckBox继承自QAbstractButton 例子&#xff1a;获取复选按钮的取值 使用Qt Designer先大体进行设计 代码实现&#xff1a; #include "widget.h" #include "ui_widget.h"Widge…

【网络】套接字(socket)编程——TCP版

接着上一篇文章&#xff1a;http://t.csdnimg.cn/GZDlI 在上一篇文章中&#xff0c;我们实现的是UDP协议的&#xff0c;今天我们就要来实现一下TCP版本的 接下来接下来实现一批基于 TCP 协议的网络程序&#xff0c;本节只介绍基于IPv4的socket网络编程 基于 TCP 的网络编程开…

【leetcode详解】T3137(思路详解 代码优化感悟)

思路详解 要解决这个问题&#xff0c;我们的大致思路是这样&#xff1a;找到长度为k的字符串 (记为stringA) &#xff0c;统计重复次数最多的那一个&#xff0c;则最终对应的k周期字符串就是 [stringA * n] 的形式( n word.length() / k&#xff09; 要实现多对象的计数&…

iOS 18.1 Beta 2评测:新变化与体验升级

苹果公司近日向开发者推送了iOS 18.1 Beta 2更新&#xff0c;这一版本基于beta1版本进行多个方面优化和改进&#xff0c;为用户带来了更加流畅和个性化的使用体验。作为一位热衷于体验新系统的用户&#xff0c;小编也是第一时间升级了Beta 2版本&#xff0c;并对其进行了全面的…

51 无显式主键时 mysql 增加的 DB_ROW_ID

前言 这里主要是 探讨, 在我们创建了一个 无主键的数据表, 然后 mysql 会为我们增加的这一个 DB_ROW_ID 的相关 新建一个无主键字段的数据表如下 CREATE TABLE implicit_id_table (username varchar(16) DEFAULT NULL,age int(11) DEFAULT NULL ) ENGINEInnoDB DEFAULT CH…

Docker 部署loki日志 用于微服务

因为每次去查看日志都去登录服务器去查询相关日志文件&#xff0c;还有不同的微服务&#xff0c;不同日期的文件夹&#xff0c;超级麻烦&#xff0c;因为之前用过ELK&#xff0c;原本打算用ELK&#xff0c;在做技术调研的时候发现了一个轻量级的日志系统Loki&#xff0c;果断采…

如何一键删除iPhone相册所有照片

拍照已成为我们记录日常生活的常态。但是&#xff0c;大量照片便会积累在设备上&#xff0c;这不仅占用了大量存储空间&#xff0c;而且随着时间的推移&#xff0c;管理这些照片也变得越来越困难。如果你决定清理旧照片&#xff0c;或者出于隐私考虑需要删除所有照片&#xff0…

【数据结构】链式结构实现:二叉树

二叉树 一.快速创建一颗二叉树二.二叉树的遍历1.前序、中序、后序遍历&#xff08;深度优先遍历DFS&#xff09;2.层序遍历&#xff08;广度优先遍历BFS&#xff09; 三.二叉树节点的个数四.二叉树叶子节点的个数五.二叉树的高度六.二叉树第k层节点个数七.二叉树查找值为x的节点…

什么是机器人快换盘?

机器人快换盘&#xff0c;行业内也称作工具快换盘、换枪盘、快换工具盘、快速更换器、快换器、 快换夹具、治具快换等。是末端执行器快速更换装置&#xff08;End-Of-Arm Tooling&#xff0c;简称EOAT&#xff09;&#xff0c;是工业自动化领域中用于机器人手臂上的一种重要设备…

MiniCPM-V: A GPT-4V Level MLLM on Your Phone论文阅读

大模型的趋势&#xff1a;模型性能越来越好&#xff0c;模型参数变小&#xff0c;端边设备计算能力变强。 MiniCPM-V优点 结果好、OCR能力突出、多分辨率、多语言、易于部署 模型结构 图片encoder适用vit。输入整体以及切片。切片使用自适应算法&#xff0c;通过计算分数&am…

人机环境系统智能已经超越了传统的空间智能和物理世界的概念

人机环境系统智能已经超越了传统的空间智能和物理世界的概念&#xff0c;进入了更为复杂的层次。在人机环境系统中&#xff0c;智能不仅涉及对物理世界的感知和理解&#xff0c;还包括对人类语言、情感、意图等的理解和生成。人工智能技术的应用&#xff0c;如自然语言处理、机…

C++静态数组的用法

每日诗词&#xff1a; 疏影横斜水清浅&#xff0c;暗香浮动月黄昏。 ——《山园小梅其一》林逋 目录 数组的基础操作&#xff1a; 数组元素的增加&#xff1a; 演示&#xff1a; 数组元素的删除&#xff1a; 演示&#xff1a; 数组元素的访问和修改&#xff1a; 演示&am…