首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Shader-FresnelReflection(菲涅尔反射)

Shader-FresnelReflection(菲涅尔反射)

作者头像
祝你万事顺利
发布于 2019-06-17 06:37:53
发布于 2019-06-17 06:37:53
2.4K00
代码可运行
举报
文章被收录于专栏:Unity游戏开发Unity游戏开发
运行总次数:0
代码可运行

菲涅尔公式:用来描述光在不同折射率的介质之间的行为。用公式推导出的光的反射称之为“菲涅尔反射”。

fresnelRes.PNG

应用:运用于类似水面的效果,在近的地方反射较少,看远的地方反射较多。这种效果称之为菲涅尔效应。

在用系统简化公式提升效率: fresnel = fresnel基础值 + fresnel缩放量*pow( 1 - dot( N, V ), 5 ) N-法线 V-观察向量 L-平行光方向

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Shader "Unlit/FresnelReflection"
{
    Properties
    {
        _MainTex("Texture", 2D) = "white" {}
        _fresnelBase("fresnelBase", Range(0, 1)) = 1
        _fresnelScale("fresnelScale", Range(0, 1)) = 1
        _fresnelIndensity("fresnelIndensity", Range(0, 5)) = 5
        _fresnelCol("_fresnelCol", Color) = (1,1,1,1)
    }

        SubShader
    {
        Tags{ "RenderType" = "Opaque" }
        LOD 100

        Pass
    {
        tags{ "lightmode=" = "forward" }

        CGPROGRAM
#pragma vertex vert
#pragma fragment frag

#include "UnityCG.cginc"
#include "Lighting.cginc"

        struct appdata
    {
        float4 vertex : POSITION;
        float2 uv : TEXCOORD0;
        float3 normal : NORMAL;
    };

    struct v2f
    {
        float2 uv : TEXCOORD0;
        float4 vertex : SV_POSITION;
        float3 L : TEXCOORD1;
        float3 N : TEXCOORD2;
        float3 V : TEXCOORD3;
    };

    sampler2D _MainTex;
    float4 _MainTex_ST;

    float _fresnelBase;

    float _fresnelScale;

    float _fresnelIndensity;

    float4 _fresnelCol;

    v2f vert(appdata v)
    {
        v2f o;
        o.vertex = UnityObjectToClipPos(v.vertex);
        o.uv = TRANSFORM_TEX(v.uv, _MainTex);
        //将法线转到世界坐标
        o.N = mul(v.normal, (float3x3)unity_WorldToObject);
        //获取世界坐标的光向量
        o.L = WorldSpaceLightDir(v.vertex);
        //获取世界坐标的视角向量
        o.V = WorldSpaceViewDir(v.vertex);
        return o;
    }

    fixed4 frag(v2f i) : SV_Target
    {
        fixed4 col = tex2D(_MainTex, i.uv);

    float3 N = normalize(i.N);
    float3 L = normalize(i.L);
    float3 V = normalize(i.V);

    col.rgb *= saturate(dot(N, L)) * _LightColor0.rgb;
    //菲尼尔公式
    float fresnel = _fresnelBase + _fresnelScale * pow(1 - dot(N, V), _fresnelIndensity);

    col.rgb += lerp(col.rgb, _fresnelCol, fresnel) * _fresnelCol.a;

    return col;
    }

        ENDCG
    }
    }
}

fresnelBase表示基础值,fresnelScale表示fresnel效果系数,fresnelIndensity增强次数

fresnelSet.PNG

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.06.17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Transformers 4.37 中文文档(十三)
Transformers Agents 是一个实验性 API,随时可能发生变化。代理返回的结果可能会有所不同,因为 API 或底层模型可能会发生变化。
ApacheCN_飞龙
2024/06/26
6290
Transformers 4.37 中文文档(一)
下表表示库中对这些模型的当前支持,它们是否有 Python 分词器(称为“slow”)。由🤗 Tokenizers 库支持的“fast”分词器,它们是否在 Jax(通过 Flax)、PyTorch 和/或 TensorFlow 中有支持。
ApacheCN_飞龙
2024/06/26
1.4K0
Transformers 4.37 中文文档(一)
Transformers 4.37 中文文档(二)
除了🤗 Transformers 的 notebooks 之外,还有示例脚本演示如何使用PyTorch、TensorFlow或JAX/Flax训练模型的方法。
ApacheCN_飞龙
2024/06/26
8030
Transformers 4.37 中文文档(二)
Transformers 4.37 中文文档(十四)
您可以使用AutoBackbone类初始化一个模型作为骨干,并获取任何阶段的特征图。您可以定义out_indices来指示您想要从哪些层获取特征图。如果您知道层的名称,也可以使用out_features。您可以互换使用它们。如果同时使用out_indices和out_features,请确保它们是一致的。不传递任何特征图参数将使骨干产生最后一层的特征图。为了可视化各个阶段的外观,让我们以 Swin 模型为例。每个阶段负责特征提取,输出特征图。
ApacheCN_飞龙
2024/06/26
9150
Transformers 4.37 中文文档(九)
如果在单个 GPU 上训练模型太慢或者模型的权重无法适应单个 GPU 的内存,则过渡到多 GPU 设置可能是一个可行的选择。在进行此过渡之前,彻底探索在单个 GPU 上进行高效训练的方法和工具中涵盖的所有策略,因为它们普遍适用于任意数量的 GPU 上的模型训练。一旦您采用了这些策略并发现它们在单个 GPU 上不足以满足您的情况时,请考虑转移到多个 GPU。
ApacheCN_飞龙
2024/06/26
8320
Transformers 4.37 中文文档(九)
Transformers 4.37 中文文档(三)
www.youtube-nocookie.com/embed/ajPx5LwJD-I
ApacheCN_飞龙
2024/06/26
3000
Huggingface:导出transformers模型到onnx
上一篇的初体验之后,本篇我们继续探索,将transformers模型导出到onnx。这里主要参考huggingface的官方文档:https://huggingface.co/docs/transformers/v4.20.1/en/serialization#exporting-a-model-to-onnx。
程序员架构进阶
2023/09/01
3.1K0
Huggingface:导出transformers模型到onnx
Transformers 4.37 中文文档(九十六)
VipLlava 模型是由 Mu Cai、Haotian Liu、Siva Karthik Mustikovela、Gregory P. Meyer、Yuning Chai、Dennis Park、Yong Jae Lee 在《Making Large Multimodal Models Understand Arbitrary Visual Prompts》中提出的。
ApacheCN_飞龙
2024/06/26
5390
Transformers 4.37 中文文档(十八)
任何多模态模型都需要一个对象来编码或解码将多个模态(文本、视觉和音频)组合在一起的数据。这由称为处理器的对象处理,这些对象将多个处理对象(如文本模态的分词器、视觉的图像处理器和音频的特征提取器)组合在一起。
ApacheCN_飞龙
2024/06/26
1.1K0
Transformers 4.37 中文文档(五十二)
ProphetNet 模型是由 Yu Yan, Weizhen Qi, Yeyun Gong, Dayiheng Liu, Nan Duan, Jiusheng Chen, Ruofei Zhang, Ming Zhou 于 2020 年 1 月 13 日提出的ProphetNet: Predicting Future N-gram for Sequence-to-Sequence Pre-training。
ApacheCN_飞龙
2024/06/26
1790
Transformers 4.37 中文文档(三十一)
EncoderDecoderModel 可以用于初始化一个序列到序列模型,其中预训练的自编码模型作为编码器,预训练的自回归模型作为解码器。
ApacheCN_飞龙
2024/06/26
3520
Transformers 4.37 中文文档(五)
目标检测是计算机视觉任务,用于检测图像中的实例(如人类、建筑物或汽车)。目标检测模型接收图像作为输入,并输出检测到的对象的边界框的坐标和相关标签。一幅图像可以包含多个对象,每个对象都有自己的边界框和标签(例如,它可以有一辆汽车和一座建筑物),每个对象可以出现在图像的不同部分(例如,图像可以有几辆汽车)。这个任务通常用于自动驾驶,用于检测行人、道路标志和交通灯等。其他应用包括在图像中计数对象、图像搜索等。
ApacheCN_飞龙
2024/06/26
5090
Transformers 4.37 中文文档(五)
Transformers 4.37 中文文档(二十九)
DeBERTa 模型是由 Pengcheng He、Xiaodong Liu、Jianfeng Gao、Weizhu Chen 在DeBERTa: Decoding-enhanced BERT with Disentangled Attention中提出的,它基于 2018 年发布的 Google 的 BERT 模型和 2019 年发布的 Facebook 的 RoBERTa 模型。
ApacheCN_飞龙
2024/06/26
5690
Transformers 4.37 中文文档(十)
在多个 GPU 上进行训练可能是一个棘手的任务,无论是遇到安装问题还是 GPU 之间的通信问题。这个调试指南涵盖了一些可能遇到的问题以及如何解决它们。
ApacheCN_飞龙
2024/06/26
6440
Transformers 4.37 中文文档(十)
最新自然语言处理库transformers
Transformers是TensorFlow 2.0和PyTorch的最新自然语言处理库
石晓文
2020/03/09
2.6K0
最新自然语言处理库transformers
Transformers 4.37 中文文档(九十四)
SpeechEncoderDecoderModel 可用于使用任何预训练语音自编码模型作为编码器(例如 Wav2Vec2,Hubert)和任何预训练自回归模型作为解码器初始化语音到文本模型。
ApacheCN_飞龙
2024/06/26
3770
Transformers 4.37 中文文档(九十四)
Transformers 4.37 中文文档(二十二)
BARThez 模型是由 Moussa Kamal Eddine、Antoine J.-P. Tixier 和 Michalis Vazirgiannis 于 2020 年 10 月 23 日提出的BARThez: a Skilled Pretrained French Sequence-to-Sequence Model。
ApacheCN_飞龙
2024/06/26
3270
Transformers 4.37 中文文档(六)
视觉问答(VQA)是根据图像回答开放式问题的任务。支持此任务的模型的输入通常是图像和问题的组合,输出是用自然语言表达的答案。
ApacheCN_飞龙
2024/06/26
3610
Transformers 4.37 中文文档(六)
Transformers2.0让你三行代码调用语言模型,兼容TF2.0和PyTorch
参考链接: 在Python中使用BERT Tokenizer和TensorFlow 2.0进行文本分类
用户7886150
2021/01/15
1.2K0
Transformers2.0让你三行代码调用语言模型,兼容TF2.0和PyTorch
最近,专注于自然语言处理(NLP)的初创公司 HuggingFace 对其非常受欢迎的 Transformers 库进行了重大更新,从而为 PyTorch 和 Tensorflow 2.0 两大深度学习框架提供了前所未有的兼容性。
Python数据科学
2019/10/03
2.4K0
相关推荐
Transformers 4.37 中文文档(十三)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档