unity-shader-曲面细分与置换贴图
title: unity-shader-曲面细分与置换贴图
categories: Unity3d-Shader
tags: [unity, shader, tessellation, displacement]
date: 2019-05-22 15:37:34
comments: false
低模通过 置换贴图 增加曲面, 表现出高模效果
相比较 法线贴图 , 置换贴图 是真实改变顶点的位置, 会有遮挡, 而 法线贴图 只是在改变 片段 光照的视觉效果, 并不会修改模型的顶点位置.
前篇
- unity 官网说明 - https://docs.unity3d.com/Manual/SL-SurfaceShaderTessellation.html
- Unity默认管线置换贴图与曲面细分 (有法线解决方案) - https://www.wonderm.cc/2019/03/30/Unity-Tess-Displacement/
在细分后采样置换贴图,对顶点进行偏移
需要注意的是在 surf 和 frag 以外采样贴图只能使用 tex2Dlod
使用限制: the shader is automatically compiled into the Shader Model 4.6 target, 只能在 sm4.6 以后才能使用.
测试
使用的资源 Organic 2
shader
Shader "test/Tessellation" {Properties {_MainTex ("Base (RGB)", 2D) = "white" {}_DispTex ("Disp Texture", 2D) = "gray" {}_NormalMap ("Normalmap", 2D) = "bump" {}_RoughnessMap ("RoughnessMap", 2D) = "white" {}_AoMap ("AoMap", 2D) = "white" {}_Displacement ("Displacement", Range(0, 1.0)) = 0.3_Color ("Color", color) = (1,1,1,0)_Metallic ("Metallic", Range(0, 1.0)) = 1.0}SubShader {Tags { "RenderType"="Opaque" }LOD 300CGPROGRAM#include "UnityPBSLighting.cginc"#pragma surface surf Standard addshadow fullforwardshadows vertex:disp nolightmap#pragma target 4.6struct appdata {float4 vertex : POSITION;float4 tangent : TANGENT;float3 normal : NORMAL;float2 texcoord : TEXCOORD0;};sampler2D _DispTex;float _Displacement;void disp (inout appdata v) {float d = tex2Dlod(_DispTex, float4(v.texcoord.xy,0,0)).r * _Displacement;v.vertex.xyz += v.normal * d;}struct Input {float2 uv_MainTex;};sampler2D _MainTex;sampler2D _NormalMap;sampler2D _RoughnessMap;sampler2D _AoMap;fixed4 _Color;float _Metallic;void surf (Input IN, inout SurfaceOutputStandard o) {half4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;o.Albedo = c.rgb;o.Metallic = _Metallic;o.Normal = UnpackNormal(tex2D(_NormalMap, IN.uv_MainTex));o.Smoothness = 1 - tex2D(_RoughnessMap, IN.uv_MainTex).r;o.Occlusion = tex2D(_AoMap, IN.uv_MainTex).r;}ENDCG}FallBack "Diffuse" }
效果
unity-shader-曲面细分与置换贴图相关推荐
- Unity URP 曲面细分
Unity URP 曲面细分 我终于变得不像我 文章目录 Unity URP 曲面细分 1 曲面细分与镶嵌 1.1 外壳着色器 Hull Shader 1.2 镶嵌器阶段 Tessellator 1. ...
- Tessellation (曲面细分) Displacement Mapping (贴图置换)
DirectX 11 Tessellation (曲面细分)-什么是 Tessellation (曲面细分) ? 它为什么可以起到如此关键的数据? 随着近期人们对 DirectX 11 的议论纷纷,你 ...
- Unity Shader:细分着色器(Tessellation Shader)在Unity顶点着色器中的写法以及各参数变量解释
图1:在Unity内将sphere细分后 图2:在Unity内将sphere细分后 Unity官网关于细分着色器的资料比较少,只有在Surface Shader中使用的例子.我看了下Surface S ...
- Unity Shader - 切线空间的法线贴图应用(T2W W2T)
法线贴图 法线贴图(或是法线纹理)其实就是一张图片中的RGB通道分别存储着法线方向的纹理(有些为了数据压缩将X,Y存储在RG通道,Z是通过1-dot(xy,xy)来近似计算). 它的由来是因为高模运行 ...
- 【Unity Shader】 CubeMap(立方体贴图)
Unity Shader 立方体贴图 一.介绍CubeMap Shader中对CubeMap采样 Unity中如何制作CubeMap 二.Reflect CubeMap(反射立方体纹理用于环境映射) ...
- unity曲面细分着色器详解
前言:本文翻译自catlikecoding上一篇十分详细的英文blog并修改了几处错误,逐行解释了如何在自己的shader中添加曲面细分支持,并给出了多种计算细分因子的方案以及它们的优缺点. 原文链 ...
- Unity Shader - ddx/ddy偏导函数测试,实现:锐化、高度图、Flat shading应用、高度生成法线
文章目录 ddx, ddy 说明 DirectX - ddx, ddy OpenGL - dFdx, dFdy 伪代码表示 可用它来做什么 简单的边缘突出应用 Shader 边缘突出-锐化-增加差值 ...
- 曲面细分(subdivision)曲面细分着色器GPU的LOD
曲面细分是指将一个模型的面合理的分成更多小的面,从而提升模型精度,提高渲染效果 曲面简化是指将一个模型的面合理的合成更少的面,从而降低模型精度,为特定情形下提供使用(如LOD技术) .这一过程是可以在 ...
- 灰度图,法线贴图,置换贴图和位移贴图
查看全文 http://www.taodudu.cc/news/show-5684567.html 相关文章: OC置换可以混合.相乘.相加吗?多个置换贴图叠加 unity-shader-曲面细分与置 ...
最新文章
- 低速自动驾驶车辆的定位与建图
- Selective Search
- C#-析构方法与构造方法 087
- LeetCode(90):子集 II
- 王道操作系统考研笔记——1.1.6 系统调用
- 基于领域知识的Docker镜像自动构建方法
- 【Python】处理 joblib.externals.loky.process_executor._RemoteTraceback:PermissionError:[WinError 5] 拒绝访问
- spring boot +mybatis(通过properties配置) 集成
- 回顾 | Apache Flink Meetup 杭州站圆满结束(附PPT下载)
- ubuntu(乌班图) 修改ip
- macOS 输入法快速切换工具 —— KeyboardHolder
- Windows登录FTP服务器方法
- cURL 详解(附实例)
- windows电脑版微信多开的方法
- 2021-09-10体脂模块做体脂秤方案,体脂秤模块原理解析
- Mac 查找软件安装位置
- 什么是DAOstack
- 自学转行3年经验,终入职阿里!
- 【LOJ6570】毛毛虫计数
- 一键编译安装LAMP环境