UnityShader:IBL

 效果:

实现:

Shader "MyShader/IBL"
{Properties{_CubeMap ("环境贴图", Cube) = "white" {}_Exposure("曝光",float)=1.0_Color("颜色",color)=(1,1,1,1)_NormalMap("法线贴图",2d)="bump"{}_AOMap("环境遮蔽",2d)="white"{}    _RoughnessMap("粗糙度贴图",2d)="black"{}_RoughnessContrast("粗糙度对比度",Range(0,10))=1_RoughnessLight("粗糙度亮度",float)=1_Roughness("粗糙度",Range(0,1))=1}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"inline float3 ACES_ToneMapping(float3 v){v *= 0.6f;float a = 2.51f;float b = 0.03f;float c = 2.43f;float d = 0.59f;float e = 0.14f;return saturate((v*(a*v+b))/(v*(c*v+d)+e));}   struct appdata{float4 vertex : POSITION;float2 texcoord : TEXCOORD0;float3 normal : NORMAL;float3 tangent : TANGENT;};struct v2f{float4 pos : SV_POSITION;float2 uv : TEXCOORD0;float3 normal_world : TEXCOORD1;float3 tangent_dir : TEXCOORD2;float3 binormal_dir : TEXCOORD3;float3 pos_world : TEXCOORD4;};samplerCUBE _CubeMap;float4 _CubeMap_HDR;sampler2D _NormalMap;float4 _NormalMap_ST;sampler2D _AOMap;float _Exposure;float4 _Color;float _RoughnessContrast;sampler2D _RoughnessMap;float _RoughnessLight;float _Roughness;v2f vert (appdata v){v2f o = (v2f)0;o.pos = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.texcoord,_NormalMap);o.normal_world = normalize(mul(v.vertex,unity_WorldToObject).xyz);o.tangent_dir = normalize(mul(unity_ObjectToWorld,v.tangent).xyz);o.binormal_dir = normalize(cross(o.normal_world,o.tangent_dir));o.pos_world = mul(unity_ObjectToWorld,v.vertex);return o;}fixed4 frag (v2f i) : SV_Target{half3 normal_world = normalize(i.normal_world);half3 tangent_dir = normalize(i.tangent_dir);half3 binormal_dir = normalize(i.binormal_dir);half3 normal_data = UnpackNormal(tex2D(_NormalMap,i.uv));float3x3 TBN = float3x3(tangent_dir,binormal_dir,normal_world);normal_world = normalize(mul(normal_data,TBN));half3 view_dir = normalize(_WorldSpaceCameraPos.xyz-i.pos_world);half3 hdr_reflect_dir = normalize(reflect(-view_dir,normal_world));half roughness = tex2D(_RoughnessMap,i.uv);roughness = saturate(pow(roughness,_RoughnessContrast)*_RoughnessLight+_Roughness);roughness = roughness*(1.7-0.7*roughness);float mip_level = roughness*6;half4 cube_color = texCUBElod(_CubeMap,float4(hdr_reflect_dir,mip_level));half3 env_color = DecodeHDR(cube_color,_CubeMap_HDR);half ao_color = tex2D(_AOMap,i.uv);half3 final_color = env_color*ao_color*_Color.rgb*_Exposure;half3 final_color_liner = pow(final_color,2.2);half3 final_color_gamma = pow(ACES_ToneMapping(final_color_liner),1.0/2.2);return fixed4(final_color_gamma,1.0);}ENDCG}}
}

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

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

相关文章

nginx代理架构如何保持后端应用服务器集群的会话

目录 1. 引言2. 原理3. 配置指令3.1 session_sticky3.2 session_sticky_hide_cookie 4. 配置举例5. 问题和思考5.1 如果浏览器关闭了cookie,这个功能还能用吗?5.2 如果某台服务器故障了,那么之前路由到该服务器的请求将怎么处理?5.3 对于部分…

每日一题 第七期 Codeforces Round 929 (Div. 3) Editorial

Turtle Tenacity: Continual Mods D. Turtle Tenacity: Continual Mods time limit per test: 2 seconds memory limit per test: 256 megabytes input: standard input output: standard output Given an array a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1​,a2​,……

Python——pgzero游戏打包exe执行时报错

Python——pgzero游戏打包exe执行时报错 记录一次使用 pgzero 开发游戏,使用 pyinstaller 打包时报错 目录结构: 1. 第一次报错 打包指令: pyinstaller -Fw .\code.py结果打开报错 报错如下: Traceback (most recent call…

【Web】记录[长城杯 2022 高校组]b4bycoffee题目复现

目录 前言 环境准备 简单分析 EXP(两种打法) 生成Payload 恶意类 ①Spring命令执行回显类 ②Filter型内存马 前言 本地jar包运行打通了,远程500,nss靶机有问题,换了bugku就可( 主要记录下做题过程,纯菜狗,小…

Puppet 代码入门:清单和模块

简介 在设置代理/主配置的 Puppet 后,您可能需要一些帮助来编写 Puppet 清单和模块。为了有效地使用 Puppet,您必须了解清单和模块的构造方式。本教程涵盖了 Puppet 代码的基础知识,并将向您展示如何构建清单和模块,以帮助您开始…

Euler angles and Quaterean

what is Euler angles ?(欧拉角是什么东西?) The Euler angles are three angles introduced by Leonhard Euler to describe the orientation of a rigid body with respect to a fixed coordinate system (被欧拉引入用三个角度来描述刚体…

Linux——开发工具yum与vim

Linux——开发工具yum与vim 文章目录 Linux——开发工具yum与vim一、Linux 软件包管理器-yum1.1 什么是软件包1.2 yum的使用 二、linux下的编辑器-vim2.1 vim的基本概念2.2 vim的基本操作插入模式下的基本命令底行模式下的基本指令 2.3 vim的配置 一、Linux 软件包管理器-yum …

鸿蒙内核系统

一、系统设计总纲 1.1鸿蒙战略设计目标 全场景1.2鸿蒙操作系统目标实现的技术支撑1.2.1分布式设计1.2.2一次开发,多端部署1.2.3系统与硬件解耦,弹性部署1.3鸿蒙操作系统技术架构1.3.1内核层1.3.2系统服务层1.3.3框架层1.3.4应用层1.4本章小结 二、鸿蒙的…

8-图像缩放

其实,就是开辟一个zoomwidth,zoomheight的内存,再分别赋值即可。 void CDib::Scale(float xZoom, float yZoom) { //指向原图像指针 LPBYTE p_data GetData(); //指向原像素的指针 LPBYTE lpSrc; //指向缩放图像对应像素的指针 LPBYTE lpDs…

数据结构——lesson8二叉树的实现

💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…

论文阅读——BLIP

BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation (1)单模态编码器,它分别对图像和文本进行编码。图像编码器用ViT,并使用附加的 [CLS] 标记来表示全局图像特征。文本…

springcloud:4.1 GateWay

概述 Gateway 简介 Spring Cloud Gateway基于Spring 5.0、SpringBoot 2.0和Project Reactor等技术开发 旨在为微服务架构提供一种简单有效的、统一的API路由管理方式,并为微服务架构提供安全、监控、指标和弹性等功能 其目标是替代Zuul特点 易于编写谓词和过滤器&…

解决谷歌浏览器最新chrome94版本CORS跨域问题

项目场景: 谷歌浏览器升级到chrome94版本出现CORS跨域问题 问题描述 解决谷歌浏览器最新chrome94版本CORS跨域问题。 CORS跨域问题: 升级谷歌浏览器最新chrome94版本后,提示Access to XMLHttpRequest at ‘http://localhost:xxxx/api’ fro…

zabbix企业微信接入结合海螺问问编写的shell脚本

前言 博客懒得写详细了,视频剪的累死了,看视频就好了 白帽小丑的个人空间-白帽小丑个人主页-哔哩哔哩视频 shell脚本 #!/bin/bash #set -x CorpID"" #我的企业下面的CorpID Secret"" #创建的应用那…

【Numpy】(3)数组操作

索引 基本索引 NumPy索引类似于Python列表的索引,但它提供了更多的功能。对于一维数组,你可以使用整数索引访问特定位置的元素: import numpy as nparr = np.array([1, 2, 3, 4]) print(arr[2]) # 输出:3对于多维数组,你可以使用逗号分隔的索引元组来访问元素: arr …

C++:什么情况下函数应该声明为纯虚函数

在C中,函数应该在以下情况下声明为纯虚函数: 抽象基类:当你希望定义一个基类,该基类不能被实例化,只能作为其他类的基类时,你应该在基类中声明至少一个纯虚函数。这样的基类被称为抽象基类。纯虚函数通过在…

python实现多进程循环共享内存队列

python实现多进程循环共享内存队列 python >=3.8 1、原理流程 生产者消费者模式: 创建一个size大小的共享内存列表,前三个分别保存头指针、尾指针、锁 一个进程生产数据 多个进程消费数据 消费数据时通过锁来保证已消费的数据不能再被取出,已消费的数据置为None1、创建…

C到C++的敲门砖-1

文章目录 关键字命名空间输入和输出缺省参数函数重载 关键字 相较于C语言32个关键字: autodoubleintstructbreakelselongswitchcaseenumregistertypedefcharexternreturnunionconstfloatshortunsignedcontinueforsignedvoiddefaultgotosizeofvolatiledoifwhilesta…

全量知识系统“全基因序列”程序构想之1

序 这段时间使用AI工具来完善系统的设计。这几天的话题一直都是 使设计可能完成的一个起点,就是“全基因序列”。从这个文字表述上就可以看出,它将可能是需求文档、程序概要结构和数据库三部分的融合体。 计划从今天开始 深入这个话题,目标…

Everything:文件查找工具,一搜即得

名人说:东边日出西边雨,道是无晴却有晴。——刘禹锡 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、软件介绍①Everything②核心功能③原理二、下载安装①下载②安装三、使用方法①文件搜索②高级搜索③快捷唤起四、总结