Как вычислить волшебное число?
Добавлено: 17 авг 2017, 03:34
Albeoris
Не уверен - сюда или в кузню, если ошибся разделом, прошу прощения.
Есть вершинный шейдер:
Изменение разрешения экрана, аспекта и области отображения с 4:2.8 на 16:9 приводит к нежелательномусмещению объектов на сцене.
Их положение можно откорректировать изменением переменной _OffsetX или же магическим числом 0.00625000009.
Экспериментальным путём выяснил, что замена последнего на 0.005 даёт желаемый результат.
Пожалуйста - поясните, что это может быть за число и на основе чего его можно высчитать, чтобы передать параметром в шейдер?
Есть вершинный шейдер:
Скрытый текст:
Синтаксис:
Синтаксис: [ Показать ]
- Shader "PSX/FieldMapActor" {
- Properties {
- _MainTex ("Texture", 2D) = "grey" { }
- _Color ("Tint", Color) = (1,1,1,1)
- _Slice ("Slice", Float) = 40960
- }
- SubShader {
- Tags { "QUEUE"="Transparent+1" "IGNOREPROJECTOR"="true" "RenderType"="Transparent+1" }
- Pass {
- Tags { "QUEUE"="Transparent+1" "IGNOREPROJECTOR"="true" "RenderType"="Transparent+1" }
- Blend One OneMinusSrcAlpha
- GpuProgramID 65460
- Program "vp" {
- SubProgram "d3d9 " {
- Bind "vertex" Vertex
- Bind "color" Color
- Bind "texcoord" TexCoord0
- Matrix 4 [_MatrixRT]
- Matrix 0 [_Object2World]
- Matrix 8 [unity_MatrixVP] 3
- Float 16 [_CharZ]
- Vector 11 [_Color]
- Float 15 [_DepthOffset]
- Float 13 [_OffsetX]
- Float 14 [_OffsetY]
- Float 12 [_ViewDistance]
- "vs_2_0
- def c17, 0, -112, -1, 0.25
- def c18, 0.00625000009, 0.00892857183, 0, 0
- dcl_position v0
- dcl_color v1
- dcl_texcoord v2
- mov r0.yw, c17.xxzz
- dp4 r1.x, c1, v0
- mov r1.y, -r1.x
- dp4 r1.z, c2, v0
- dp4 r1.x, c0, v0
- dp4 r1.w, c3, v0
- dp4 r2.x, c6, r1
- rcp r2.y, r2.x
- mul r2.y, r2.y, c12.x
- dp4 r2.z, c5, r1
- mul r2.w, r2.y, r2.z
- mad r2.z, r2.z, r2.y, c17.y
- mov r0.x, -r2.w
- add r0.z, r2.w, r2.z
- slt r2.z, r2.x, c17.x
- mov r2.w, c17.w
- mad r2.x, r2.x, r2.w, c15.x
- add r3.z, r2.x, c16.x
- mad r3.xy, r2.z, r0.wzzw, r0.yxzw
- mov oT1.z, r3.x
- dp4 r0.x, c4, r1
- dp4 r3.w, c7, r1
- mov oT1.xyw, r1
- mul r3.x, r2.y, r0.x
- dp4 oPos.z, c10, r3
- dp4 r0.x, c8, r3
- dp4 r0.y, c9, r3
- mov r1.xy, c18
- mad oPos.y, c14.x, r1.y, r0.y
- mad oPos.x, c13.x, r1.x, r0.x
- mul oD0, v1, c11
- mov oPos.w, -c17.z
- mov oT0.xy, v2
- "
- }
- }
- Program "fp" {
- SubProgram "d3d9 " {
- Float 0 [_Slice]
- SetTexture 0 [_MainTex] 2D 0
- "ps_2_0
- def c1, -0.5, 0, 0, 0
- dcl v0
- dcl t0.xy
- dcl t1.xyz
- dcl_2d s0
- texld_pp r0, t0, s0
- mov r1, t1.z
- add r2, -t1.y, c0.x
- mad r3, r0.w, v0.w, c1.x
- texkill r1
- texkill r2
- texkill r3
- mul_pp r0, r0, v0
- mul_pp r1.xyz, r0.w, r0
- add_pp r0.xyz, r1, r1
- mov_pp oC0, r0
- "
- }
- }
- }
- }
- }
Изменение разрешения экрана, аспекта и области отображения с 4:2.8 на 16:9 приводит к нежелательномусмещению объектов на сцене.
Их положение можно откорректировать изменением переменной _OffsetX или же магическим числом 0.00625000009.
Экспериментальным путём выяснил, что замена последнего на 0.005 даёт желаемый результат.
Пожалуйста - поясните, что это может быть за число и на основе чего его можно высчитать, чтобы передать параметром в шейдер?