unity3d Hard Surface Shader 使用方法

原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 Unity3D引擎技术交流QQ群:【119706192本文链接地址: unity3d Hard Surface Shader 使用方法


Main Colour(Red,Green,Blue,Alpha)

RGB:调整漫反射颜色或纹理,同时,也可调整反射和吸收光线的数量。Black=100%吸收光线,White=100%反射光线。

A:调整漫反射Alpha值,同时,也可调整光线传递,0 Alpha=100%光线传递,256 Alpha=无光线传递。该值也影响透明物体的透明度和背面细节的漫反射强度(需基于D3D显卡

小技巧:如果想调出明亮的玻璃效果,需要较小的Alpha值和较高的RGB值。如果使用一个不透明Shader和较小的Alpha值,则会产生类似蜡质的效果,并让光线穿透物体表面

Specular Colour(Red,Green,Blue)
调整物体反射区的颜色

小技巧:把反射颜色调成接近漫反射/Main Colour的颜色,可以很好的模拟金属表面效果。反之,可以模拟珍珠油漆效果。白色反射区则可模拟塑料效果

Shininess Slider
改变高光区的衰减范围,向左调:大范围高光,向右调:小范围高光
小技巧:越小范围的高光可模拟更光亮的物体。大范围的高光可模拟高度漫反射的物体(比如粉笔

Gloss Slider
从左向右滑动滑杆可调整高光强度(左:无高光,右:最强高光)
小技巧:Gloss和Reflection非常类似,通常情况下,越光滑的表面反射越强烈

Reflection Slider
改变整体反射强度(左:无反射,右:完全反射)

Reflection Cube Map
用于反射周围影像的纹理。同时,它辅助Screen Space Reflections呈现摄像机后方的反射源影像。

小技巧:通常情况下,简单的反射贴图比复杂的反射贴图效果更好。用Sky-Box纹理做Reflection Cube Map也是最好的选择

Fresnel Reflection Slider
根据面法线和摄像机/视点向量,提升Reflection和Gloss值,Fresnel/Edge Alpha Falloff滑杆用于控制Fresnel反射的衰减范围。(左:无Fresnel反射,右:高Fresnel反射)

小技巧:使用Fresnel反射,即使物体表面漫反射非常厉害,在很小的视角下都会有较强的反射。在粉笔材质上使用很小的Fresnel反射可以达到非常理想的效果。
巧妙的应用Fresnel反射,可以产生漂亮的边缘高亮,使视觉效果更逼真,并且在极端照明条件下也能达到较好的效果,比如利用曲面模拟毛发的效果

Edge Alpha Slider
更改Alpha值(对于使用了Fresnel/Edge Alpha Falloff值的曲面)

小技巧:使用该控制杆,可以让更多光线穿过表面区域,垂直指向摄像机,多用于蜡质陶瓷表面效果

Metallic Slider
根据物体表面漫反射颜色,控制反射色调(tint)在表面传导的强度。(左:反射反射源颜色,右:反射漫反射颜色)

小技巧:塑料、蜡质、陶瓷的反射色调(tint)传导性较差,几乎不会反射色调(tint)

类似黄金这样的金属的传导性非常强,几乎完全反射色调(tint)

Diffuse Texture Map
(RGB)用于逐像素(Per Pixel)生成漫反射颜色变化
(A)用于调整不透明度和光线传递属性

Normal Texture Map
用于逐像素(Per Pixel)生成法线变化

Spec(R) Gloss(A) Reflect(B)
用于逐像素(Per Pixel)生成Specular/Gloss/Reflection变化
Red通道=Specular
Green通道=Gloss
Blue通道=Reflection

Density / Refraction Slider
改变表面折射率(左:低密度,中:等于大气密度,右:高密度)
小技巧:折射基于前表面角度,不考虑背面角度或面厚度,因此,一般较大的物体才应用较高的密度值。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以按照以下步骤使用J-Link进行STM32的HardFault定位: 1. 首先,在代码中添加HardFault异常处理函数,并通过操作寄存器将其地址存储在VTOR寄存器的第29位和第30位中。代码示例: ```c void HardFault_Handler(void) { __asm volatile ( " tst lr, #4 \n" " ite eq \n" " mrseq r0, msp \n" " mrsne r0, psp \n" " ldr r1, [r0, #24] \n" " ldr r2, handler2_address_const \n" " bx r2 \n" " handler2_address_const: .word HardFault_Handler2 \n" ); } void HardFault_Handler2(unsigned int * hardfault_args) { unsigned int stacked_r0; unsigned int stacked_r1; unsigned int stacked_r2; unsigned int stacked_r3; unsigned int stacked_r12; unsigned int stacked_lr; unsigned int stacked_pc; unsigned int stacked_psr; stacked_r0 = ((unsigned long) hardfault_args[0]); stacked_r1 = ((unsigned long) hardfault_args[1]); stacked_r2 = ((unsigned long) hardfault_args[2]); stacked_r3 = ((unsigned long) hardfault_args[3]); stacked_r12 = ((unsigned long) hardfault_args[4]); stacked_lr = ((unsigned long) hardfault_args[5]); stacked_pc = ((unsigned long) hardfault_args[6]); stacked_psr = ((unsigned long) hardfault_args[7]); printf ("[HardFault]\n"); printf ("- Stack frame:\n"); printf (" R0 = 0x%08x\n", stacked_r0); printf (" R1 = 0x%08x\n", stacked_r1); printf (" R2 = 0x%08x\n", stacked_r2); printf (" R3 = 0x%08x\n", stacked_r3); printf (" R12 = 0x%08x\n", stacked_r12); printf (" LR [R14] = 0x%08x subroutine call return address\n", stacked_lr); printf (" PC [R15] = 0x%08x program counter\n", stacked_pc); printf (" PSR = 0x%08x\n", stacked_psr); while (1); } ``` 2. 然后,打开J-Link GDB服务器,并连接到目标设备。代码示例: ``` $ JLinkGDBServer -device STM32F103ZE -if SWD ``` 3. 通过GDB连接到J-Link服务器并加载程序文件。代码示例: ``` $ arm-none-eabi-gdb -ex "target remote localhost:2331" firmware.elf ``` 4. 在GDB中设置读取HardFault异常原因的断点。代码示例: ``` (gdb) target remote localhost:2331 (gdb) break HardFault_Handler (gdb) continue ``` 5. 当程序触发HardFault异常时,程序将停止在HardFault异常处理函数中的断点处。您可以使用GDB检查寄存器的值,以及输出您在HardFault异常处理函数中添加的调试信息。代码示例: ``` [HardFault] - Stack frame: R0 = 0x00000000 R1 = 0x200048c4 R2 = 0x00000012 R3 = 0xffffffff R12 = 0x00000000 LR [R14] = 0x080034b9 subroutine call return address PC [R15] = 0x08002ccb program counter PSR = 0x81000000 ``` 以上是使用J-Link进行STM32的HardFault定位的方法。希望能对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值