基于SDF的光照效果
基于SDF的光照效果
好久没写博客了,怠惰了,就当爬了一步
效果
Show me the code
Shader "Unlit/SDF"
{
Properties
{
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Texture", 2D) = "white" {}
_SdfTex ("SdfTex", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100
Pass
{
Tags { "LightMode"="ForwardBase" }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
float4 _Color;
sampler2D _MainTex;
sampler2D _SdfTex;
float4 _MainTex_ST;
float4 _SdfTex_ST;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
// sample the texture
fixed4 col = tex2D(_MainTex, i.uv);
//SDF
float4 Left_tex = tex2D(_SdfTex, i.uv);
float4 Right_tex = tex2D(_SdfTex, float2(1-i.uv.x, i.uv.y));
float3 lightDir = _WorldSpaceLightPos0.xyz; //光线入射向量
float3 RightSide = UnityObjectToWorldDir(float4(1.0,0.0,0.0,1.0)); //世界空间下右向量
float is_right = dot(lightDir.x, RightSide.x); //光线是否在右边?
float4 shadow = is_right > 0 ? Right_tex : Left_tex; //采样的阈值
float3 forward = UnityObjectToWorldDir(float4(0.0,0.0,1.0,1.0));
float reflect_val = -0.5 * dot(forward, lightDir) + 0.5; //计算得到的阈值
float is_shadow = shadow < reflect_val ? 1:0; //比较两者,判断是否在阴影内
float4 halfShadow = 0.5 * is_shadow + 0.5;
return col * _Color* halfShadow;
}
ENDCG
}
}
}
基于SDF的光照效果的更多相关文章
- 基于SDF渲染字体
18号字体 18号字体放大15倍 基于sdf渲染字体放大15倍 相比常规的渲染方式,基于SDF渲染文字可无限放大并保持清晰,几乎没有开销就可实现描边,发光,抗锯齿等效果.且它只需要很小的纹理缓存SDF ...
- [译]基于GPU的体渲染高级技术之raycasting算法
[译]基于GPU的体渲染高级技术之raycasting算法 PS:我决定翻译一下<Advanced Illumination Techniques for GPU-Based Volume Ra ...
- Signed Distance Field Shadow in Unity
0x00 前言 最近读到了一个今年GDC上很棒的分享,是Sebastian Aaltonen带来的利用Ray-tracing实现一些有趣的效果的分享. 其中有一段他介绍到了对Signed Distan ...
- 使用k-means对3D网格模型进行分割
使用k-means对3D网格模型进行分割 由于一些原因,最近在做网格分割的相关工作.网格分割的方法有很多,如Easy mesh cutting.K-means.谱分割.基于SDF的分割等.根据对分割要 ...
- 老猿学5G:多量纲计费与QoS的QCI、5QI、ARP、GBR和MBR
☞ ░ 前往老猿Python博文目录 ░ 一.多量纲计费 多量纲计费是与传统的计费模式相区别的一种计费模式,传统的计费基本上都是通过使用量.使用时长或包固定时长等方式计费,而多量纲计费是指在考虑以上方 ...
- (z转)基于CPU的Bank BRDF经验模型,实现各向异性光照效果!
摘抄“GPU Programming And Cg Language Primer 1rd Edition” 中文 名“GPU编程与CG语言之阳春白雪下里巴人” BRDF 光照模型 10.2.1 什么 ...
- 【翻译】首个基于NHibernate的应用程序
首个基于NHibernate的应用程序 Your first NHibernate based application 英文原文地址:http://www.nhforge.org/wikis/how ...
- 中国快递包裹总量的预测-基于SARIMA模型
code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs && docu ...
- [ZZ] 基于DirectX shader的Per-pixel lighting实现
这个特效需要用到DX11 UAV吗? http://blog.tianya.cn/blogger/post_show.asp?BlogID=510979&PostID=5665974 Intr ...
- 通用超级强大的基于Oracle数据库的代码生成器
项目中使用了Oracle数据库,命名基本规范为表名和字段名全部大写,用下划线分割各个单词: 如“BASE_USER_LOGON_EXTEND”这个表表示用户登录的扩展表. 基于这个规范,通用权限管理系 ...
随机推荐
- [PHP] 小数转科学计数法, 小数保留 n 位
使用sprintf / printf 的 %e 或%E 格式说明符将其转换为科学计数法. 使用精度控制符指定保留多少位. 例如:sprintf('%.4e', 0.00000123); Link:ht ...
- 通过WebRTC简单实现媒体共享
通过WebRTC简单实现媒体共享 媒体协商 在设置本地描述符(offer/answer)前,我们总是需要将媒体添加到连接中,只有这样在描述符中才能包含需要共享的媒体信息,除非你不需要共享媒体. 在实际 ...
- VisualStudio 使用 FastTunnel 辅助搭建远程调试环境
有时候需要远程调试一些用户问题,期望能使用本机的 Visual Studio 开发环境,调试远程的用户的设备上的应用.这时会遇到的一个问题是如何让本机的 Visual Studio 可以连接上远程的用 ...
- WPF 使用 Win10 的 WinRT 自带 Windows.Media.Ocr 实现图片转文本
世界上有很多 OCR 识别技术,本文来和大家介绍如果在 WPF 里,在运行到 win10 的设备上,通过 Windows Runtime 自带的 Windows.Media.Ocr 实现在给定的图片里 ...
- 2018-3-8-WPF-UncommonField-类型是什么
title author date CreateTime categories WPF UncommonField 类型是什么 lindexi 2018-3-8 16:25:2 +0800 2018- ...
- IIS 部署 docsify
来源:https://www.cnblogs.com/yokeqi/p/14276176.html 来源:https://sspai.com/post/60534 docsify之前部署在Linux+ ...
- vue全国省市选择vue组件
没用懂checkbox,干脆自己定义布尔值,方便数据页面响应. 可以再原始省市数据 下载address.js文件 1.初始化数据格式: 2页面样式: 3.对应输出的数据格式: 4.源码: <!D ...
- Oracle、达梦:☆获取数据库对象、获取对象的DDL定义语句(达梦)
一.获取数据库对象(Oracle.达梦) 以下方式在达梦DM数据库中都能跑通,Oracle未测试所有的方式. 1.获取所有对象--所有模式下的 数据库所有对象表:包括表.视图.物化视图.函数.存储过程 ...
- python执行SQL语句中有格式化时是否需要加引号
import pymysqldb = pymysql.connect(host='localhost', user='root', password='123456', database='test' ...
- 更新Homebrew时候遇到的问题
问题描述: 更新Homebrew时候遇到无法访问github的问题,判定原因为DNS污Ran. fatal: unable to access 'https://github.com/Homebrew ...