搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
凡人多烦事01
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
【Unity入门】声音组件AudioSource简介 及实现声音的近大远小_audioclip 音量大小
2
通过命令查看linux 密码,linux查看用户密码(linux查看用户密码命令)
3
vsCode配置用户代码片段(react)_vscode react代码片段
4
ESP32 web 对接华为云平台--MQTT协议
5
基于python的旅游推荐系统_基于python开发一个旅游推荐系统
6
Python爬虫http基本原理#2
7
【python】代码实现计算天数倒计时_python倒数日
8
02-认识python爬虫_网络爬虫属于大数据的什么阶段
9
TCP/UDP端口连接测试_udp端口测试命令
10
云服务器4核8G够用吗?云服务器4核8G12M能干什么?_云服务器4核8g大概什么价格
当前位置:
article
> 正文
给物体边缘加高光轮廓的办法_高光画在边缘上
作者:凡人多烦事01 | 2024-02-18 19:51:22
赞
踩
高光画在边缘上
1.边缘光方法(Rim Light):
Unity官方教程里有例子,其中核心是这两句代码:
half rim = 1.0 - saturate(dot (normalize(IN.viewDir), IN.worldNormal));
o.Emission = _RimColor.rgb * pow (rim, _RimPower);
IN.viewDir是当前视角向量,IN.worldNormal是物体的法线。dot是计算视角和法线的点积,等于视角和法线夹角的cos值,如下图:
Cos的值域是1-0,1-cos就成了0-1,在夹角90度时达到最大值,正好用来模拟侧光的强度(与视角成90度的部分光线最强,就是边缘光了)
把这个值的变化率用一个pow函数(rim的_rimPower次方)进行放大,就能强化边缘发亮的效果。比较一下:
没有经过Pow放大变化率的边缘光,cos函数的变化是比较平缓的,造成大片区域被染色。
经过Pow函数放大变化率,就有了边缘发亮的效果。这个图大致体现了放大前后变化率的曲线:
这种边缘光在复杂几何形体的时候效果还是不错的。
但是在平直的物体上,边缘光就不见了
到了方形物体,几乎很难看见了
很好理解,正方形每个面法线都是一个方向的,没法体现出变化和轮廓了。
另外这种方法在描绘凹的几何体时,凹的部分(包括法线贴图造成的凹凸)的边缘也都会被画出来,并不是真正意义上的边缘轮廓,就是一种侧光效果。
该方法的好处是简单,只要把官方的shader改写,加上计算边缘光的几句,就能实现。要显示的时候动态切换shader就可以。基本不需要代码干预,效率高。
2.单个物体轮廓渲染方法
这个方法实现比较复杂,只能介绍大致思路:
1.把要渲染轮廓的物体放在一个单独的层里
2.在层里设置一个disable的摄像机,culling mask是渲染物体所在层。
3.主摄像机保持culling mask是everything
4.生成1个renderTexture
5.把那个disable的辅助摄像机用RenderWithShader方法,指定一个单色渲染的shader(只需要轮廓,不需要光照计算)渲染物体的轮廓到一个renderTexture
6.继续用单色Shader,用Unity自带Blur类似的方法,把物体轮廓图上下左右移动几个像素,叠加在一起,得到一个比原来轮廓大,边缘模糊的轮廓图,存到一个临时renderTexture
7.把大的轮廓图和原始轮廓图叠加,把中间清晰轮廓部分消除掉,就能得到一个完整带透明度的轮廓图。
8.在主摄像机的OnRenderImage里,把这个透明轮廓图和主摄像机渲染的图像进行alpha混合,就能产生一个完整并且不被遮挡的轮廓效果了。
效果如图:
明显效果比侧光好多了。不过这种方法开销比较大,而且需要很多代码的支持。
附上一个小Demo,包含了上述两种方法。
鼠标可以控制镜头平移、旋转、缩放。鼠标划过物体显示侧光效果,点击物体显示清晰轮廓效果,再次点击效果消除。
可以设置边缘颜色 和宽度 模糊度
目标按照材质进行分组以方便处理
变换成细线 绿色
---------------------------------------------------------------------------------------------------------------------
优化了代码,减少了一组RenderTexture,这个东西还是很耗资源的,减少了计算的次数。
另外增加了一组模糊、裁剪一次完成的shader,资源上更节省,不过边缘较模糊。
两种算法效果比较:
多次模糊再裁剪的算法,边缘光滑,模型的锯齿在边缘线被光滑了,开销略大
一次同时模糊、裁剪算法,边缘较模糊,锯齿也被等比放大,但开销较省。
根据需要使用。
总体上因为是全屏效果,与被渲染物体数量无关,所以基本上显示轮廓物体的多少不会影响效率。
附件里包含两种方法的代码和shader。RimLight方法一个shader就能对应一种材质效果,不需要代码支持。后一种方法需要代码加shader,类似官方的Image Effect效果。
outline.unitypackage
(3648 K)
(来自:http://game.ceeger.com/forum/read.php?tid=3592)
声明:
本文内容由网友自发贡献,转载请注明出处:
【wpsshop博客】
推荐阅读
article
vue
点
击对
图片
进行标注并记录当前
的
坐标
_
vue
加载一张
图片
,里边含有
若干个
点
如何将
点
击显示对应...
参考链接:https://blog.csdn.net/m0
_
46627730/article/details/10658...
赞
踩
article
前端
之路(八)——
嵌入
技术
_
服务
方式
:
前端
嵌入
...
上一篇中我们学习把图片、音频、视频等多媒体
嵌入
到页面当中,除了这些,我们还能往页面
嵌入
其他东西吗?比如说直接
嵌入
一个页面...
赞
踩
article
Windows
获取和修改
Owner
_
win
owner
...
这次分享我将已经踩完坑的代码发布出来,并且代码整量就是来做获取文件
owner
、对文件赋权、和修改
owner
的_
win
o...
赞
踩
article
组态
&
工控
系统领域集成
开发工具
-
ignition
学习记录
_
ignition
组态
软件
...
稍后补充,
_
ignition
组态
软件
ignition
组态
软件
稍后补充, ...
赞
踩
article
python
win32
教程_
Python
下Py
win32
的使用教程...
#Win32#打开EXCELWinApp =
win32
com.client.DispatchEx('Excel.App...
赞
踩
article
Property
(
prop
)
和
Attribute
(
attr
)的区别_
prop
ty
和
prop
...
Attribute
和
Property
都被翻译成“属性”_
prop
ty
和
prop
prop
ty
和
prop
...
赞
踩
article
halcon
定位_
HALCON
高级篇:
立体
视觉
...
立体
视觉
立体
视觉
的基本原理是对象点的3D坐标是由两个或者多个从不同角度同时获取的图像决定的,
HALCON
提供了两种
立体
视...
赞
踩
article
超级
玛丽
/
超级
马里奥
_
c#
制作
超级
马里奥
...
MySuperMario----2D复刻之旅,缅怀童年时光
超级
玛丽
/
超级
马里奥
你好!欢迎浏览我的博客!
超级
玛丽
是一款非常...
赞
踩
article
【作业】
python
——小说
Walden
的
词频统计
,
并从高到低排序
_
walden
.
txt
...
本文章环境为Pychram-
python
3.8一·确定文件位置确定
Walden
.
txt
文件位置例如:将
Walden
.tx...
赞
踩
article
QT-C++
注册机
软件
,
生成
机器码
和
注册码
,
支持授权时间_qt制作
注册机
...
1、编译环境:本程序使用的编译环境是QT5.12.0和VS2017
,
如果你安装环境不用
,
你可以通过阅读里面的程序代码
,
进...
赞
踩
article
【实现100个
unity
特效之2】使用
shader
和
shader
Graph
实现
2d
图片
描边
效果
(附...
最近在学习
shader
Graph
相关内容,其实关于实现
2d
图片
描边
效果
,网上可以看到很多教程,但是我发现大多数都是基于...
赞
踩
article
【SL学习】——
嵌套
元素
(
Nesting
Elements
)
_
nested
element
...
【原文】 What the Grid does support is the ContentProperty attri...
赞
踩
article
Unity ui内容大小控制器(
Content
Size
Fitter
)_
unity
滑动列表cont...
添加该组件后,inspector面板矩形变换里的宽度和高度,会受
Content
Size
Fitter
里高度和宽度的选择...
赞
踩
article
学习
Python
Win32
编程:
Pywin32
简易入门指南...
停更一年多了,最近对PY产生了兴趣,应为想解放双手,又不想用按键精灵之类的软件,于是乎就百度到了这个东东“pywin32...
赞
踩
article
变换
矩阵
_转换
矩阵
...
变换
矩阵
点和向量向量的内积向量的外积坐标系的
变换
齐次坐标
变换
矩阵
求逆点和向量向量是一个线性空间的元素,是从原点或某点指向...
赞
踩
article
Python
基础之
pyautogui
模块
(详细总结
鼠标
键盘
操作
)...
Python
基础之
鼠标
操作
文章目录
Python
基础之
鼠标
操作
1. GUI 控制功能1.1 自动 防故障功能1.2 停顿功...
赞
踩
article
SCADA
--监控组态
软件
...
SCADA
简介
SCADA
是Supervisory Control And Data Acquisition的英文缩...
赞
踩
article
pytorch
pso
优化
cnn
-
lstm
智慧海洋-
渔船
轨迹识别_
pso
-
cnn
-
lstm
...
本文主要讲解:
pytorch
pso
优化
cnn
-
lstm
智慧海洋-
渔船
轨迹识别_
pso
-
cnn
-
lstm
pso
-
cnn
...
赞
踩
article
C#中
Invoke
和
Begin
Invoke
的区别详解_
c#
invoke
和
begin
invoke
的...
否则,在后台线程
和
主截面线程共享某些状态数据的情况下,如果不同步调用,而是各自继续执行的话,可能会造成执行序列上的问题,...
赞
踩
article
mysql
-
5.5
.
20
-
win32
.msi
安装
教程详解_
mysql
5.5
.
20
安装
...
系列文章目录文章目录系列文章目录前言一、打开任务管理器,其中三种方式如下:1.找到下方任务栏,在空白处点击鼠标右键,找到...
赞
踩
相关标签
前端
html5
html
javascript
css
python
编辑器
python win32教程
halcon定位
游戏
unity3D
超级玛丽
qt
c++
ui
unity
游戏引擎
游戏
nested
interface
class